[This file was originally provided by Robin Walker. --Ralf] Last Update: 7/31/94 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 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 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 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 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 -----------CONTRIBUTORS---------------------- Wim Osterholt or Wim Osterholt 2:512/56 EHD floppy = 'KEGAN 4.0M Floppy Drive Controller.', 'ACME FX4-K7tb2 v:2.5 11/5/91'