Ship documentation on bios data area

This commit is contained in:
Nero 2020-04-20 21:24:29 +02:00
parent f8788720f5
commit 13e32675a1

83
doc/bda.txt Normal file
View File

@ -0,0 +1,83 @@
The actual layout of the BDA is specific to the actual BIOS firmware running.
This lists is focused on what a developer can reasonably rely on.
0000 256 Interrupt vectors
0300 256 bytes used as stack during POST
0400 word: COM1 base I/O port
0402 word: COM2
0404 word: COM3
0406 word: COM4
0408 word: LPT1 base I/O port
040A word: LPT2
040C word: LPT3
040E word: segment addr of the EBDA (rarely LPT4)
0410 byte: equipment list flags (INT 11h, AL)
bit 0: IPL diskette installed
bit 1: math coprocessor present
bits 4-5: default VDU mode
bits 6-7: number of floppies minus one, 0 if none
0411 byte: equipment list flags (INT 11h, AH)
bit 0: dma controller present
bits 1-3: number of serial ports
bit 4: game adapter present
bit 6-7: number of printer ports
0413 word: memory size in kilobytes (INT 12h, AX)
0417 byte: key toggle states
bit 0: right shift
bit 1: left shift
bit 2: ctrl
bit 3: alt
bit 4: scroll lock
bit 5: num lock
bit 6: caps lock
but 7: insert
0418 byte: key pressed state (1 if currently held down)
bit 0: left ctrl key
bit 1: left alt key
bit 2: system key
bit 3: suspend key
bit 4: scroll lock
bit 5: num lock
bit 6: caps lock
bit 7: insert
0419 byte: when typing a character by pressing the alt key and typing its code
into the numpad, this byte holds the current numeric value
041A word: offset into the key ringbuffer, reading end
041B word: offset into the key ringbuffer, writing end
041E 16 words: key ringbuffer, holds place for 16 keypresses
043E byte: drive restore flag
043F byte: drive motor flag
0440 byte: drive motor timeout counter in 1/18th seconds
0441 byte: status of last disk operation
0442 7 bytes: status buffer for FDC
0449 byte: current VDU mode
044A byte: number of visible display columns
044C word: VDU display buffer size
044E word: offset of current VDU page in buffer
0450 8 words: 8 cursor positions for each VDU page (MSB=row, LSB=column)
0460 byte: bottom scan line for cursor (dont write)
0461 byte: top scan line for cursor (dont write)
0462 byte: active display page number
0463 word: VDU I/O address
0465 byte: VDU mode control register
0466 byte: VDU color select register
0467 dword CS:IP for 80286 return from protected mode
046C dword: time of the day in 1/18th second ticks
0470 byte: rollover flag if above surpassed 24h (FFh = rollover)
0471 byte: bit 7 is set on ctrl+numlock to indicate break condition
0472 word: soft reset flag (set and JMP 0xFFFF:0)
1234: bypas memory tests and VDU setup
4321: preserve memory
5678: system suspend
9ABC: POST loop (on IBM convertible)
0474 dword: reserved for hard disk bios
0478 byte: LPT1 timeout in half seconds
0479 byte: LPT2
047A byte: LPT3
047C byte: COM1 timeout in half seconds
0480 word: key ringbuffer start (from 0x400)
0482 word: key ringbuffer
0500 byte: status of INT 5: print screen
00: no screen print in progress
01: in progress
FF: printer failure