ralf@b.gp.cs.cmu.edu (Ralf Brown) (09/18/88)
Please do not redistribute this file without the rest of the files making up
the interrupt listing:
INTERRUP.LST this file
INTERRUP.SUM a one-line-per-function summary
INTERRUP.PRI a brief introduction to interrupts
INTERRUP.1ST the read-me file
------------------------------------------------------
Release 88.7 Last change 9/17/88
------------------------------------------------------
If you know of any information which is not in this list, or which is incorrect,
please let me know!
Ralf Brown
ARPA: ralf@cs.cmu.edu \
UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf > preferred
BIT: ralf%cs.cmu.edu@cmuccvma /
FIDO: Ralf Brown 1:129/31
------------------------------------------------------
Key to system abbreviations
(unless otherwise indicated, a function is available on all systems)
PC IBM PC
XT IBM PC XT
PORT IBM PC Portable (uses same BIOS as XT)
Jr IBM PCjr
AT IBM PC AT
XT2 IBM PC XT 2
XT286 IBM PC XT/286
CONV IBM Convertible
PS IBM PS/2, any model
PS30 IBM PS/2 Model 30 and below
PS50+ IBM PS/2 Model 50,60,70,80
CGA Color Graphics Adapter
EGA Enhanced Graphics Adapter
VGA Video Graphics Array
MCGA Multi-Color Graphics Array
TopView TopView/DESQview/TaskView/other TopView-compatible environments
------------------------------------------------------
Microsoft, MS, MS DOS, OS/2 are trademarks of Microsoft Corp.
IBM, PC, PCjr, PC/XT, PC/AT, XT/286, PS/2, TopView are trademarks of IBM Corp.
Compaq is a registered trademark of Compaq Corp.
Tandy 1000 is a registered trademark of Tandy Corp.
DESQview is a trademark of Quarterdeck Office Systems
TaskView is a trademark of Sunny Hill Software
10-Net is a trademark of Fox Research, Inc.
Mouse Systems is a trademark of Mouse Systems Corp.
Various other names are trademarks of their respective companies
------------------------------------------------------
The use of -> instead of = signifies that the indicated register or register
pair contains a pointer to the specified item
------------------------------------------------------
INT 00 - internal - DIVIDE ERROR
Automatically called at end of DIV or IDIV operation that results in error
or overflow. Normally set by DOS to display an error message and abort
the program.
------------------------------------------------------
INT 01 - internal - SINGLE-STEP
Generated at end of each machine instruction if TF bit in FLAGS is set.
This is what makes the T command of DEBUG work for single-stepping. It is
not generated after MOV to segment register or POP of segment register
(unless you have a very early 8088 with a microcode bug).
------------------------------------------------------
INT 02 - hardware - NMI (NON-MASKABLE INTERRUPT)
Generated by NMI signal in hardware. This signal has various uses:
Parity error: all except Jr and CONV
Coprocessor interrupt: all except Jr and CONV
Keyboard interrupt: Jr, CONV
I/O channel check: CONV, PS50+
Disk-controller power-on request: CONV
System suspend: CONV
Real-time clock: CONV
System watch-dog timer, time-out interrupt: PS50+
DMA timer time-out interrupt: PS50+
------------------------------------------------------
INT 03 - ONE-BYTE INTERRUPT
Generated by opcode CCh. Similar to 8080's RST instruction. Generally
used to set breakpoints for DEBUG.
Also used by Turbo Pascal versions 1,2,3 when {$U+} specified
------------------------------------------------------
INT 04 - internal - OVERFLOW
Generated by INTO instruction if OF flag is set. If flag is not set, INTO
is effectively a NOP. Used to trap any arithmetic errors before the
erroneous results propagate further through the computation.
------------------------------------------------------
INT 05 - PRINT-SCREEN KEY
Automatically called by keyboard scan when print-screen key is pressed.
Normally executes routine to print the screen, but may call any routine that
can safely be executed from inside the keyboard scanner. Status and result
byte for default handler is at address 0050:0000.
------------------------------------------------------
INT 05 - internal - BOUND CHECK FAILED (80186/80286)
Generated by BOUND instruction when the value to be tested is less than the
indicated lower bound or greater than the indicated upper bound.
------------------------------------------------------
INT 06 - internal - UNDEFINED OPCODE (80286)
------------------------------------------------------
INT 07 - internal - NO MATH UNIT AVAILABLE (80286)
------------------------------------------------------
INT 08 - IRQ0 - TIMER INTERRUPT
Generated 18.2 times per second, this interrupt is used to keep the
time-of-day clock updated.
------------------------------------------------------
INT 08 - internal - DOUBLE FAULT (80286 protected mode)
Called when multiple exceptions occur on one instruction, or an exception
occurs in an exception handler. If an exception occurs in the double fault
handler, the CPU goes into SHUTDOWN mode (which circuitry in the PC/AT
converts to a reset).
------------------------------------------------------
INT 09 - IRQ1 - KEYBOARD INTERRUPT
Generated when data is received from the keyboard. This is normally a scan
code, but may also be an ACK or NAK of a command on AT-class keyboards.
------------------------------------------------------
INT 09 - internal - MATH UNIT PROTECTION FAULT (80286 protected mode)
------------------------------------------------------
INT 0A - IRQ2 - EGA VERTICAL RETRACE
Notes: on the Tandy 1000, this interrupt is used by the hard disk
the TOPS and PCnet adapters use this interrupt request line by default
------------------------------------------------------
INT 0A - internal - INVALID TASK STATE SEGMENT (80286 protected-mode)
------------------------------------------------------
INT 0B - IRQ3 - COM2 INTERRUPT
Note: the TOPS and PCnet adapters use this interrupt request line as an
alternate
------------------------------------------------------
INT 0B - internal - NOT PRESENT (80286 protected-mode)
Generated when loading a segment register if the segment descriptor
indicates that the segment is not currently in memory. May be used to
implement virtual memory.
------------------------------------------------------
INT 0C - IRQ4 - COM1 INTERRUPT
------------------------------------------------------
INT 0C - internal - STACK FAULT (80286 protected-mode)
Generated on stack overflow/underflow. Note that the 80286 will shut down
in real mode if SP=1 before a push.
------------------------------------------------------
INT 0D - IRQ5 - FIXED DISK (PC), LPT2 (AT/PS)
Note: the Tandy 1000 uses this line for the 60Hhz RAM refresh
------------------------------------------------------
INT 0D - internal - GENERAL PROTECTION VIOLATION (80286)
Called in real mode when an instruction attempts to access a word operand
located at offset FFFFh
------------------------------------------------------
INT 0E - IRQ6 - DISKETTE INTERRUPT
Generated by floppy disk controller on completion of an operation
------------------------------------------------------
INT 0E - internal - PAGE FAULT (80386 native mode)
------------------------------------------------------
INT 0F - IRQ7 - PRINTER INTERRUPT
Generated by the LPT1 printer adapter when printer becomes ready.
Note: most printer adapters do not reliably generate this interrupt.
------------------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE
AH = 00h
AL = mode (graphics mode if graphics resolution listed)
text pixel graphic color disp scrn system
resol box resoltn page addr
00h = 40x25 8x8 B&W 8 B800 CGA
01h = 40x25 8x8 16 8 B800 CGA
02h = 80x25 8x8 B&W 4 B800 CGA
= 80x25 8x8 B&W 8 B800 EGA/MCGA/VGA
03h = 80x25 8x8 16 4 B800 CGA
= 80x25 8x8 16 8 B800 EGA/MCGA/VGA
04h = 40x25 8x8 320x200 4 1 B800 CGA
05h = 40x25 8x8 320x200 4 gray 1 B800 CGA
06h = 80x25 8x8 640x200 B&W 1 B800 CGA
07h = 80x25 8x14 mono 1 B000 MDA/Hercules
= 80x25 8 EGA/VGA
08h = 20x25 160x200 16 B800 PCjr/Tandy 1000
09h = 40x25 320x200 16 B800 PCjr/Tandy 1000
0Ah = 80x25 640x200 4 B800 PCjr/Tandy 1000
0Bh = reserved (used internally by EGA BIOS)
0Ch = reserved (used internally by EGA BIOS)
0Dh = 40x25 320x200 16 8 A000 EGA/VGA
0Eh = 80x25 640x200 16 4 A000 EGA/VGA
0Fh = 80x25 640x350 mono 2 A000 EGA/VGA
10h = 80x25 640x350 4or16 2 A000 EGA/VGA
11h = 80x30 640x480 mono A000 VGA/MCGA
12h = 80x30 640x480 16 A000 VGA
13h = 40x24 320x200 256 A000 VGA/MCGA
18h = 132x44 8x8 mono Tseng Labs EVA
19h = 132x25 8x14 mono Tseng Labs EVA
1Ah = 132x28 8x13 mono Tseng Labs EVA
22h = 132x44 8x8 Tseng, Ahead
23h = 132x25 6x14 Tseng Labs EVA
= 132x25 8x14 Ahead Systems EGA2001
= 132x25 B800 ATI EGA Wonder
24h = 132x28 6x13 Tseng Labs EVA
25h = 80x60 8x8 640x480 Tseng Labs EVA
= 640x480 16 VEGA VGA
26h = 80x60 8x8 Tseng Labs EVA
= 80x60 8x8 640x480 Ahead Systems EGA2001
27h = 720x512 16 VEGA VGA
= 132x25 mono B000 ATI EGA Wonder
28h = ???x??? VEGA VGA
29h = 800x600 16 VEGA VGA
2Dh = 640x350 256 VEGA VGA
2Eh = 640x480 256 VEGA VGA
2Fh = 720x512 256 VEGA VGA
30h = 800x600 256 VEGA VGA
= ???x??? B800 AT&T 6300
36h = 960x720 16 VEGA VGA
37h = 1024x768 16 VEGA VGA
= 132x44 mono B000 ATI EGA Wonder
40h = 80x25 8x16 640x400 2 1 B800 AT&T 6300
= 80x43 VEGA VGA
41h = 640x200 16 1 AT&T 6300
= 132x25 VEGA VGA
42h = 80x25 8x16 640x400 16 AT&T 6300
= 132x43 VEGA VGA
43h = unsupported 640x200 of 640x400 viewport AT&T 6300
= 80x60 VEGA VGA
44h = disable VDC and DEB output AT&T 6300
= 100x60 VEGA VGA
48h = 80x50 8x8 640x400 2 B800 AT&T 6300
4Dh = 120x25 VEGA VGA
4Eh = 120x43 VEGA VGA
4Fh = 132x25 VEGA VGA
50h = 132x25 9x14 mono Ahead Systems EGA2001
= 80x30 8x16 640x480 16 Paradise EGA-480
= 80x43 mono VEGA VGA
= 640x480 mono??? Taxan 565 EGA
51h = 80x30 8x16 Paradise EGA-480
= 132x25 mono VEGA VGA
= 640x480 ??? ATI EGA Wonder
52h = 132x44 9x8 mono Ahead Systems EGA2001
= 132x43 mono VEGA VGA
= 752x410 ??? ATI EGA Wonder
53h = 800x560 ??? ATI EGA Wonder
54h = 132x43 8x8 Paradise EGA-480
= 132x43 7x9 16/256k B800 Paradise VGA
= 132x43 8x9 16/256k B800 Paradise VGA on multisync
= 132x43 ??? Taxan 565 EGA
55h = 132x25 8x14 Paradise EGA-480
= 132x25 7x16 16/256k B800 Paradise VGA
= 132x25 8x16 16/256k B800 Paradise VGA on multisync
= 132x25 ??? Taxan 565 EGA
56h = 132x43 8x8 3??? 2 B000 NSI Smart EGA+
= 132x43 7x9 4 B000 Paradise VGA
= 132x43 8x9 4 B000 Paradisk VGA on multisync
= 132x43 mono Taxan 565 EGA
57h = 132x25 8x14 3??? 4 B000 NSI Smart EGA+
= 132x25 7x16 4 B000 Paradise VGA
= 132x25 8x16 4 B000 Paradise VGA on multisync
= 132x25 mono Taxan 565 EGA
58h = 100x75 8x8 800x600 16/256k A000 Paradise VGA
59h = 100x75 8x8 800x600 2 A000 Paradise VGA
5Eh = 640x400 256 Paradise VGA,VEGA VGA
5Fh = 640x480 256 Paradise VGA
60h = 80x??? ???x400 Corona/Cordata BIOS v4.10+
= 752x410 VEGA VGA
61h = ???x400 Corona/Cordata BIOS v4.10+
= 720x540 VEGA VGA
62h = 800x600 VEGA VGA
71h = 100x35 8x16 800x600 16of64 A000 NSI Smart EGA+
74h = 640x400 2 B800 Toshiba 3100 AT&T mode
7Eh = special mode set Paradise VGA (see below)
7Fh = special function set Paradise VGA (see below)
82h = 80x25 B&W AT&T VDC overlay mode *
83h = 80x25 AT&T VDC overlay mode *
86h = 640x200 B&W AT&T VDC overlay mode *
C0h = 640x400 2/prog pallet AT&T VDC overlay mode *
C4h = disable output AT&T VDC overlay mode *
D0h = 640x400 2 B800 DEC VAXmate AT&T mode
??? = 640x225 Z-100
??? = 640x400 Z-100
* for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
40h, or 44h
Note: IBM standard modes do not clear the screen if the high bit of AL is set
------------------------------------------------------
INT 10 - VIDEO - Paradise VGA - SET SPECIAL MODE
AX = 007Eh
BX = The horizontal dimension of the mode desired
CX = The vertical dimension of the mode desired
(both BX/CX in pixels for graphics modes, rows for alpha modes)
DX = The number of colors of the mode desired
(use 0 for monochrome modes)
Return: BH = 7Eh if successful.
------------------------------------------------------
INT 10 - VIDEO - Paradise VGA - EXTENDED FUNCTIONS
AX = 007Fh
BH = 00h set VGA operation
BH = 01h set non-VGA operation
Color modes (0,1,2,3,4,5,6) will set non-VGA CGA operation.
Monochrome mode 7 will set non-VGA MDA/Hercules operation.
BH = 02h query mode status
Return: BL = 0 if operating in VGA mode, 1 if non-VGA mode.
CH = Total video RAM size in 64k byte units.
CL = Video RAM used by the current mode.
BH = 03h lock current mode
Allows current mode (VGA or non-VGA) to survive re-boot.
BH = 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh WRITE PARADISE REGISTERS 0,1,2,3,4,5
(port 03CEh indexes A,B,C,D,E,F)
BL = Value to set in the paradise register.
BH = 1Ah,1Bh,1Ch,1Dh,1Eh,1Fh READ PARADISE REGISTERS 0,1,2,3,4,5
(port 03CEh indexes A,B,C,D,E,F)
Return: BL = Value of the paradise register.
BH = 7Fh if successful.
------------------------------------------------------
INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
AH = 01h
CH bits 0-4 = start line for cursor in character cell
bits 5-6 = blink attribute
(00=normal, 01=invisible, 10=slow, 11=fast)
CL bits 0-4 = end line for cursor in character cell
Note: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
returns unmapped cursor shape
------------------------------------------------------
INT 10 - VIDEO - SET CURSOR POSITION
AH = 02h
DH,DL = row, column (0,0 = upper left)
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
------------------------------------------------------
INT 10 - VIDEO - READ CURSOR POSITION
AH = 03h
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
Return: DH,DL = row,column
CH = cursor start line
CL = cursor end line
------------------------------------------------------
INT 10 - VIDEO - READ LIGHT PEN POSITION (all but PS)
AH = 04h
Return: AH = 0: light pen switch not activated
AH = 1: light pen values in registers
DH,DL = row,column of current position
CH = raster line (0-199) (EGA) old graphics modes
CX = (EGA) raster line (0-nnn) new graphics modes
BX = pixel column (0-319 or 0-639)
------------------------------------------------------
INT 10 - VIDEO - SELECT DISPLAY PAGE
AH = 05h
AL =
0-7: new page value for modes 0 & 1
0-3: new page value for modes 2 & 3
80h: read CRT/CPU page registers [PCjr only]
81h: set CPU page register to value in BL [PCjr only]
82h: set CRT page register to value in BH [PCjr only]
83h: set both display registers to values in BH, BL [PCjr only]
{Corona/Cordata BIOS v4.10+}
0: set address of graphics bitmap buffer (video modes 60h,61h)
BX = segment of buffer
0Fh: get address of graphics bitmap buffer (video modes 60h,61h)
Return: BH = CRT page register (if AL >= 80h)
BL = CPU page register (if AL >= 80h)
DX = segment of graphics bitmap buffer (video modes 60h,61h; AL=0Fh)
------------------------------------------------------
INT 10 - VIDEO - SCROLL PAGE UP
AH = 06h
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
------------------------------------------------------
INT 10 - VIDEO - SCROLL PAGE DOWN
AH = 07h
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
------------------------------------------------------
INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
AH = 08h
BH = display page
Return: AL = character
AH = attribute of character (alpha modes)
------------------------------------------------------
INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
AH = 09h
AL = character
BH = display page
BL = attributes of char (alpha modes) or color (graphics modes)
if bit 7 == 1 in graphics mode, character is xor'ed onto screen
CX = number of times to write character
Note: all characters are displayed, including CR, LF, and BS
------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
AH = 0Ah
AL = character
BH = display page - alpha mode
BL = color of character (graphics mode, PCjr only)
if bit 7 == 1 in graphics mode, character is xor'ed onto screen
CX = number of times to write character
(EGA) in graphics modes, replication count in CX works correctly
only if all character written are contains on the same row
Note: all characters are displayed, including CR, LF, and BS
------------------------------------------------------
INT 10 - VIDEO - SET COLOR PALETTE
AH = 0Bh
BH = 0
BL = border color (0-15) (text modes)
border color and background color (graphics modes)
(EGA)
BL = border color (0-15) and high-intensity background color
(16-31??? maybe should be high nybble?)
BH = 1
BL = palette (0-3)
------------------------------------------------------
INT 10 - VIDEO - WRITE DOT ON SCREEN
AH = 0Ch
AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5)
if bit 7 set, new color will be XORed with current pixel
BH = display page (ignored if mode only supports one page)
DX = row (0 - 199 CGA)
CX = column (0 - 319 in modes 4/5/13, 0 - 639 in modes 6/14/15/16)
Note: only valid in graphics modes
------------------------------------------------------
INT 10 - VIDEO - READ DOT ON SCREEN
AH = 0Dh
BH = display page (ignored if mode only supports one page)
CX = column (0 - 319 or 639)
DX = row (0 - 199)
Return: AL = color read
Note: only valid in graphics modes
------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
AH = 0Eh
AL = character
BH = display page (alpha modes)
BL = foreground color (graphics modes)
Note: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
and do the expected things
------------------------------------------------------
INT 10 - VIDEO - GET CURRENT VIDEO MODE
AH = 0Fh
Return: AH = number of columns on screen
AL = current video mode (see INT 10h/AH=00h)
BH = current active display page
Note: if mode was set with bit 7 set ("no blanking"), the returned mode will
also have bit 7 set
------------------------------------------------------
INT 10 - VIDEO - SET PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA)
AH = 10h
AL = subfunction
00h set palette register
BL = palette register to set
BH = color value to store
(on MCGA, only BX = 0712h is supported)
01h set border color register
BH = color value to store
02h set all palette registers and overscan
ES:DX -> 17-byte list
bytes 0-15 = values for palette regs. 0-15
byte 16 = value for border color register
------------------------------------------------------
INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
AX = 1003h
BL = 00h enable intensity
= 01h enable blink
------------------------------------------------------
INT 10 - VIDEO - GET PALETTE REGISTERS (VGA)
AH = 10h
AL = subfunction
07h read individual palette register
BL = palette register number
Return: BH = palette register value
08h read overscan (border color) register
Return: BH = value
09h read all palette registers and overscan register
ES:DX = buffer address (17 bytes)
------------------------------------------------------
INT 10 - VIDEO - GET/SET DAC REGISTERS (EGA, VGA/MCGA)
AH = 10h
AL = subfunction
10h set individual DAC register
BX = register number
CH = new value for green (0-63)
CL = new value for blue (0-63)
DH = new value for red (0-63)
12h set block of DAC registers
BX = starting color register
CX = number of registers to set
ES:DX = Table of 3*CX bytes where each 3 byte
group represents one byte each of red, green and blue (0-63)
13h select video DAC color page (VGA only)
BL = 00h Select paging mode
BH = 00h Select 4 blocks of 64
BH = 01h Select 16 blocks of 16
BL = 01h Select Page
BH = page number (00h to 03h) or (00h to 0Fh)
(not valid in mode 13h)
15h read individual DAC register
BL = palette register number
Return: DH = red value
CH = green value
CL = blue value
17h read block of DAC registers
BX = starting palette register
CX = number of palette registers to read
ES:DX = buffer (3 * CX bytes in size)
Return: CX number of red, green and blue triples in buffer
18h *UNDOCUMENTED* set PEL mask
BL = new PEL value
19h *UNDOCUMENTED* read PEL mask
BL = value read
1Ah read video DAC color-page state (VGA only)
Return: BL = paging mode
0 four pages of 64
1 sixteen pages of 16
BH = current page
1Bh perform gray-scale summing
BX = starting palette register
CX = number of registers to convert
------------------------------------------------------
INT 10 - VIDEO - TEXT-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
AH = 11h
The following functions will cause a mode set, completely resetting
the video environment, but without clearing the video buffer
AL = 00h, 10h: load user-specified patterns
ES:BP -> user table
CX = count of patterns to store
DX = character offset into map 2 block
BL = block to load in map 2
BH = number of bytes per character pattern
AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
BL = block to load
AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
BL = block to load
AL = 03h: set block specifier
BL = block specifier
(EGA/MCGA) bits 0,1 = block selected by chars with attribute
bit 3 = 0
bits 2,3 = block selected by chars with attribute
bit 3 = 1
(VGA) bits 0,1,4 = block selected by attribute bit 3 = 0
bits 2,3,5 = block selected by attribute bit 3 = 1
AL = 04h, 14h: load ROM 8x16 character set (VGA)
The routines called with AL=1xh are designed to be called only
immediately after a mode set and are similar to the routines called
with AL=0xh, except that:
Page 0 must be active.
Bytes/character is recalculated.
Max character rows is recalculated.
CRT buffer length is recalculated.
CRTC registers are reprogrammed as follows:
R09 = bytes/char-1 ; max scan line (mode 7 only)
R0A = bytes/char-2 ; cursor start
R0B = 0 ; cursor end
R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
R14 = bytes/char ; underline loc
(*** BUG: should be 1 less ***)
------------------------------------------------------
INT 10 - VIDEO - GRAPHICS-MODE CHARACTER GENERATOR FUNCTIONS (PS, EGA, VGA)
AH = 11h
The following functions are meant to be called only after a mode set:
AL = 20h: set user 8 by 8 graphics characters (INT 1Fh)
ES:BP -> user table
AL = 21h: set user graphics characters
ES:BP -> user table
CX = bytes per character
BL = row specifier
0: user set
DL = number of rows
1: 14 rows
2: 25 rows
3: 43 rows
AL = 22h: ROM 8 by 14 set
BL = row specifier
AL = 23h: ROM 8 by 8 double dot
BL = row specifier
AL = 24h: load 8x16 graphics characters (VGA/MCGA)
BL = row specifier
------------------------------------------------------
INT 10 - VIDEO - GET FONT INFORMATION (EGA, MCGA, VGA)
AX = 1130h
BH = pointer specifier
0: INT 1Fh pointer
1: INT 44h pointer
2: ROM 8 by 14 character font pointer
3: ROM 8 by 8 double dot font pointer
4: ROM 8 by 8 DD font (top half)
5: ROM alpha alternate (9 by 14) pointer
Return: ES:BP = specified pointer value
CX = bytes/character
DL = character rows on screen
------------------------------------------------------
INT 10 - VIDEO - ALTERNATE FUNCTION SELECT (PS, EGA, VGA, MCGA)
AH = 12h
BL = 10h: return EGA information
Return:
BH = 0: color mode in effect (3Dx)
1: mono mode in effect (3Bx)
BL = 0: 64k bytes memory installed
1: 128k bytes memory installed
2: 192k bytes memory installed
3: 256k bytes memory installed
CH = feature bits
CL = switch settings
BL = 20h: select alternate print screen routine
BL = 30h: select vertical resolution for alphanumeric modes (VGA only)
AL = 00h 200 scan lines
01h 350 scan lines
02h 400 scan lines
Return: AL = 12h if function supported
BL = 31h: enable/disable default palette loading (VGA/MCGA)
AL = 00h enable default palette loading
01h disable default palette loading
Return: AL = 12h if function was supported
BL = 32h: enable/disable video addressing (VGA/MCGA)
AL = 00h enable video
01h disable video
Return: AL = 12h if function was supported
BL = 33h: enable/disable default gray-scale summing (VGA/MCGA)
AL = 00h enable gray scale summing
01h disable gray scale summing
Return: AL = 12h if function was supported
BL = 34h: enable/disable alphanumeric cursor emulation (VGA only)
AL = 00h enable cursor emulation
01h disable cursor emulation
Return: AL = 12h if function was supported
BL = 35h: PS/2 display-switch interface
AL = 00h initial adapter video off
01h initial planar video on
02h switch active video off
03h switch inactive video on
80h *UNDOCUMENTED* set system board video active flag
ES:DX = buffer (128 byte save area if AL = 0, 2 or 3)
Return: AL = 12h if function was supported
BL = 36h: video refresh control (VGA/PS)
AL = 00h enable refresh
01h disable refresh
Return: AL = 12h if function supported
BX = 5500h ??? (used by ATI and TAXAN)
BX = 5502h ??? (used by ATI and TAXAN)
------------------------------------------------------
INT 10 - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA)
AH = 13h
AL = mode
bit 0: set in order to move cursor after write
bit 1: set if string contains alternating characters and attributes
BL = attribute if AL bit 1 clear
BH = display page number
DH,DL = row,column of starting cursor position
CX = length of string
ES:BP -> start of string
Note: recognizes CR, LF, BS, and bell
------------------------------------------------------
INT 10 - VIDEO - LOAD LCD CHARACTER FONT (CONVERTIBLE)
AH = 14h
AL = 0 load user-specified font
ES:DI -> character font
BH = number of bytes per character
BL = 0: load main font (block 0)
1: load alternate font (block 1)
CX = number of characters to store
DX = character offset into RAM font area
AL = 1 load system rom default font
BL = 0: load main font (block 0)
1: load alternate font (block 1)
AL = 2 set mapping of LCD high intensity attributes
BL = 0: ignore high intensity attribute
1: map high intensity to underscore
2: map high intensity to reverse video
3: map high intensity to selected alternate font
------------------------------------------------------
INT 10 - VIDEO - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE)
AH = 15h
Return: AX = alternate display adapter type
ES:DI -> parameter table
word 0: monitor model number
1: vertical pixels per meter
2: horizontal pixels per meter
3: total vertical pixels
4: total horizontal pixels
5: horizontal pixel separation in micrometers
6: vertical pixel separation in micrometers
------------------------------------------------------
INT 10 - VIDEO - DISPLAY COMBINATION (PS,VGA/MCGA)
AH = 1Ah
AL = 0: read display combination code
Return: BL = active display code
BH = alternate display code
1: set display combination code
BL = active display code
BH = alternate display code
Return: AL = 1Ah if function was supported
Display combination codes:
00h no display
01h monochrome adapter w/ monochrome display
02h CGA w/ color display
03h reserved
04h EGA w/ color display
05h EGA w/ monochrome display
06h PGA w/ color display
07h VGA w/ monochrome analog display
08h VGA w/ color analog display
09h reserved
0Ah MCGA w/ digital color display
0Bh MCGA w/ monochrome analog display
0Ch MCGA w/ color analog display
FFh unknown display type
------------------------------------------------------
INT 10 - VIDEO - FUNCTIONALITY/STATE INFORMATION (PS,VGA/MCGA)
AH = 1Bh
BX = implementation type
= 0000h return funtionality/state information
ES:DI -> 64 byte buffer
Return: AL = 1Bh if function supported
ES:DI buffer filled
00h address of static funtionality table
04h video mode in effect
05h number of columns
07h length of regen buffer in bytes
09h starting address of regen buffer
0Bh cursor position for page 0
0Dh cursor position for page 1
0Fh cursor position for page 2
11h cursor position for page 3
13h cursor position for page 4
15h cursor position for page 5
17h cursor position for page 6
19h cursor position for page 7
1Bh cursor type
1Dh active display page
1Eh CRTC port address
20h current setting of register (3?8)
21h current setting of register (3?9)
22h number of rows
23h bytes/character
25h DCC of active display
26h DCC of alternate display
27h number of colors supported in current mode
29h number of pages supported in current mode
2Ah number of scan lines active
(0,1,2,3) = (200,350,400,480)
2Bh primary character block
2Ch secondary character block
2Dh Miscellaneous flags
bit 0 all modes on all displays on
1 gray summing on
2 monochrome display attached
3 default palette loading disabled
4 cursor emulation enabled
5 0 = intensity; 1 = blinking
6 reserved
7 reserved
2Eh to 30h reserved
31h video memory available
00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K
32h save pointer state flags
bit 0 512 character set active
1 dynamic save area present
2 alpha font override active
3 graphics font override active
4 palette override active
5 DCC override active
6 reserved
7 reserved
33h to 3Fh reserved
State Functionality Table format (16 bytes)
00h modes supported #1
bit 0 to bit 7 = 1 modes 0,1,2,3,4,5,6 supported
01h modes supported #2
bit 0 to bit 7 = 1 modes 8,9,A,B,C,D,E,F supported
02h modes supported #3
bit 0 to bit 3 = 1 modes 10,11,12,13 supported
bit 4 to bit 7 reserved
03h to 06h reserved
07h scan lines supported
bit 0 to bit 2 = 1 if scan lines 200,350,400 supported
08h total number of character blocks available in text modes
09h maximum number of active character blocks in text modes
0Ah miscellaneous function flags #1
bit 0 all modes on all displays function supported
1 gray summing function supported
2 character font loading function supported
3 default palette loading enable/disable supported
4 cursor emulation function supported
5 EGA palette present
6 color palette present
7 color paging function supported
0Bh miscellaneous function flags #2
bit 0 light pen supported
1 save/restore state function 1Ch supported
2 intensity blinking function supported
3 Display Combination Code supported
4-7 reserved
0Ch to 0Dh reserved
0Eh Save pointer function flags
bit 0 512 character set supported
1 dynamic save area supported
2 alpha font override supported
3 graphics font override supported
4 palette override supported
5 DCC extension supported
6 reserved
7 reserved
0Fh reserved
------------------------------------------------------
INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
AH = 1Ch
CX = requested states
bit 0 video hardware
1 BIOS data areas
2 color registers and DAC state
3-15 reserved
AL = 0: return state buffer size
Return: BX = number of 64 byte blocks needed
1: save video state
ES:BX = buffer address
2: restore video state
ES:BX = buffer address of previously saved state
Return: AL = 1Ch if function supported
------------------------------------------------------
INT 10 - VIDEO - SET GRAPHICS MODE (Hercules GRAFIX)
AH = 40h
------------------------------------------------------
INT 10 - VIDEO - SET TEXT MODE (Hercules GRAFIX)
AH = 41h
------------------------------------------------------
INT 10 - VIDEO - CLEAR CURRENT PAGE (Hercules GRAFIX)
AH = 42h
------------------------------------------------------
INT 10 - VIDEO - SELECT DRAWING PAGE (Hercules GRAFIX)
AH = 43h
AL = Page number (0,1)
------------------------------------------------------
INT 10 - VIDEO - SELECT DRAWING FUNCTION (Hercules GRAFIX)
AH = 44h
AL = 0 : Clear pixels
AL = 1 : Set pixels
AL = 2 : Invert pixels
------------------------------------------------------
INT 10 - VIDEO - SELECT PAGE TO DISPLAY (Hercules GRAFIX)
AH = 45h
AL = Page number (0,1)
------------------------------------------------------
INT 10 - VIDEO - DRAW ONE PIXEL (Hercules GRAFIX)
AH = 46h
DI = x (0-720)
BP = y (0-347)
Note: Function 44h determines operation and function 43h which page to use.
------------------------------------------------------
INT 10 - VIDEO - FIND PIXEL VALUE (Hercules GRAFIX)
AH = 47h
DI = x (0-720)
BP = y (0-347)
Return: AL = 0 Pixel clear
AL = 1 Pixel set
Note: Function 43h specifies page that is used.
------------------------------------------------------
INT 10 - VIDEO - MOVE TO POINT (Hercules GRAFIX)
AH = 48h
DI = x (0-720)
BP = y (0-347)
------------------------------------------------------
INT 10 - VIDEO - DRAW TO POINT (Hercules GRAFIX)
AH = 49h
DI = x (0-720)
BP = y (0-347)
Note: Function 48h or 49h specify first point, 44h operation and 43h page
to use.
------------------------------------------------------
INT 10 - VIDEO - BLOCK FILL (Hercules GRAFIX)
AH = 4Ah
------------------------------------------------------
INT 10 - VIDEO - DISPLAY CHARACTER (Hercules GRAFIX)
AH = 4Bh
AL = Character to display
DI = x (0-720)
BP = y (0-347)
Note: Unlike the other BIOS character functions character position is
specified in pixels rather than rows and columns.
------------------------------------------------------
INT 10 - VIDEO - DRAW ARC (Hercules GRAFIX)
AH = 4Ch
------------------------------------------------------
INT 10 - VIDEO - DRAW CIRCLE (Hercules GRAFIX)
AH = 4Dh
------------------------------------------------------
INT 10 - VIDEO - FILL AREA (Hercules GRAFIX)
AH = 4Eh
------------------------------------------------------
INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
AX = 6A00h
BX = 0
CX = 0
DX = buffer length (may be 0)
ES:DI = address of buffer
Return: BX = number of bytes stored in buffer
CX = bytes required for all descriptions (0 if no DGIS)
Note: buffer contains descriptions and addresses of DGIS-compatible display(s)
and printer(s)
------------------------------------------------------
INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
AX = 6A01h
CX = 0
ES:DI = address of device to send INT 10 output to
Return: CX = 0 output could not be redirected
else INT 10h output now routed to requested display
------------------------------------------------------
INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
AX = 6A02h
ES:DI = 0:0
Return: ES:DI = 0:0 if current display is non-DGIS
else address of the current DGIS INT 10 display
------------------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE (VEGA EXTENDED EGA/VGA)
AX = 6F05h
BL = mode (graphics mode if graphics resolution listed)
text pixel graphic color disp scrn system
resol box resoltn page addr
62h = 800x600 16 VEGA Extended EGA
65h = 1024x768 16 VEGA Extended EGA
66h = 640x400 256 VEGA Extended VGA
67h = 640x480 256 VEGA Extended VGA
68h = 720x540 256 VEGA Extended VGA
69h = 800x600 256 VEGA Extended VGA
------------------------------------------------------
INT 10 - VIDEO - GET VIDEO RAM ADDRESS (TANDY 1000)
AH = 70h
Return: AX = segment address of the following
[BX] = offset address of green plane
[CX] = segment address of green plane
[DX] = segment address of red/blue plane
(red offset = 0, blue offset = 4000)
------------------------------------------------------
INT 10 - VIDEO - GET INCRAM ADDRESSES (TANDY 1000)
AH = 71h
Return: AX = segment address of the following
[BX] = segment address of INCRAM
[CX] = offset address of INCRAM
------------------------------------------------------
INT 10 - VIDEO - SCROLL SCREEN RIGHT (TANDY 1000)
AH = 72h
AL = number of columns blanked at left of window
0 = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
-----------------------------------------------------
INT 10 - VIDEO - SCROLL SCREEN LEFT (TANDY 1000)
AH = 73h
AL = number of columns blanked at right of window
0 = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
------------------------------------------------------
INT 10 - VIDEO (DESQview) - SET ???
AH = 80h
DX = 4456h ('DV')
ES:DI -> FAR subroutine to be called on???
Return: DS = segment of DESQview data structure for video buffer
Note: this function is probably meant for internal use only, due to the magic
value required in DX
the subroutine seems to be called when the DESQview menu is accessed
on entry, AL = 3 or 4
------------------------------------------------------
INT 10 - VIDEO (DESQview) - GET ???
AH = 81h
DX = 4456h ('DV')
Return: ES = segment of DESQview data structure for video buffer
BYTE ES:[0] = current window number
Note: this function is probably meant for internal use only, due to the magic
value required in DX
------------------------------------------------------
INT 10 - VIDEO (DESQview) - GET CURRENT WINDOW INFO
AH = 82h
DX = 4456h ('DV')
Return: DS = segment in DESQview for data structure
in DV 2.00,
BYTE DS:[0] = window number
WORD DS:[1] = segment of other data structure
WORD DS:[3] = segment of window's object handle
ES = segment of DESQview data structure for video buffer
AL = current window number
AH = ???
BL = direct screen writes
0 program does not do direct writes
1 program does direct writes, so shadow buffer not usable
BH = ???
CL = current video mode
CH = ???
Note: this function is probably meant for internal use only, due to the magic
value required in DX
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ ONE REGISTER
AH = F0h
BL = register number
DX = group index
Pointer/data chips
00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
08h Sequencer (5 registers) 3C4h
10h Graphics Controller (9 registers) 3CEh
18h Attribute Controller (20 registers) 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color modes)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
Return: BL = data
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - WRITE ONE REGISTER
AH = F1h
DX = group index (see function F0h)
BL = register number
BH = value to write
Return: BL = data
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ REGISTER RANGE
AH = F2h
CH = starting register number
CL = Number of registers (>1)
DX = group index
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
ES:BX -> buffer, CL bytes
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER RANGE
AH = F3h
CH = starting register
CL = number of registers (>1)
DX = group index
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
ES:BX -> buffer, CL bytes
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
AH = F4h
CX = number of registers (>1)
ES:BX -> table of records in this format:
bytes 1-2 group index
Pointer/data chips
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
byte 3 register number (0 for single registers)
byte 4 register value
------------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
AH = F5h
CX = number of registers (>1)
ES:BX -> table of records in this format:
bytes 1-2 port number
Pointer/data chips
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
byte 3 register number (0 for single registers)
byte 4 register value
-----------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - REVERT TO DEFAULT REGISTERS
AH = F6h
-----------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - DEFINE DEFAULT REGISTER TABLE
AH = F7h
DX = port number
Pointer/data chips
00h CRTC (3B4h mono modes, 3D4h color modes)
08h Sequencer 3C4h
10h Graphics Controller 3CEh
18h Attribute Controller 3C0h
Single registers
20h Miscellaneous Output register 3C2h
28h Feature Control register (3BAh mono modes, 3DAh color modes)
30h Graphics 1 Position register 3CCh
38h Graphics 2 Position register 3CAh
ES:BX address of table of one byte entries, one byte
to be written to each register
-----------------------------------------------------
INT 10 - Microsoft Mouse driver EGA support - INTERROGATE DRIVER
AH = FAh
BX = 0
Return: BX = 0 if mouse driver not present
ES:BX -> EGA Register Interface version number, if present:
byte 1 = major release number
byte 2 = minor release number
-----------------------------------------------------
INT 10 - VIDEO (TopView) - GET VIDEO BUFFER
AH = FEh
ES:DI = segment:offset of assumed video buffer
Return: ES:DI = segment:offset of actual video buffer
------------------------------------------------------
INT 10 - VIDEO (TopView) - UPDATE REAL SCREEN FROM VIDEO BUFFER
AH = FFh
CX = number of sequential characters that have been modified
DI = offset of first character that has been modified
ES = segment of video buffer
Note: avoid CX=0
------------------------------------------------------
INT 11 - EQUIPMENT DETERMINATION
Return: AX = equipment flag bits
0 diskette installed
1 8087 present
2 mouse installed (PS2 only)
2,3 number of 16K banks of RAM on motherboard (PC only)
number of 64K banks of RAM on motherboard (XT only)
always = 11 on AT and above
4,5 initial video mode
01 = 40x25 color
10 = 80x25 color
11 = 80X25 IBM monochrome
6,7 number of diskette drives (only if bit 0 = 1)
00 = 1, 01 = 2, 10 = 3, 11 = 4
8 0 = dma present, 1 = no dma on system (PCjr???)
9-11 number of RS232 cards
12 game I/O attached
13 serial printer installed (PCjr)
internal modem installed (PC/Convertible)
14,15 number of printers
------------------------------------------------------
INT 12 - MEMORY SIZE
Return: AX = number of contiguous 1K blocks of memory
------------------------------------------------------
INT 13 - DISK - RESET DISK SYSTEM
AH = 00h
DL = drive (if bit 7 is set both hard disks and floppy disks reset)
------------------------------------------------------
INT 13 - DISK - STATUS OF DISK SYSTEM
AH = 01h
DL = drive (hard disk if bit 7 set)
Return: AL = status
00h = successful completion
01h = bad command
02h = address mark not found
03h = write attempted on write-protected disk
04h = sector not found
05h = reset failed (hard disk)
06h = diskette changed
07h = parameter act. failed (hard disk)
08h = DMA overrun
09h = DMA across 64K boundary
0Ah = bad sector detected (hard disk)
0Bh = bad track detected (hard disk)
0Ch = unsupported track
0Dh = invalid number of sectors on format (hard disk)
0Eh = control data address mark detected (hard disk)
0Fh = DMA arbitration error (hard disk)
10h = bad CRC/ECC
11h = data ECC corrected
20h = controller failure
40h = seek failed
80h = time out
AAh = drive not ready (hard disk)
BBh = undefined error (hard disk)
CCh = write fault (hard disk)
E0h = status register error (hard disk)
FFh = sense operation failed (hard disk)
------------------------------------------------------
INT 13 - DISK - READ SECTORS INTO MEMORY
AH = 02h
AL = number of sectors to read
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
ES:BX = address of buffer to fill
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors read
------------------------------------------------------
INT 13 - DISK - WRITE SECTORS FROM MEMORY
AH = 03h
AL = number of sectors to write
CH = track (if hard disk, bits 8,9 in high bits of CL)
CL = sector (if hard disk, high two bits are high bits of track #)
DH = head
DL = drive
ES:BX = address of buffer
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors written
------------------------------------------------------
INT 13 - DISK - VERIFY SECTORS
AH = 04h
AL = number of sectors to verify
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors verified
------------------------------------------------------
INT 13 - FLOPPY - FORMAT TRACK
AH = 05h
AL = number of sectors to create on this track
CH = track
CL = sector
DH = head
DL = drive
ES:BX -> array of 4-byte address fields
byte 1 = track
byte 2 = head
byte 3 = sector
byte 4 = bytes/sector 0=128, 1=256, 2=512, 3=1024
Return: CF set if error occurred
AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - FORMAT TRACK
AH = 05h
AL = interleave value (XT only)
ES:BX = 512-byte format buffer
the first 2*(sectors/track) bytes contain F,N for each sector
F = 00 for good sector, 80h for bad sector
N = sector number
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
AH = 06h
AL = interleave value
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
AH = 07h
AL = interleave value (XT only)
ES:BX = 512-byte format buffer, see AH=6 above
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
AH = 08h
DL = drive number
Return: CF set on error
AH = status code (see AH=1 above)
BL = drive type (see AH=17h below) (AT/PS2 floppies only)
DL = number of consecutive acknowledging drives
DH = maximum value for head number
CL = maximum value fo sector number
CH = maximum value for cylinder number
ES:DI = drive parameter table
------------------------------------------------------
INT 13 - FIXED DISK - INITIALIZE TWO FIXED DISK BASE TABLES (XT,AT,XT286,PS)
AH = 09h
Return: CF set on error
AH = status code (see AH=1 above)
INT 41h points to table for drive 0
INT 46h points to table for drive 1
------------------------------------------------------
INT 13 - FIXED DISK - READ LONG (XT,AT,XT286,PS)
AH = 0Ah
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX -> buffer to fill
Return: CF set on error
AH = status code (see AH=1 above)
AL = number of sectors read
Note: used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - WRITE LONG (XT,AT,XT286,PS)
AH = 0Bh
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX -> buffer containing data
Return: CF set on error
AH = status code (see AH=1 above)
AL = number of sectors written
Note: used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - SEEK TO CYLINDER (XT,AT,XT286,PS)
AH = 0Ch
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
Return: CF set on error
AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - ALTERNATE DISK RESET (XT,AT,XT286,PS)
AH = 0Dh
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - READ SECTOR BUFFER (XT,PS)
AH = 0Eh
ES:BX -> buffer
Return: CF set on error
AH = status code (see AH=1 above)
Notes: transfers controller's sector buffer. No data is read from the drive
used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - WRITE SECTOR BUFFER (XT,PS)
AH = 0Fh
ES:BX -> buffer
Return: CF set on error
AH = status code (see AH=1 above)
Notes: should be called before formatting to initialize the controller's
sector buffer.
used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - TEST FOR DRIVE READY (XT,AT,XT286,PS)
AH = 10h
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - RECALIBRATE DRIVE (XT,AT,XT286,PS)
AH = 11h
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
------------------------------------------------------
INT 13 - FIXED DISK - CONTROLER RAM DIAGNOSTIC (XT,PS)
AH = 12h
Return: CF set on error
AH = status code (see AH=1 above)
Note: used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - DRIVE DIAGNOSTIC (XT,PS)
AH = 13h
Return: CF set on error
AH = status code (see AH=1 above)
Note: used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - FIXED DISK - CONTROLLER DIAGNOSTICS (XT,AT,XT286,PS)
AH = 14h
Return: CF set on error
AH = status code (see AH=1 above)
Note: used for diagnostics only on PS/2 systems
------------------------------------------------------
INT 13 - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
AH = 15h
DL = drive ID
Return: CF set on error
AH = disk type
0 = disk not there
1 = floppy, no change detection present
2 = floppy with change detection
3 = fixed disk
CX:DX = number of 512-byte sectors
------------------------------------------------------
INT 13 - FLOPPY DISK - CHANGE OF DISK STATUS (AT,XT2,XT286,CONV,PS)
AH = 16h
DL = drive to check
Return: AH = disk change status
0 = no disk change
6 = disk changed
------------------------------------------------------
INT 13 - DISK - SET TYPE (AT,XT2,XT286,CONV,PS)
AH = 17h
AL = disk type
00h = no disk
01h = regular disk in regular drive
02h = regular disk in high-capacity drive
03h = high-capacity disk in high-capacity drive
04h = 720K disk in 720K drive
DL = drive ID
------------------------------------------------------
INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
AH = 18h
DL = drive number
CH = lower 8 bits of number of tracks
CL = sectors per track (bits 0-5)
top 2 bits of number of tracks (bits 6,7)
Return: AH = 00h requested combination supported
01h function not available
0Ch not supported or drive type unknown
80h there is no disk in the drive
ES:DI -> 11-byte parameter table
------------------------------------------------------
INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
AH = 19h
DL = drive
Return: CF set on error
AH = status (see AH=1 above)
------------------------------------------------------
INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
AH = 1Ah
AL = defect table count
CL = format modifiers
bit 0: ignore primary defect map
bit 1: ignore secondary defect map
bit 2: update secondary defect map
bit 3: perform surface analysis
bit 4: generate periodic interrupt
DL = drive
ES:BX -> defect table
Return: CF set on error
AH = status (see AH=1 above)
Note: if periodic interrupt selected, INT 15h/AH=0Fh is called after each
cylinder is formatted
------------------------------------------------------
INT 14 - SERIAL I/O - INITIALIZE USART
AH = 00h
AL = initializing parameters
7 - 6 - 5 4 - 3 2 1 - 0
-BAUD RATE- PARITY STOP WORD
BITS LENGTH
000 110 bd 00 none 0-1 10 - 7
001 150 bd 01 odd 1-2 11 - 8
010 300 bd 11 even
011 600 bd
100 1200 bd
101 2400 bd
110 4800 bd
111 9600 bd (4800 on PCjr)
DX = port number (0-3)
Return: AH = RS-232 status code bits
0: data ready
1: overrun error
2: parity error
3: framing error
4: break detected
5: transmission buffer register empty
6: transmission shift register empty
7: time out--if set, other bits invalid
AL = modem status bits
0: delta Clear-To-Send
1: delta Data-Set-Ready
2: trailing edge of ring detected
3: change in receive line signal detected
4: Clear-To-Send
5: Data-Set-Ready
6: ring detected
7: receive line signal detected
------------------------------------------------------
INT 14 - SERIAL I/O - TRANSMIT CHARACTER
AH = 01h
AL = character
DX = port number (0-3)
Return: AX = port status (see AH = 00h above)
------------------------------------------------------
INT 14 - SERIAL I/O - RECEIVE CHARACTER
AH = 02h
DX = port number (0-3)
Return: AL = character received
AH = RS-232 status code (see AH = 00h above)
------------------------------------------------------
INT 14 - SERIAL I/O - GET USART STATUS
AH = 03h
DX = port number (0-3)
Return: AX = port status code (see AH = 00h above)
------------------------------------------------------
INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
AH = 04h
AL = break status
0 if break
1 if no break
BH = parity
0 no parity
1 odd parity
2 even parity
3 stick parity odd
4 stick parity even
BL = number of stop bits
0: one stop bit
1: two stop bits (1.5 if 5 bit word length)
CH = word length
0: 5 bits
1: 6 bits
2: 7 bits
3: 8 bits
CL = baud rate
0: 110
1: 150
2: 300
3: 600
4: 1200
5: 2400
6: 4800
7: 9600
8: 19200
DX = port number
Return: AX = port status code (see AH = 00h above)
------------------------------------------------------
INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
AH = 05h
AL = 0 read modem control register
Return: BL = modem control register (see below)
AH = status
AL = 1 write modem control register
BL = modem control register
bit 0: data terminal ready
bit 1: request to send
bit 2: OUT1
bit 3: OUT2
bit 4: LOOP
bits 5-7 reserved
Return: AX = status
DX = port number
------------------------------------------------------
INT 15 - CASSETTE - TURN ON MOTOR (PC,Jr)
AH = 00h
Return: CF set on error, AH = 86h if no cassette present
------------------------------------------------------
INT 15 - CASSETTE - TURN OFF MOTOR (PC,Jr)
AH = 01h
Return: CF set on error, AH = 86h if no cassette present
------------------------------------------------------
INT 15 - CASSETTE - READ DATA BLOCKS (PC,Jr)
AH = 02h
CX = count of bytes
ES:BX -> data area
Return: CF set on error
AH = status
01h CRC error
02h bad tape signals
04h no data
80h invalid command
86h no cassette present
DX = count of bytes read
ES:BX = pointer past last byte read
------------------------------------------------------
INT 15 - CASSETTE - WRITE DATA BLOCKS (PC,Jr)
AH = 03h
CX = count of bytes to write
ES:BX -> data area
Return: CF set on error
AH = status (see above)
ES:BX = pointer past last byte written
CX = 0
------------------------------------------------------
Int 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
AH = 0Fh
AL = phase code
00h reserved
01h surface analysis
02h formatting
Return: CF = clear if formatting should continue, set if it should terminate
Note: called during ESDI drive formatting after each cylinder is completed
------------------------------------------------------
INT 15 - TopView - "PAUSE" - GIVE UP CPU TIME
AX = 1000h
Return: after other processes run
------------------------------------------------------
INT 15 - TopView - "GETMEM" - ALLOCATE "SYSTEM" MEMORY
AX = 1001h
BX = number of bytes to allocate
Return: ES:DI -> block of memory
------------------------------------------------------
INT 15 - TopView - "PUTMEM" - DEALLOCATE "SYSTEM" MEMORY
AX = 1002h
ES:DI -> previously allocated block
Return: block freed
------------------------------------------------------
INT 15 - TopView - "PRINTC" - DISPLAY CHARACTER/ATTRIBUTE ON SCREEN
AX = 1003h
BH = attribute
BL = character
DX = segment of object handle for window
Note: BX=0 does not display anything, it only positions the hardware cursor
------------------------------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.0x
AH = 10h
AL = 04h thru 12h
Return: pops up "Programming error" window in DV 2.0x
------------------------------------------------------
INT 15 - TopView - "GETBIT" - DEFINE A 2ND-LEVEL INTERRUPT HANDLER
AX = 1013h
ES:DI -> FAR service routine
Return: BX = bit mask indicating which bit was allocated
0 if no more bits available
------------------------------------------------------
INT 15 - TopView - "FREEBIT" - UNDEFINE A 2ND-LEVEL INTERRUPT HANDLER
AX = 1014h
BX = bit mask from INT 15/AX=1013h
------------------------------------------------------
INT 15 - TopView - "SETBIT" - SCHEDULE ONE OR MORE 2ND-LEVEL INTERRUPTS
AX = 1015h
BX = bit mask for interrupts to post
Return: indicated routines will be called at next ???
------------------------------------------------------
INT 15 - TopView - "ISOBJ" - VERIFY OBJECT HANDLE
AX = 1016h
ES:DI = possible object handle
Return: BX = -1 if ES:DI is a valid object handle
0 if ES:DI is not
------------------------------------------------------
INT 15 - TopView - UNIMPLEMENTED IN DV 2.00
AX = 1017h
--
{harvard,uunet,ucbvax}!b.gp.cs.cmu.edu!ralf -=-=- AT&T: (412)268-3053 (school)
ARPA: RALF@B.GP.CS.CMU.EDU |"Tolerance means excusing the mistakes others make.
FIDO: Ralf Brown at 129/31 | Tact means not noticing them." --Arthur Schnitzler
BITnet: RALF%B.GP.CS.CMU.EDU@CMUCCVMA -=-=- DISCLAIMER? I claimed something?