60 lines
2.4 KiB
Plaintext
60 lines
2.4 KiB
Plaintext
|
THE Z80 BACK END TABLE
|
||
|
|
||
|
IMPLEMENTATION
|
||
|
|
||
|
It will not be possible to run the entire Amsterdam Compiler Kit on a
|
||
|
Z80-based computer system.
|
||
|
One has to write a program on another
|
||
|
system, a system where the compiler kit runs on.
|
||
|
This program may be a mixture of high-level languages, such as
|
||
|
C or Pascal, EM and z80 assembly code.
|
||
|
The program should be compiled using the compiler kit,
|
||
|
producing z80 machine code.
|
||
|
This code should come available to the z80 machine
|
||
|
for example by downloading or
|
||
|
by storing it in ROM (Read Only Memory).
|
||
|
Depending on the characteristics of the particular z80 based system, some
|
||
|
adaptions have to be made:
|
||
|
1) In 'head_em': the base address, which is the address where the first
|
||
|
z80 instruction will be stored, and the initial value of the
|
||
|
stackpointer are set to 0x1000 and 0x7ffe respectivally.
|
||
|
The latter because it could run on a 32K machine as well.
|
||
|
Other systems require other values.
|
||
|
2) In 'head_em': before calling "_m_a_i_n", the environment
|
||
|
pointer, argument vector and argument count will have to be pushed
|
||
|
onto the stack.
|
||
|
Since this back-end is tested on a system without any knowledge
|
||
|
of these things, dummies are pushed now.
|
||
|
3) In 'tail_em': proper routines "putchar" and "getchar" should
|
||
|
be provided.
|
||
|
They should write resp. read a character on/from the monitor.
|
||
|
Maybe some conversions will have to be made.
|
||
|
The ones for the Nascom and Hermac z80 micro's are to be found
|
||
|
in the EM-library.
|
||
|
4) In 'head_em': an application program returns control to the monitor by
|
||
|
jumping to address 0x20.
|
||
|
If this is not the right way on your system, change it.
|
||
|
For an CPM-machine for example this should be 0x5, to provide a warm boot.
|
||
|
5) In 'tail_em': the current version of the z80 back-end has very limited I/O
|
||
|
capabilities, because it was tested on a system that
|
||
|
had no knowlegde of files.
|
||
|
So the implementation of the EM-instruction 'mon' is very simple;
|
||
|
it can only do the following things:
|
||
|
Monitor call 1:
|
||
|
Exit
|
||
|
Monitor call 3:
|
||
|
read, always reads from the monitor.
|
||
|
echos the read character.
|
||
|
ignores file descriptor.
|
||
|
Monitor call 4:
|
||
|
write, always writes on the monitor.
|
||
|
ignores file descriptor.
|
||
|
Monitor call 5:
|
||
|
open file, returns file descriptor -1.
|
||
|
Monitor call 6:
|
||
|
close file, returns error code = 0.
|
||
|
Monitor call 54:
|
||
|
io-control, returns error code = 0.
|
||
|
If the system should do file-handling the routine ".mon"
|
||
|
should be extended thoroughly.
|