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, but different depending on the instruction set. 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 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 |
---|---|---|
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 |
0x0005 | 3 bytes | Jump code for BDOS |
0x0004 | 1 bytes | default drive for BDOS |
0x0003 | 1 bytes | may be used as iobyte by BIOS |
0x0000 | 3 bytes | Jump to BIOS warm boot entry point / program exit |
Application program interface
It is using the call 5
convention with CP/M compatible syscall numbers.
File I/O is done via FCB blocks.