Avoid informal usage of 'you', updated installation manual

This commit is contained in:
ceriel 1991-11-19 13:44:09 +00:00
parent 78ca80f4d5
commit 8f0ef636ab
13 changed files with 479 additions and 348 deletions

View file

@ -1,6 +1,6 @@
Some of these documents use a font called CW. Some of these documents use a font called CW.
If you don't have that, you can change references to it with a sed-script If this font is not available, reference to it can be changed with
like a sed-script like
s/\.ft CW/.ft yourfont/ s/\.ft CW/.ft yourfont/
s/\\f(CW/\\fyourfont/g s/\\f(CW/\\fyourfont/g
s/^.fp\(.*\)CW$/.fp\1yourfont/ s/^.fp\(.*\)CW$/.fp\1yourfont/

View file

@ -88,14 +88,14 @@ All punctuation must be included where shown.
GENERAL INFORMATION GENERAL INFORMATION
.LP .LP
The BASIC-EM compiler is designed for a UNIX based environment. The BASIC-EM compiler is designed for a UNIX based environment.
It accepts a text file with your BASIC program (suffix .b) and generates It accepts a text file with a BASIC program (suffix .b) and generates
an executable file, called a.out. an executable file, called a.out.
.NH 2 .NH 2
LINE FORMAT LINE FORMAT
.LP .LP
A BASIC program consists of a series of lines, starting with a A BASIC program consists of a series of lines, starting with a
positive line number in the range 0 to 32767. positive line number in the range 0 to 32767.
A line may consists of more then one physical line on your terminal, but must A line may consists of more than one physical line on a terminal, but
is limited to 1024 characters. is limited to 1024 characters.
Multiple BASIC statements may be placed on a single line, provided Multiple BASIC statements may be placed on a single line, provided
they are separated by a colon (:). they are separated by a colon (:).
@ -393,7 +393,7 @@ ERROR
ERROR <integer expression> ERROR <integer expression>
.PU .PU
To simulate the occurrence of a BASIC error. To simulate the occurrence of a BASIC error.
To define your own error code use a value not already in To define a private error code a value must be used that is not already in
use by the BASIC runtime system. use by the BASIC runtime system.
The list of error messages currently in use can be found in appendix B. The list of error messages currently in use can be found in appendix B.
.NH 2 .NH 2

View file

@ -374,12 +374,12 @@ It is undefined when the instruction has no operand.
.br .br
Although an exhaustive list could be given describing all the types Although an exhaustive list could be given describing all the types
the following rule of thumb will suffice. the following rule of thumb will suffice.
If you cannot imagine the operand of the instruction ever to be If it is unimaginable for the operand of the instruction ever to be
something different from a plain integer, the type is integer, something different from a plain integer, the type is integer,
otherwise it is string. otherwise it is string.
.br .br
.I Cg .I Cg
makes all necessary conversions for you, makes all necessary conversions,
like adding EM_BSIZE to positive arguments of instructions like adding EM_BSIZE to positive arguments of instructions
dealing with locals, dealing with locals,
prepending underlines to global names, prepending underlines to global names,
@ -776,8 +776,8 @@ Items are pushed in the order of appearance.
This means that the last item will be on the top of the This means that the last item will be on the top of the
stack after the push. stack after the push.
So if the stack pattern contained two token expressions So if the stack pattern contained two token expressions
and you want to push them back unchanged, and they must be pushed back unchanged,
you have to specify as stack replacement they have to be specified as stack replacement
.DS .DS
%[2] %[1] %[2] %[1]
.DE .DE
@ -878,7 +878,7 @@ and shows how to place erase() and setcc() calls.
"sxt %[a.even]" | { PAIRSIGNED, %[a.1], %[a.2] }| | "sxt %[a.even]" | { PAIRSIGNED, %[a.1], %[a.2] }| |
.DE .DE
This coercion shows how to use the move and test calls. This coercion shows how to use the move and test calls.
At first you might think that the testcall is unnecessary, At first one might think that the testcall is unnecessary,
since the move will have set the condition codes, since the move will have set the condition codes,
but the move may never have been executed but the move may never have been executed
if the register already contained the value, if the register already contained the value,
@ -1155,8 +1155,8 @@ from the string of size w_size and generate code to assemble global
data for that integer. data for that integer.
Only the sizes for which arithmetic is implemented need be Only the sizes for which arithmetic is implemented need be
handled, handled,
so if you didn't implement 200-byte integer division so if 200-byte integer division is not implemented,
you don't have to implement 200-byte integer global data. 200-byte integer global data do not have to be implemented.
Here one must take care of word order in long integers. Here one must take care of word order in long integers.
.IP con_float() .IP con_float()
This function must generate code to assemble a floating This function must generate code to assemble a floating
@ -1170,7 +1170,8 @@ and room made for local variables for a total of f_nlocals bytes.
This function is called when a This function is called when a
.B mes .B mes
pseudo is seen that is not handled by the machine independent part. pseudo is seen that is not handled by the machine independent part.
Example below shows all you probably have to know about that. The example below probably shows all the table writer ever has to know
about that.
.IP segname[] .IP segname[]
This is not a function, This is not a function,
but an array of four strings. but an array of four strings.

View file

@ -558,7 +558,7 @@ Maybe some conversions will have to be made.
.IP 4) .IP 4)
In 'head_em': an application program returns control to the monitor by In 'head_em': an application program returns control to the monitor by
jumping to address 0xFB52. jumping to address 0xFB52.
If this is not the right way on your system, change it. This may have to be changed for different systems.
.IP 5) .IP 5)
In 'tail_em': the current version of the 8080 back-end has very limited I/O In 'tail_em': the current version of the 8080 back-end has very limited I/O
capabilities, because it was tested on a system that capabilities, because it was tested on a system that

