746 lines
31 KiB
Plaintext
746 lines
31 KiB
Plaintext
[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 <wim@djo.wtm.tudelft.nl> or Wim Osterholt 2:512/56
|
|
EHD floppy = 'KEGAN 4.0M Floppy Drive Controller.',
|
|
'ACME FX4-K7tb2 v:2.5 11/5/91'
|
|
|