Update memory layout in readme

This commit is contained in:
Nero 2019-10-27 17:06:31 +00:00
parent 757a811988
commit 0ac5679598

View File

@ -1,3 +1,15 @@
## Components
The BIOS is in the uppermost 2K of the memory area - it provides basic character and disk I/O functions.
It it expected to stay static and not be unloaded by the user program.
The BIOS may hook into interrupts if necessary to provide its functionality.
Depending on your hardware, a different BIOS binary may be used.
The BDOS is in the 2K below the BIOS, it provides a filesystem driver to work atop of the BIOS.
It is agnostic to the underlaying hardware configuration.
A user program might overwrite memory up to the end of the BDOS.
Upon program exit, the BIOS will reload the BDOS from disk.
## Memory Layout ## Memory Layout
On a 8080, there are no segments, the addresses are as displayed. On a 8080, there are no segments, the addresses are as displayed.
@ -5,18 +17,21 @@ 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. 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. 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 BIOS and FDOS may be recompiled for starting at a lower address, in this case,
the minimum memory requirement may be less than 64k. the minimum memory requirement may be less than 64k.
|Start|Size|Function| |Start|Size|Function|
|--|--|--| |--|--|--|
|0xF000|4k|BDOS and hw drivers| |0xF800|2k|BIOS / hw drivers|
||var|BDOS data| |0xF000|2k|BDOS|
|...|...|BDOS data area, disk deblocking buffers|
|SP|var|Stack, growing down| |SP|var|Stack, growing down|
|||Free memory| |...|...|Free memory|
|0x0100|up to stack|Transient Program Area| |...|var|Heap, growing up|
|0x0100|var|Transient Program Area|
|0x0080|128 bytes|Command line and disk buffer| |0x0080|128 bytes|Command line and disk buffer|
|0x0000|128 bytes|System data area| |0x0008|120 bytes|BIOS data area|
|0x0000|8 bytes|BDOS data area|
## Application program interface ## Application program interface
@ -28,17 +43,10 @@ File I/O is done via FCB blocks.
|Offset|Size|Usage| |Offset|Size|Usage|
|--|--|--| |--|--|--|
|0x00|3 bytes|warm reboot jump instruction| |0x00|3 bytes|warm reboot/program exit jump instruction|
|0x03|byte|unused (would be iobyte)| |0x03|byte|unused (would be iobyte)|
|0x04|byte|default drive| |0x04|byte|default drive|
|0x05|3 bytes|syscall jump instruction| |0x05|3 bytes|syscall jump instruction|
|0x08|8 bytes|8080 RST 1 interrupt code| |0x08|120 bytes|interrupts and work area for BIOS|
|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| |0x80|byte|length of command line|
|0x81|127 bytes|command line with $length bytes plus a trailing 0x0D| |0x81|127 bytes|command line with $length bytes plus a trailing 0x0D|