File diff suppressed because it is too large Load diff

View file

@ -465,7 +465,7 @@ This error occurs when a function procedure does not return properly
("falls" through). ("falls" through).
.IP "illegal instruction" .IP "illegal instruction"
.br .br
This error might occur when you use floating point operations on an This error might occur when floating point operations are used on an
implementation that does not have floating point. implementation that does not have floating point.
.PP .PP
In addition, In addition,

View file

@ -229,8 +229,8 @@ Register variables
.PP .PP
If the machine has more than enough registers to generate code with, If the machine has more than enough registers to generate code with,
it is possible to reserve some of them for use as register variables. it is possible to reserve some of them for use as register variables.
If it has not, you can skip this section and ignore any references If it has not, this section may be skipped and any references
to register variables in the rest of this document. to register variables in the rest of this document may be ignored.
.PP .PP
The front ends generate messages to the back ends telling them which The front ends generate messages to the back ends telling them which
local variables could go into registers. local variables could go into registers.
@ -253,8 +253,8 @@ A loop control variable.
A pointer variable. A pointer variable.
Usually they are better candidates to put in registers. Usually they are better candidates to put in registers.
.PP .PP
If you use register variables in your table you must supply If register variables are used,
more functions in mach.c. more functions must be supplied in mach.c.
These functions are explained later. These functions are explained later.
.NH 1 .NH 1
Description of the machine table Description of the machine table
@ -803,11 +803,10 @@ The type of the operand is dependent on the instruction,
sometimes it is integer, sometimes it is integer,
sometimes it is address. sometimes it is address.
It is undefined when the instruction has no operand. It is undefined when the instruction has no operand.
Watch out for instructions with type-letter w. Instructions with type-letter w can occur without an operand.
They can occur without an operand. This can be checked in the code rule with the defined() pseudo function.
Check for this in your code rule with the defined() pseudo function.
.br .br
If you cannot imagine the operand of the instruction ever to be If it is unimaginable for the operand of the instruction ever to be
something different from a plain integer, the type is integer, something different from a plain integer, the type is integer,
otherwise it is address. otherwise it is address.
.br .br
@ -816,7 +815,7 @@ are the instructions marked with the
type-letters c,f,l,n,o,s,r,w,z in the EM manual. type-letters c,f,l,n,o,s,r,w,z in the EM manual.
.br .br
.I Cg .I Cg
makes all necessary conversions for you, makes all necessary conversions,
like adding EM_BSIZE to positive arguments of instructions like adding EM_BSIZE to positive arguments of instructions
dealing with locals, dealing with locals,
prepending underlines to global names, prepending underlines to global names,
@ -851,7 +850,7 @@ This is the second allocated register.
The second subregister of the first allocated register. The second subregister of the first allocated register.
.PP .PP
All normal C operators apply to integers, All normal C operators apply to integers,
the + operator on addresses behaves as you would expect the + operator on addresses behaves as one would expect
and the only operators allowed on register expressions and the only operators allowed on register expressions
are == and != . are == and != .
Furthermore there are some special `functions': Furthermore there are some special `functions':
@ -1343,8 +1342,7 @@ generate the same string as is used for this label.
The code generator system could probably easily be changed The code generator system could probably easily be changed
to make this work for assemblers that do not support this to make this work for assemblers that do not support this
type of label by generating unique labels itself. type of label by generating unique labels itself.
Implementation of this is not contemplated at the moment, Implementation of this is not contemplated at the moment.
bad luck if your assembler cannot do it.
.NH 3 .NH 3
Stack replacement Stack replacement
.PP .PP
@ -1360,8 +1358,8 @@ Items are pushed in the order of appearance.
This means that the last item will be on the top of the This means that the last item will be on the top of the
stack after the push. stack after the push.
So if the stack pattern contained two sets So if the stack pattern contained two sets
and you want to push them back unchanged, and they must be pushed back unchanged,
you have to specify as stack replacement they have to be specified as stack replacement
.DS .DS
yields %2 %1 yields %2 %1
.DE .DE
@ -1549,10 +1547,9 @@ with REG REG
gen com %1 gen com %1
bic %1,%2 yields %2 bic %1,%2 yields %2
.DE .DE
Shows the way you have to twist the table, Shows the way to handle the absence
if an of an
.I and -instruction .I and -instruction.
is not available on your machine.
.DS .DS
.ta 7.5c .ta 7.5c
pat set $1==2 pat set $1==2
@ -1656,7 +1653,7 @@ This rule for
.B blm .B blm
already uses three registers of the same type. already uses three registers of the same type.
.I Cgg .I Cgg
contains code to check all your rules contains code to check all rules
to see if they can be applied from an empty fakestack. to see if they can be applied from an empty fakestack.
It uses the marriage thesis from Hall, It uses the marriage thesis from Hall,
a thesis from combinatorial mathematics, a thesis from combinatorial mathematics,
@ -2202,8 +2199,8 @@ from the string of size w_size and generate code to assemble global
data for that integer. data for that integer.
Only the sizes for which arithmetic is implemented need be Only the sizes for which arithmetic is implemented need be
handled, handled,
so if you didn't implement 200-byte integer division so if 200-byte integer division is not implemented,
you don't have to implement 200-byte integer global data. 200-byte integer global data don't have to be implemented.
Here one must take care of word order in long integers. Here one must take care of word order in long integers.
.IP - .IP -
con_float() con_float()
@ -2223,7 +2220,7 @@ mes(w_mesno)
This function is called when a This function is called when a
.B mes .B mes
pseudo is seen that is not handled by the machine independent part. pseudo is seen that is not handled by the machine independent part.
The example below shows all you probably have to know about that. The example below shows all one probably have to know about that.
.IP - .IP -
segname[] segname[]
.br .br

