[comp.sys.ibm.pc] Interrupt list, part 1 of 8

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?