ROM BIOS and the first MEG of memory

ROM BIOS and the first MEG of memory

The following is the layout and contents of the first Meg of memory. As I get more information, I will update it accordingly.


Notes 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 (bites 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
    



All rights reserved
Legal Notice
Copyright © 1984-2010 Forever Young Software
Forever Young Software for Hire
Return to My Home Page

你可能感兴趣的:(vector,video,basic,buffer,disk,keyboard)