View file

@ -634,7 +634,7 @@ eof(f) is true just before the call to get(f).
read error, trap 103, fatal: read error, trap 103, fatal:
.br .br
unlikely to happen. Probably caused by hardware problems unlikely to happen. Probably caused by hardware problems
or by errors elsewhere in your program that destroyed or by errors elsewhere in the program that destroyed
the file information maintained by the run time system. the file information maintained by the run time system.
.ti -5 .ti -5
truncated, trap 99, fatal: truncated, trap 99, fatal:
@ -846,7 +846,7 @@ changed instead of many Pascal programs.
.PP .PP
Another advantage is that these library modules may be written in a different Another advantage is that these library modules may be written in a different
language, for instance C or the EM assembly language. language, for instance C or the EM assembly language.
This is useful if you want to use some specific EM instructions not generated This is useful for accessing some specific EM instructions not generated
by the Pascal compiler. Examples are the system call routines and some by the Pascal compiler. Examples are the system call routines and some
floating point conversion routines. floating point conversion routines.
Another motive could be the optimization of some time-critical program parts. Another motive could be the optimization of some time-critical program parts.
@ -914,8 +914,8 @@ by parameters, even the files input and output.
Access to a variable declared in a module is only possible Access to a variable declared in a module is only possible
using the procedures and functions declared in that same module. using the procedures and functions declared in that same module.
By giving the correct procedure/function heading followed by the By giving the correct procedure/function heading followed by the
directive 'extern' you may use procedures and functions declared in directive 'extern' procedures and functions declared in
other units. other units may be used.
.sp .sp
.ti -3 .ti -3
3.~\ 3.~\
@ -955,7 +955,7 @@ Three additional standard procedures are available:
.IS .IS
.ti -8 .ti -8
halt:~~~a call of this procedure is equivalent to jumping to the halt:~~~a call of this procedure is equivalent to jumping to the
end of your program. It is always the last statement executed. end of the program. It is always the last statement executed.
The exit status of the program may be supplied The exit status of the program may be supplied
as optional argument. If not, it will be zero. as optional argument. If not, it will be zero.
.ti -8 .ti -8
@ -978,10 +978,10 @@ UNIX interfacing.
.sp .sp
If the c-option is turned on, then some special features are available If the c-option is turned on, then some special features are available
to simplify an interface with the UNIX environment. to simplify an interface with the UNIX environment.
First of all, the compiler allows you to use a different type First of all, the compiler allows for a different type
of string constants. of string constants.
These string constants are delimited by double quotes ('"'). These string constants are delimited by double quotes ('"').
To put a double quote into these strings, you must repeat the double quote, To put a double quote into these strings, the double quote must be repeated,
like the single quote in normal string constants. like the single quote in normal string constants.
These special string constants are terminated by a zero byte (chr(0)). These special string constants are terminated by a zero byte (chr(0)).
The type of these constants is a pointer to a packed array of characters, The type of these constants is a pointer to a packed array of characters,
@ -990,7 +990,7 @@ with lower bound 1 and unknown upper bound.
Secondly, the compiler predefines a new type identifier 'string' denoting Secondly, the compiler predefines a new type identifier 'string' denoting
this just described string type. this just described string type.
.PP .PP
The only thing you can do with these features is declaration of These features are only useful for declaration of
constants and variables of type 'string'. constants and variables of type 'string'.
String objects may not be allocated on the heap and string pointers String objects may not be allocated on the heap and string pointers
may not be de-referenced. may not be de-referenced.
@ -1062,7 +1062,7 @@ Ack-Pascal deviates from the standard proposal in the following ways:
.ti -3 .ti -3
1.~\ 1.~\
Standard procedures and functions are not allowed as parameters in Ack-Pascal. Standard procedures and functions are not allowed as parameters in Ack-Pascal.
You can obtain the same result with negligible loss of performance The same result can be obtained with negligible loss of performance
by declaring some user routines like: by declaring some user routines like:
.EQ .EQ
function sine(x:real):real; function sine(x:real):real;
@ -1091,14 +1091,14 @@ at run time. Default +.
.sp .sp
.ti -8 .ti -8
c~+/-~~~\ c~+/-~~~\
this option, if on, allows you to use C-type string constants this option, if on, allows the use of C-type string constants
surrounded by double quotes. surrounded by double quotes.
Moreover, a new type identifier 'string' is predefined. Moreover, a new type identifier 'string' is predefined.
Default -. Default -.
.sp .sp
.ti -8 .ti -8
d~+/-~~~\ d~+/-~~~\
this option, if on, allows you to use variables of type 'long'. this option, if on, allows the use of variables of type 'long'.
Default -. Default -.
.sp .sp
.ti -8 .ti -8
@ -1112,7 +1112,7 @@ The default value is wordsize-1.
l~+/-~~~\ l~+/-~~~\
if + then code is inserted to keep track of the source line number. if + then code is inserted to keep track of the source line number.
When this flag is switched on and off, an incorrect line number may appear When this flag is switched on and off, an incorrect line number may appear
if the error occurs in a part of your program for which this flag is off. if the error occurs in a part of the program for which this flag is off.
These same line numbers are used for the profile, flow and count options These same line numbers are used for the profile, flow and count options
of the EM interpreter em [5]. of the EM interpreter em [5].
Default +. Default +.
@ -1125,7 +1125,7 @@ Default +.
.sp .sp
.ti -8 .ti -8
s~+/-~~~\ s~+/-~~~\
if + then the compiler will hunt for places in your program if + then the compiler will hunt for places in the program
where non-standard features are used, and for each place found where non-standard features are used, and for each place found
it will generate a warning. Default -. it will generate a warning. Default -.
.sp .sp
@ -1168,8 +1168,8 @@ Of course, if debug is a variable nothing can be removed.
A disadvantage of Pascal, the lack of preinitialized data, can be A disadvantage of Pascal, the lack of preinitialized data, can be
diminished by making use of the possibilities of the EM optimizer. diminished by making use of the possibilities of the EM optimizer.
For instance, initializing an array of reserved words is sometimes For instance, initializing an array of reserved words is sometimes
optimized into 3 EM instructions. To maximize this effect you must initialize optimized into 3 EM instructions. To maximize this effect
variables as much as possible in order of declaration and array entries variables must be initialized as much as possible in order of declaration and array entries
in order of decreasing index. in order of decreasing index.
.CH "References" .CH "References"
.in +5 .in +5

