rdos/README.md

45 lines
1.3 KiB
Markdown

## Memory Layout
On a 8080, there are no segments, the addresses are as displayed.
On on the 8086, a single segment with a value of 0x0100 is assumed.
This implies that the first 4k of memory are not used.
The BDOS may be recompiled for starting at a lower address, in this case,
the minimum memory requirement may be less than 64k.
|Start|Size|Function|
|--|--|--|
|0xF000|4k|BDOS and hw drivers|
||var|BDOS data|
|SP|var|Stack, growing down|
|||Free memory|
|0x0100|up to stack|Transient Program Area|
|0x0080|128 bytes|Command line and disk buffer|
|0x0000|128 bytes|System data area|
## Application program interface
It is using the `call 5` convention with CP/M compatible syscall numbers.
File I/O is done via FCB blocks.
## Zero page
|Offset|Size|Usage|
|--|--|--|
|0x00|3 bytes|warm reboot jump instruction|
|0x03|byte|unused (would be iobyte)|
|0x04|byte|default drive|
|0x05|3 bytes|syscall jump instruction|
|0x08|8 bytes|8080 RST 1 interrupt code|
|0x10|8 bytes|8080 RST 2 interrupt code|
|0x18|8 bytes|8080 RST 3 interrupt code|
|0x20|8 bytes|8080 RST 4 interrupt code|
|0x28|8 bytes|8080 RST 5 interrupt code|
|0x30|8 bytes|8080 RST 6 interrupt code|
|0x38|8 bytes|8080 RST 7 interrupt code / debugger|
|0x40|varies|area reserved for usage by RDOS|
|0x80|byte|length of command line|
|0x81|127 bytes|command line with $length bytes plus a trailing 0x0D|