ROM BIOS and the first MEG of memory

The following is the layout and contents of the first Meg of memory.

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 (print screen)
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 4 Amount of video RAM available
Initial setting of the EGA configuration switches, as well as other misc video status info.
048B 11 control and status information regarding the floppy and hard disk drives
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
FFFF 1 unknown
Total memory
0000:0000—F000:FFFF 1,048,576 16 x 65,536 = 1 meg


-------------------------- Figures ---------------------------

****************************************************************
       bit
FEDCBA98 76543210  Described
XX...... ........   Number of printers installed
..X..... ........   (reserved)
...X.... ........   set if game adapter installed
....XXX. ........   Number of RS-232 serial ports
.......X ........   (reserved)
........ 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