View file

@ -187,9 +187,9 @@ Not recommended unless the own package does not work on some bizarre
machine. machine.
.IP - .IP -
COREDEBUG, prints large amounts of information about core management. COREDEBUG, prints large amounts of information about core management.
Better not define it unless you change the code and it stops working. Not recommended unless the code is changed and it stops working.
.IP - .IP -
SEPID, if you define this you will get an extra procedure that will SEPID, defining this will add an extra procedure that will
go through a lot of work to scrape the last bytes together if the go through a lot of work to scrape the last bytes together if the
system won't provide more. system won't provide more.
This is not a good idea if memory is scarce and code and data reside This is not a good idea if memory is scarce and code and data reside
@ -440,9 +440,9 @@ These are first replaced everywhere in the table by the correct
replacement after which the first three instructions of the replacement after which the first three instructions of the
pattern are hashed and the pattern is linked into one of the pattern are hashed and the pattern is linked into one of the
256 linked lists. 256 linked lists.
There is a define CHK_HASH in this module that you There is a define CHK_HASH in this module that
can set if you do not trust the randomness of the hashing can be set if the randomness of the hashing
function. function is not trusted.
.PP .PP
The attention now shifts to optimize(). The attention now shifts to optimize().
This routine calls basicblock() for every piece of code between two labels. This routine calls basicblock() for every piece of code between two labels.

