bios | ||
boot | ||
com | ||
kernel | ||
lib | ||
rom | ||
utils | ||
.gitignore | ||
Makefile | ||
README.md |
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.
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 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 |
---|---|---|
0xF800 | 2k | BIOS / hw drivers |
0xF000 | 2k | BDOS |
... | ... | BDOS data area, disk deblocking buffers |
SP | var | Stack, growing down |
... | ... | Free memory |
... | var | Heap, growing up |
0x0100 | var | Transient Program Area |
0x0080 | 128 bytes | Command line and disk buffer |
0x0008 | 120 bytes | BIOS data area |
0x0000 | 8 bytes | BDOS 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/program exit jump instruction |
0x03 | byte | unused (would be iobyte) |
0x04 | byte | default drive |
0x05 | 3 bytes | syscall jump instruction |
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 |