A.2 BIOS Memory

[Home]  [Top]  [Previous]  [Next]


[This file was originally provided by Robin Walker.  --Ralf]
Last Update: 1/15/95

Format of BIOS Data Segment at segment 40h:
		{items in curly braces not documented by IBM}
Offset	Size	Description
 00h	WORD	Base I/O address of 1st serial I/O port, zero if none
 02h	WORD	Base I/O address of 2nd serial I/O port, zero if none
 04h	WORD	Base I/O address of 3rd serial I/O port, zero if none
 06h	WORD	Base I/O address of 4th serial I/O port, zero if none
			Note: Above fields filled in turn by POST as it finds serial
			 ports. POST never leaves gaps. DOS and BIOS serial device
			 numbers may be redefined by re-assigning these fields.
 08h	WORD	Base I/O address of 1st parallel I/O port, zero if none
 0Ah	WORD	Base I/O address of 2nd parallel I/O port, zero if none
 0Ch	WORD	Base I/O address of 3rd parallel I/O port, zero if none
 0Eh	WORD	[non-PS] Base I/O address of 4th parallel port, zero if none
		[PS] {Segment of Extended BIOS Data Segment}
			 Note: Above fields filled in turn by POST as it finds
			 parallel ports. POST never leaves gaps. DOS and BIOS
			 parallel device numbers may de redefined by re-assigning
			 these fields.
 10h	WORD	Installed hardware:
			 bits 15-14: number of parallel devices
			 bit	    13: [Conv, PS/2-55LS] Internal modem
			 bit	    12: reserved
			 bits 11- 9: number of serial devices
			 bit	     8: reserved
			 bits  7- 6: number of diskette drives minus one
			 bits  5- 4: Initial video mode:
					 00b = EGA,VGA,PGA
					 01b = 40 x 25 color
					 10b = 80 x 25 color
					 11b = 80 x 25 mono
			 bit	     3: reserved
			 bit	     2: [PS] =1 if pointing device
				[non-PS] reserved
			 bit	     1: =1 if math co-processor
			 bit	     0: =1 if diskette available for boot
 12h	BYTE	[Conv] POST status
		[AT] {Manufacturing test initialisation flags}
			 bit 0: Manufacturing test mode rather than normal operation
			 bits 1-7 unused
		[MCA] Manufacturing test
			 bit 7: POST flag, ???
			 bits 6-5 unused
			 bit 4: POST flag, slot 4 has adapter identifier EDAFh
			 bit 3: POST flag, 80x25 color video
			 bit 2: POST flag, ???
			 bit 1: unused
			 bit 0: manufacturing test mode rather than normal operation
		[PS/2-25] POST system flag
			 bit 0: optional memory failed; memory remapped
			 bit 1: real-time clock installed
 13h	WORD	Base memory size in KBytes (0-640)
 15h	WORD	[PC,XT] adapater memory size in KBytes
 15h	BYTE	[AT] {Manufacturing test scratch pad}
		[Compaq Deskpro 386] previous scan code
 16h	BYTE	[AT] {Manufacturing test scratch pad}
		[PS/2 Mod 30] {BIOS control flags}
		[Compaq Deskpro 386] keyclick loudness (00h-7Fh)
 17h	BYTE	Keyboard status flags 1:
			 bit 7 =1 INSert active
			 bit 6 =1 Caps Lock active
			 bit 5 =1 Num Lock active
			 bit 4 =1 Scroll Lock active
			 bit 3 =1 either Alt pressed
			 bit 2 =1 either Ctrl pressed
			 bit 1 =1 Left Shift pressed
			 bit 0 =1 Right Shift pressed
 18h	BYTE	Keyboard status flags 2:
			 bit 7 =1 INSert pressed
			 bit 6 =1 Caps Lock pressed
			 bit 5 =1 Num Lock pressed
			 bit 4 =1 Scroll Lock pressed
			 bit 3 =1 Pause state active
			 bit 2 =1 Sys Req pressed
			 bit 1 =1 Left Alt pressed
			 bit 0 =1 Left Ctrl pressed
 19h	BYTE	Keyboard: Alt-nnn keypad workspace
 1Ah	WORD	Keyboard: pointer to next character in keyboard buffer
 1Ch	WORD	Keyboard: pointer to first free slot in keyboard buffer
 1Eh 16 WORDs	Keyboard circular buffer (but see 80h, 82h for override)
 3Eh	BYTE	Diskette recalibrate status:
			 bit 7 =1 Diskette hardware interrupt occurred
			 bits 6-4 reserved
			 bit 3 =1 Recalibrate diskette 3 (PC,XT only)
			 bit 2 =1 Recalibrate diskette 2 (PC,XT only)
			 bit 1 =1 Recalibrate diskette 1
			 bit 0 =1 Recalibrate diskette 0
 3Fh	BYTE	Diskette motor status:
			 bit 7 =1 current operation is write or format
			  =0 current operation is read or verify
			 bit 6    reserved
				(DMA enabled on 82077)
			 bits 5-4 diskette drive number selected (0-3)
			 bit 3 =1 diskette 3 motor on (PC,XT only)
			 bit 2 =1 diskette 2 motor on (PC,XT only)
			 bit 1 =1 diskette 1 motor on
			 bit 0 =1 diskette 0 motor on
 40h	BYTE	Diskette motor turn-off time-out count
 41h	BYTE	Diskette last operation status (0 = OK)
			 bit 7 =1 drive not ready
			 bit 6 =1 seek error
			 bit 5 =1 general controller failure
			 bits 4-0:
				 00h no error
				 01h invalid request/parameter
				 02h address mark not found
				 03h write-protect error
				 04h sector not found
				 06h diskette change line active
				 08h DMA overrun
				 09h DMA across 64k boundary
				 0Ch media type unknown
				 10h CRC error on read
			 Note: the following values for this byte differ somewhat
			from the bitfield definition above:
				 30h drive does not support media sense
				 31h no media in drive
				 32h drive does not support media type
				 AAh diskette drive not ready
 42h  7 BYTEs	Diskette/Fixed disk status/command bytes
	 42h BYTE	XT: command byte to hard disk controller
		AT: write precompensation cylinder number / 4
	 43h	BYTE	XT: bit 5 = drive number, bits 3-0=head number
		AT: sector count
	 44h BYTE	XT: bits 6,7 = high bits of track, bits 5-0 = start sector-1
		AT: starting sector
	 45h BYTE	low byte of track number
	 46h BYTE	XT: sector count
		AT: high bits of track number
	 47h BYTE	XT: controlbyte from HD parameters (step rate,...)
		AT: 101DHHHH, D=drive number, HHHH=head number
	 48h BYTE	XT: INT 13h subfunction number
		AT: comand byte to hard disk controller
 42h	BYTE	disk controller status register 0
		bits 7-6: interrupt code
			00 normal completion
			01 abnormal termination during execution
			10 invalid command
			11 abnormal termination: ready line on/diskette change
		bit 5: requested seek complete
		bit 4: drive fault
		bit 3: drive not ready
		bit 2: head state at time of interrupt
		bits 1-0: selected drive (drives 2&3 on PC,XT only)
 43h	BYTE	diskette controller status register 1
		bit 7: attempted access beyon last cylinder
		bit 6: unused
		bit 5: CRC error on read
		bit 4: DMA overrun
		bit 3: unused
		bit 2: data error
		bit 1: disk write protected
		bit 0: missing address mark
 44h	BYTE	diskette controller status register 2
		bit 7: unused
		bit 6: found deleted data address mark
		bit 5: CRC error in data field
		bit 4: wrong cylinder number read
		bit 3: verify equal
		bit 2: can't find sector matching verify condition
		bit 1: bad cylinder
		bit 0: unable to find address mark
 49h	BYTE	Video current mode
 4Ah	WORD	Video columns on screen
 4Ch	WORD	Video page (regen buffer) size in bytes
 4Eh	WORD	Video current page start address in regen buffer
 50h 16 BYTEs	Video cursor position (col, row) for eight pages, 0 based
 60h	WORD	Video cursor type, 6845 compatible, hi=startline, lo=endline
 62h	BYTE	Video current page number
 63h	WORD	Video CRT controller base address: color=03D4h, mono=03B4h
 65h	BYTE	Video current setting of mode select register 03D8h/03B8h
		bits 7-6 unused
		bit 5: attribute bit 7 controls blinking instead of background
		bit 4: mode 6 graphics in monochrome
		bit 3: video signal enabled
		bit 2: monochrome
		bit 1: graphics
		bit 0: 80x25 text
 66h	BYTE	Video current setting of CGA palette register 03D9h
		bits 7-6 unused
		bit 5: palette (0/1)
		bit 4: intense background colors in text mode
		bit 3: intense border color (40x25) / background color (mode 5)
		bit 2: red
		bit 1: green
		bit 0: blue
 67h	WORD	[PC only] cassette time count
 67h	DWORD	{POST real mode re-entry point after certain resets}
		[PS except Mod 25,30] pointer to reset code upon system reset
			 with memory preserved (see offset 72h)
 69h	WORD	[PC only] cassette CRC register
		[V20-XT-BIOS] key repeat
		bit 7: key repeat disabled
		bit 6: Ctrl-Alt pressed instead of just Alt
 6Bh	BYTE	[PC only] last value read from cassette
		[XT+] POST last unexpected interrupt
		bit 0 = IRQ0 to bit 7 = IRQ7
 6Ch	DWORD	Timer ticks since midnight
 70h	BYTE	Timer overflow, non-zero if has counted past midnight
 71h	BYTE	Ctrl-Break flag: bit 7=1
 72h	WORD	POST reset flag:
			 1234h to bypass memory test (warm boot)
			 4321h [PS/2 except Mod 25,30] to preserve memory
			 5678h [Conv] system suspended
			 9ABCh [Conv] manufacturing test mode
			 ABCDh [Conv] POST loop mode
			 0064h Burn-in mode
 74h	BYTE	Fixed disk last operation status, except ESDI drives:
			 00h no error
			 01h invalid function request
			 02h address mark not found
			 03h write protect error
			 04h sector not found
			 05h reset failed
			 06h diskette removed
			 07h drive parameter activity failed
			 08h DMA overrun
			 09h DMA data boundary error
			 0Ah bad sector flag detected
			 0Bh bad track detected
			 0Ch requested diskette media type not found
			(PS/2 or extended BIOS only)
			unsupported track
			 0Dh invalid number of sectors for Format
			 0Eh control data address mark detected
			 0Fh DMA arbitration level out of range
			 10h uncorrectable ECC or CRC error
			 11h ECC corrected data error
			 20h general controller failed
			 40h seek failed
			 80h time out
			 AAh drive not ready
			 BBh undefined error
			 CCh write fault on selected drive
			 E0h status error/error register is zero
			 FFh sense failed
 74h	BYTE	[WD1002-27X SuperBIOS] total drives, first controller only
 75h	BYTE	Fixed disk: number of fixed disk drives
		[WD1002-27X SuperBIOS] total fixed drives, both controllers
 76h	BYTE	Fixed disk: control byte    {IBM document only for XT}
		XT: hard disk controller's I/O address (Western Digital)
		[WD1002-27X SuperBIOS] used in track recalculation
 77h	BYTE	Fixed disk: I/O port offset {IBM document only for XT}
		[WD1002-27X SuperBIOS] used in track recalculation
 78h  3 BYTEs	Parallel devices 1-3 time-out counters
 7Bh	BYTE	parallel device 4 time-out counter [non-PS and PS Mod 25,30]
		bit 7-6 reserved
		bit 5 set if Virtual DMA Spec supported [PS] (see INT 4B)
		bit 4 reserved
		bit 3 set if INT 4Bh intercepted and must be chained
		bit 2 reserved
		bit 1 set if Generic SCSI CBIOS services available on INT 4Bh
		bit 0 reserved
 7Ch  4 BYTEs	Serial devices 1-4 time-out counters
 80h	WORD	Keyboard buffer start as offset from segment 40h (normally 1Eh)
 82h	WORD	Keyboard buffer end+1 as offset from segment 40h (normally 3Eh)
		[XT BIOS dated 11/08/82 ends here]
 84h	BYTE	Video EGA/MCGA/VGA rows on screen minus one
 85h	WORD	Video EGA/MCGA/VGA character height in scan-lines
 87h	BYTE	Video EGA/VGA control: [MCGA: =00h]
		bit 7:	=1 if not to clear RAM (see INT 10h, AH=00h)
		bits 6-5: RAM on adapter = (this field + 1) * 64K
		bit 4:	reserved
		bit 3:	=0 if EGA/VGA video system active, =1 if inactive
		bit 2:	=1 if to wait for display enable (what means this?)
		bit 1:	=0 for color or ECD monitor, =1 for mono monitor
		bit 0:	=0 alphanumeric cursor emulation enabled, =1 not.
			When enabled, text mode cursor size (INT 10,AH=01h)
			settings looking like CGA ones are translated to
			equivalent EGA/VGA ones.
 88h	BYTE	Video EGA/VGA switches: [MCGA: reserved]
			 bits 7-4: power-on state of feature connector bits 3-0
			 bits 3-0: configuration switches 4-1 (=0 on, =1 off)
				Values as read:
			0h Pri MDA,	    Sec EGA+old color display 40 x 25
			1h Pri MDA,	    Sec EGA+old color display 80 x 25
			2h Pri MDA,	    Sec EGA+ECD normal mode (CGA emul)
			3h Pri MDA,	    Sec EGA+ECD enhanced mode
			4h Pri CGA 40 x 25, Sec EGA mono display
			5h Pri CGA 80 x 25, Sec EGA mono display
			6h Pri EGA+old color display 40 x 25,  Sec MDA
			7h Pri EGA+old color display 80 x 25,  Sec MDA
			8h Pri EGA+ECD normal mode (CGA emul), Sec MDA
			9h Pri EGA+ECD enhanced mode,	       Sec MDA
			Ah Pri EGA mono display,	       Sec CGA 40 x 25
			Bh Pri EGA mono display,	       Sec CGA 80 x 25
			 When bit4 of 40h:89h is 0, VGA emulates 350-line EGA if
			 this byte is x3h or x9h, otherwise emulates 200-line CGA in
			 400-line double scan. VGA resets this byte to x9h after the
			 mode set.
			 See also note for next byte.
 89h	BYTE	{Video MCGA/VGA mode-set option control:}
			 bits 7 and 4:
			0 0  350-line mode requested
			0 1  400-line mode at next mode set
			1 0  200-line mode requested
			1 1  reserved
			Apparently VGA BIOS mode set disregards bit 7 and uses
			byte 40h:88h to determine 200/350 selection when bit 4
			is zero. Presumably bit 7 is a convenience for other
			purposes. Bit 7 is reset to zero after the mode set.
			 bit 6:  =1 if display switching enabled, =0 if disabled
			 bit 5:  reserved
			 bit 4:  [VGA]  =1 if to use 400-line mode at next mode set
					=0 if to emulate EGA at next mode set
						This bit set to 1 after the mode set.
				 [MCGA] =1 use 400-line mode at next mode set
					=0 emulate CGA, digital monitor, 200 lines,
					  8 x 8 text font at next mode set
						Bit unchanged by mode set.
			 bit 3:  =0 if default palette loading enabled at mode set
			 bit 2:  =1 if mono display, =0 if color display
			 bit 1:  =1 if gray scale summing enabled, =0 if disabled
			 bit 0:  [VGA] =1 if VGA active, =0 if not
				 [MCGA] reserved, zero
		Note: the Tseng ET4000 BIOS v3.00 uses bits 6-4 of 88h and
			bits 6-5 of 89h to specify graphics-mode refresh
			rates as follows
				88h/6		640x480:  1 for 72Hz,0 for 60Hz
				88h/5+89h/6	800x600:  00  60Hz
							  01  56Hz
							  11  72Hz
				88h/4+89h/5	1024x768: 00  interlaced
							  01  60Hz
							  10  72Hz???
							  11  70Hz
 8Ah	BYTE	{Video [MCGA/VGA]: index into Display Combination Code table}
 8Bh 11 BYTEs	reserved [PC, PCjr, PC/XT 11/8/82, and Convertible]
 8Bh	BYTE	Diskette media control [not XT]:
			 bits 7-6: Last data rate set by controller:
					00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps
			 bits 5-4: Last diskette drive step rate selected
					00=0Ch, 01=0Dh, 10=0Eh, 11=0Ah
			 bits 3-2: {Data rate at start of operation}
			 bits 1-0: reserved
		 Note: EHD BIOS sets this byte to 01h and never reads it back
 8Ch	BYTE	Fixed disk controller status [not XT]
 8Dh	BYTE	Fixed disk controller Error Status [not XT]
 8Eh	BYTE	Fixed disk Interrupt Control [not XT]
		cleared to 00h at start of disk operation, set to FFh by IRQ14
		handler when hard disk controller completes command
 8Fh	BYTE	{Diskette controller information [not XT]:}
			 bit 7:  reserved
			 bit 6:  =1 drive 1 determined
			 bit 5:  =1 drive 1 is multi-rate, valid if drive determined
			 bit 4:  =1 drive 1 supports 80 tracks, always valid
			 bit 3:  reserved
			 bit 2:  =1 drive 0 determined
			 bit 1:  =1 drive 0 is multi-rate, valid if drive determined
			 bit 0:  =1 drive 0 supports 80 tracks, always valid
		 Note: EHD BIOS sets this byte to 01h and never alters it again
 90h	BYTE	Diskette drive 0 media state
 91h	BYTE	Diskette drive 1 media state
		bits 7-6: Data rate
				 00=500kbps, 01=300kbps, 10=250kbps, 11=1Mbps
		bit    5: =1 if double stepping required (e.g. 360kB in 1.2MB)
		bit    4: =1 if media established
		bit    3: =1 if drive capable of supporting 4MB media
		bits 2-0: on exit from BIOS, contain:
			000 trying 360kB in 360kB
			001 trying 360kB in 1.2MB
			010 trying 1.2MB in 1.2MB
			011 360kB in 360kB established
			100 360kB in 1.2MB established
			101 1.2MB in 1.2MB established
			110 reserved
			111 all other formats/drives
 92h	BYTE	{Diskette drive 0 media state at start of operation}
		officially "Drive 2 media state"
		bits 7-3 as above
		bit 2: =1 if multiple data rate capability determined
		bit 1: =1 if multiple data rate capability
		bit 0: =1 if drive has 80 tracks, =0 if 40 tracks
 92h	BYTE	[Olivetti Quaderno] Hard Disk powerdown countdown in clock
		ticks (HD turned off when counter reaches zero)
 93h	BYTE	{Diskette drive 1 media state at start of operation}
		officially "Drive 3 media state"
		bits 7-3 as above
		bit 2: =1 if multiple data rate capability determined
		bit 1: =1 if multiple data rate capability
		bit 0: =1 if drive has 80 tracks, =0 if 40 tracks
		[HP 100LX/200LX] display control status
		bit 0 =1 if DISPCTL -K
		bit 1 =1 if DISPCTL -C
 94h	BYTE	Diskette drive 0 current track number
 95h	BYTE	Diskette drive 1 current track number
 96h	BYTE	Keyboard status byte 1
		bit 7 =1 read-ID in progress
		bit 6 =1 last code read was first of two ID codes
		bit 5 =1 force Num Lock if read-ID and enhanced keyboard
		bit 4 =1 enhanced keyboard installed
		bit 3 =1 Right Alt pressed
		bit 2 =1 Right Ctrl pressed
		bit 1 =1 last code read was E0h
		bit 0 =1 last code read was E1h
 97h	BYTE	Keyboard status byte 2
		bit 7 =1 keyboard transmit error flag
		bit 6 =1 LED update in progress
		bit 5 =1 RESEND received from keyboard
		bit 4 =1 ACK received from keyboard
		bit 3 reserved, must be zero
		bit 2 Caps Lock LED
		bit 1 Num Lock LED
		bit 0 Scroll Lock LED
 98h	DWORD	Timer2: [AT, PS exc Mod 30] ptr to user wait-complete flag
						 (see INT 15, AX=8300h)
 9Ch	DWORD	Timer2: [AT, PS exc Mod 30] user wait count in microseconds
 9Fh    BYTE    [HP 100LX/200LX] video zoom mode
		02h 80x25 mono
		03h 80x25 color
		80h 64x18 mono
		81h 64x18 color
		82h 40x25 mono
		83h 40x25 color
		84h 40x16 mono
		85h 40x16 color
		(see INT 10/AH=D0h)
 A0h	BYTE	Timer2: [AT, PS exc Mod 30] Wait active flag:
			 bit 7 =1 wait time elapsed
			 bits 6-1 reserved
			 bit 0 =1 INT 15h, AH=86h has occurred
 A1h	BYTE	bit 5 set if LAN Support Program Interrupt Arbitrator present
		(DEVICE=DXMA0MOD.SYS)
 A2h  6 BYTEs	reserved for network adapters
 A4h	DWORD	[PS/2 Mod 30] Saved Fixed Disk Interrupt Vector
 A8h	DWORD	Video: EGA/MCGA/VGA ptr to Video Save Pointer Table (see below)
 ACh-AFh	reserved
 B0h	BYTE	(Phoenix 386 BIOS 1.10 10a) loop count for hard disk timeout
		  and delaying when beeping due to full keyboard buffer
 B0h	DWORD	ptr to 3363 Optical disk driver or BIOS entry point.
			 When 3363 BIOS present, the signature "OPTIC ",00h occurs 3
			 bytes beyond this entry point.
			 When 3363 BIOS and 3363 File System Driver present, the
			 signature "FILE SYSTEM DRIVER",00h occurs 3 bytes beyond
			 this entry point.
 B0h 16 BYTEs	(1988 Phoenix 386 BIOS 1.10 03) drive parameters for hard disk
		type 48 (see INT 41,INT 46)
 B4h	WORD	reserved
 B5h	BYTE	(Dell 4xxDE)
		bit 2: ??? (related to disk drives)
		bit 5: page tables set to allow Weitek addressing in real mode
		bit 6: Weitek math coprocessor present
 B6h  3 BYTEs	reserved for POST?
 B9h  7 BYTEs	???
 C0h 16 BYTEs	(1988 Phoenix 386 BIOS 1.10 03) drive parameters for hard disk
		type 49 (see INT 41,INT 46)
 C0h 14 BYTEs	reserved
 CEh	WORD	count of days since last boot
 D0h-EFh	reserved
 D0h	BYTE	[Digiboard MV/4] length of data table
 D0h	BYTE	[EHD floppy]
			  bit 4: installation completed
			  bits 3-0: drives 0-3
 D1h	BYTE	[Digiboard MV/4] product ID
 D2h	WORD	[Digiboard MV/4] base address found
 D4h	BYTE	[Digiboard MV/4] ports
 D5h	BYTE	[Digiboard MV/4] IRQ
 D5h	BYTE	[EHD floppy] total number of floppy disk controllers in system
 D6h	BYTE	[EHD floppy] AND-bits for DL to adjust port address (FFh if
		  at 03Fxh and 7Fh if at 037xh)
 D6h	WORD	[Digiboard MV/4] keyboards found
 D7h	BYTE	[EHD floppy] drive 0 diskette media status
			 bits 7-6: Data rate: 00=500kbps,01=300kbps,10=250k,11=1M/S
			 bit    5: =1 if double stepping reqd (e.g. 360kB in 1.2MB)
			 bit    4: =1 if media established
			 bit    3: reserved
			 bits 2-0: on exit from BIOS, contain:
				 000 trying 360kB in 360kB
				 001 trying 360kB in 1.2MB
				 010 trying 1.2MB in 1.2MB
				 011 360kB in 360kB established
				 100 360kB in 1.2MB established
				 101 1.2MB in 1.2MB established
				 110 reserved (2M8?)
				 111 all other formats/drives
		the value in 4D7 gets sent to 490 (diskette0 media state)
 D8h	BYTE	[EHD floppy] drive 1 diskette media state
 D8h	WORD	[Digiboard MV/4] mice found
 D9h	BYTE	[EHD floppy] drive 2 diskette media state
 DAh	BYTE	[Digiboard MV/4] current port (used by VGA initialization only)
 DAh	BYTE	[EHD floppy] drive 3 diskette media state
 DBh	BYTE	[Digiboard MV/4] master 8259 mask (used by VGA init only)
 DBh	BYTE	[EHD floppy] drive 0 needs recalibaration
 DCh	BYTE	[Digiboard MV/4] slave 8259 mask (used by VGA init only)
 DCh	BYTE	[EHD floppy] drive 1 needs recalibaration
 DDh	BYTE	[EHD floppy] drive 2 needs recalibaration
 DEh	BYTE	[EHD floppy] drive 3 needs recalibaration
 E0h-EFh	[Phoenix 386 BIOS] drive parameter table for first hard disk
		  if configurable "type 47"
 E3h	BYTE	[EHD floppy] drive 0 diskette type (from jumpers)
			 01h undefined by diskette change (360K)
			 02h 1.2M
			 03h 720K
			 04h 1.44M
			 05h 2.88M
 E4h	BYTE	[EHD floppy] drive 1 diskette type (from jumpers)
 E5h	BYTE	[EHD floppy] drive 2 diskette type (from jumpers)
 E6h	BYTE	[EHD floppy] drive 3 diskette type (from jumpers)
 EAh	WORD	[Omti controller] segment of extended BIOS data area???
		drive parameter tables stored in specified segment
 ECh	WORD	(Dell 4xxDE BIOS A11) loop count for delays
 F0h-FFh	reserved for user