View file

@ -7,17 +7,17 @@ Introduction
This is a short description of the newest feature in the This is a short description of the newest feature in the
table driven code generator for the Amsterdam Compiler Kit. table driven code generator for the Amsterdam Compiler Kit.
It describes how to add register variables to an existing table. It describes how to add register variables to an existing table.
This assumes you have the distribution of October 1983 or later. This assumes a distribution of October 1983 or later.
It is not clear whether you should read this when starting with It is not clear whether one should read this when starting with
a table for a new machine, a table for a new machine,
or whether you should wait till the table is well debugged already. or waiting till the table is well debugged already.
.NH 1 .NH 1
Modifications to the table itself. Modifications to the table itself.
.NH 2 .NH 2
Register section Register section
.PP .PP
You can add just before the properties of the register one Just before the properties of the register one
of the following: of the following can be added:
.IP - 2 .IP - 2
regvar regvar
.IP - .IP -
@ -127,7 +127,5 @@ Afterthoughts.
At the time of this writing the tables for the PDP 11 and the M68000 and At the time of this writing the tables for the PDP 11 and the M68000 and
the VAX are converted, in all cases the two byte wordsize versions. the VAX are converted, in all cases the two byte wordsize versions.
No big problems have occurred, but experience has shown that it is No big problems have occurred, but experience has shown that it is
necessary to check your table carefully for all patterns with locals in them necessary to check the table carefully for all patterns with locals in them.
because if you forget one code will be generated by that one coderule Code may be generated that uses the memoryslot the local is not in.
to use the memoryslot the local is not in.

