| 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.