[comp.sys.ibm.pc] Interrupt list 1 of 3

ralf@B.GP.CS.CMU.EDU (Ralf Brown) (12/06/87)

The interrupt list is now too large to send in a single message even when 
ARCed.  Strip the headers and trailers off of each of the three parts of the
list, concatenate, and download in ASCII mode.  You should get a 136,177
byte file containing 3276 lines.

The "cut" lines all start with "*-*-*", to avoid confusion with the
separator lines in the file.

*-*-*----------------cut here for part 1 of 3-------------------*-*-*
While you may want to remove the following header from this file for
your own use, please do not redistribute the file without it, so that
credit may be given where credit is due.
-----------------------------------------------------------
Last edited 12/5/87

This list is the result of the time and effort of a large number of people, 
among them
     Janet Jack        January 1985  (original list)
     J. Weaver Jr.     January 1985
     John Cooper       February 1985
     Skip Gilbrech     February 1985
     Bob Jack
     Jim Kyle          April 1985
     John Ruschmeyer   <ihnp4!vax135!petsd!moncol!john> August 1985
     Bill Frolik       <ihnp4!hplabs!hp-pcd!bill>       August 1985
     Ross M. Greenberg <greenber%timeinc.uucp@brl.arpa> August 1985

     Dan Lanciani  <ddl@harvard.*>   TANDY function calls
     Ralf Brown    <ralf@cs.cmu.edu> INT 24h and DOS func 59h error codes
     Dan Davison   <dd@lanl.gov>     DOS 3.3 function calls      11/87
     Bill White    <wwhite@teknowledge-vaxc.arpa> DOS 3.3        11/87
     Richard Hargrove <killer!richardh@harvard.harvard.edu> EGA  11/87
     Vincent Broman <broman@bugs.nosc.mil> Cordata BIOS/Minix    12/87

Information on the INT 10h functions supported by the EGA BIOS was derived
from the article "Graphic Enhancement" found in the April 1985 _PC Tech
Journal_, pages 58ff., and is marked with the string {ega}. jrh.

Information on functions unique to the Portable PC and the Convertible was
derived from a similar list compiled by David E. Powell, and added by
Ralf Brown on 11/14/87.

Information on LIM EMS 3.2 functions was derived from _Advanced_MSDOS_, by
Ray Duncan. Added by Ralf Brown 11/19/87.

Information on LIM EMS 4.0 functions was derived from the transcription of
the specification by Dick Flanagan and Ben Lomond.  Added by Ralf Brown,
11/20/87
-----------------------------------------------------------
If you know any information which is not in this list, or which is
incorrect, please let me know!

               Ralf Brown
         Arpa: ralf@cs.cmu.edu
         UUCP: {uunet,ucbvax,harvard}!cs.cmu.edu!ralf
         BIT:  ralf%cs.cmu.edu@cmuccvma
         FIDO: Ralf Brown at 1:129/31  (more subject to change than the others)
-----------------------------------------------------------
INT 0 - DIVIDE ERROR
   Automatically called at end of DIV or IDIV operation that results in
   error.  Normally set by DOS to display an error message and abort the
   program.
-----------------------------------------------------------
INT 1 - 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.  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 2 - NMI (Non Maskable Interrupt)
   Generated by NMI signal in hardware. Used in IBM for memory parity
   error trapping.
-----------------------------------------------------------
INT 3 - 1-BYTE INTERRUPT
   Generated by opcode 0CCh. Similar to 8080's RST instruction.  Generally
   used to set breakpoints for DEBUG.
-----------------------------------------------------------
INT 4 - Overflow (internal interrupt)
   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 when
   program is ready to handle them rather than immediately when they occur.
-----------------------------------------------------------
INT 5 - 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 5 - BOUND check failed (80286 internal interrupt)
-----------------------------------------------------------
INT 6 - Undefined Opcode (80286 internal interrupt)
-----------------------------------------------------------
INT 7 - No Math Unit Available (80286 protected-mode internal)
-----------------------------------------------------------
INT 8 thru 0F - Vectored Hardware Lines
   In IBM, these 8 interrupts are generated in response to IRQ 0 through
   IRQ 7 (if enabled via port 21h).
                                         [Tandy 1000]
        IRQ0  -  timer interrupt
        IRQ1  -  keyboard interrupt
        IRQ2  -  EGA vertical retrace    [fixed disk]
        IRQ3  -  serial port 2 (com2:)
        IRQ4  -  serial port 1 (com1:)
        IRQ5  -  fixed disk              [60 Hz ram refresh]
                 (LPT2 on PC/AT)
        IRQ6  -  diskette interrupt
        IRQ7  -  PPI interrupt (lpt1:, lpt2:)
-----------------------------------------------------------
INT 8 - Double Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 9 - Math Unit Protection Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 0A - Invalid Task State Segment (80286 protected-mode internal)
-----------------------------------------------------------
INT 0B - Not Present (80286 protected-mode internal)
-----------------------------------------------------------
INT 0C - Stack Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 0D - General Protection Violation (80286 internal interrupt)
         Called in real mode when an instruction attempts to access a word
         operand located at offset 0FFFFh
