Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Ralf Brown's Interrupt List (Part 1,2) - format of bios data segment at segment 40h: http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
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 I/O 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] 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}
 13h    WORD    Base memory size in kbytes (0-640)
 15h    BYTE    [AT] {Manufacturing test scratch pad}
 16h    BYTE    [AT] {Manufacturing test scratch pad}
                [PS/2 Mod 30] BIOS control flags
 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: ptr to next character in keyboard buffer
 1Ch    WORD    Keyboard: ptr 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
                    bit 2 =1 Recalibrate diskette 2
                    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
                    bits 5-4 diskette drive number selected (0-3)
                    bit 3 =1 diskette 3 motor on
                    bit 2 =1 diskette 2 motor on
                    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
                            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
 42h  7 BYTEs   Diskette/Fixed disk status/command bytes
 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
 66h    BYTE    Video current setting of CGA palette register 03D9h
 67h    DWORD   POST real mode re-entry point after certain resets
 6Bh    BYTE    POST last unexpected interrupt
 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 if to bypass memory test (warm boot)
                    = 4321h [PS/2 MCA only] if to preserve memory
                    = 5678h [Conv] system suspended
                    = 9ABCh [Conv] manufacturing test mode
                    = ABCDh [Conv] POST loop mode
                    =   64h 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
                    07h drive parameter activity failed
                    08h DMA overrun
                    09h DMA data boundary error
                    0Ah bad sector flag detected
                    0Bh bad track detected
                    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
 75h    BYTE    Fixed disk: number of fixed disk drives
 76h    BYTE    Fixed disk: control byte    {IBM document only for XT}
 77h    BYTE    Fixed disk: I/O port offset {IBM document only for XT}
 78h  3 BYTEs   Parallel devices 1-3 time-out counters
 7Bh    BYTE    parallel device 4 time-out counter [non-PS]
                bit 5 set if Virtual DMA Spec supported [PS] (see INT 4B)
 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.
 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
 8Ah    BYTE    Video [MCGA/VGA]: index into Display Combination Code table
 8Bh    BYTE    Diskette media control [not XT]:
                    bits 7-6: Last data rate set by controller:
                              00=500kbps, 01=300kbps, 10=250kbps, 11=reserved
                    bits 5-4: Last diskette drive step rate selected
                    bits 3-2: {Data rate at start of operation}
                    bits 1-0: reserved
 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]
 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
 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
                    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
                            111 all other formats/drives
 92h    BYTE    Diskette drive 0 media state at start of operation
 93h    BYTE    Diskette drive 1 media state at start of operation
 94h    BYTE    Diskette drive 0 current track number
 95h    BYTE    Diskette drive 1 current track number
 96h    BYTE    Keyboard status byte 3
                    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 1 =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  7 BYTEs   reserved for network adapters (oh really?)
 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    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.
 B4h    WORD    reserved
 B6h  3 BYTEs   reserved for POST?
 B9h  7 BYTEs   ???
 C0h 14 BYTEs   reserved
 CEh    WORD    count of days since last boot?
 D0h-EFh        reserved
 F0h-FFh        reserved for user
100h    BYTE    Print Screen Status byte


Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson