mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-08 19:32:39 +08:00
331 lines
12 KiB
Plaintext
331 lines
12 KiB
Plaintext
http://stanislavs.org/helppc/bios_data_area.html
|
|
|
|
BDA - BIOS Data Area - PC Memory Map
|
|
|
|
Address Size Description
|
|
|
|
00:00 256dwords Interrupt vector table
|
|
30:00 256bytes Stack area used during post and bootstrap
|
|
40:00 word COM1 port address
|
|
40:02 word COM2 port address
|
|
40:04 word COM3 port address
|
|
40:06 word COM4 port address
|
|
40:08 word LPT1 port address
|
|
40:0A word LPT2 port address
|
|
40:0C word LPT3 port address
|
|
40:0E word LPT4 port address (except PS/2)
|
|
Extended BIOS Data Area segment (PS/2, see EBDA)
|
|
40:10 2 bytes Equipment list flags (see INT 11)
|
|
|
|
|7|6|5|4|3|2|1|0| 40:10 (value in INT 11 register AL)
|
|
| | | | | | | `- IPL diskette installed
|
|
| | | | | | `-- math coprocessor
|
|
| | | | |-+--- old PC system board RAM < 256K
|
|
| | | | | `-- pointing device installed (PS/2)
|
|
| | | | `--- not used on PS/2
|
|
| | `------ initial video mode
|
|
`--------- # of diskette drives, less 1
|
|
|
|
|7|6|5|4|3|2|1|0| 40:11 (value in INT 11 register AH)
|
|
| | | | | | | `- 0 if DMA installed
|
|
| | | | `------ number of serial ports
|
|
| | | `------- game adapter
|
|
| | `-------- not used, internal modem (PS/2)
|
|
`----------- number of printer ports
|
|
|
|
40:12 byte PCjr: infrared keyboard link error count
|
|
40:13 word Memory size in Kbytes (see INT 12)
|
|
40:15 byte Reserved
|
|
40:16 byte PS/2 BIOS control flags
|
|
40:17 byte Keyboard flag byte 0 (see KB FLAGS)
|
|
|
|
|7|6|5|4|3|2|1|0| keyboard flag byte 0
|
|
| | | | | | | `--- right shift key depressed
|
|
| | | | | | `---- left shift key depressed
|
|
| | | | | `----- CTRL key depressed
|
|
| | | | `------ ALT key depressed
|
|
| | | `------- scroll-lock is active
|
|
| | `-------- num-lock is active
|
|
| `--------- caps-lock is active
|
|
`---------- insert is active
|
|
|
|
40:18 byte Keyboard flag byte 1 (see KB FLAGS)
|
|
|
|
|7|6|5|4|3|2|1|0| keyboard flag byte
|
|
| | | | | | | `--- left CTRL key depressed
|
|
| | | | | | `---- left ALT key depressed
|
|
| | | | | `----- system key depressed and held
|
|
| | | | `------ suspend key has been toggled
|
|
| | | `------- scroll lock key is depressed
|
|
| | `-------- num-lock key is depressed
|
|
| `--------- caps-lock key is depressed
|
|
`---------- insert key is depressed
|
|
|
|
40:19 byte Storage for alternate keypad entry
|
|
40:1A word Offset from 40:00 to keyboard buffer head
|
|
40:1C word Offset from 40:00 to keyboard buffer tail
|
|
40:1E 32bytes Keyboard buffer (circular queue buffer)
|
|
40:3E byte Drive recalibration status
|
|
|
|
|7|6|5|4|3|2|1|0| drive recalibration status
|
|
| | | | | | | `-- 1=recalibrate drive 0
|
|
| | | | | | `--- 1=recalibrate drive 1
|
|
| | | | | `---- 1=recalibrate drive 2
|
|
| | | | `----- 1=recalibrate drive 3
|
|
| `---------- unused
|
|
`----------- 1=working interrupt flag
|
|
|
|
40:3F byte Diskette motor status
|
|
|
|
|7|6|5|4|3|2|1|0| diskette motor status
|
|
| | | | | | | `-- 1=drive 0 motor on
|
|
| | | | | | `--- 1=drive 1 motor on
|
|
| | | | | `---- 1=drive 2 motor on
|
|
| | | | `----- 1=drive 3 motor on
|
|
| `---------- unused
|
|
`----------- 1=write operation
|
|
|
|
40:40 byte Motor shutoff counter (decremented by INT 8)
|
|
40:41 byte Status of last diskette operation (see INT 13,1)
|
|
|
|
|7|6|5|4|3|2|1|0| status of last diskette operation
|
|
| | | | | | | `--- invalid diskette command
|
|
| | | | | | `---- diskette address mark not found
|
|
| | | | | `----- sector not found
|
|
| | | | `------ diskette DMA error
|
|
| | | `------- CRC check / data error
|
|
| | `-------- diskette controller failure
|
|
| `--------- seek to track failed
|
|
`---------- diskette time-out
|
|
|
|
40:42 7 bytes NEC diskette controller status (see FDC)
|
|
40:49 byte Current video mode (see VIDEO MODE)
|
|
40:4A word Number of screen columns
|
|
40:4C word Size of current video regen buffer in bytes
|
|
40:4E word Offset of current video page in video regen buffer
|
|
40:50 8 words Cursor position of pages 1-8, high order byte=row
|
|
low order byte=column; changing this data isn't
|
|
reflected immediately on the display
|
|
40:60 byte Cursor ending (bottom) scan line (don't modify)
|
|
40:61 byte Cursor starting (top) scan line (don't modify)
|
|
40:62 byte Active display page number
|
|
40:63 word Base port address for active 6845 CRT controller
|
|
3B4h = mono, 3D4h = color
|
|
40:65 byte 6845 CRT mode control register value (port 3x8h)
|
|
EGA/VGA values emulate those of the MDA/CGA
|
|
40:66 byte CGA current color palette mask setting (port 3d9h)
|
|
EGA and VGA values emulate the CGA
|
|
40:67 dword CS:IP for 286 return from protected mode
|
|
dword Temp storage for SS:SP during shutdown
|
|
dword Day counter on all products after AT
|
|
dword PS/2 Pointer to reset code with memory preserved
|
|
5 bytes Cassette tape control (before AT)
|
|
40:6C dword Daily timer counter, equal to zero at midnight;
|
|
incremented by INT 8; read/set by INT 1A
|
|
40:70 byte Clock rollover flag, set when 40:6C exceeds 24hrs
|
|
40:71 byte BIOS break flag, bit 7 is set if Ctrl-Break was
|
|
*ever* hit; set by INT 9
|
|
40:72 word Soft reset flag via Ctl-Alt-Del or JMP FFFF:0
|
|
|
|
1234h Bypass memory tests & CRT initialization
|
|
4321h Preserve memory
|
|
5678h System suspend
|
|
9ABCh Manufacturer test
|
|
ABCDh Convertible POST loop
|
|
????h many other values are used during POST
|
|
|
|
40:74 byte Status of last hard disk operation (see INT 13,1)
|
|
40:75 byte Number of hard disks attached
|
|
40:76 byte XT fixed disk drive control byte
|
|
40:77 byte Port offset to current fixed disk adapter
|
|
40:78 4 bytes Time-Out value for LPT1,LPT2,LPT3(,LPT4 except PS/2)
|
|
40:7C 4 bytes Time-Out value for COM1,COM2,COM3,COM4
|
|
40:80 word Keyboard buffer start offset (seg=40h,BIOS 10-27-82)
|
|
40:82 word Keyboard buffer end offset (seg=40h,BIOS 10-27-82)
|
|
40:84 byte Rows on the screen (less 1, EGA+)
|
|
40:85 word Point height of character matrix (EGA+)
|
|
byte PCjr: character to be repeated if the typematic
|
|
repeat key takes effect
|
|
40:86 byte PCjr: initial delay before repeat key action begins
|
|
40:87 byte PCjr: current Fn function key number
|
|
byte Video mode options (EGA+)
|
|
|
|
|7|6|5|4|3|2|1|0| Video mode options (EGA+)
|
|
| | | | | | | `-- 1=alphanumeric cursor emulation enabled
|
|
| | | | | | `--- 1=video subsystem attached to monochrome
|
|
| | | | | `---- reserved
|
|
| | | | `----- 1=video subsystem is inactive
|
|
| | | `------ reserved
|
|
| `--------- video RAM 00-64K 10-192K 01-128K 11-256K
|
|
`---------- video mode number passed to INT 10, function 0
|
|
|
|
40:88 byte PCjr: third keyboard status byte
|
|
EGA feature bit switches, emulated on VGA
|
|
|
|
|7|6|5|4|3|2|1|0| EGA feature bit switches (EGA+)
|
|
| | | | | | | `-- EGA SW1 config (1=off)
|
|
| | | | | | `--- EGA SW2 config (1=off)
|
|
| | | | | `---- EGA SW3 config (1=off)
|
|
| | | | `----- EGA SW4 config (1=off)
|
|
| | | `------ Input FEAT0 (ISR0 bit 5) after output on FCR0
|
|
| | `------- Input FEAT0 (ISR0 bit 6) after output on FCR0
|
|
| `-------- Input FEAT1 (ISR0 bit 5) after output on FCR1
|
|
`--------- Input FEAT1 (ISR0 bit 6) after output on FCR1
|
|
|
|
40:89 byte Video display data area (MCGA and VGA)
|
|
|
|
|7|6|5|4|3|2|1|0| Video display data area (MCGA and VGA)
|
|
| | | | | | | `-- 1=VGA is active
|
|
| | | | | | `--- 1=gray scale is enabled
|
|
| | | | | `---- 1=using monochrome monitor
|
|
| | | | `----- 1=default palette loading is disabled
|
|
| | | `------ see table below
|
|
| | `------- reserved
|
|
| `-------- 1=display switching enabled
|
|
`--------- alphanumeric scan lines (see table below)
|
|
|
|
Bit7 Bit4 Scan Lines
|
|
0 0 350 line mode
|
|
0 1 400 line mode
|
|
1 0 200 line mode
|
|
1 1 reserved
|
|
|
|
40:8A byte Display Combination Code (DCC) table index (EGA+)
|
|
40:8B byte Last diskette data rate selected
|
|
|
|
|7|6|5|4|3|2|1|0| last diskette data rate selected
|
|
| | | | `--------- reserved
|
|
| | `------------ last floppy drive step rate selected
|
|
`-------------- last floppy data rate selected
|
|
|
|
Data Rate Step Rate
|
|
00 500K bps 00 step rate time of 0C
|
|
01 300K bps 01 step rate time of 0D
|
|
10 250K bps 10 step rate time of 0A
|
|
11 reserved 11 reserved
|
|
|
|
40:8C byte Hard disk status returned by controller
|
|
40:8D byte Hard disk error returned by controller
|
|
40:8E byte Hard disk interrupt control flag(bit 7=working int)
|
|
40:8F byte Combination hard/floppy disk card when bit 0 set
|
|
40:90 4 bytes Drive 0,1,2,3 media state
|
|
|
|
|7|6|5|4|3|2|1|0| drive media state (4 copies)
|
|
| | | | | `------- drive/media state (see below)
|
|
| | | | `------- reserved
|
|
| | | `------- 1=media/drive established
|
|
| | `------- double stepping required
|
|
`--------- data rate: 00=500K bps 01=300K bps
|
|
10=250K bps 11=reserved
|
|
Bits
|
|
210 Drive Media State
|
|
000 360Kb diskette/360Kb drive not established
|
|
001 360Kb diskette/1.2Mb drive not established
|
|
010 1.2Mb diskette/1.2Mb drive not established
|
|
011 360Kb diskette/360Kb drive established
|
|
100 360Kb diskette/1.2Mb drive established
|
|
101 1.2Mb diskette/1.2Mb drive established
|
|
110 Reserved
|
|
111 None of the above
|
|
|
|
40:94 byte Track currently seeked to on drive 0
|
|
40:95 byte Track currently seeked to on drive 1
|
|
40:96 byte Keyboard mode/type
|
|
|
|
|7|6|5|4|3|2|1|0| Keyboard mode/type
|
|
| | | | | | | `--- last code was the E1 hidden code
|
|
| | | | | | `---- last code was the E0 hidden code
|
|
| | | | | `----- right CTRL key depressed
|
|
| | | | `------ right ALT key depressed
|
|
| | | `------- 101/102 enhanced keyboard installed
|
|
| | `-------- force num-lock if Rd ID & KBX
|
|
| `--------- last char was first ID char
|
|
`---------- read ID in process
|
|
|
|
40:97 byte Keyboard LED flags
|
|
|
|
|7|6|5|4|3|2|1|0| Keyboard LED flags
|
|
| | | | | | | `--- scroll lock indicator
|
|
| | | | | | `---- num-lock indicator
|
|
| | | | | `----- caps-lock indicator
|
|
| | | | `------ circus system indicator
|
|
| | | `------- ACK received
|
|
| | `-------- re-send received flag
|
|
| `--------- mode indicator update
|
|
`---------- keyboard transmit error flag
|
|
|
|
40:98 dword Pointer to user wait complete flag
|
|
40:9C dword User wait Time-Out value in microseconds
|
|
40:A0 byte RTC wait function flag
|
|
|
|
|7|6|5|4|3|2|1|0| INT 15,86 RTC wait function flag
|
|
| | | | | | | `--- 1= wait pending
|
|
| `-------------- not used
|
|
`--------------- 1=INT 15,86 wait time elapsed
|
|
|
|
40:A1 byte LANA DMA channel flags
|
|
40:A2 2 bytes Status of LANA 0,1
|
|
40:A4 dword Saved hard disk interrupt vector
|
|
40:A8 dword BIOS Video Save/Override Pointer Table address
|
|
(see VIDEO TABLES)
|
|
40:AC 8 bytes Reserved
|
|
40:B4 byte Keyboard NMI control flags (convertible)
|
|
40:B5 dword Keyboard break pending flags (convertible)
|
|
40:B9 byte Port 60 single byte queue (convertible)
|
|
40:BA byte Scan code of last key (convertible)
|
|
40:BB byte NMI buffer head pointer (convertible)
|
|
40:BC byte NMI buffer tail pointer (convertible)
|
|
40:BD 16bytes NMI scan code buffer (convertible)
|
|
40:CE word Day counter (convertible and after)
|
|
40:F0 16bytes Intra-Applications Communications Area (IBM Technical
|
|
Reference incorrectly locates this at 50:F0-50:FF)
|
|
|
|
|
|
Address Size Description (BIOS/DOS Data Area)
|
|
|
|
50:00 byte Print screen status byte
|
|
00 = PrtSc not active,
|
|
01 = PrtSc in progress
|
|
FF = error
|
|
50:01 3 bytes Used by BASIC
|
|
50:04 byte DOS single diskette mode flag, 0=A:, 1=B:
|
|
50:05 10bytes POST work area
|
|
50:0F byte BASIC shell flag; set to 2 if current shell
|
|
50:10 word BASICs default DS value (DEF SEG)
|
|
50:12 dword Pointer to BASIC INT 1C interrupt handler
|
|
50:16 dword Pointer to BASIC INT 23 interrupt handler
|
|
50:1A dword Pointer to BASIC INT 24 disk error handler
|
|
50:20 word DOS dynamic storage
|
|
50:22 14bytes DOS diskette initialization table (INT 1E)
|
|
50:30 4bytes MODE command
|
|
70:00 I/O drivers from IO.SYS/IBMBIO.COM
|
|
|
|
The following map varies in size and locus
|
|
|
|
07C0:0 Boot code is loaded here at startup (31k mark)
|
|
A000:0 EGA/VGA RAM for graphics display mode 0Dh & above
|
|
B000:0 MDA RAM, Hercules graphics display RAM
|
|
B800:0 CGA display RAM
|
|
C000:0 EGA/VGA BIOS ROM (thru C7FF)
|
|
C400:0 Video adapter ROM space
|
|
C600:0 256bytes PGA communication area
|
|
C800:0 16K Hard disk adapter BIOS ROM
|
|
C800:5 XT Hard disk ROM format, AH=Drive, AL=Interleave
|
|
D000:0 32K Cluster adapter BIOS ROM
|
|
D800:0 PCjr conventionalsoftware cartridge address
|
|
E000:0 64K Expansion ROM space (hardwired on AT+)
|
|
128K PS/2 System ROM (thru F000)
|
|
F000:0 System monitor ROM
|
|
PCjr: software cartridge override address
|
|
F400:0 System expansion ROMs
|
|
F600:0 IBM ROM BASIC (AT)
|
|
F800:0 PCjr software cartridge override address
|
|
FC00:0 BIOS ROM
|
|
FF00:0 System ROM
|
|
FFA6:E ROM graphics character table
|
|
FFFF:0 ROM bootstrap code
|
|
FFFF:5 8 bytes ROM date (not applicable for all clones)
|
|
FFFF:E byte ROM machine id (see MACHINE ID)
|
|
|
|
|