100h	BYTE	Print Screen Status byte
104h	BYTE	[MS-DOS] logical drive for single-floppy system (A: or B:)
10Eh	BYTE	state of BREAK at start of BASICA.COM execution
10Fh	BYTE	flag: 02h if BASICA v2.10 running
116h	DWORD	INT 1Bh at start of BASICA.COM execution
11Ah	DWORD	INT 24h at start of BASICA.COM execution

Format of Interrupt Vector Table data storage (from 0000h:0000h):
Offset	Size	Description
 31Dh 16 BYTEs	user-definable hard disk parameters for drive type 47
		(1989 AMI 386sx BIOS) (see INT 41,INT 46)
 32Dh 16 BYTEs	user-definable hard disk parameters for drive type 48
		(1989 AMI 386sx BIOS) (see INT 41,INT 46)
Note:	these fields are used is the AMI BIOS setup is set to use the top of
	  the interrupt table for the extended BIOS data area

Format of Extended BIOS Data Area (see 40:0Eh for ptr) [PS only]
Offset	Size	Description
 00h	BYTE	Length of EBDA in kilobytes
 01h 15 BYTEs	reserved
 17h	BYTE	Number of entries in POST error log (0-5)
 18h  5 WORDs	POST error log (each word is a POST error number)
 22h	DWORD	Pointing Device Driver entry point
 26h	BYTE	Pointing Device Flags 1
			bit 7:    command in progress
			bit 6:    resend byte (FAh) received
			bit 5:    acknowledge byte (FEh) received
			bit 4:    error byte (FCh) received
			bit 3:    unexpected value received
			bits 2-0: index count for auxiliary device data at 28h
 27h	BYTE	Pointing Device Flags 2
			bit 7:    device driver far call flag
			bits 6-3: reserved
			bits 2-0: package size (number of bytes received) - 1
 28h  8 BYTEs	Pointing Device Auxiliary Device Data
 30h	DWORD	Vector for INT 07h stored here during 80387 interrupt
 34h	DWORD	Vector for INT 01h stored here during INT 07h emulation
 38h	BYTE	Scratchpad for 80287/80387 interrupt code
 39h	WORD	Timer3: Watchdog timer initial count
 3Bh	BYTE	??? seen non-zero on Model 30
 3Ch	BYTE	???
 3Dh 16 BYTEs	Fixed Disk parameter table for drive 0 (for older machines
		  which don't directly support the installed drive)
 4Dh 16 BYTEs	Fixed Disk parameter table for drive 1 (for older machines
		  which don't directly support the installed drive)
 5Dh-67h	???
 68h	BYTE	cache control
		bits 7-2 unused (0)
		bit 1: CPU cache failed test
		bit 0: CPU cache disabled
 69h-6Bh	???
 6Ch	BYTE	Fixed disk: (=FFh on ESDI systems)
			 bits 7-4: Channel number 00-0Fh
			 bits 3-0: DMA arbitration level 00-0Eh
 6Dh	BYTE	???
 6Eh	WORD	current typematic setting (see INT 16/AH=03h)
 70h	BYTE	number of attached hard drives
 71h	BYTE	hard disk 16-bit DMA channel
 72h	BYTE	interrupt status for hard disk controller (1Fh on timeout)
 73h	BYTE	hard disk operation flags
		bit 7: controller issued operation-complete INT 76h
		bit 6: controller has been reset
		bits 5-0: unused (0)
 74h	DWORD	old INT 76h vector
 78h	BYTE	hard disk DMA type
		typically 44h for reads and 4Ch for writes
 79h	BYTE	status of last hard disk operation
 7Ah	BYTE	hard disk timeout counter
 7Bh-7Dh
 7Eh  8 WORDs	storage for hard disk controller status
 8Eh-E6h
 E7h	BYTE	floppy drive type
		bit 7: drive(s) present
		bits 6-2: unused (0)
		bit 1: drive 1 is 5.25" instead of 3.5"
		bit 0: drive 0 is 5.25"
 E8h-EBh
 ECh	BYTE	hard disk parameters flag
		bit 7: parameters loaded into EBDA
		bits 6-0: unused (0)
 EDh	BYTE	???
 EEh	BYTE	CPU family ID (03h = 386, 04h = 486, etc.) (see INT 15/AH=C9h)
 EFh	BYTE	CPU stepping (see INT 15/AH=C9h)
 F0h 39 BYTEs  ???
117h	WORD	keyboard ID (see INT 16/AH=0Ah)
		(most commonly 41ABh)
119h	BYTE	???
11Ah	BYTE	non-BIOS INT 18h flag
		bits 7-1: unused (0)
		bit 0: set by BIOS before calling user INT 18h at offset 11Dh
11Bh  2 BYTE	???
11Dh	DWORD	user INT 18h vector if BIOS has re-hooked INT 18h
121h and up:	??? seen non-zero on Model 60
3F0h	BYTE	Fixed disk buffer (???!!!)

Format of Video Save Pointer Table [EGA/VGA/MCGA only]:
Offset	Size	Description
 00h	DWORD	ptr to Video Parameter Table
 04h	DWORD	ptr to Parameter Dynamic Save Area, else 0 [EGA/VGA only]
 08h	DWORD	ptr to Alphanumeric Character Set Override, else 0
 0Ch	DWORD	ptr to Graphics Character Set Override, else 0
 10h	DWORD	[VGA only] ptr to Secondary Save Pointer Table, must be valid
 14h	DWORD	reserved, zero
 18h	DWORD	reserved, zero
Note: table initially in ROM, copy to RAM to alter, then update 40h:A8h.

Format of Secondary Video Save Pointer Table [VGA only]:
Offset	Size	Description
 00h	WORD	Length of this table in bytes, including this word (1Ah)
 02h	DWORD	ptr to Display Combination Code Table, must be valid
 06h	DWORD	ptr to second Alphanumeric Character Set Override, else 0
 0Ah	DWORD	ptr to User Palette Profile Table, else 0
 0Eh	DWORD	reserved, zero
 12h	DWORD	reserved, zero
 16h	DWORD	reserved, zero
Note: table initially in ROM, copy to RAM to alter, then alter Save Ptr Table.

Format of Video Parameter Table [EGA, VGA only]:
An array of 23 [EGA] or 29 [VGA] elements, each element being 64 bytes long.
Elements appear in the order:
 00h-03h	Modes 00h-03h in 200-line CGA emulation mode
 04h-0Eh	Modes 04h-0Eh
 0Fh-10h	Modes 0Fh-10h when only 64kB RAM on adapter
 11h-12h	Modes 0Fh-10h when >64kB RAM on adapter
 13h-16h	Modes 00h-03h in 350-line mode
 17h		VGA Modes 00h or 01h in 400-line mode
 18h		VGA Modes 02h or 03h in 400-line mode
 19h		VGA Mode  07h in 400-line mode
 1Ah-1Ch	VGA Modes 11h-13h

Format of Video Parameter Table element [EGA, VGA only]:
Offset	Size	Description
 00h	BYTE	Columns on screen		  (see 40h:4Ah)
 01h	BYTE	Rows on screen minus one	  (see 40h:84h)
 02h	BYTE	Height of character in scan lines (see 40h:85h)
 03h	WORD	Size of video buffer		  (see 40h:4Ch)
 05h  4 BYTEs	Values for Sequencer Registers 1-4
 09h	BYTE	Value for Miscellaneous Output Register
 0Ah 25 BYTEs	Values for CRTC Registers 00h-18h
 23h 20 BYTEs	Values for Attribute Controller Registers 00h-13h
 37h  9 BYTEs	Values for Graphics Controller Registers 00h-08h

Format of Video Parameter Table [MCGA only] {guesswork from inspection}:
	 - 16 triplet BYTEs of R,G,B DAC info for 16 colors;
	 - An array of 11 elements, each element being 32 bytes long.
	  Elements appear in the order:
		Modes 00h,01h in 200-line mode for digital displays
		Modes 00h,01h in 400-line mode for analog displays
		Modes 02h,03h in 200-line mode for digital displays
		Modes 02h,03h in 400-line mode for analog displays
		Modes 04h,05h in 200-line mode for digital displays
		Modes 04h,05h in 400-line mode for analog displays
		Mode  06h in 200-line mode for digital displays
		Mode  06h in 400-line mode for analog displays
		Mode  11h
		Mode  13h in 200-line mode for digital displays
		Mode  13h in 400-line mode for analog displays

Format of Video Parameter Table element [MCGA only]:
Offset	Size	Description
 00h	BYTE	Columns on screen		  (see 40h:4Ah)
 01h	BYTE	Rows on screen minus one	  (see 40h:84h)
 02h	BYTE	Height of character in scan lines (see 40h:85h)
 03h	WORD	Size of video buffer		  (see 40h:4Ch)
 05h	WORD	??? always zero
 07h 21 BYTEs	Video data registers 00h-14h to port 3D5h indexed by 3D4h
 1Ch	BYTE	PEL Mask to port 3C6h
 1Dh	BYTE	CGA Mode Control to port 3D8h
 1Eh	BYTE	CGA Border Control to port 3D9h
 1Fh	BYTE	Extended Mode Control to port 3DDh

Format of Video Parameter Dynamic Save Area [EGA, VGA only]:
Offset	Size	Description
 00h 16 BYTEs	Last data written to Attribute Contr. Palette Registers 0-15
 10h	BYTE	Last data written to Attribute Controller Overscan Register
 11h-FFh	Reserved
		Note: Need for table was that EGA registers were write-only.
		Note: If default values (from the Video Parameter Table) are
				over-ridden at a mode set by the VGA User Palette Profile
				Table, then the Dynamic Save Area is updated with the
				default values, not the User Profile ones.

Format of Alphanumeric Character Set Override:
Offset	Size	Description
 00h	BYTE	Length in bytes of each character in font table
 01h	BYTE	Character generator RAM bank to load, 0=normal
 02h	WORD	Number of characters in font table, normally 256
 04h	WORD	Code of first character in font table, normally 0
 06h	DWORD	ptr to font table
 0Ah	BYTE	Displayable rows (FFh=use maximum calculated value)
 0Bh	BYTEs	Array of mode values to which this font is to pertain
	BYTE	FFh end of array

Format of Second Alphanumeric Character Set Override:
Authorities differ, some say same as first override above, but IBM say:
Offset	Size	Description
 00h	BYTE	Length in bytes of each character in font table
 01h	BYTE	Character generator RAM bank to load, normally non-zero
 02h	BYTE	reserved
 03h	DWORD	ptr to font table
 07h	BYTEs	Array of mode values to which this font is to pertain
	BYTE	FFh end of array

Format of Graphics Character Set Override:
Offset	Size	Description
 00h	BYTE	Number of displayable character rows
 01h	WORD	Length in bytes of each character in font table
 03h	DWORD	ptr to font table
 07h	BYTEs	Array of mode values to which this font is to pertain
	BYTE	FFh end of array

Format of Display Combination Code Table [VGA only]:
Offset	Size	Description
 00h	BYTE	Number of entries in the DCC table at offset 04h
 01h	BYTE	Version number
 02h	BYTE	Maximum display type code that can appear in DCC table
 03h	BYTE	reserved
 04h 2N BYTEs	Each pair of bytes gives a valid display combination
		Meaning of each byte:
		 00h	 no display
		 01h	 MDA with mono display
		 02h	 CGA with color display
		 03h	 reserved
		 04h	 EGA with color display
		 05h	 EGA with mono display
		 06h	 Professional Graphics Controller
		 07h	 VGA with mono display
		 08h	 VGA with color display
		 09h	 reserved
		 0Ah	 MCGA with digital color display
		 0Bh	 MCGA with analog mono display
		 0Ch	 MCGA with analog color display
		 FFh	 unrecognised video system

Format of User Palette Profile Table [VGA only]:
Offset	Size	Description
 00h	BYTE	Underlining: 01h=enable in all alphanumeric modes
				  00h=enable in monochrome alphanumeric modes only
				  FFh=disable in all alphanumeric modes
 01h	BYTE	reserved
 02h	WORD	reserved
 04h	WORD	Number (0-17) of Attribute Controller registers in table
 06h	WORD	Index (0-16) of first Attribute Controller register in table
 08h	DWORD	ptr to table of Attribute Controller registers to override
			Table is an array of BYTEs.
 0Ch	WORD	Number (0-256) of video DAC Color registers in table
 0Eh	WORD	Index (0-255) of first video DAC Color register in table
 10h	DWORD	ptr to table of video DAC Color registers to override
			Table is ??? triplets ??? of BYTEs???
 14h	BYTEs	array of mode values to which this profile is to pertain
	BYTE	FFh end of array

Format of System ROM:
 Address     ByteSize	Description
 F000h:6000h  32768	IBM PC ROM BASIC
 F000h:E000h   8192	original IBM PC ROM BIOS
 F000h:E739h	.	original IBM PC INT 14 handler
 F000h:E82Eh	.	original IBM PC INT 16 handler
 F000h:EC59h	.	original IBM PC INT 13 handler
 F000h:EFD2h	.	original IBM PC INT 17 handler
 F000h:F065h	.	original IBM PC INT 10 handler
 F000h:F841h	.	original IBM PC INT 12 handler
 F000h:F84Dh	.	original IBM PC INT 11 handler
 F000h:F859h	.	original IBM PC INT 15 handler
 F000h:FE6Eh	.	original IBM PC INT 1A handler
 FFFFh:0000h      5	reset jump
 FFFFh:0005h	  8	ASCII BIOS date
 FFFFh:000Dh	  1	??? (generally unused or used to fix ROM checksum)
 FFFFh:000Eh	  1	machine type code (see INT 15h/AH=C0h)
 FFFFh:0010h  65520	HMA (when A20 enabled)