-----------------------------------------------------------
INT 0E - Page Fault (80386 native-mode internal)
-----------------------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE
        AH = 0
        AL = mode
            0 = 40x25 B&W
            1 = 40x25 color
            2 = 80x25 B&W
            3 = 80x25 color
            4 = 320x200 graphics, 4 color
            5 = 320x200 graphics, 4-tone gray scale
            6 = 640x200 graphics, B&W
            7 = monochrome
            8 = 160x200 graphics, 16 color (PCjr/Tandy 1000)
            9 = 320x200 graphics, 16 color(PCjr/Tandy 1000)
           0Ah = 640x200 graphics, 4 color (PCjr/Tandy 1000)
           0Bh = reserved (used internally by EGA BIOS)
           0Ch = reserved (used internally by EGA BIOS)
           0Dh = 320x200 graphics, 16 color (EGA)
           0Eh = 640x200 graphics, 16 color (EGA)
           0Fh = 640x350 graphics, monochrome (EGA)
           10h = 640x350 graphics, 4 or 16 color (EGA)
           11h = ???x??? graphics, ??? colors (VGA)
           12h = ???x??? graphics, ??? colors (VGA)
           13h = ???x??? graphics, ??? colors (VGA)
           30h = ???x??? (AT&T 6300)
           40h = 640x400 graphics (AT&T 6300)
           60h = 400 line graphics+80 column text (Corona/Cordata BIOS v4.10+)
           61h = 400 line graphics (Corona/Cordata BIOS v4.10+)
           74h = 640x400 graphics (Toshiba 3100)
-----------------------------------------------------------
INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
        AH = 1
        CH bits 5-6 = blink attribute
                     (00=normal, 01=invisible, 10 = slow, 11=fast)
        CH bits 0-4 = start line for cursor in char. cell
        CL bits 0-4 = end line for cursor in char. cell
-----------------------------------------------------------
INT 10 - VIDEO - SET CURSOR POSITION
        AH = 2
        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 = 3
        BH = page number
            0 in graphics modes
            0-3 in modes 2&3
            0-7 in modes 0&1
Return: DH = row
        DL = column
        CH = cursor start line
        CL = cursor end line
-----------------------------------------------------------
INT 10 - VIDEO - READ LIGHT PEN POSITION
        AH = 4
Return: AH = 0: light pen switch not activated
        AH = 1: light pen values in registers
            DH = row of current position
            DL = 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 = 5
        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 [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 = 6
        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 = 7
        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 = 8
        BH = display page
Return: AL = character
        AH = attribute of character (alpha modes)
-----------------------------------------------------------
INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
        AH = 9
        AL = character
        BH = display page - alpha mode
        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
-----------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
        AH = 0Ah
        AL = character
        BH = display page - alpha mode
        BL = color of character (graphics mode)
        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
-----------------------------------------------------------
INT 10 - VIDEO - SET COLOR PALETTE
        {ega} CGA-compatible modes
        AH = 0Bh
        BH = palette color ID
        BL = color to be used with color ID
        {ega} (graphics modes)
        if BH == 0, BL contains background and border colors (0-15)
        if BH == 1, BL contains palette being selected (0-1)
              (text modes)
        if BH == 0, BL contains border color (0-15) only
                    {ega} BL contains border color (0-15) and high-intensity
                    background color (16-31)
-----------------------------------------------------------
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
        DX = row (0 - 199)
        CX = column (0 - 319 in modes 4/5, 0 - 639 in mode 6)
        Note: video modes 4-6 only
-----------------------------------------------------------
INT 10 - VIDEO - READ DOT ON SCREEN
        AH = 0Dh
        CX = column (0 - 319 or 639)
        DX = row (0 - 199)
Return: AL = color read
-----------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
        AH = 0Eh
        AL = character
        BH = display page (alpha modes)
        BL = foreground color (graphics modes)
-----------------------------------------------------------
INT 10 - VIDEO - GET CURRENT VIDEO MODE
        AH = 0Fh
Return: AH = number of columns on screen
        AL = current video mode
        BH = current active display page
-----------------------------------------------------------
INT 10 - VIDEO - SET PALETTE REGISTERS (PCjr, TANDY 1000, {ega})
        AH = 10h
        AL = 0: set palette register
                BL = palette register to set
                BH = color value to store
        AL = 1: set border color register
                BH = color value to store
        AL = 2: set all palette registers
                ES:DX = pointer to 17-byte list
                        bytes 0-15 = values for palette regs. 0-15
                        byte 16 = value for border register
        {ega}
        AL = 3: toggle intensity/blinking bit
                BL = 0: enable intensity
                BL = 1: enable blink
-----------------------------------------------------------
INT 10 - Character generator functions {ega}
        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 = pointer to 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
        The routines called with AL=1x are designed to be called only
        immediately after a mode set and are similar to the routines called
        with AL=0x, 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 ***)
        The following functions are meant to be called only after a mode set:
        AL = 20h: user 8 by 8 graphics characters (INT 1FH)
            ES:BP = pointer to user table
        AL = 21h: user graphics characters
            ES:BP = pointer to 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 = 30h: return information
            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
            Returns: ES:BP = specified pointer value
                     CX    = bytes/character
                     DL    = character rows on screen
