rdos/README.md

46 lines
1.8 KiB
Markdown
Raw Normal View History

2019-10-27 18:06:31 +01:00
## 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.
2019-10-27 18:07:41 +01:00
It is agnostic to the underlaying hardware configuration, but different depending on the instruction set.
2019-10-27 18:06:31 +01:00
A user program might overwrite memory up to the end of the BDOS.
Upon program exit, the BIOS will reload the BDOS from disk.
2019-10-08 12:22:31 +02:00
## 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,
2019-10-08 12:22:31 +02:00
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|
2019-10-08 12:24:36 +02:00
|0x0080|128 bytes|Command line and disk buffer|
2019-10-28 10:45:15 +01:00
|0x006C|20 bytes |Pre-filled FCB 2|
|0x005C|16 bytes |Pre-filled FCB 1|
|0x0008|84 bytes |BIOS data area, specific to BIOS implementation|
|0x0005|3 bytes |Jump code for BDOS|
2019-10-28 10:45:15 +01:00
|0x0004|1 byte |default drive for BDOS|
|0x0003|1 byte |may be used as iobyte by BIOS|
|0x0000|3 bytes |Jump to BIOS warm boot entry point / program exit|
2019-10-08 12:22:31 +02:00
## Application program interface
It is using the `call 5` convention with CP/M compatible syscall numbers.
File I/O is done via FCB blocks.