View file

@ -148,7 +148,7 @@ start: ldfps $7400
beq 1b beq 1b
4 4
.PE .PE
You have to dig into the kernel to fix it. Some digging into the kernel is required to fix it.
The following patch will do: The following patch will do:
.PS .PS
/* original /usr/sys/sys/slp.c */ /* original /usr/sys/sys/slp.c */
@ -265,14 +265,14 @@ The same file slp.c should be patched as follows:
.sp .sp
Some system calls are changed from version 6 to version 7. Some system calls are changed from version 6 to version 7.
A library of system call entries, that make a version 6 UNIX look like A library of system call entries, that make a version 6 UNIX look like
a version 7 system, is provided to enable you to run some a version 7 system, is provided to run some
useful version 7 utilities, like 'tar', on UNIX-6. useful version 7 utilities, like 'tar', on UNIX-6.
The entry for 'stat' contained two bugs: The entry for 'stat' contained two bugs:
the 24-bit file size was incorrectly converted to 32 bits the 24-bit file size was incorrectly converted to 32 bits
(sign extension of bit 15) (sign extension of bit 15)
and the uid/gid fields suffered from sign extension. and the uid/gid fields suffered from sign extension.
.sp .sp
Transferring your files from version 6 to version 7 using 'tar' Transferring files from version 6 to version 7 using 'tar'
will fail for all files for which will fail for all files for which
.sp .sp
( (size & 0100000) != 0 ) ( (size & 0100000) != 0 )

View file

@ -214,7 +214,7 @@ initialized.
.TT 6.8.2.4-5 .TT 6.8.2.4-5
.TT 6.8.2.4-6 .TT 6.8.2.4-6
The ACK-Pascal compiler does not restrict the places from where The ACK-Pascal compiler does not restrict the places from where
you may jump to a label by means of a goto-statement. a jump to a label by means of a goto-statement is allowed.
.sp .sp
.TT 6.8.3.9-5 .TT 6.8.3.9-5
.TT 6.8.3.9-6 .TT 6.8.3.9-6

View file

@ -11,8 +11,8 @@ This table was written to make it run, not to make it clever!
The effect is, that the table written for the intel 8080, The effect is, that the table written for the intel 8080,
which was made very clever runs faster and requiers less space!! which was made very clever runs faster and requiers less space!!
So, for anyone to run programs on a z80 machine: So, for anyone to run programs on a z80 machine:
You could try to make the table as clever as the one for the i80, n attempt could be made to make this table as clever as the one for the i80,
or you could run the i80 table, for that can run on every z80 too. or the i80 table could be used, for that can run on every z80 too.
.NH .NH
IMPLEMENTATION IMPLEMENTATION
.PP .PP
@ -51,7 +51,7 @@ in the EM-library.
.IP 4) .IP 4)
In \fIhead_em\fP: an application program returns control to the monitor by In \fIhead_em\fP: an application program returns control to the monitor by
jumping to address 0x20. jumping to address 0x20.
If this is not the right way on your system, change it. Thie may have to be changed on different systems.
For an CPM-machine for example this should be 0x5, to provide a warm boot. For an CPM-machine for example this should be 0x5, to provide a warm boot.
.IP 5) .IP 5)
In \fItail_em\fP: the current version of the z80 back-end has very limited I/O In \fItail_em\fP: the current version of the z80 back-end has very limited I/O