-----------------------------------------------------------
INT 10 - Alternate function select {ega}
        AH = 12h
        BL = 10h: return EGA information
             Returns:
             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
-----------------------------------------------------------
INT 10 - WRITE STRING (PC/AT ONLY)
        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 = pointer to start of string
-----------------------------------------------------------
INT 10 - LOAD LCD CHARACTER FONT (CONVERTIBLE ONLY)
        AH = 14h
        AL = 0 load user-specified font
            ES:DI = pointer to 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 revrese video
                 3: map high intensity to selected alternate font
-----------------------------------------------------------
INT 10 - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE ONLY)
        AH = 15h
Return: AX = alternate display adapter type
        ES:DI = pointer to 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 - 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 - 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 - 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 - 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 - Get Video Buffer (TopView/DESQview/TaskView)
        AH = FEh
        ES:DI = segment:offset of assumed video buffer
Return: ES:DI = segment:offset of actual video buffer
-----------------------------------------------------------
INT 10 - Update Video Buffer (TopView/DESQview/TaskView)
        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
-----------------------------------------------------------
INT 11 - EQUIPMENT DETERMINATION
Return: AX = "equipment flag" bits
            0       diskette installed
            1       8087 present
            2,3     always = 11
            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
            8       0 = dma present, 1= no dma on system (PCjr?)
            9,10,11 number of RS232 cards
            12      game I/O attached
            13      serial printer installed (IBM-PCjr)
                    internal modem installed (Convertible)
            14,15   number of printers
-----------------------------------------------------------
INT 12 - MEMORY SIZE
Return: AX = number of contiguous 1K blocks of memory
-----------------------------------------------------------
INT 13 - RESET DISK SYSTEM
        AH = 0
-----------------------------------------------------------
INT 13 - STATUS OF DISK SYSTEM
        AH = 1
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
            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)
-----------------------------------------------------------
INT 13 - READ SECTORS INTO MEMORY
        AH = 2
        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 - WRITES SECTORS FROM MEMORY
        AH = 3
        AL = number of sectors to write
        CH = track (for hard disk, bits 8,9 in high bits of CL)
        CL = sector
        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 - VERIFY SECTORS
        AH = 4
        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 - FORMAT DISKETTE TRACK (FLOPPY)
        AH = 5
        AL = number of sectors to create on this track
        CH = track
        CL = sector
        DH = head
        DL = drive
        ES:BX = pointer to 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 - FORMAT TRACK (HARD DISK)
        AH = 5
        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 - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT, PORTABLE ONLY)
        AH = 6
        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 - FORMAT DRIVE STARTING AT GIVEN TRACK (XT, PORTABLE ONLY)
        AH = 7
        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 - GET CURRENT DRIVE PARAMETERS (PC/XT and PC/AT)
        AH = 8
        DL = DRIVE NUMBER
Return: CF set on error
        AH = status code (see AH=1 above)
        DL = number of consecutive acknowledging drives
        DH = maximum value for head number
        CL = maximum value fo sector number
        CH = maximum value for cylinder number
-----------------------------------------------------------
INT 13 - INITIALIZE TWO FIXED DISK BASE TABLES (PC/AT ONLY)
        AH = 9
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 - READ LONG (PC/AT ONLY)
        AH = 0Ah
        DL = drive ID
        DH = head
        CH = cylinder (bits 8,9 in high bits of CL)
        CL = sector
        ES:BX = pointer to buffer to fill
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - WRITE LONG (PC/AT ONLY)
        AH = 0Bh
        DL = drive ID
        DH = head
        CH = cylinder (bits 8,9 in high bits of CL)
        CL = sector
        ES:BX = pointer to buffer containing data
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - SEEK TO CYLINDER (PC/XT and PC/AT)
        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 - ALTERNATE DISK RESET (PC/XT and PC/AT)
        AH = 0Dh
        DL = drive ID
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - READ SECTOR BUFFER (XT, PORTABLE ONLY)
        AH = 0Eh
        AL = number of sectors
        CH = cylinder (bits 8,9 in top two bits of CL)
        CL = sector number
        DH = head number
        DL = drive number
        ES:BX = pointer to buffer
Return: AL = number of sectors actually transferred
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - WITE SECTOR BUFFER (XT, PORTABLE ONLY)
        AH = 0Fh
        AL = number of sectors
        CH = cylinder (bits 8,9 in top two bits of CL)
        CL = sector number
        DH = head number
        DL = drive number
        ES:BX = pointer to buffer
Return: AL = number of sectors actually transferred
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - TEST FOR DRIVE READY (PC/AT ONLY)
        AH = 10h
        DL = drive ID
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - RECALIBRATE DRIVE (PC/XT and PC/AT)
        AH = 11h
        DL = drive ID
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - CONTROLER RAM DIAGNOSTIC (XT, PORTABLE ONLY)
        AH = 12h
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - DRIVE DIAGNOSTIC (XT, PORTABLE ONLY)
        AH = 13h
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY)
        AH = 14h
