diff --git a/README.md b/README.md index 0235527..81db91d 100644 --- a/README.md +++ b/README.md @@ -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 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. 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. |Start|Size|Function| |--|--|--| -|0xF000|4k|BDOS and hw drivers| -||var|BDOS data| +|0xF800|2k|BIOS / hw drivers| +|0xF000|2k|BDOS| +|...|...|BDOS data area, disk deblocking buffers| |SP|var|Stack, growing down| -|||Free memory| -|0x0100|up to stack|Transient Program Area| +|...|...|Free memory| +|...|var|Heap, growing up| +|0x0100|var|Transient Program Area| |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 @@ -28,17 +43,10 @@ File I/O is done via FCB blocks. |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)| |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| +|0x08|120 bytes|interrupts and work area for BIOS| |0x80|byte|length of command line| |0x81|127 bytes|command line with $length bytes plus a trailing 0x0D|