Offset (hex) | Size (dec) | Description |
0000 | 4 | Interrupt Vector for INT 00h (division by zero) |
0004 | 4 | Interrupt Vector for INT 01h (single step) |
0008 | 4 | Interrupt Vector for INT 02h (Nonmaskable) |
000C | 4 | Interrupt Vector for INT 03h (break point) |
0010 | 4 | Interrupt Vector for INT 04h (overflow) |
0014 | 4 | Interrupt Vector for INT 05h (bound fault) |
0018 | 4 | Interrupt Vector for INT 06h (invalid opcode) |
001C | 4 | Interrupt Vector for INT 07h (processor extension not available) |
0020 | 4 | Interrupt Vector for INT 08h (clock tick (hardware)) |
0024 | 4 | Interrupt Vector for INT 09h (keyboard) |
0028 | 4 | Interrupt Vector for INT 0Ah (LPT2) |
002C | 4 | Interrupt Vector for INT 0Bh (COM2) |
0030 | 4 | Interrupt Vector for INT 0Ch (COM1) |
0034 | 4 | Interrupt Vector for INT 0Dh (IRQ5) |
0038 | 4 | Interrupt Vector for INT 0Eh (floppy disk attention) |
003C | 4 | Interrupt Vector for INT 0Fh (printer control) |
0040 | 4 | Interrupt Vector for INT 10h (video) |
0044 | 4 | Interrupt Vector for INT 11h (equipment list) |
0048 | 4 | Interrupt Vector for INT 12h (memory size) |
004C | 4 | Interrupt Vector for INT 13h (disk BIOS) |
0050 | 4 | Interrupt Vector for INT 14h (communications BIOS) |
0054 | 4 | Interrupt Vector for INT 15h (system BIOS) |
0058 | 4 | Interrupt Vector for INT 16h (keyboard BIOS) |
005C | 4 | Interrupt Vector for INT 17h (printer BIOS) |
0060 | 4 | Interrupt Vector for INT 18h (ROM Basic Language) |
0064 | 4 | Interrupt Vector for INT 19h (boot-strap) |
0068 | 4 | Interrupt Vector for INT 1Ah (Time and Date) |
006C | 4 | Interrupt Vector for INT 1Bh (Ctrl Break) |
0070 | 4 | Interrupt Vector for INT 1Ch (Clock tick) |
0074 | 4 | Holds address pointing to control parameters |
0078 | 4 | Holds address pointing to floppy disk drive parameter table |
007C | 4 | Holds address pointing to second half of character table (128 - 255) |
0080 | 4 | Interrupt Vector for INT 20h (terminate) |
0084 | 4 | Interrupt Vector for INT 21h (MS-DOS function calls) |
0088 | 4 | Holds address pointing to MS-DOS program terminate routine |
008C | 4 | Holds address pointing to MS-DOS keyboard-break handler |
0090 | 4 | Holds address pointing to MS-DOS critical-error handler |
0094 | 4 | Interrupt Vector for INT 25h (Absolute disk read) |
0098 | 4 | Interrupt Vector for INT 26h (Absolute disk write) |
009C | 4 | Interrupt Vector for INT 27h (MS-DOS TSR) |
00A0 | 4 | Interrupt Vector for INT 28h (MS-DOS IDLE) |
00A4 | 4 | Interrupt Vector for INT 29h (Fast CON output) |
00A8 | 4 | Interrupt Vector for INT 2Ah (NetBIOS) |
00A8 | 12 | Interrupt Vector for INT 2Bh-2Dh (reserved) |
00B8 | 4 | Interrupt Vector for INT 2Eh (Execute) |
00BC | 4 | Interrupt Vector for INT 2Fh (Multitask) |
00C0 | 4 | (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction |
00C4 | 4 | overwritten by CP/M jump instruction in INT 30 |
00C8 | 4 | Interrupt Vector for INT 32h (user) |
00CC | 4 | Interrupt Vector for INT 33h (Mouse) |
00D0 | 44 | Interrupt Vector for INT 34h-3Eh (FLOATING POINT EMULATION) |
00FC | 4 | Interrupt Vector for INT 3Fh (Overlay manager) |
0100 | 4 | Interrupt Vector for INT 40h (Disk handler) |
0104 | 4 | Holds address pointing to Parameter table for first hard drive |
0108 | 4 | Interrupt Vector for INT 42h (video) |
010C | 4 | Holds address pointing to video graphics characters (EGA, PS/2s) |
0110 | 4 | Holds address pointing to video graphics characters (PCjr) |
0114 | 4 | Z100/Acron |
0118 | 4 | Holds address pointing to Parameter table for second hard drive |
011C | 4 | Z100/Acorn/Western Digital/SQL Base |
0120 | 4 | KEYBOARD (PCjr) |
0124 | 4 | SYSTEM DATA (PCjr) |
0128 | 4 | Interrupt Vector for INT 4Ah (USER ALARM HANDLER) |
012C | 4 | Interrupt Vector for INT 4Bh (IBM SCSI interface) |
0130 | 4 | Interrupt Vector for INT 4Ch (Z100/Acorn/TI) |
0134 | 4 | Interrupt Vector for INT 4Dh (Z100) |
0138 | 4 | Interrupt Vector for INT 4Eh (Z100/TI) |
013C | 4 | Interrupt Vector for INT 4Fh (Common Access Method SCSI) |
0140 | 4 | Interrupt Vector for INT 50h (IRQ0 relocated by software) |
0144 | 4 | Interrupt Vector for INT 51h (IRQ1 relocated by software) |
0148 | 4 | Interrupt Vector for INT 52h (IRQ2 relocated by software) |
014C | 4 | Interrupt Vector for INT 53h (IRQ3 relocated by software) |
0150 | 4 | Interrupt Vector for INT 54h (IRQ4 relocated by software) |
0154 | 4 | Interrupt Vector for INT 55h (IRQ5 relocated by software) |
0158 | 4 | Interrupt Vector for INT 56h (IRQ6 relocated by software) |
015C | 4 | Interrupt Vector for INT 57h (IRQ7 relocated by software) |
0160 | 4 | Interrupt Vector for INT 58h (IRQ8/0 relocated by software) |
0164 | 4 | Interrupt Vector for INT 59h (IRQ9/1 relocated by software) |
0168 | 4 | Interrupt Vector for INT 5Ah (IRQ10/2 relocated by software) |
016C | 4 | Interrupt Vector for INT 5Bh (IRQ11/3 relocated by software) |
0170 | 4 | Interrupt Vector for INT 5Ch (IRQ12/4 relocated by software) |
0174 | 4 | Interrupt Vector for INT 5Dh (IRQ13/5 relocated by software) |
0178 | 4 | Interrupt Vector for INT 5Eh (IRQ14/6 relocated by software) |
017C | 4 | Interrupt Vector for INT 5Fh (IRQ15/7 relocated by software) |
0180 | 28 | Interrupt Vector for INT 60h-66h (reserved for user interrupt) |
019C | 4 | Interrupt Vector for INT 67h (LIM Expanded Memory Manager) |
01A0 | 16 | Interrupt Vector for INT 68h-6Bh (reserved for user interrupt) |
01B0 | 4 | Interrupt Vector for INT 6Ch (DECnet DOS network scheduler) |
01B4 | 4 | Interrupt Vector for INT 6Dh (VGA internal) |
01B8 | 4 | Interrupt Vector for INT 6Eh (DECnet DOS) |
01BC | 4 | Interrupt Vector for INT 6Fh (Novell NetWare, MS Windows 3.0) |
01C0 | 4 | Interrupt Vector for INT 70h (CMOS real-time clock) |
01C4 | 4 | Interrupt Vector for INT 71h (redirected to int 0A) |
01C8 | 8 | Interrupt Vector for INT 72h-73h (IRQ10-11 reserved) |
01D0 | 4 | Interrupt Vector for INT 74h (IRQ12 Pointing device) |
01D4 | 4 | Interrupt Vector for INT 75h (IRQ13 math coprocessor exception) |
01D8 | 4 | Interrupt Vector for INT 76h (IRQ14 Hard disk controller) |
01DC | 4 | Interrupt Vector for INT 77h (IRQ15 reserved) |
01E0 | 4 | Interrupt Vector for INT 78h (DOS extenders?) |
01E4 | 4 | Interrupt Vector for INT 79h (reserved for user interrupt) |
01E8 | 4 | Interrupt Vector for INT 7Ah (Novell NetWare) |
01E8 | 20 | Interrupt Vector for INT 7Bh-7Fh (reserved for user interrupt) |
0200 | 24 | Interrupt Vector for INT 80h-85h (reserved for BASIC) |
0218 | 420 | Interrupt Vector for INT 86h-EEh (reserved for BASIC) |
03BC | 4 | Interrupt Vector for INT EFh (BASIC - orig. INT 09 vector) |
03C0 | 4 | Interrupt Vector for INT F0h (BASIC - orig. INT 08 vector) |
03C4 | 52 | Interrupt Vector for INT F1h-FDh (reserved for user interrupt) |
03F8 | 8 | Interrupt Vector for INT FEh-FFh (AT/XT286/PS50+) |
Remember that 0000:0400h = 0040:0000h | ||
0400 | 2 | COM1 I/O base address (set to 0 if none found) |
0402 | 2 | COM2 I/O base address (set to 0 if none found) |
0404 | 2 | COM3 I/O base address (set to 0 if none found) |
0406 | 2 | COM4 I/O base address (set to 0 if none found) |
0408 | 2 | LPT1 I/O base address (set to 0 if none found) |
040A | 2 | LPT2 I/O base address (set to 0 if none found) |
040C | 2 | LPT3 I/O base address (set to 0 if none found) |
040E | 2 | LPT4 I/O base address (set to 0 if none found) |
2 | (if extended BIOS on system) Segment address of Extended BIOS Data Area (9FC0:0000h) | |
0410 | 2 | equipment list reported by interrupt 11h (see figure 1) |
0412 | 1 | PCjr - Infrared Keyboard Link Error |
0413 | 2 | usable memory size in kilobytes (interrupt 12h) Usually set to 0280h. If less, then denotes 640k-difference=size of Extended BIOS Data Area at (9FC0:0000h) |
0415 | 2 | (AT+) Error codes from the BIOS manufacturer |
2 | (PC,XT) Adapter Memory Size | |
0417 | 2 | keyboard status bits (see figure 2) |
0419 | 1 | Alternate Keypad entry |
041A | 2 | points to current head of keyboard buffer at 0040:001Eh |
041C | 2 | points to current tail of keyboard buffer at 0040:001Eh |
041E | 32 | keyboard buffer - used as sixteen 2-byte entries |
043E | 1 | indicates whether a floppy drive should be re calibrated |
043F | 1 | floppy drive motor status (bits 0-3) bit 0 = drive 0, if set - drive motor running bit 1 = drive 1, if set - drive motor running, etc. |
0440 | 1 | floppy drive motor status. The value in this byte is decremented with every tick of the system clock. When the value returns 0, the BOIS turns off the motor. |
0441 | 1 | floppy drive motor status. status code returned by the ROM BIOS from the most recent disk operation |
0442 | 7 | floppy drive controller status |
0449 | 1 | current video mode |
044A | 2 | max number of chars in a row of text |
044C | 2 | number of bytes needed to display the screen (text=80x25) |
044E | 2 | offset of current display page |
0450 | 16 | 8 words, each giving the cursor location of each page |
0460 | 2 | size of current cursor |
0462 | 1 | current display page |
0463 | 2 | port address of the hardware display controller chip |
0465 | 1 | current setting of the display mode-register of the MDA and CGA |
0466 | 1 | current setting of the CGA's CRT color register |
0467 | 5 | cassette tape control |
4 | Reset Restart Address | |
046C | 4 | master clock count (long integer) 0 = midnight and increments until a 24 hour equiv. |
0470 | 1 | not 0 = passed midnight |
0471 | 1 | if bit 7 is set, ctrl-break was pressed |
0472 | 2 | set to 1234h after initial power up telling a warm boot to skip mem check |
0474 | 1 | Fixed disk last operation status (except ESDI drives) |
0475 | 1 | Number of fixed disk drives |
0476 | 1 | Fixed disk control byte |
0477 | 1 | Fixed disk I/O port offset (XT only) |
0478 | 4 | contains a time-out value for the respective parallel ports |
047C | 4 | contains a time-out value for the respective RS-232 serial ports |
0480 | 2 | points at the start of the keyboard buffer area |
0482 | 2 | points at the end of the keyboard buffer area |
0484 | 1 | this value is one less than the number of character rows displayed on the screen |
0485 | 2 | height, in scan lines, of characters on the screen |
0487 | 1 | Amount of video RAM available (usually 0x60, meaning 256k) |
0488 | 3 | Initial setting of the EGA configuration switches, as well as other misc video status info. |
048B | 1 | Diskette Media Control: Data rate & step rate |
048C | 3 | Fixed disk status and control |
048F | 1 | Diskette Controller information |
0490 | 1 | Diskette Drive 0 Media state |
0491 | 1 | Diskette Drive 1 Media state |
0492 | 1 | Diskette Drive 0 Media state at start of operation |
0493 | 1 | Diskette Drive 1 Media state at start of operation |
0494 | 1 | Diskette Drive 0 current track number |
0495 | 1 | Diskette Drive 1 current track number |
0496 | 2 | data area used to support the 101-key keyboard |
0498 | 9 | real time clock control |
04A1 | 1 | LANA DMA channel flags |
04A2 | 2 | Status of LANA 0,1 |
04A4 | 4 | Saved hard disk interrupt vector |
04A8 | 4 | (EGA and VGA) contain segmented address of a table of video parameters and overrides |
04AC | 8 | (reserved) |
04B4 | 1 | Keyboard NMI control flags (convertible) |
04B5 | 4 | Keyboard Break pending flags (convertible) |
04B9 | 1 | Port 60h single byte Queue (convertible) |
04BA | 1 | Scan code for last key (convertible) |
04BB | 1 | NMI Buffer head pointer (convertible) |
04BC | 1 | NMI Buffer tail pointer (convertible) |
04BD | 16 | NMI scan code Buffer (convertible) |
04CD | 1 | unknown |
04CE | 2 | Day Counter (convertible) |
04D0 | 16 | unknown |
04F0 | 16 | intra-application communications area (ICA) ie: known area where one app can communicate with another app. (not used much because of its small size) |
Remember that 0000:0500h = 0050:0000h | ||
0500 | 1 | status of a print-screen operation: 00h - OK 01h - a print-screen operation currently in progress FFh - error occurred during a print-screen operation |
0501 | 3 | Used by BASIC |
0504 | 1 | if only 1 floppy installed, this byte indicates which drive letter it is using (a or b) 00h - acting as drive a: 01h - acting as drive b: |
0505 | 10 | POST work area |
050F | 1 | BASIC shell flag (2 if currently in shell) |
0510 | 2 | holds ROM Basics default DS value (DO NOT CHANGE) |
0512 | 4 | segment offset address of Basic's clock-tick interrupt handler |
0516 | 4 | address for ROM Basic's Break-key-handling routine |
051A | 4 | address for ROM Basic's floppy disk error-handling routine |
0520 | 2 | DOS Dynamic Storage ??? |
0522 | 14 | DOS Diskette Initialization Table ??? |
0530 | 4 | MODE command ??? |
0534 | 206 | unknown |
Remember that 0000:0600h = 0060:0000h | ||
0600 | 256 | scratch space used during DOS 2+ boot up |
Remember that 0000:0700h = 0070:0000h | ||
DOS 2+ | ||
0700 | 256 | IO.SYS LOAD ADDRESS |
DOS 5+ | ||
0700 | 25 | ORIGINAL INTERRUPT VECTORS 10h,13h,15h,19h,1Bh Each value is stored as a BYTE for the interrupt number followed by a DWORD for the vector |
0719 | 231 | unknown |
Remember that 0000:0800h = 0080:0000h | ||
0800 | 102 | 80286 CPU - LOADALL WORKSPACE |
On the 80286 (unlike 80386), the state buffer from which the LOADALL instruction loads all internal registers is hardwired to physical address 000800h Several versions 3.x of MS-DOS leave an empty space at offset 100h in IO.SYS (which is loaded at 0070h:0000h) so that HIMEM.SYS can use LOADALL on 80286 machines without having to save/restore the area of memory that LOADALL uses | ||
0866 | 154 | unknown |
Remember that 0000:0900h = 0090:0000h | ||
0900 | 653,056 | DOS (COMMAND.COM, etc., User Memory) |
9FC0h:0000h - If your system has Extended BIOS Data Area (see 0040:000Eh and :0013h above) | ||
0000 | 1 | Size of Extended BIOS Data Area in 1k blocks |
0002 | 21 | unknown |
0017 | 1 | Number of POST error entries |
0018 | 10 | Error Log for above |
0022 | 4 | Mouse Driver Device Far Call |
0026 | 1 | Mouse Flags 1 |
0027 | 1 | Mouse Flags 2 |
0028 | 8 | Mouse Data |
0030 | 9 | unknown |
0039 | 2 | Watch Dog Timer |
003B | 2 | unknown |
003D | 16 | Hard Disk 0 Parameter Table |
004D | 16 | Hard Disk 1 Parameter Table |
005D | 11 | unknown |
0068 | 1 | Cache Control |
0069 | 5 | unknown |
006E | 1 | Repeat Rate of Keyboard |
006F | 1 | Delay until Keyboard repeats |
0070 | 1 | Number of Hard Drives attached |
0071 | 1 | DMA channel Hard Drive |
0072 | 1 | Hard Drive interrupt status |
0073 | 1 | Hard Drive operation flags |
0074 | 4 | Old interrupt 76h vector pointer |
0078 | 1 | Hard Drive DMA type |
0079 | 1 | (Hard Drive) status of last operation |
007A | 1 | (Hard Drive) timeout value |
007B | 3 | unknown |
007E | 16 | Hard Drive controller return status words |
008E | 89 | unknown |
00E7 | 1 | Diskette Drive type |
00E8 | 4 | unknown |
00EC | 1 | Hard Drive Parameters Loaded |
00ED | 1 | unknown |
00EE | 1 | CPU Family ID |
00EF | 1 | CPU Stepping |
00F0 | 39 | unknown |
0117 | 2 | Keyboard ID |
0119 | 1 | unknown |
011A | 1 | Non-BIOS Interrupt 18h Flag |
011B | 2 | unknown |
011D | 4 | User Interrupt 18h Far Pointer |
0121 | 735 | unknown |
A000:0000h | ||
0000 | 65,536 | Graphics Video memory (EGA and above) |
B000:0000h | ||
0000 | 32,768 | Graphics area for EGA and up |
8000 | 4096 | Page 0 - 80x25 16 color and mono (B800:0000) |
9000 | 4096 | Page 1 - 80x25 16 color and mono (B800:1000) |
A000 | 4096 | Page 2 - 80x25 16 color and mono (B800:2000) |
B000 | 4096 | Page 3 - 80x25 16 color and mono (B800:3000) |
C000 | 4096 | Page 4 - 80x25 16 color and mono (B800:4000) |
D000 | 4096 | Page 5 - 80x25 16 color and mono (B800:5000) |
E000 | 4096 | Page 6 - 80x25 16 color and mono (B800:6000) |
F000 | 4096 | Page 7 - 80x25 16 color and mono (B800:7000) |
C000:0000h | ||
0000 | 65,536 | additional ROM-BIOS & video memory |
D000:0000h | ||
0000 | 65,536 | ROM cartridges |
E000:0000h | ||
0000 | 65,536 | ROM cartridges |
F000:0000h | ||
0000 | 32,768 | IBM PC ROM BASIC |
E000 | 8,192 | ORIGINAL IBM PC ROM BIOS |
FFF0 | 5 | RESET JUMP |
FFF5 | 8 | ASCII BIOS DATE |
FFFD | 1 | OFTEN USED TO ENSURE CORRECT BIOS CHECKSUM |
FFFE | 1 | MACHINE TYPE CODE (See Figure 3 Below) |
FFFF | 1 | unknown |
Total memory | ||
0000:0000F000:FFFF | 1,048,576 | 16 x 65,536 = 1 meg |
-------------------------- Figures --------------------------- **************************************************************** bit FEDCBA98 76543210 Described XX...... ........ Number of printers installed ..X..... ........ AT = reserved, PC Jr = Serial Printer Attached ...X.... ........ set if game adapter installed ....XXX. ........ Number of RS-232 serial ports .......X ........ DMA hardware Present ? ........ XX...... +1 = number of floppy drives (see bit 0) 00 - 1 drive, 01 - 2 drives, etc. ........ ..XX.... Initial video mode 01 - 40 column color 10 - 80 column color 11 - monochrome 00 - none of the above ........ ....XX.. For PC w/64k motherboard Amount of system board RAM 00 - 16k,01 - 32k, 10 - 48k, 11 - 64k For PC/AT: not used For PS/2: Bit 3 not used Bit 2 - pointing device installed ........ ......X. set if math co processor installed ........ .......X set if any floppy drives installed if set, see bits 6 and 7 **************************************************************** FIGURE 1: equipment list word at 0000:0410h **************************************************************** bits 76543210 Described 0000:0417h X....... insert state: (1 = active, 0 = inactive) .X...... caps lock: ..X..... num lock: ...X.... scroll lock: ....X... set if alt pressed .....X.. set if ctrl pressed ......X. set if left shift pressed .......X set if right shift pressed 0000:0418h X....... set if insert pressed .X...... set if caps lock pressed ..X..... set if num lock pressed ...X.... set if scroll lock pressed ....X... hold state active (ctrl-num lock or pause pressed) .....X.. system request pressed ......X. left alt pressed .......X right alt pressed **************************************************************** FIGURE 2: Keyboard status bits at 0000:0417h, lo order bits are set only while a corresponding key is pressed **************************************************************** F000:FFFE: Machine Type Code byte (on some machines) FF = original PC FE = XT or Portable PC FD = PCjr FC = AT (or XT model 286, or PS/2 Model 50/60) FB = XT with 640K motherboard FA = PS/2 Model 30 F9 = Convertible PC F8 = PS/2 Model 80 **************************************************************** FIGURE 3: Machine Type Code byte