Return: CF set on error
        AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - GET DISK TYPE (PC/AT ONLY)
        AH = 15h
        DL = drive ID
Return: 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 - CHANGE OF DISK STATUS (PC/AT ONLY)
        AH = 16h
        DL = drive to check
Return: AH = disk change status
            0 = no disk change
            6 = disk changed
-----------------------------------------------------------
INT 13 - SET DISK TYPE (PC/AT ONLY)
        AH = 17h
        AL = disk type
            00 = no disk
            01 = regular disk in regular drive
            02 = regular disk in high-capacity drive
            03 = high-capacity disk in high-capacity drive
        DL = drive ID
-----------------------------------------------------------
INT 13 - SET MEDIA TYPE FOR FORMAT (PORTABLE? CONVERTIBLE? XT286?)
        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 druve type unknown
             80h  there is no disk in the drive
        ES:DI = pointer to 11-byte parameter table
-----------------------------------------------------------
INT 13 - PARK FIXED DISK HEADS (XT MODEL 286 ONLY)
        AH = 19h
-----------------------------------------------------------
INT 14 - SERIAL I/O - INITIALIZE USART
        AH = 0
        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
Return: AX port status--see below
-----------------------------------------------------------
INT 14 - SERIAL I/O - TRANSMIT CHARACTER
        AH = 1
        AL = character
        DX = port number
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, 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 - RECEIVE CHARACTER
        AH = 2
Return: AL = character received
        AH = RS-232 status code (see above)
-----------------------------------------------------------
INT 14 - SERIAL I/O - GET USART STATUS
        AH = 3
Return: AH = RS-232 status code (see above)
        AL = modem status code (see above)
-----------------------------------------------------------
INT 14 - EXTENDED INITIALIZE (CONVERTIBLE?)
        AH = 4
        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
Return: AL = modem status (see above)
        AH = line control status (see above)
-----------------------------------------------------------
INT 14 - EXTENDD COMMUNICATION PORT CONTROL (CONVERTIBLE?)
        AH = 5
        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: AH = status
-----------------------------------------------------------
INT 15 - TURN ON CASSETTE MOTOR
        AH = 0
-----------------------------------------------------------
INT 15 - TURN OFF CASSETTE MOTOR
        AH = 1
-----------------------------------------------------------
INT 15 - READ DATA BLOCKS FROM CASSETTE
        AH = 2
        CX = count of bytes
        ES:BX = pointer to data area
Return: CF set on error
        DX = count of bytes read
        ES:BX = pointer past last byte read
-----------------------------------------------------------
INT 15 - WRITE DATA BLOCKS TO CASSETTE
        AH = 3
        CX = count of bytes to write
        ES:BX = pointer to data area
Return: ES:BX = pointer past last byte written
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView - Give up CPU time
        AX = 1000h
Return: after other process(es) run
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView - Get Version
        AX = 1022h
        BX = 0
Return: BX nonzero, TopView or compat loaded
           TaskView returns BX = 0001h
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView commands
        AH = 11h
        AL = various
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView commands
        AH = 12h
        AL = various
-----------------------------------------------------------
INT 15 - PRINT.COM - Internal
        AH = 20h
        AL = subfunction
            00h ???
            01h ???
Note: sets or resets some flags which affect what PRINT does when it tries
to access the disk
-----------------------------------------------------------
INT 15 - READ/MODIFY PROFILES (CONVERTIBLE ONLY)
        AH = 40h
        AL = subfunction
            0: get system profile in CX and BX
            1: set system profile from CX and BX
            2: get internal modem profile in BX
            3: set internal modem profile from BX
-----------------------------------------------------------
INT 15 - WAIT ON EXTERNAL EVENT (CONVERTIBLE ONLY)
        AH = 41h
        AL = condition type
            bits 0-2: condition to wait for
                      0 = any external event
                      1 = compare and return if equal
                      2 = compare and return if not equal
                      3 = test and return if not zero
                      4 = test and return if zero
            bit 3:    reserved
            bit 4:    1=port address, 0=user byte
            bits 5-7: reserved
        BH = condition compare or mask value
        BL = timeout value times 55 milliseconds
            0 means no timeout
        DX = I/O port address if AL bit 4 set
        ES:DI = pointer to user byte if AL bit 4 clear
-----------------------------------------------------------
INT 15 - REQUEST SYSTEM POWER OFF (CONVERTIBLE ONLY)
        AH = 42h
        AL = 0 to use system profile
             1 to foce suspend regardless of system profile
-----------------------------------------------------------
INT 15 - READ SYSTEM STATUS (CONVERTIBLE ONLY)
        AH = 43h
Return: AL = status bits
            bit 0: LCD detached
            bit 1: reserved
            bit 2: RS232/parallel adapter powered on
            bit 3: internal modem powered on
            bit 4: power activated by alarm
            bit 5: standby power lost
            bit 6: extern apower in use
            bit 7: power low
-----------------------------------------------------------
INT 15 - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE ONLY)
        AH = 44h
        AL = 0 to power off
             1 to power on
