84 lines
3.0 KiB
Plaintext
84 lines
3.0 KiB
Plaintext
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
|