diff --git a/README.md b/README.md index b394707..2137319 100644 --- a/README.md +++ b/README.md @@ -30,12 +30,88 @@ the minimum memory requirement may be less than 64k. |... |var |Heap, growing up| |0x0100|var |Transient Program Area| |0x0080|128 bytes|Command line and disk buffer| -|0x0008|120 bytes|BIOS data area| +|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| -|0x0004|1 bytes |default drive for BDOS| -|0x0003|1 bytes |may be used as iobyte by BIOS| +|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| +## BIOS Interface + +The entry points for the BIOS start at its base address. +Each entry point is offset a multiple of 3 from the beginning of the BIOS. + +### BIOS+0 Boot + +The bootloader jumps here after loading the BIOS. + +### BIOS+3 Warm boot + +Reload the BDOS from disk, and call its entry point. +The jump opcodes at the start of memory are re-initialized. + +### BIOS+6 Console status + +Checks if keyboard input is available. +Returns FFh in AL (A) is character is available, 00 if not. + +### BIOS+9 Console read + +Read a character from keyboard from AL (A). +This call does not return until a character is available. + +### BIOS+12 Console write + +Write character in DL (E) to the display. + +### BIOS+24 Seek disk to zero + +Seek current disk (selected with the following call) to its beginning. +This is a commonly a no-op. + +### BIOS+27 Select disk + +Select disk by the number given in CL (C). + +This is equivalent to the DL number for the PC BIOS Int 13h. + +### BIOS+30 Set track + +Select track number for next disk i/o via register CX (BC). + +For CHS-adressed disks, the track number is the current cylinder multiplied by the number of heads plus the current head number. + +For disks with one side, the cylinder number is equal to the track number. + +### BIOS+33 Set disk sector + +Select sector on the current track in register CX (BC). This parameter is 1-based, this means the first sector is sector 1. The value 0 is invalid. + +For CHS-adressed floppies, the number of sectors per track might vary depending on the inserted floppy disk, even for the same drive. + +### BIOS+36 Set disk transfer address + +Set buffer for disk operations via register CX (BC). + +This is somewhat incompatible with CP/M versions since on modern systems, the sector size is 512 instead of 128 bytes. +Setting it to the default value of 0x80 (which is the standard disk buffer for CP/M) will overwrite the first 0x180 bytes of the transient program area. + +The BDOS is expected to do deblocking to provide the application program with 128-byte disk i/o. + +### BIOS+39 Read sector + +Read sector previously specified. +AL (A) is non-zero error code on failure. +The error codes are implementation-specific. + +### BIOS+42 Write sector + +Write sector previously specified. +AL (A) is non-zero error code on failure. +The error codes are implementation-specific + ## Application program interface It is using the `call 5` convention with CP/M compatible syscall numbers.