-----------------------------------------------------------
INT 15 - KEYBOARD INTERCEPT (CONVERTIBLE ONLY)
        AH = 4Fh
        AL = scan code
        CF set
Return: AL = scan code
        CF set
(Called by INT 9 handler to translate scan codes)
-----------------------------------------------------------
INT 15 - DEVICE OPEN (PC/AT ONLY)
        AH = 80h
        BX = device ID
        CX = process type
-----------------------------------------------------------
INT 15 - DEVICE CLOSE (PC/AT ONLY)
        AH = 81h
        BX = device ID
        CX = process type
-----------------------------------------------------------
INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY)
        AH = 82h
        BX = device ID
-----------------------------------------------------------
INT 15 - EVENT WAIT (PC/AT ONLY)
        AH = 83h
        AL = SUBSERVICE
            0 = set interval
            1 = cancel
        ES:BX = pointer to event flag (bit 7 set when interval expires)
        CX,DX = number of microseconds to wait (only accurate to 977 us)
Return: CF set if function already busy
-----------------------------------------------------------
INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY)
        AH = 84h
        DX = 0
Return: AL = switch settings (bits 7-4)
-----------------------------------------------------------
INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY)
        AH = 84h
        DX = 1
Return: AX = A(x) value
        BX = A(y) value
        CX = B(x) value
        DX = B(y) value
-----------------------------------------------------------
INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY)
        AH = 85h  (called by keyboard decode routine)
Return: AL = 00 press
        AL = 01 release
-----------------------------------------------------------
INT 15 - WAIT (PC/AT AND AFTER)
        AH = 86h
        CX,DX = number of microseconds to wait (only accurate to 977 us)
-----------------------------------------------------------
INT 15 - EXTENDED MEMORY - BLOCK MOVE   (286/386 machines only)
        AH = 87h
        CX = number of words to move
        ES:SI = pointer to global descriptor table
               offset 0h  null descriptor
                      8h  uninitialized, will be made into GDT descriptor
                     10h  descriptor for source of move
                     18h  descriptor for destination of move
                     20h  uninitialized, used by BIOS
                     28h  uninitialized, will be made into SS descriptor
-----------------------------------------------------------
INT 15 - EXTENDED MEMORY - GET MEMORY SIZE  (286/386 machines only)
        AH = 88h
Return: AX = memory size
-----------------------------------------------------------
INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY)
        AH = 89h
        BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
        BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
        DS:SI = pointer to GDT for protected mode
               offset 0h  null descriptor
                      8h  GDT descriptor
                     10h  IDT descriptor
                     18h  DS
                     20h  ES
                     28h  SS
                     30h  CS
                     38h  uninitialized, used to build descriptor for BIOS CS
        CX = offset into protected-mode CS to jump to
Return: CF set on error
           AH = 0FFh  error enabling address line 20
-----------------------------------------------------------
INT 15 - DEVICE BUSY LOOP (PC/AT ONLY)
        AH = 90h
        AL = TYPE CODE
            00h: disk
            01h: diskette
            02h: keybaord
            80h: network (ES:BX = NCB)
            FCh: disk reset
            FDh: diskette motor start
            FEh: printer
Return: CF set if wait time satisfied
-----------------------------------------------------------
INT 15 - SET FLAG AND COMPLETE INTERRUPT
        AH = 91h
        AL = type code, see AH=90h above
-----------------------------------------------------------
INT 15 - GET SYSTEM CONFIGURATION (XT after 1/10/86, PC Conv, XT286, PS/2)
        AH = C0h
Return: CF = 1 if BIOS doesn't support call
        ES:BX pointer to ROM table
             byte_count  dw   ?   ; number of bytes following
             model       db   ?   ; PC=ff, XT=fe or fb, PCjr = fd, etc, etc
             submodel    db   ?   ; distingushes between AT and XT/286, etc.
             BIOS_rev    db   ?   ; 0 for first release, 1 for 2nd, etc.
             featbyte    db   ?   ; 80h = DMA channel 3 used by hd BIOS
                                  ; 40h = 2nd 8259 installed
                                  ; 20h = Real-Time Clock installed
                                  ; 10h = INT 15h called upon INT 9h
                                  ;  8h = wait for external event supported
                                  ;  4h = extended BIOS area allocated at 640K
                                  ;  2h = bus is Micro Channel instead of PC
                                  ;  1h   reserved
-----------------------------------------------------------
INT 15 - DESQview ? - ???
        AH = C2h
        AL = subfunction
            00h ???
               BH = ???
            01h set something to default values
            02h ???
               BH = ???
            03h ???
               BH = ???
            04h points to RET instruction
            05h same as 01h, but also takes input value in BH
               BH = ???
            06h ???
               BH = 01h or 02h stored, otherwise ignored
            07h ???
               ES:BX = pointer to ???
               Return: AL = 00h
Note: the values in BH for those functions that take it as input are stored
      in different locations for each subfunction
-----------------------------------------------------------
INT 15 - DESQview (TopView?) - ???
        AH = 0DEh
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY
        AH = 0
