diff --git a/etc/Makefile b/etc/Makefile new file mode 100644 index 000000000..75194fd9c --- /dev/null +++ b/etc/Makefile @@ -0,0 +1,26 @@ +d=.. +h=$d/h +c=$d/util/data + +FILES= \ +$h/em_spec.h \ +$h/em_pseu.h \ +$h/em_mnem.h \ +$c/em_flag.c \ +$c/em_pseu.c \ +$c/em_mnem.c + +$(FILES): em_table + new_table $h $c + +install: $(FILES) + +opr: + make pr ^ opr +pr: + @pr Makefile em_table new_table pop_push traps + +clean: + -rm -f *.old + +cmp : # do nothing diff --git a/etc/em_table b/etc/em_table new file mode 100644 index 000000000..8dd963bba --- /dev/null +++ b/etc/em_table @@ -0,0 +1,175 @@ +magic 173 +fmnem 1 +nmnem 149 +fpseu 150 +npseu 30 +filb0 180 +nilb0 60 +fcst0 0 +zcst0 120 +ncst0 240 +fspec 240 +nspec 16 +ilb1 240 +ilb2 241 +dlb1 242 +dlb2 243 +dnam 244 +cst2 245 +cst4 246 +cst8 247 +doff 248 +pnam 249 +scon 250 +icon 251 +ucon 252 +fcon 253 +cend 255 + +bss 0 +con 1 +end 2 +exa 3 +exc 4 +exp 5 +hol 6 +ina 7 +inp 8 +mes 9 +pro 10 +rom 11 + +aar w- -p-a-p+p +adf w- -a-a+a +adi w- -a-a+a +adp f- -p+p +ads w- -a-p+p +adu w- -a-a+a +and w- -a-a+a +asp f- -a +ass w- -a-x +beq bc -w-w +bge bc -w-w +bgt bc -w-w +ble bc -w-w +blm z- -p-p +bls w- -a-p-p +blt bc -w-w +bne bc -w-w +bra bt 0 +cai -p -p +cal pp 0 +cff -- -w-w-y+x +cfi -- -w-w-y+x +cfu -- -w-w-y+x +cif -- -w-w-y+x +cii -- -w-w-y+x +ciu -- -w-w-y+x +cmf w- -a-a+w +cmi w- -a-a+w +cmp -- -p-p+w +cms w- -a-a+w +cmu w- -a-a+w +com w- -a-a+a +csa wt -p-a +csb wt -p-a +cuf -- -w-w-y+x +cui -- -w-w-y+x +cuu -- -w-w-y+x +dch -- -p+p +dec -- -w+w +dee g- 0 +del l- 0 +dup s- -a+a+a +dus w- -a-x+x+x +dvf w- -a-a+a +dvi w- -a-a+a +dvu w- -a-a+a +exg w- -a-a+a+a +fef w- -a+a+w +fif w- -a-a+a+a +fil g- 0 +gto gt -p-? +inc -- -w+w +ine g- 0 +inl l- 0 +inn w- -w-a+w +ior w- -a-a+a +lae g- +p +lal l- +p +lar w- -p-a-p+? +ldc d- +d +lde g- +d +ldf f- -p+d +ldl l- +d +lfr s- +a +lil l- +w +lim -- +w +lin n- 0 +lni -- 0 +loc c- +w +loe g- +w +lof f- -p+w +loi o- -p+a +lol l- +w +lor r- +p +los w- -a-p+x +lpb -- -p+p +lpi p- +p +lxa n- +p +lxl n- +p +mlf w- -a-a+a +mli w- -a-a+a +mlu w- -a-a+a +mon -- -?+? +ngf w- -a+a +ngi w- -a+a +nop -- 0 +rck w- -p-a+a +ret zt -a-? +rmi w- -a-a+a +rmu w- -a-a+a +rol w- -w-a+a +ror w- -w-a+a +rtt -t -? +sar w- -p-a-p-? +sbf w- -a-a+a +sbi w- -a-a+a +sbs w- -p-p+a +sbu w- -a-a+a +sde g- -d +sdf f- -p-d +sdl l- -d +set w- -w+a +sig -- -p-p+p+p +sil l- -w +sim -- -w +sli w- -w-a+a +slu w- -w-a+a +sri w- -w-a+a +sru w- -w-a+a +ste g- -w +stf f- -p-w +sti o- -p-a +stl l- -w +str r- -p +sts w- -a-p-x +teq -- -w+w +tge -- -w+w +tgt -- -w+w +tle -- -w+w +tlt -- -w+w +tne -- -w+w +trp -p -w+? +xor w- -a-a+a +zeq bc -w +zer w- +a +zge bc -w +zgt bc -w +zle bc -w +zlt bc -w +zne bc -w +zre g- 0 +zrf w- +a +zrl l- 0 + diff --git a/etc/new_table b/etc/new_table new file mode 100755 index 000000000..ef83ccb06 --- /dev/null +++ b/etc/new_table @@ -0,0 +1,71 @@ +h=${1-.} +d=${2-.} + +set `grep fpseu em_table` +p=$2 +set `grep fmnem em_table` +m=$2 + +ed - em_table <<'A' > X +1,/^$/g/ /s// /gp +A + +ed - em_table <<'A' | awk '{print $1,$2+'$p'}' > Y +1,/^$/d +1,/^$/g/ /s// /gp +A + +ed - em_table <<'A' | awk '{print $0,'$m'+i++}' > Z +1,/^$/d +1,/^$/d +1,/^$/g/ /s// /gp +A + +i=`wc -l >X +i=`wc -l >X + +ed - X <<'A' > $h/em_spec.h +g/^/s//#define sp_/p +A + +ed - Y <<'A' > $h/em_pseu.h +g/\(.*\) \(.*\)/s//#define ps_\1 \2/p +A + +ed - Z <<'A' > $h/em_mnem.h +g/ .* /s// / +g/\(.*\) \(.*\)/s//#define op_\1 \2/p +A + +( +echo 'char em_pseu[][4] = {' +ed - Y <<'A' +g/\(...\).*/s// "\1",/p +A +echo '};' +) > $d/em_pseu.c + +( +echo 'char em_mnem[][4] = {' +ed - Z <<'A' +g/\(...\).*/s// "\1",/p +A +echo '};' +) > $d/em_mnem.c + +( +echo '#include +char em_flag[] = {' +ed - Z <<'A' | tr a-z A-Z +g/^... /s/// +g/ .*/s/// +g/\(.\)\(.\)/s//PAR_\1 | FLO_\2/ +g/-/s//NO/g +g/.*/s// &,/p +A +echo '};' +) > $d/em_flag.c + +rm X Y Z diff --git a/etc/pc_errors b/etc/pc_errors new file mode 100644 index 000000000..688e4b372 --- /dev/null +++ b/etc/pc_errors @@ -0,0 +1,289 @@ +non-standard feature used +identifier '%s' declared twice +end of file encountered +bad line directive +unsigned real: digit of fraction expected +unsigned real: digit of exponent expected +unsigned real: too many digits (>72) +unsigned integer: too many digits (>72) +unsigned integer: overflow (>32767) +string constant: must not exceed one line +string constant: at least one character expected +string constant: double quotes not allowed (see c option) +string constant: too long (>72 chars) +bad character +identifier '%s' not declared +location counter overflow: arrays too big +location counter overflow: arrays too big +arraysize too big +variable '%s' never used +variable '%s' never assigned +the files contained in '%s' are not closed automatically +constant expected +constant: only integers and reals may be signed +constant: out of bounds +simple type expected +enumerated type: element identifier expected +enumerated type: ',' or ')' expected +enumerated type: ',' expected +enumerated type: ')' expected +subrange type: type must be scalar, but not real +subrange type: '..' expected +subrange type: type of lower and upper bound incompatible +subrange type: lower bound exceeds upper bound +array type: '[' expected +conformant array: low bound identifier expected +conformant array: '..' expected +conformant array: high bound identifier expected +conformant array: ':' expected +conformant array: index type identifier expected +array type: index type not bounded +array type: index separator or ']' expected +array type: index separator expected +array type: ']' expected +array type: 'of' expected +record variant part: tag type identifier expected +record variant part: tag type identifier expected +record variant part: type must be bounded +record variant part: 'of' expected +record variant: type of case label and tag incompatible +record variant: multiple defined case label +record variant: ',' or ':' expected +record variant: ',' expected +record variant: ':' expected +record variant: '(' expected +record variant: ')' expected +record variant part: ';' or end of variant list expected +record variant part: ';' expected +record variant part: end of variant list expected +record variant part: there must be a variant for each tag value +field list: record section expected +record section: field identifier expected +record section: ',' or ':' expected +record section: ',' expected +record section: ':' expected +field list: ';' or end of record section list expected +field list: ';' expected +field list: end of record section list expected +type expected +type: simple and pointer type may not be packed +pointer type: type identifier expected +pointer type: type identifier expected +record type: 'end' expected +set type: 'of' expected +set type: too many elements in set +set type: bad subrange of integer +set of integer: the i option dictates the number of bits (default 16) +set type: base type not bounded +file type: 'of' expected +file type: files within files not allowed +var parameter: type identifier or conformant array expected +var parameter: type identifier expected +label declaration: unsigned integer expected +label declaration: label '%i' multiple declared +label declaration: ',' or ';' expected +label declaration: ',' expected +label declaration: ';' expected +const declaration: constant identifier expected +const declaration: '=' expected +const declaration: ';' expected +const declaration: constant identifier or 'type', 'var', 'procedure', 'function' or 'begin' expected +type declaration: type identifier expected +type declaration: '=' expected +type declaration: ';' expected +type declaration: type identifier or 'var', 'procedure', 'function' or 'begin' expected +var declaration: var identifier expected +var declaration: ',' or ':' expected +var declaration: ',' expected +var declaration: ':' expected +var declaration: ';' expected +var declaration: var identifier or 'procedure', 'function' or 'begin' expected +parameter list: 'var','procedure','function' or identifier expected +parameter list: parameter identifier expected +parameter list: ',' or ':' expected +parameter list: ',' expected +parameter list: ':' expected +parameter list: type identifier expected +parameter list: ';' or ')' expected +parameter list: ';' expected +proc/func declaration: proc/func identifier expected +proc/func declaration: previous declaration of '%s' was not forward +proc/func declaration: parameter list expected +parameterlist: ')' expected +func declaration: ':' expected +func declaration: result type identifier expected +func declaration: result type must be scalar, subrange or pointer +proc/func declaration: ';' expected +proc/func declaration: block or directive expected +proc/func declaration: '%s' unknown directive +proc/func declaration: '%s' again forward declared +proc/func declaration: ';' expected +indexed variable: '[' only allowed following array variables +indexed variable: index type not compatible with declaration +indexed variable: ',' or ']' expected +indexed variable: ',' expected +assignment: standard function not allowed as destination +assignment: cannot store the function result +assignment: formal parameter function not allowed as destination +assignment: function identifier may not be de-referenced +variable: '[', '.', '^' or end of variable expected +indexed variable: ']' expected +field designator: field identifier expected +field designator: '.' only allowed following record variables +field designator: no field '%s' in this record +referenced variable: '^' not allowed following zero-terminated strings +referenced variable: '^' only allowed following pointer or file variables +variable: var or field identifier expected +call: too many actual parameters supplied +call: proc/func identifier expected +call: standard proc/func may not be used as parameter +call: parameter lists of actual and formal proc/func incompatible +call: type of actual and formal value parameter not compatible +call: array parameter not conformable +call: type of actual and formal variable parameter not similar +call: packed elements not allowed as variable parameter +call: ',' or ')' expected +call: too few actual parameters supplied +read(ln): type must be integer, char or real +write(ln): type must be integer, char, real, string or boolean +write(ln): ':', ',' or ')' expected +write(ln): field width must be integer +write(ln): ':', ',' or ')' expected +write(ln): precision must be integer +write(ln): precision may only be specified for reals +read/write: too few actual parameters supplied +read/write: standard input/output not mentioned in program heading +read/write: ',' or ')' expected +read/write: type of parameter not the same as that of the file elements +read/write: parameter list expected +readln/writeln: standard input/output not mentioned in program heading +readln/writeln: only allowed on text files +new/dispose: C-type strings not allowed here +new/dispose: ',' or ')' expected +new/dispose: too many actual parameters supplied +new/dispose: type of tagfield value is incompatible with declaration +call: '(' or end of call expected +standard proc/func: parameter list expected +standard input/output not mentioned in program heading +file variable expected +pointer variable expected +pack: ',' expected +pack: ',' expected +unpack: ',' expected +unpack: ',' expected +standard proc/func: parameter type incompatible with specification +eoln/page: text file variable expected +pack/unpack: array types are incompatible +pack/unpack: only for arrays +abs: integer or real expected +sqr: integer or real expected +ord: type must be scalar or subrange, but not real +pred/succ: type must be scalar or subrange, but not real +trunc/round: real argument required +call: ')' expected +expression: left and right operand are incompatible +set: incompatible elements +set: base type must be bounded or of type integer +set: base type upper bound exceeds maximum set element number +set: element out of range +set: ']' or element list expected +set: '..', ',' or ']' expected +set: ',' or ']' expected +set: ',' expected +factor expected +factor: ')' expected +factor: type of factor must be boolean +set: ']' expected +term: multiplying operator or end of term expected +term: '*' only defined for integers, reals and sets +term: '/' only defined for integers and reals +term: 'div' only defined for integers +term: 'mod' only defined for integers +term: 'and' only defined for booleans +simple expression: only integers and reals may be signed +simple expression: adding operator or end of simple expression expected +simple expression: '+' only defined for integers, reals and sets +simple expression: '-' only defined for integers, reals and sets +simple expression: 'or' only defined for booleans +expression: relational operator or end of expression expected +expression: set expected +expression: left operand of 'in' not compatible with base type of right operand +expression: only '=' and '<>' allowed on pointers +expression: '<' and '>' not allowed on sets +expression: comparison of arrays only allowed for strings +expression: comparison of records not allowed +expression: comparison of files not allowed +assignment: ':=' expected +assignment: left and right hand side incompatible +goto statement: unsigned integer expected +goto statement: label '%i' not declared +if statement: type of expression must be boolean +if statement: 'then' expected +if statement: 'else' or end of if statement expected +case statement: type must be scalar or subrange, but not real +case statement: 'of' expected +case statement: incompatible case label +case statement: multiple defined case label +case statement: ',' or ':' expected +case statement: ',' expected +case statement: ':' expected +case statement: ';' or 'end' expected +case statement: ';' expected +case statement: 'end' expected +repeat statement: ';' or 'until' expected +repeat statement: ';' expected +repeat statement: 'until' expected +repeat statement: type of expression must be boolean +while statement: type of expression must be boolean +while statement: 'do' expected +for statement: type of bound and control variable incompatible +for statement: control variable expected +for statement: control variable must be local +for statement: type must be scalar or subrange, but not real +for statement: ':=' expected +for statement: 'to' or 'downto' expected +for statement: upper bound not assignment compatible +for statement: 'do' expected +with statement: record variable expected +with statement: ',' or 'do' expected +with statement: ',' expected +with statement: 'do' expected +assertion: type of expression must be boolean +statement expected +label '%i' not declared +label '%i' multiple defined +statement: ':' expected +unlabeled statement expected +compound statement: ';' or 'end' expected +compound statement: ';' expected +compound statement: 'end' expected +case statement: 'end' expected +body: ';' or 'end' expected +body: ';' expected +body: label '%i' declared, but never defined +program parameter '%s' not declared +function '%s' never assigned +block: declaration or body expected +block: 'const', 'type', 'var', 'procedure', 'function' or 'begin' expected +block: 'type', 'var', 'procedure', 'function' or 'begin' expected +block: 'var', 'procedure', 'function' or 'begin' expected +block: 'procedure', 'function' or 'begin' expected +block: unsatisfied forward proc/func declaration(s) +block: 'begin' expected +block: 'end' expected +program heading: 'program' expected +program heading: program identifier expected +program heading: file identifier list expected +program heading: file identifier expected +program heading: ',' or ')' expected +program heading: ',' expected +program heading: maximum number of file arguments exceeded (12) +program heading: ')' expected +program heading: ';' expected +program: '.' expected +'program' expected +module: 'const', 'type', 'var', 'procedure' or 'function' expected +module: 'type', 'var', 'procedure' or 'function' expected +module: 'var', 'procedure' or 'function' expected +module: 'procedure' or 'function' expected +garbage at end of program diff --git a/etc/pc_rt_errors b/etc/pc_rt_errors new file mode 100644 index 000000000..530604965 --- /dev/null +++ b/etc/pc_rt_errors @@ -0,0 +1,107 @@ +array bound error +range bound error +set bound error +integer overflow +real overflow +real underflow +divide by 0 +divide by 0.0 +undefined integer +real undefined +conversion error +error 11 +error 12 +error 13 +error 14 +error 15 +stack overflow +heap error +illegal instruction +odd or zero byte count +case error +memory fault +bad pointer +bad program counter +bad external address +bad monitor call +bad line number +error 27 +error 28 +error 29 +error 30 +error 31 +error 32 +error 33 +error 34 +error 35 +error 36 +error 37 +error 38 +error 39 +error 40 +error 41 +error 42 +error 43 +error 44 +error 45 +error 46 +error 47 +error 48 +error 49 +error 50 +error 51 +error 52 +error 53 +error 54 +error 55 +error 56 +error 57 +error 58 +error 59 +error 60 +error 61 +error 62 +error 63 +more args expected +error in exp +error in ln +error in sqrt +assertion failed +array bound error in pack +array bound error in unpack +only positive j in 'i mod j' +file not yet open +dispose error +error 74 +error 75 +error 76 +error 77 +error 78 +error 79 +error 80 +error 81 +error 82 +error 83 +error 84 +error 85 +error 86 +error 87 +error 88 +error 89 +error 90 +error 91 +error 92 +error 93 +error 94 +error 95 +not writable +not readable +end of file +truncated +reset error +rewrite error +close error +read error +write error +digit expected +non-ASCII char read diff --git a/etc/pop_push b/etc/pop_push new file mode 100644 index 000000000..478f96789 --- /dev/null +++ b/etc/pop_push @@ -0,0 +1,15 @@ +description of third column of em_table: + + -: pop item indicated by next character + +: push item indicated by next character + 0: no effect on the stack + +characters describing items: + + w: target machine word (1, 2 or 4) + d: double target machine word (2, 4 or 8) + p: target machine address + a: item with size specified in argument + x: item with size specified by top item of stack + y: item with size specified by second item on stack + ?: one or more items of unknown size diff --git a/etc/traps b/etc/traps new file mode 100644 index 000000000..858cf618a --- /dev/null +++ b/etc/traps @@ -0,0 +1,28 @@ +~ Array bound error +~ Range bound error +~ Set bound error +~ Integer overflow +~ Floating overflow +~ Floating underflow +~ Divide by 0 +~ Divide by 0.0 +~ Integer undefined +~ Floating undefined +~ Conversion error + + + + + +* Stack overflow +* Heap overflow +* Illegal instruction +* Illegal odd or zero argument +* Case error +* Addressing non existent memory +* Bad pointer used +* Program counter out of range +* Bad argument of LAE +* Bad monitor call +* Argument of LIN too high +* Bad GTO descriptor