Return: AH = scan code
        AL = character
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR
        AH = 1
Return: ZF = 0 character in buffer
            AH = scan code
            AL = character
        ZF = 1 no character in buffer
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - GET SHIFT STATUS
        AH = 2
        AL = shift status bits
            0 = right shift key depressed
            1 = left shift key depressed
            2 = CTRL depressed
            3 = ALT depressed
            4 = SCROLL LOCK active
            5 = NUM LOCK active
            6 = CAPS LOCK active
            7 = INSERT state active
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - SET DELAYS (PCjr, AT, PS/2)
        AH = 3
        AL = 0: reset typematic (PCjr)
        AL = 1: increase initial delay (PCjr)
        AL = 2: increase continuing delay (PCjr)
        AL = 3: increase both delays (PCjr)
        AL = 4: turn off typematic (PCjr)
        AL = 5: Set typematic rate (AT or PS/2)
          BH = 00 - 03 for delays of 250ms, 500ms, 750ms, or 1s
          BL = 00 - 1F for typematic rates of 30cps down to 2cps
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - KEYCLICK (PCjr ONLY)
        AH = 4
        AL = 0: click off
        AL = 1: click on
-----------------------------------------------------------
INT 16 - KEYBOARD - Write to keyboard buffer (AT or PS/2 with enhanced kbd)
        AH = 5
        CH = scan code
        CL = character
Return: AL = 1 if buffer full
-----------------------------------------------------------
INT 16 - KEYBOARD - Get enhanced keystroke (AT or PS/2 with enhanced kbd)
        AH = 10h
Return: AH = scan code
        AL = character
-----------------------------------------------------------
INT 16 - KEYBOARD - Check enhanced keystroke (AT or PS/2 with enhanced kbd)
        AH = 11h
Return: ZF = 0 if keystroke available
            AH = scan code \ meaningless if ZF = 1
            AL = character /
        ZF = 1 if kbd buffer empty
-----------------------------------------------------------
INT 16 - KEYBOARD - Get enhanced shift flags (AT or PS/2 with enhanced kbd)
        AH = 12h
Return: AL (same as for AH=02)
           bit 7: Ins ON
           bit 6: CapsLock ON
           bit 5: NumLock ON
           bit 4: ScrollLock ON
           bit 3: Either ALT key down
           bit 2: Either CTRL key down
           bit 1: Left shift key down
           bit 0: Right shift key down
        AH
           bit 7: SysReq key down
           bit 6: CapsLock key down
           bit 5: NumLock key down
           bit 4: ScrollLock key down
           bit 3: Right Alt key down
           bit 2: Right Ctrl key down
           bit 1: Left Alt key down
           bit 0: Right Alt key down
-----------------------------------------------------------
INT 17 - OUTPUT CHARACTER TO PRINTER
        AH = 0
        AL = character
Return: AH = status bits
            0 = time out
            1 = unused
            2 = unused
            3 = I/O error
            4 = selected
            5 = out of paper
            6 = acknowledge
            7 = not busy
-----------------------------------------------------------
INT 17 - INITIALIZE PRINTER
        AH = 1
Return: AH = status (see above)
-----------------------------------------------------------
INT 17 - STATUS OF PRINTER
        AH = 2
Return: AH = status (see above)
-----------------------------------------------------------
INT 18 - TRANSFER TO ROM BASIC
   causes transfer to ROM-bases BASIC (IBM-PC)
   often reboots a compatible; often has no effect at all
-----------------------------------------------------------
INT 19 - DISK BOOT
   causes reboot of disk system (no memory test performed)
-----------------------------------------------------------
INT 1A - GET TIME OF DAY
        AH = 0
Return: CX = high (most signif.) portion of clock count
        DX = low (least signif.) portion of clock count
        AL = 0 if clock was read or written (via AH=0,1)
               within the current 24-hour period
               Otherwise, AL > 0
-----------------------------------------------------------
INT 1A - SET TIME OF DAY
        AH = 1
        CX = high (most signif.) portion of clock count
        DX = low (least signif.) portion of clock count
-----------------------------------------------------------
INT 1A - READ REAL TIME CLOCK (PC/AT ONLY)
        AH = 2
Return: CH = hours
        CL = minutes
        DH = seconds
-----------------------------------------------------------
INT 1A - SET REAL TIME CLOCK (PC/AT ONLY)
        AH = 3
        CH = hours
        CL = minutes
        DH = seconds
        DL = 1, if daylight savings; 0 if standard time
-----------------------------------------------------------
INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY)
        AH = 4
Return: DL = day
        DH = month
        CL = year
        CH = century (19 or 20)
-----------------------------------------------------------
INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY)
        AH = 5
        DL = day
        DH = month
        CL = year
        CH = century (19 or 20)
-----------------------------------------------------------
INT 1A - SET ALARM (PC/AT ONLY)
        AH = 6
        CH = hours
        CL = minutes
        DH = seconds
Return: CF set if alarm already set or clock inoperable
        INT 4Ah will be called when alarm goes off
-----------------------------------------------------------
INT 1A - RESET ALARM (PC/AT ONLY)
        AH = 7
-----------------------------------------------------------
INT 1A - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE ONLY)
        AH = 8
        CH = hours in BCD
        CL = minutes in BCD
        DH = seconds in BCD
-----------------------------------------------------------
INT 1A - READ RTC ALARM TIME AND STATUS (CONVERTIBLE ONLY)
        AH = 9
Return: CH = hours in BCD
        CL = minutes in BCD
        DH = seconds in BCD
        DL = alarm status
            0  alarm not enabled
            1  alarm enabled but will not power up system
            2  alarm will power up system
-----------------------------------------------------------
INT 1A - SET UP SOUND MULTIPLEXOR (PCjr ONLY)
        AH = 80h
        AL = 0 source is 8253 channel 2
             1 source is cassette input
             2 source is I/O channle "Audio IN"
             3 source is sound generator chip
-----------------------------------------------------------
INT 1B - CTRL-BREAK KEY
   This interrupt is called when the keyboard scanner of the IBM
   machines detects CTRL and BREAK pressed at the same time. It
   normally points to a short routine in DOS which sets the 
   Ctrl-C flag, thus invoking INT 23h the next time DOS checks
   for Ctrl-C.
-----------------------------------------------------------
INT 1C - CLOCK TICK
   This interrupt is called (in the IBM) at the end of each time-update
   operation by the real-time clock routines. It normally points to an
   IRET.
-----------------------------------------------------------
INT 1D -> 6845 Video Init tables
        table for modes 0 and 1   \
        table for modes 2 and 3    \ each table is 16 bytes long and
        table for modes 4,5, and 6 / contains values for 6845 registers
        table for mode 7          /
        4 words -- size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
        8 bytes -- number of columns in each mode
        8 bytes -- video controller mode byte for each mode
-----------------------------------------------------------
INT 1E -> Diskette Params (BASE TABLE)
Default at f000:efc7
        db      step rate & head unload times
        db      head load time & DMA
        db      motor off time
        db      sector size (0->128, 1->256, 2->512, 3->1024)
        db      last sector number (8 or 9 typical)
        db      inter-sector gap size on read/write (42 typical)
        db      data transfer length (255 typical)
        db      inter-sector gap size on format (80 typical)
        db      sector fill on format (f6 typical)
        db      head-settle time ms (typical 25, 2.10->15)
        db      motor start-up time (1/8 secs) (typical 4, 2.10->2)
-----------------------------------------------------------
INT 1F -> Pointer to Graphics Set 2--contains bitmaps for high 128 chars
-----------------------------------------------------------
INT 20 - Minix - SEND/RECEIVE MESSAGE
        AX = process ID of other process
        BX = pointer to message
        CX = 1 send
             2 receive
             3 send&receive
Note: the message contains the system call number (numbered as in V7 Unix(tm))
      and the call parameters
-----------------------------------------------------------
INT 20 - DOS - PROGRAM TERMINATION
returns to DOS
-----------------------------------------------------------
INT 21 - PROGRAM TERMINATION
        AH = 00h
Same action as INT 20; returns to DOS.
-----------------------------------------------------------
INT 21 - KEYBOARD INPUT
        AH = 01h
Return: AL = character read
-----------------------------------------------------------
INT 21 - DISPLAY OUTPUT
        AH = 02h
        DL = character
-----------------------------------------------------------
INT 21 - AUX Input
        AH = 03h
Return: AL = character read
-----------------------------------------------------------
INT 21 - AUX Output
        AH = 04h
        DL = character to send
-----------------------------------------------------------
INT 21 - PRINTER OUTPUT
        AH = 05h
        DL = character to print
-----------------------------------------------------------
INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT
        AH = 06h
        DL = character <> FFh
-----------------------------------------------------------
INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT
        AH = 06h
        DL = 0FFh
Return: ZF set   = no character
        ZF clear = character recieved
                  AL = character
Note: Character is echoed to STDOUT if received.
-----------------------------------------------------------
INT 21 - Direct STDIN Input, no echo
        Reg AH = 07h
Note: same as Function 6 for input but char not echoed
-----------------------------------------------------------
INT 21 - KEYBOARD INPUT - NO ECHO
        AH = 08h
Return: AL = character
-----------------------------------------------------------
INT 21 - PRINT STRING
        AH = 09h
        DS:DX = address of string terminated by "$"
-----------------------------------------------------------
INT 21 - BUFFERED KEYBOARD INPUT
        AH = 0Ah
        DS:DX = address of buffer
Note: first byte of buffer must contain maximum length
      on return the second byte contains actual length, third and
        subsequent bytes contain the input line
-----------------------------------------------------------
INT 21 - CHECK STANDARD INPUT STATUS
        AH = 0Bh
Return: AL = FFh if character available
             00h if no character
-----------------------------------------------------------
INT 21 - Clear Keyboard Buffer
        AH = 0Ch
        AL must be 1, 6, 7, 8, or 0Ah.
  Flushes all typeahead input, then executes function specified
by AL (by moving it to AH and repeating the INT 21 call).
  If AL contains a value not in the list above, the keyboard buffer is
flushed and no other action is taken.
-----------------------------------------------------------
INT 21 - Disk Reset
        AH = 0Dh
Flushes all disk buffers.
-----------------------------------------------------------
INT 21 - SELECT DISK
        AH = 0Eh
        DL = new default drive number (0 = A, 1 = B, etc.)
Return: AL = number of logical drives
-----------------------------------------------------------
INT 21 - OPEN DISK FILE
        AH = 0Fh
        DS:DX = address of FCB
Return: AL = 00h file found
             FFh file not found
-----------------------------------------------------------
INT 21 - CLOSE DISK FILE
        AH = 10h
        DS:DX = address of FCB
Return: AL = 00h directory update successful
             FFh file not found in directory
-----------------------------------------------------------
INT 21 - Search First using FCB
        AH = 11h
        DS:DX = address of FCB
Return: AL =
            00h = file found
            FFh = file not found
If file found, FCB is created at DTA address and
set up to OPEN or DELETE it.
-----------------------------------------------------------
INT 21 - Search Next using FCB
        AH = 12h
        DS:DX = address of FCB
Return: AL =
            00h = file found
            FFh = file not found
If file found, FCB is created at DTA address and
set up to OPEN or DELETE it.
-----------------------------------------------------------
INT 21 - Delete File via FCB
        AH = 13h
        DS:DX = address of FCB
Return: AL =
            00h = file found
            FFh = file not found
-----------------------------------------------------------
INT 21 - SEQUENTIAL DISK FILE READ
        AH = 14h
        DS:DX = address of FCB
Return: AL =
            0 = successful read
            1 = end of file
            2 = data transfer area too small
            3 = partial record, EOF
-----------------------------------------------------------
INT 21 - SEQUENTIAL DISK RECORD WRITE
        AH = 15h
        DS:DX = address of FCB
Return: AL =
            0 = successful write
            1 = disk full
            2 = data transfer area too small
-----------------------------------------------------------
INT 21 - CREATE A DISK FILE
        AH = 16h
        DS:DX = address of FCB
Return: AL =
            00h = successful creation
            FFh = directory full
-----------------------------------------------------------
INT 21 - Rename File via FCB
        AH = 17h
        DS:DX = address of FCB
        FCB contains new name starting at byte 17h.
Return: AL =
            00h = file found
            FFh = file not found
-----------------------------------------------------------
INT 21 - Internal - does nothing
        AH = 18h
Return: AL = 0
-----------------------------------------------------------
INT 21 - Default Disk Number
        AH = 19h
Return: AL = current drive number (letter - 'A')
-----------------------------------------------------------
INT 21 - SET DISK TRANSFER AREA ADDRESS
        AH = 1Ah
        DS:DX = address of buffer
-----------------------------------------------------------
INT 21 - Default Drive Disk Size
        AH = 1Bh
Return: DS:BX points to FAT ID byte
        DX = number of allocation units on disk
        AL = number of sectors per allocation unit (cluster)
        CX = number of bytes per sector
-----------------------------------------------------------
INT 21 - Specific Drive's Disk Size
        AH = 1Ch
        DL = Drive Number to check
Return: DS:BX points to FAT ID byte
        DX = number of allocation units on disk
        AL = number of sectors per allocation unit (cluster)
        CX = number of bytes per sector
-----------------------------------------------------------
INT 21 - Internal - does nothing
        AH = 1Dh
Return: AL = 0
-----------------------------------------------------------
INT 21 - Internal - does nothing
        AH = 1Eh
Return: AL = 0
-----------------------------------------------------------
INT 21 - Internal - GET DEFAULT DRIVE PARAMETER BLOCK
        AH = 1Fh
Return: AL = 00h No Error
             FFh Error
        (DS:BX) = ADDRESS OF DRIVE PARAMETER BLOCK.
Note: for DOS 2.x and 3.x, this just invokes function 32h with DL = 0
-----------------------------------------------------------
INT 21 - Internal - does nothing
        AH = 20h
Return: AL = 0
-----------------------------------------------------------
INT 21 - RANDOM DISK RECORD READ
        AH = 21h
        DS:DX = address of FCB
Return: AL =
            0 = successful read
            1 = end of file
            2 = data transfer area too small
            3 = partial record, EOF
-----------------------------------------------------------
INT 21 - Random Disk Write
        AH = 22h
Same setup as Random Read, but writes to disk
-----------------------------------------------------------
INT 21 - FILE SIZE
        AH = 23h
        DS:DX = address of FCB
Return: AL =
            00h = file found
            FFh = file not found
FCB SET TO NO. OF RECORDS
-----------------------------------------------------------
INT 21 - Set Random Record Field
        AH = 24h
        DS:DX = address of FCB
Return: Random Record Field of FCB is set to be same as Current Block
        and Current Record.
Note: FCB must be OPEN already
-----------------------------------------------------------
INT 21 - Set Interrupt Vector
        AH = 25h
*-*-*-------remove anything after this line and concatenate part 2-------*-*-*

-- 
{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?