home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / DOS_HELP / MS_INT.ZIP / MSINT.DOC
Encoding:
Text File  |  1985-12-07  |  58.1 KB  |  1,640 lines

  1.         Interrupt List for MS-DOS (2.xx only)
  2.      
  3.  
  4.          Additions and corrections to Bob Jack's SANYO-oriented 
  5.          file describing the INT structure. Includes list of all 
  6.          undocumented INT21 functions and for most tells what they 
  7.          do.
  8.      
  9.      
  10.        - - - Interrupt Structure - - -
  11.     Orginal work       Janet Jack   January 1985
  12.     Corrections & additions J. Weaver Jr.  January 1985
  13.     Addition  John Cooper   February 1985
  14.     Addition  Skip Gilbrech  February 1985
  15.     Corrections & additions Bob Jack
  16.     Ongoing Additions and Cxns Jim Kyle  April 1985
  17.     Recent Edit: Ross M. Greenberg (ihnp4!timeinc!greenber)  7/25/85
  18.     Recent Additions and Corrections:
  19.         John Ruschmeyer (...!ihnp4!vax135!petsd!moncol!john)
  20.             Ross M. Greenberg (...!ihnp4!timeinc!greenber)
  21.         Bill Frolik (...!ihnp4!hplabs!hp-pcd!bill)
  22.         Roy J. Mongiovi (...!ihnp4!gatech!gitpyr!roy)
  23.  
  24. -----------------------------------------------------------
  25.  INT 0 - DIVIDE ERROR
  26.     Automatically called at end of DIV or IDIV operation
  27.  that results in error. Normally set by DOS to display an error
  28.  message and abort the program.
  29.  -----------------------------------------------------------
  30.  INT 1 - SINGLE-STEP
  31.     Generated at end of each machine instruction if
  32.  TF bit in FLAGS is set. This is what makes the T command
  33.  of DEBUG work for single-stepping. Is not generated after
  34.  MOV to segment register or POP of segment register.
  35.  -----------------------------------------------------------
  36.  INT 2 - NMI (Non Maskable Interrupt)
  37.     Generated by NMI signal in hardware. Used in IBM for
  38.  memory parity error trapping.
  39.  -----------------------------------------------------------
  40.  INT 3 - 1-BYTE INTERRUPT
  41.     Generated by opcode 0CCh. Similar to 8080's RST
  42.  instruction. Generally used to set breakpoints for DEBUG.
  43.  -----------------------------------------------------------
  44.  INT 4 - OVERFLOW
  45.     Generated by INTO instruction if OF flag is set. If
  46.  flag is not set, INTO is effectively a NOP. Used to trap any
  47.  arithmetic errors when program is ready to handle them rather
  48.  than immediately when they occur.
  49.  -----------------------------------------------------------
  50.  INT 5 - Print-Screen Key
  51.     Automatically called by keyboard scan when print-
  52.  screen key is pressed. Normally executes routine to print
  53.  the screen, but may call any routine that can safely be
  54.  executed from inside the keyboard scanner.
  55.     Status and result byte at address 0050:0000.
  56.  -----------------------------------------------------------
  57.  INT 6 - UNKNOWN
  58.  -----------------------------------------------------------
  59.  INT 7 - UNKNOWN
  60.  -----------------------------------------------------------
  61.  INT 8 thru 0FH - Vectored Hardware Lines (in IBM at least)
  62.     In IBM, these 8 interrupts are generated in
  63.  response to IRQ 0 through IRQ 7 (if enabled via port 21).
  64.     IRQ0    -    Timer interrupt
  65.     IRQ1    -    Keyboard interrupt
  66.     IRQ3    -    RS232 port (com2:)
  67.     IRQ4    -    serial controller (com1:)
  68.     IRQ5    -    fixed disk
  69.     IRQ6    -    diskette interrupt
  70.     IRQ7    -    PPI interrupt
  71.  -----------------------------------------------------------
  72. INT 10 - VIDEO - SET VIDEO MODE
  73.     REG AH = 0
  74.     REG AL = 0 = 40x25 B&W
  75.              1 = 40x25 COLOR
  76.              2 = 80x25 BW
  77.              3 = 80x25 COLOR
  78.              4 = 320x200 GRAPHICS, 4 COLOR
  79.              5 = 320x200 GRAPHICS, 4 GREY
  80.              6 = 640x200 GRAPHICS, B&W
  81.              7 = MONOCHROME GRAPHICS MODE
  82.              8 = 160x200 GRAPHICS, 16 COLOR
  83.              9 = 320x200 GRAPHICS, 16 COLOR
  84.              A = 640x200 GRAPHICS, 4 COLOR
  85.  
  86.     Note: Modes 8-10 are only available on the PCjr (and
  87.           Tandy 1000).
  88. -----------------------------------------------------------
  89.  INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
  90.      REG AH = 1
  91.      REG CH = bit values:
  92.          bits 5-6 = blink attribute
  93.                   (00=normal, 01=invis., 11=fast)
  94.          bits 0-4 = start line for cursor in char. cell
  95.      REG CL = bit values:
  96.          bits 0-4 = end line for cursor in char. cell
  97.  -----------------------------------------------------------
  98.  INT 10 - VIDEO - SET CURSOR POSITION
  99.     REG AH = 2
  100.     REG DH,DL = ROW,COLUMN - 0,0 = UPPER LEFT
  101.     REG BH = PAGE NO. - 0 = GRAPHICS
  102.  -----------------------------------------------------------
  103.  INT 10 - VIDEO - READ CURSOR POSITION
  104.     REG AH = 3
  105.     REG BH = PAGE NO. - 0 = GRAPHICS
  106.     ON EXIT:
  107.        REG DH,DL = ROW,COLUMN
  108.        REG CH,CL = CURSOR MODE,CURRENT SET
  109.  -----------------------------------------------------------
  110.  INT 10 - VIDEO - READ LIGHT PEN POSITION
  111.     REG AH = 4
  112.     ON EXIT:
  113.        REG AH = 0: light pen switch not activated
  114.            AH = 1: light pen values in registers
  115.               DH = row of current position
  116.               DL = column of current position
  117.               CH = raster line (0-199)
  118.               BX = pixel column (0-319 or 0-639)
  119.  -----------------------------------------------------------
  120.  INT 10 - VIDEO - SELECT DISPLAY PAGE
  121.     REG AH = 5
  122.     REG AL = 0 - 7: NEW PAGE VALUE FOR MODES 0 & 1
  123.              0 - 3: NEW PAGE VALUE FOR MODES 2 & 3
  124.              80H: READ CRT/CPU PAGE REGISTERS
  125.              81H: SET CPU PAGE REGISTER TO VALUE IN BL
  126.              82H: SET CRT PAGE REGISTER TO VALUE IN BH
  127.              83H: SET BOTH DISPLAY REGISTERS
  128.      ON EXIT:
  129.         REG BH = CRT PAGE REGISTER
  130.             BL = CPU PAGE REGISTER
  131.  -----------------------------------------------------------
  132.  INT 10 - VIDEO - SCROLL PAGE UP
  133.     REG AH = 6
  134.     REG AL = NO. OF LINES BLANKED AT BOTTOM OF PAGE
  135.         0 = BLANK WINDOW
  136.     REG BH = ATTRIBUTES TO BE USED ON BLANK LINE
  137.     WINDOW:
  138.        REG CH,CL = UPPER LEFT CORNER
  139.        REG DH,DL = LOWER RIGHT CORNER
  140.  -----------------------------------------------------------
  141.  INT 10 - VIDEO - SCROLL PAGE DOWN
  142.     REG AH = 7
  143.     REG AL = NO. OF LINES BLANKED AT TOP OF PAGE
  144.         0 = BLANK WINDOW
  145.     REG BH = ATTRIBUTES TO BE USED ON BLANK LINE
  146.     WINDOW:
  147.        REG CH,CL = UPPER LEFT CORNER
  148.        REG DH,DL = LOWER RIGHT CORNER
  149.  -----------------------------------------------------------
  150.  INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
  151.     REG AH = 8
  152.     REG BH = DISPLAY PAGE
  153.     ON EXIT:
  154.        REG AL = CHAR
  155.        REG AH = ATTRIBUTE OF CHAR - ALPHA MODE
  156.  -----------------------------------------------------------
  157.  INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
  158.     REG AH = 9
  159.     REG AL = CHARACTER
  160.     REG BH = DISPLAY PAGE - ALPHA MODE
  161.     REG BL = ATTRIBUTES OF CHAR
  162.     REG CX = NO. OF CHAR TO WRITE
  163.  -----------------------------------------------------------
  164.  INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
  165.     REG AH = 0AH
  166.     REG AL = CHARACTER
  167.     REG BH = DISPLAY PAGE - ALPHA MODE
  168.     REG BL = COLOR OF CHARACTER (GRAPHICS MODE)
  169.     REG CX = NO. OF CHAR TO WRITE
  170.  -----------------------------------------------------------
  171.  INT 10 - SET COLOR PALETTE
  172.     REG AH = 0BH
  173.     REG BH = PALETTE COLOR ID
  174.     REG BL = COLOR TO BE USED W/COLOR ID
  175.  -----------------------------------------------------------
  176.  INT 10 - WRITE DOT ON SCREEN
  177.     REG AH = 0CH
  178.     REG AL = COLOR OF DOT
  179.     REG DX = ROW (0000 - 00C7)
  180.     REG CX = COLUMN (0000 - 027F)
  181.     NOTE:     VIDEO MODES 6 & 7 ONLY
  182.  -----------------------------------------------------------
  183.  INT 10 - READ DOT ON SCREEN
  184.     REG AH = 0DH
  185.     REG CX = COLUMN (0000 - 027F)
  186.     REG DX = ROW (0000 - 00C7)
  187.     ON RETURN:
  188.        REG AL = COLOR READ
  189.  -----------------------------------------------------------
  190.  INT 10 - WRITE CHARACTER - ADVANCE CURSOR (TTY WRITE)
  191.     REG AH = 0EH
  192.     REG AL = CHARACTER
  193.     REG BL = FOREGROUND COLOR (VIDEO MODES 6 & 7 ONLY)
  194.  -----------------------------------------------------------
  195.  INT 10 - GET CURRENT VIDEO MODE
  196.     REG AH = 0FH
  197.     ON RETURN:
  198.        REG AH = # OF COLUMNS ON SCREEN
  199.        REG AL = CURRENT VIDEO MODE
  200.        REG BH = CURRENT ACTIVE DISPLAY PAGE
  201.  -----------------------------------------------------------
  202.  INT 10 - SET PALETTE REGISTERS (PCjr AND TANDY 1000)
  203.     REG AH = 10H
  204.         AL = 0: SET PALETTE REGISTER
  205.                 BL = PALETTE REGISTER TO SET
  206.                 BH = COLOR VALUE TO STORE
  207.         AL = 1: SET BORDER COLOR REGISTER
  208.                 BH = COLOR VALUE TO STORE
  209.         AL = 2: SET ALL PALETTE REGISTERS
  210.                 ES:DX = POINTER TO 17-BYTE LIST
  211.                   BYTES 0-15 = VALUES FOR PALETTE REGS. 0-15
  212.                   BYTE 16 = VALUE FOR BORDER REGISTER
  213.  -----------------------------------------------------------
  214.  INT 10 - WRITE STRING, DON'T MOVE CURSOR (PC/AT ONLY)
  215.     REG AH = 13H
  216.         AL = 0
  217.     BL = ATTRIBUTE
  218.     BH = DISPLAY PAGE NUMBER
  219.     DX = STARTING CURSOR POSITION
  220.     CX = LENGTH OF STRING
  221.     ES:BP = POINTER TO START OF STRING
  222.  -----------------------------------------------------------
  223.  INT 10 - WRITE STRING, MOVE CURSOR AFTER STRING (PC/AT ONLY)
  224.     REG AH = 13H
  225.     AL = 1
  226.     BL = ATTRIBUTE
  227.     BH = DISPLAY PAGE NUMBER
  228.     DX = STARTING CURSOR POSITION
  229.     CX = LENGTH OF STRING
  230.     ES:BP = POINTER TO START OF STRING      
  231.  -----------------------------------------------------------
  232.  INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  233.           DON'T MOVE CURSOR                (PC/AT ONLY)
  234.     REG AH = 13H
  235.     AL = 2
  236.     BH = DISPLAY PAGE NUMBER
  237.     DX = STARTING CURSOR POSITION
  238.     CX = LENGTH OF STRING
  239.     ES:BP = POINTER TO START OF STRING      
  240.  -----------------------------------------------------------
  241.  INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
  242.           MOVE CURSOR                (PC/AT ONLY)
  243.     REG AH = 13H
  244.     AL = 3
  245.     BH = DISPLAY PAGE NUMBER
  246.     DX = STARTING CURSOR POSITION
  247.     CX = LENGTH OF STRING
  248.     ES:BP = POINTER TO START OF STRING      
  249.  -----------------------------------------------------------
  250.  INT 10 - GET VIDEO RAM ADDRESS
  251.     REG AH = 70H
  252.     ON RETURN:
  253.        REG  AX  = SEGMENT ADDRESS OF THE FOLLOWING
  254.     [BX] = OFFSET ADDRESS OF GREEN PLANE
  255.     [CX] = SEGMENT ADDRESS OF GREEN PLANE
  256.     [DX] = SEGMENT ADDRESS OF RED/BLUE PLANE
  257.       (RED OFFSET = 0, BLUE OFFSET = 4000)
  258.  -----------------------------------------------------------
  259.  INT 10 - GET INCRAM ADDRESSES
  260.     REG AH = 71H
  261.     ON RETURN:
  262.        REG  AX  = SEGMENT ADDRESS OF THE FOLLOWING
  263.     [BX] = SEGMENT ADDRESS OF INCRAM
  264.     [CX] = OFFSET ADDRESS OF INCRAM
  265.  -----------------------------------------------------------
  266.  INT 10 - SCROLL SCREEN RIGHT
  267.     REG AH = 72H
  268.     REG AL = NO. OF COLUMNS BLANKED AT LEFT OF PAGE
  269.         0 = BLANK WINDOW
  270.     REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  271.     WINDOW:
  272.        REG CH,CL = UPPER LEFT CORNER
  273.        REG DH,DL = LOWER RIGHT CORNER
  274.  ----------------------------------------------------------
  275.  INT 10 - SCROLL SCREEN LEFT
  276.     REG AH = 73H
  277.     REG AL = NO. OF COLUMNS BLANKED AT RIGHT OF PAGE
  278.         0 = BLANK WINDOW
  279.     REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS
  280.     WINDOW:
  281.        REG CH,CL = UPPER LEFT CORNER
  282.        REG DH,DL = LOWER RIGHT CORNER
  283.  -----------------------------------------------------------
  284.  INT 11 - EQUIPMENT DETERMINATION
  285.     ON RETURN:
  286.        REG AX = "equipment flag"
  287.           bit 0        diskette installed
  288.           bit 1        8087 present
  289.           bit 2,3      always = 11
  290.           bit 4,5      initial video mode
  291.                        01 = 40x25 COLOR
  292.                        10 = 80x25 COLOR
  293.                        11 = 80X25 IBM monochrome
  294.           bit 6,7      number of diskette drives (only if bit 0 = 1)
  295.                        00 = 1, 01 = 2
  296.           bit 8        0 = dma present, 1= no dma on system
  297.           bit 9,10,11  number of RS232 cards
  298.           bit 12       game I/O attached
  299.           bit 13       serial printer installed (IBM-PCjr)
  300.           bit 14,15    number of printers
  301.  -----------------------------------------------------------
  302.  INT 12 - MEMORY SIZE
  303.     ON RETURN:
  304.        REG AX = NO. OF CONTIGUOUS 1K BLOCKS
  305.  -----------------------------------------------------------
  306.  INT 13 - RESET DISK SYSTEM
  307.     REG AH = 0
  308.  -----------------------------------------------------------
  309.  INT 13 - STATUS OF DISK SYSTEM
  310.     REG AH = 1
  311.     ON RETURN:
  312.        REG AL = STATUS
  313.         01H = BAD COMMAND
  314.         02H = ADDRESS MARK NOT FOUND
  315.         03H = WRITE ATTEMPTED ON WRITE-PROTECTED DISK
  316.         04H = SECTOR NOT FOUND
  317.         06H = DISKETTE REMOVED
  318.         08H = DMA OVERRUN
  319.         09H = DMA ACROSS 64K BOUNDARY
  320.         10H = BAD CRC
  321.         20H = CONTROLLER FAILURE
  322.         40H = SEEK FAILED
  323.         80H = TIME OUT
  324.  -----------------------------------------------------------
  325.  INT 13 - READ SECTORS INTO MEMORY
  326.     REG AH = 2
  327.     REG AL = NO. OF SECTORS
  328.     REG CH = TRACK NO.
  329.     REG CL = SECTOR NO.
  330.     REG DH = HEAD NO.
  331.     REG DL = DRIVE NO.
  332.     REG ES:BX = ADDRESS OF BUFFER
  333.     ON RETURN:
  334.            CF = SUCCESS/FAILURE SIGNAL
  335.        REG AH = STATUS (SEE ABOVE)
  336.        AL = NUMBER OF SECTORS READ           
  337.  -----------------------------------------------------------
  338.  INT 13 - WRITES SECTORS FROM MEMORY
  339.     REG AH = 3
  340.     REG AL = NO. OF SECTORS
  341.     REG CH = TRACK NO.
  342.     REG CL = SECTOR NO.
  343.     REG DH = HEAD NO.
  344.     REG DL = DRIVE NO.
  345.     REG ES:BX = ADDRESS OF BUFFER
  346.     ON RETURN:
  347.        CF = SUCCESS/FAILURE SIGNAL
  348.        REG AH = STATUS (SEE ABOVE)
  349.        AL = NUMBER OF SECTORS WRITTEN
  350.  -----------------------------------------------------------
  351.  INT 13 - VERIFIES SECTORS
  352.     REG AH = 4
  353.     REG AL = NO. OF SECTORS
  354.     REG CH = TRACK NO.
  355.     REG CL = SECTOR NO.
  356.     REG DH = HEAD NO.
  357.     REG DL = DRIVE NO.
  358.     ON RETURN:
  359.        CF = SUCCESS/FAILURE SIGNAL
  360.        REG AH = STATUS (SEE ABOVE)
  361.        AL = NUMBER OF SECTORS VERIFIED
  362.  -----------------------------------------------------------
  363.  INT 13 - FORMAT DISKETTE TRACK
  364.     REG AH = 5
  365.         AL = NUMBER OF SECTORS
  366.     CH = TRACK NUMBER
  367.     CL = SECTOR NUMBER
  368.     DH = HEAD NUMBER
  369.     DL = DRIVE NUMBER
  370.     ES:BX = POINTER TO 4-BYTE ADDRESS FIELD
  371.         BYTE 1 = TRACK
  372.         BYTE 2 = HEAD
  373.         BYTE 3 = SECTOR
  374.         BYTE 4 = BYTES/SECTOR
  375.     ON RETURN:
  376.            CF = SUCCESS/FAILURE SIGNAL
  377.        REG AH = STATUS CODE (SEE ABOVE)    
  378.  -----------------------------------------------------------
  379.  INT 13 - GET CURRENT DRIVE PARAMETERS (PC/AT ONLY)
  380.      REG AH = 8
  381.      ON RETURN:
  382.             CF = SUCCESS/FAILURE FLAG
  383.         REG AH = STATUS CODE (SEE ABOVE)
  384.         DL = NUMBER OF DRIVES
  385.         DH = MAX. NUMBER OF SIDES
  386.         CL = MAX. NUMBER OF SECTORS
  387.         CH = MAX. NUMBER OF TRACKS
  388.  -----------------------------------------------------------
  389.  INT 13 - INITIAL TWO FIXED DISK BASE TABLES (PC/AT ONLY)
  390.      REG AH = 9
  391.      ON RETURN:
  392.         CF = SUCCESS/FAILURE FLAG
  393.     REG AH = STATUS CODE (SEE ABOVE)
  394.     INTERRUPT 41 POINTS TO TABLE FOR DRIVE 0
  395.     INTERRUPT 46 POINTS TO TABLE FOR DRIVE 1
  396.  -----------------------------------------------------------
  397.  INT 13 - READ LONG (PC/AT ONLY)
  398.      REG AH = 0AH
  399.      DL = DRIVE ID
  400.      DH = HEAD NUMBER
  401.      CH = CYLINDER NUMBER
  402.      CL = SECTOR NUMBER
  403.      ES:BX = POINTER TO BUFFER
  404.      ON RETURN:
  405.         CF = SUCCESS/FAILURE FLAG
  406.     REG AH = STATUS CODE (SEE ABOVE)
  407.  -----------------------------------------------------------
  408.  INT 13 - WRITE LONG (PC/AT ONLY)
  409.      REG AH = 0BH
  410.      DL = DRIVE ID
  411.      DH = HEAD NUMBER
  412.      CH = SECTOR NUMBER
  413.      ES:BX = POINTER TO BUFFER
  414.      ON RETURN:
  415.         CF = SUCCESS/FAILURE FLAG
  416.     REG AH = STATUS CODE (SEE ABOVE)         
  417.  -----------------------------------------------------------
  418.  INT 13 - SEEK TO CYLINDER (PC/AT ONLY)
  419.      REG AH = 0CH
  420.      DL = DRIVE ID
  421.      DH = HEAD NUMBER
  422.      CH = SECTOR NUMBER
  423.      ON RETURN:
  424.         CF = SUCCESS/FAILURE FLAG
  425.     REG AH = STATUS CODE (SEE ABOVE)
  426.  -----------------------------------------------------------
  427.  INT 13 - ATLERNATE DISK RESET (PC/AT ONLY)
  428.      REG AH = 0DH
  429.      DL = DRIVE ID
  430.      ON RETURN:
  431.         CF = SUCCESS/FAIL FLAG
  432.     REG AH = STATUS CODE (SEE ABOVE)
  433.  -----------------------------------------------------------
  434.  INT 13 - TEST FOR DRIVE READY (PC/AT ONLY)
  435.      REG AH = 10H
  436.      DL = DRIVE ID
  437.      ON RETURN:
  438.         CF = SUCCESS/FAIL FLAG
  439.     REG AH = STATUS CODE (SEE ABOVE)
  440.  -----------------------------------------------------------
  441.  INT 13 - RECALIBRATE DRIVE (PC/AT ONLY)
  442.      REG AH = 11H
  443.      DL = DRIVE ID
  444.      ON RETURN:
  445.         CF = SUCCESS/FAIL FLAG
  446.     REG AH = STATUS CODE (SEE ABOVE)
  447.  -----------------------------------------------------------
  448.  INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY)
  449.      REG AH = 14H
  450.      ON RETURN:
  451.         CF = SUCCESS/FAIL FLAG
  452.     REG AH = STATUS CODE (SEE ABOVE)
  453.  -----------------------------------------------------------
  454.  INT 13 - GET DISK TYPE (PC/AT ONLY)
  455.      REG AH = 15H
  456.      DL = DRIVE ID
  457.      ON RETURN:
  458.     REG AH = DISK TYPE
  459.          0 = DISK NOT THERE
  460.          1 = DISKETTE, NO CHANGE DETECTION PRESENT
  461.          2 = DISKETTE, CHANGE DETECTION PRESENT
  462.          3 = FIXED DISK
  463.         CX,DX = NUMBER OF 512-BYTE SECTORS WHEN AH = 3
  464.  -----------------------------------------------------------
  465.  INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY)
  466.      REG AH = 16H
  467.      ON RETURN:
  468.     REG DL = DRIVE THAT HAD DISK CHANGE
  469.         AH = DISK CHANGE STATUS
  470.          00 = NO DISK CHANGE
  471.          01 = DISK CHANGED
  472.  -----------------------------------------------------------
  473.  INT 13 - SET DISK TYPE (PC/AT ONLY)
  474.      REG AH = 17H
  475.      AL = DISK TYPE
  476.           00 = NO DISK
  477.           01 = REGULAR DISKETTE IN REGULAR DRIVE
  478.           02 = HIGH-CAP. DISK IN HIGH-CAP. DRIVE
  479.  -----------------------------------------------------------
  480.  INT 14 - SERIAL I/O - INITIALIZE USART
  481.     REG AH = 0
  482.     REG AL = INITIALIZING PARAMETERS
  483.     BIT  7 - 6 - 5 4 - 3  2    1 - 0
  484.    -BAUD RATE-    PARITY  STOP    WORD
  485.             BITS  LENGTH
  486.    000  110 BD    00 NONE 0-1   10 - 7
  487.    001  150 BD    01 ODD 1-2   11 - 8
  488.    010  300 BD    11 EVEN
  489.    011  600 BD
  490.    100 1200 BD
  491.    101 2400 BD
  492.    110 4800 BD
  493.    111 9600 BD (4800 ON PCjr)
  494.         DX = PORT NUMBER
  495.  -----------------------------------------------------------
  496.  INT 14 - SERIAL I/O - TRANSMIT CHARACTER
  497.     REG AH = 1
  498.         AL = CHARACTER
  499.     DX = PORT NUMBER
  500.     ON RETURN:
  501.        REG AH = RS-232 STATUS CODE
  502.         BIT 0 = DATA READY
  503.         1 = OVERRUN ERROR
  504.         2 = PARITY ERROR
  505.         3 = FRAMING ERROR
  506.         4 = BREAK DETECTED
  507.         5 = TRANSMISSION BUFFER REG. EMPTY
  508.         6 = TRANSMISSION SHIFT REG. EMPTY
  509.         7 = TIME OUT
  510.        AL = MODEM STATUS
  511.         BIT 0 = DELTA CLEAR-TO-SEND
  512.         1 = DELTA DATA-SET-READY
  513.         2 = TRAILING EDGE RING DETECTED
  514.         3 = CHANGE, RECEIVE LINE SIGNAL DETECTED
  515.         4 = CLEAR-TO-SEND
  516.         5 = DATA-SET-READY
  517.         6 = RING DETECTED
  518.         7 = RECEIVE LINE SIGNAL DETECTED
  519.  -----------------------------------------------------------
  520.  INT 14 - SERIAL I/O - RECEIVE CHARACTER
  521.     REG AH = 2
  522.     ON RETURN:
  523.        REG AL = CHARACTER RECEIVED
  524.        REG AH = RS-232 STATUS CODE (SEE ABOVE)
  525.  -----------------------------------------------------------
  526.  INT 14 - SERIAL I/O - GET USART STATUS
  527.     REG AH = 3
  528.     ON RETURN:
  529.        REG AH = RS-232 STATUS CODE (SEE ABOVE)
  530.        REG AL = MODEM STATUS CODE (SEE ABOVE)
  531.  -----------------------------------------------------------
  532.  INT 15 - TURN ON CASSETTE MOTOR
  533.     REG AH = 0
  534.  -----------------------------------------------------------
  535.  INT 15 - TURN OFF CASSETTE MOTOR
  536.     REG AH = 1
  537.  -----------------------------------------------------------
  538.  INT 15 - READ DATA BLOCKS FROM CASSETTE
  539.     REG AH = 2
  540.     CX = COUNT OF BYTES
  541.     ES:BX = POINTER TO DATA AREA
  542.     ON RETURN:
  543.         CF = ERROR SIGNAL
  544.     REG DX = COUNT OF BYTES READ
  545.         ES:BX = POINTER PAST LAST BYTE READ
  546.  -----------------------------------------------------------
  547.  INT 15 - WRITE DATA BLOCKS TO CASSETTE
  548.     REG AH = 3
  549.     CX = COUNT OF BYTES TO WRITE
  550.     ES:BX = POINTER TO DATA AREA
  551.     ON RETURN:
  552.     REG ES:BX = POINTER PAST LAST BYTE WRITTEN
  553.  -----------------------------------------------------------
  554.  INT 15 - DEVICE OPEN (PC/AT ONLY)
  555.     REG AH = 80
  556.     BX = DEVICE ID
  557.     CX = PROCESS TYPE
  558.  -----------------------------------------------------------
  559.  INT 15 - DEVICE CLOSE (PC/AT ONLY)
  560.     REG AH = 81
  561.     BX = DEVICE ID
  562.     CX = PROCESS TYPE
  563.  -----------------------------------------------------------
  564.  INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY)
  565.     REG AH = 82
  566.     BX = DEVICE ID
  567.  -----------------------------------------------------------
  568.  INT 15 - EVENT WAIT (PC/AT ONLY)
  569.     REG AH = 83
  570.     AL = SUBSERVICE
  571.          0 = SET INTERVAL
  572.          1 = CANCEL
  573.     ES:BX = POINTER TO CALLER'S MEMORY
  574.     CX,DX = NUMBER OF MICROSECONDS TO WAIT
  575.  -----------------------------------------------------------
  576.  INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY)
  577.     REG AH = 84
  578.     DX = 0
  579.     ON RETURN:
  580.     REG AL = SWITCH SETTINGS
  581.  -----------------------------------------------------------
  582.  INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY)
  583.     REG AH = 84
  584.     DX = 1
  585.     ON RETURN:
  586.     REG AX = A(x) VALUE
  587.         BX = A(y) VALUE
  588.         CX = B(x) VALUE
  589.         DX = B(y) VALUE
  590.  -----------------------------------------------------------
  591.  INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY)
  592.     REG AH = 85
  593.     AL = 00 PRESS
  594.     AL = 01 BREAK
  595.  -----------------------------------------------------------
  596.  INT 15 - WAIT (PC/AT ONLY)
  597.     REG AH = 86
  598.     CX,DX = NUMBER OF MICROSECONDS TO WAIT
  599.  -----------------------------------------------------------
  600.  INT 15 - EXTENDED MEMORY - BLOCK MOVE    (PC/AT ONLY)
  601.     REG AH = 87
  602.         CX = NUMBER OF WORDS TO MOVE
  603.     ES:SI = POINTER TO TABLE
  604.  -----------------------------------------------------------
  605.  INT 15 - EXTENDED MEMORY - GET MEMORY SIZE    (PC/AT ONLY)
  606.     REG AH = 88
  607.     ON RETURN:
  608.        REG AX = MEMORY SIZE
  609.  -----------------------------------------------------------
  610.  INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY)
  611.     REG AH = 89
  612.  -----------------------------------------------------------
  613.  INT 15 - DEVICE BUSY LOOP (PC/AT ONLY)
  614.     REG AH = 90
  615.     AL = TYPE CODE
  616.  -----------------------------------------------------------
  617.  INT 15 - SET FLAG AND COMPLETE INTERRUPT
  618.     REG AH = 91
  619.     AL = TYPE CODE
  620.  -----------------------------------------------------------
  621.  INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY
  622.     REG AH = 0
  623.     ON RETURN:
  624.        REG AH = SCAN CODE
  625.        REG AL = CHARACTER
  626.  -----------------------------------------------------------
  627.  INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR
  628.     REG AH = 1
  629.     ON RETURN:
  630.        FLAG ZF = 0 = CHAR IN BUFFER
  631.        REG AH = SCAN CODE
  632.        REG AL = CHARACTER
  633.        FLAG ZF = 1 = NO CHAR IN BUFFER
  634.  -----------------------------------------------------------
  635.  INT 16 - KEYBOARD I/O - GET SHIFT STATUS
  636.     REG AH = 2
  637.     ON RETURN:
  638.     REG AL = SHIFT STATUS BITS
  639.          BIT 0 = RIGHT SHIFT KEY DEPRESSED
  640.          1 = LEFT SHIFT KEY DEPRESSED
  641.           2 = CTRL DEPRESSED
  642.          3 = ALT DEPRESSED
  643.          4 = SCROLL LOCK ACTIVE
  644.          5 = NUM LOCK ACTIVE
  645.          6 = CAPS LOCK ACTIVE
  646.          7 = INSERT STATE ACTIVE
  647.  -----------------------------------------------------------
  648.  INT 16 - KEYBOARD - SET DELAYS (PCjr ONLY)
  649.     REG AH = 3
  650.     AL = 0: RESET TYPEMATIC
  651.     AL = 1: INCREASE INITIAL DELAY
  652.     AL = 2: INCREASE CONTINUING DELAY
  653.     AL = 3: INCREASE BOTH DELAYS
  654.     AL = 4: TURN OFF TYPEMATIC 
  655.  -----------------------------------------------------------
  656.  INT 16 - KEYBOARD - KEYCLICK (PCjr ONLY)
  657.     REG AH = 4
  658.     AL = 0: CLICK OFF
  659.     AL = 1: CLICK ON
  660.  -----------------------------------------------------------
  661.  INT 17 - CHARACTER TO PRINTER
  662.     REG AH = 0
  663.     REG AL = CHAR
  664.     ON RETURN:
  665.        REG AH = STATUS
  666.             BIT    0 = TIME OUT
  667.               1 = UNUSED
  668.         2 = UNUSED
  669.         3 = I/O ERROR
  670.         4 = SELECTED
  671.               5 = OUT OF PAPER
  672.         6 = ACKNOWLEDGE
  673.               7 = NOT BUSY
  674.  -----------------------------------------------------------
  675.  INT 17 - INITIALIZE PRINTER
  676.     REG AH = 1
  677.     ON RETURN:
  678.        REG AH = STATUS (SEE ABOVE)
  679.  -----------------------------------------------------------
  680.  INT 17 - STATUS OF PRINTER
  681.     REG AH = 2
  682.     ON RETURN:
  683.        REG AH = STATUS (SEE ABOVE)
  684.  -----------------------------------------------------------
  685.  INT 18 - TRANSFER TO ROM BASIC
  686.     CAUSES TRANSFER TO ROM-BASED BASIC (IBM-PC)
  687.     OFTEN REBOOTS A COMPATABLE
  688.  -----------------------------------------------------------
  689.  INT 19 - DISK BOOT
  690.     CAUSES REBOOT OF DISK SYSTEM (NO MEMORY TEST PERFORMED).
  691.  -----------------------------------------------------------
  692.  INT 1A - GET TIME OF DAY
  693.     REG AH = 0
  694.     ON RETURN:
  695.        REG CX = high (most signif.) portion of clock count
  696.            DX = low (least signif.) portion of clock count
  697.            AL = 0 if clock was read or written (via AH=0,1)
  698.                 withing the current 24-hour period
  699.                 Otherwise, AL > 0
  700.  -----------------------------------------------------------
  701.  INT 1A - SET TIME OF DAY
  702.     REG AH = 1
  703.         CX = high (most signif.) portion of clock count
  704.         DX = low (least signif.) portion of clock count
  705.  -----------------------------------------------------------
  706.  INT 1A - READ REAL TIME CLOCK (PC/AT ONLY)
  707.     REG AH = 2
  708.     ON RETURN:
  709.     REG CH = HOURS
  710.         CL = MINUTES
  711.         DH = SECONDS
  712.  -----------------------------------------------------------
  713.  INT 1A - SET REAL TIME CLOCK (PC/AT ONLY)
  714.     REG AH = 3
  715.     CH = HOURS
  716.     CL = MINUTES
  717.     DH = SECONDS
  718.     DL = 1, IF DAYLIGHT SAVINGS; 0 IF STANDARD TIME
  719.  -----------------------------------------------------------
  720.  INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY)
  721.     REG AH = 4
  722.     ON RETURN:
  723.     REG DL = DAY
  724.         DH = MONTH
  725.         CL = YEAR
  726.         CH = CENTURY (19 OR 20)
  727.  -----------------------------------------------------------
  728.  INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY)
  729.     REG AH = 5
  730.     DL = DAY
  731.     DH = MONTH
  732.     CL = YEAR
  733.     CH = CENTURY (19 OR 20)
  734.  -----------------------------------------------------------
  735.  INT 1A - SET ALARM (PC/AT ONLY)
  736.     REG AH = 6
  737.     CH = HOURS
  738.     CL = MINUTES
  739.     DH = SECONDS
  740.     ON RETURN:
  741.     INT. 4A = ADDRESS OF ALARM ROUTINE
  742.  -----------------------------------------------------------
  743.  INT 1A - RESET ALARM (PC/AT ONLY)
  744.     REG AH = 7
  745.  -----------------------------------------------------------
  746.  INT 1B - CTRL-BREAK KEY (on IBM at least)
  747.   This interrupt is called when the keyboard scanner of
  748.  the IBM machines detects CTRL and BREAK pressed at the same
  749.  time. It normally points to a simple IRET so that it does
  750.  nothing, but many programs change it to return a CTRL-C scan
  751.  code and thus invoke INT 23.
  752.  -----------------------------------------------------------
  753.  INT 1C - CLOCK TICK (on IBM at least)
  754.   This interrupt is called (in the IBM) at the end of
  755.  each time-update operation by the real-time clock routines. It
  756.  normally points to an IRET unless PRINT.COM has been installed.
  757.  -----------------------------------------------------------
  758.  INT 20 - PROGRAM TERMINATION (MSDOS generic)
  759.     NOTE:     NO PARAMETERS - RETURNS TO DOS
  760.  -----------------------------------------------------------
  761.  INT 21 - PROGRAM TERMINATION (MSDOS generic)
  762.     Reg AH = 0
  763.     Same action as INT 20; returns to DOS.
  764.  -----------------------------------------------------------
  765.  INT 21 - KEYBOARD INPUT (MSDOS generic)
  766.     REG AH = 1
  767.     ON RETURN:
  768.     REG AL = CHARACTER READ
  769.  -----------------------------------------------------------
  770.  INT 21 - DISPLAY OUTPUT (MSDOS generic)
  771.     REG AH = 2
  772.     REG DL = CHAR
  773.  -----------------------------------------------------------
  774.  INT 21 - AUX Input (MSDOS generic)
  775.     Reg AH = 3
  776.     Return with char in reg AL.
  777.        NOTE - Waits for char, gives no error
  778.           indications.
  779.  -----------------------------------------------------------
  780.  INT 21 - AUX Output (MSDOS generic)
  781.     Reg AH = 4
  782.     Reg DL = char to send to AUX
  783.        No error indications!!
  784.  -----------------------------------------------------------
  785.  INT 21 - PRINTER OUTPUT (MSDOS generic)
  786.     REG AH = 5
  787.     REG DL = CHAR
  788.  -----------------------------------------------------------
  789.  INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT (MSDOS generic)
  790.     REG AH = 06H
  791.     REG DL = CHAR
  792.  -----------------------------------------------------------
  793.  INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT (MSDOS generic)
  794.     REG AH = 06H
  795.     REG DL = 0FFH
  796.     ON RETURN:
  797.        FLAG ZF = SET    = NO CHARACTER
  798.      CLEAR  = CHARACTER RECIEVED
  799.      REG AL = CHARACTER
  800.     Character is echoed to STDOUT if received.
  801.  -----------------------------------------------------------
  802.  INT 21 - Direct STDIN Input, no echo (MSDOS generic)
  803.     Reg AH = 7
  804.     Same as Function 6 for input but char not echoed.
  805.  -----------------------------------------------------------
  806.  INT 21 - KEYBOARD INPUT - NO ECHO (MSDOS generic)
  807.     REG AH = 8
  808.     ON RETURN:
  809.        REG AL = CHAR
  810.  -----------------------------------------------------------
  811.  INT 21 - PRINT STRING (MSDOS generic)
  812.     REG AH = 9
  813.     DS:DX  = ADDRESS OF STRING
  814.     NOTE:      STRING TERMINATED WITH "$"
  815.  -----------------------------------------------------------
  816.  INT 21 - BUFFERED KEYBOARD INPUT (MSDOS generic)
  817.     REG AH = 0AH
  818.     DS:DX  = ADDRESS OF BUFFER
  819.     FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH
  820.     ON RETURN SECOND BYTE HAS ACTUAL LENGTH
  821.  -----------------------------------------------------------
  822.  INT 21 - CHECK STANDARD INPUT STATUS (MSDOS generic)
  823.     REG AH = 0BH
  824.     ON RETURN:
  825.        REG AL = FFH IF CHAR TYPED
  826.         00H IF NOT TYPED
  827.  -----------------------------------------------------------
  828.  INT 21 - Clear Keyboard Buffer (MSDOS generic)
  829.     Reg AH = 0CH
  830.     Reg AL must be 1, 6, 7, 8, or 0aH.
  831.        Flushes all typeahead input, then executes
  832.  function specified by AL (by moving it to AH and repeating the
  833.  INT 21 call).
  834.  -----------------------------------------------------------
  835.  INT 21 - Disk Reset (MSDOS generic)
  836.     Reg AH = 0DH
  837.     Flushes all disk buffers.
  838.  -----------------------------------------------------------
  839.  INT 21 - SELECT DISK (MSDOS generic)
  840.     REG AH = 0EH
  841.     REG DL = new default drive number (0 = A, 1 = B, etc.)
  842.     ON RETURN:
  843.        AL = number of logical drives
  844.  -----------------------------------------------------------
  845.  INT 21 - OPEN DISK FILE (MSDOS generic)
  846.     REG AH = 0FH
  847.     REG DS = SEGMENT ADDRESS OF FCB
  848.     REG DX = OFFSET ADDRESS OF FCB
  849.     ON RETURN:
  850.        REG AL = 00 = FILE FOUND
  851.         FF = FILE NOT FOUND
  852.  -----------------------------------------------------------
  853.  INT 21 - CLOSE DISK FILE (MSDOS generic)
  854.     REG AH = 10H
  855.     REG DS = SEGMENT ADDRESS OF FCB
  856.     REG DX = OFFSET ADDRESS OF FCB
  857.  -----------------------------------------------------------
  858.  INT 21 - Search First using FCB (MSDOS generic)
  859.     REG AH = 11H
  860.     REG DS = SEGMENT ADDRESS OF FCB
  861.     REG DX = OFFSET ADDRESS OF FCB
  862.     FCB may contain wildcard chars.
  863.     On Return:
  864.        REG AL = 00 = FILE FOUND
  865.         FF = FILE NOT FOUND
  866.     If file found, FCB is created at DTA address and
  867.     set up to OPEN or DELETE it.
  868.  -----------------------------------------------------------
  869.  INT 21 - Search Next using FCB (MSDOS generic)
  870.     REG AH = 12H
  871.     REG DS = SEGMENT ADDRESS OF FCB
  872.     REG DX = OFFSET ADDRESS OF FCB
  873.     Search First must have been called earlier.
  874.     On Return:
  875.        Same as Search First; if AL = 0ffH, no more
  876.  left.
  877.  -----------------------------------------------------------
  878.  INT 21 - Delete File via FCB (MSDOS generic)
  879.     REG AH = 13H
  880.     REG DS = SEGMENT ADDRESS OF FCB
  881.     REG DX = OFFSET ADDRESS OF FCB
  882.     On Return:
  883.        REG AL = 00 = FILE FOUND
  884.         FF = FILE NOT FOUND
  885.  -----------------------------------------------------------
  886.  INT 21 - SEQUENTIAL DISK FILE READ (MSDOS generic)
  887.     REG AH = 14H
  888.     REG DS = SEGMENT ADDRESS OF FCB
  889.     REG DX = OFFSET ADDRESS OF FCB
  890.     ON RETURN:
  891.        REG AL = 0 = SUCCESSFUL READ
  892.         1 = END OF FILE
  893.         2 = DATA TRANSFER AREA TOO SMALL
  894.         3 = PARTIAL RECORD, EOF
  895.  -----------------------------------------------------------
  896.  INT 21 - SEQUENTIAL DISK RECORD WRITE (MSDOS generic)
  897.     REG AH = 15H
  898.     REG DS = SEGMENT ADDRESS OF FCB
  899.     REG DX = OFFSET ADDRESS OF FCB
  900.     ON RETURN:
  901.        REG AL = 0 = SUCCESSFUL WRITE
  902.         1 = DISKETTE FULL
  903.         2 = DATA TRANSFER AREA TOO SMALL
  904.  -----------------------------------------------------------
  905.  INT 21 - CREATE A DISK FILE (MSDOS generic)
  906.     REG AH = 16H
  907.     REG DS = SEGMENT ADDRESS OF FCB
  908.     REG DX = OFFSET ADDRESS OF FCB
  909.     ON RETURN:
  910.        REG AL = 00 = SUCCESSFUL CREATION
  911.         FF = NO ROOM IN DIRECTORY
  912.  -----------------------------------------------------------
  913.  INT 21 - Rename File via FCB (MSDOS generic)
  914.     REG AH = 17H
  915.     REG DS = SEGMENT ADDRESS OF FCB
  916.     REG DX = OFFSET ADDRESS OF FCB
  917.        FCB contains new name starting at byte 17H.
  918.     On Return:
  919.        REG AL = 00 = FILE FOUND
  920.         FF = FILE NOT FOUND
  921.  -----------------------------------------------------------
  922.  INT 21 - Internal - does nothing (MSDOS generic)
  923.     REG AH = 18H
  924.     On Return:
  925.     AL = 0
  926.  -----------------------------------------------------------
  927.  INT 21 - Default Disk Number (MSDOS generic)
  928.     REG AH = 19H
  929.     On Return:
  930.     AL = current drive number (letter - 'A')
  931.  -----------------------------------------------------------
  932.  INT 21 - SET DISK TRANSFER AREA ADDRESS (MSDOS generic)
  933.     REG AH = 1AH
  934.     REG DS = SEGMENT ADDRESS OF BUFFER
  935.     REG DX = OFFSET ADDRESS OF BUFFER
  936.     ON RETURN:
  937.        Registers are unchanged, no error codes
  938.  -----------------------------------------------------------
  939.  INT 21 - Default Drive Disk Size (MSDOS generic)
  940.     REG AH = 1BH
  941.     On Return:
  942.        DS:BX points to FAT ID byte
  943.        DX = number of allocation units on disk
  944.        AL = number of sectors per AU
  945.        CX = number of bytes per sector
  946.  -----------------------------------------------------------
  947.  INT 21 - Specific Drive's Disk Size (MSDOS generic)
  948.     REG AH = 1CH
  949.     Reg DL = Drive Number to check
  950.     On Return:
  951.        DS:BX points to FAT ID byte
  952.        DX = number of allocation units on disk
  953.        AL = number of sectors per AU
  954.        CX = number of bytes per sector
  955.  -----------------------------------------------------------
  956.  INT 21 - Internal - does nothing (MSDOS generic)
  957.     REG AH = 1DH
  958.     On Return:
  959.        AL = 0
  960.  -----------------------------------------------------------
  961.  INT 21 - Internal - does nothing (MSDOS generic)
  962.     REG AH = 1EH
  963.     On Return:
  964.        AL = 0
  965.  -----------------------------------------------------------
  966.  INT 21 - GET DEFAULT DRIVE PARAMETER BLOCK (MSDOS generic, undoc.)
  967.     REG AH = 1FH
  968.     On return:
  969.        REG AL = 00 = No Error
  970.         FF = Error
  971.        (DS:BX) = ADDRESS OF DRIVE PARAMETER BLOCK.
  972.     (THIS JUST INVOKES FUNCTION 32H WITH DL = 0)
  973.  -----------------------------------------------------------
  974.  INT 21 - Internal - does nothing (MSDOS generic)
  975.     REG AH = 20H
  976.     On Return:
  977.        AL = 0
  978.  -----------------------------------------------------------
  979.  INT 21 - RANDOM DISK RECORD READ (MSDOS generic)
  980.     REG AH = 21H
  981.     REG DS = SEGMENT ADDRESS OF FCB
  982.     REG DX = OFFSET ADDRESS OF FCB
  983.     ON RETURN:
  984.        REG AL = 0 = SUCCESSFUL READ
  985.         1 = END OF FILE
  986.         2 = DATA TRANSFER AREA TOO SMALL
  987.         3 = PARTIAL RECORD, EOF
  988.  -----------------------------------------------------------
  989.  INT 21 - Random Disk Write (MSDOS generic)
  990.     REG AH = 22H
  991.     Same setup as Random Read, but writes to disk
  992.  -----------------------------------------------------------
  993.  INT 21 - FILE SIZE (MSDOS generic)
  994.     REG AH = 23H
  995.     REG DS = SEGMENT ADDRESS OF FCB
  996.     REG DX = OFFSET ADDRESS OF FCB
  997.     ON RETURN:
  998.        REG AL = 00 = FILE FOUND
  999.         FF = FILE NOT FOUND
  1000.        FCB SET TO NO. OF RECORDS
  1001.  -----------------------------------------------------------
  1002.  INT 21 - Set Random Record Field (MSDOS generic)
  1003.     REG AH = 24H
  1004.     REG DS = SEGMENT ADDRESS OF FCB
  1005.     REG DX = OFFSET ADDRESS OF FCB
  1006.     FCB must be OPEN already
  1007.     On Return:
  1008.        Random Record Field of FCB is set to be
  1009.        same as Current Block and Current Record.
  1010.     No error code is returned.
  1011.  -----------------------------------------------------------
  1012.  INT 21 - Set Interrupt Vector (MSDOS generic)
  1013.     REG AH = 25H
  1014.     Reg AL = INT number
  1015.     DS:DX = new vector to be used for specified INT
  1016.     On Return:
  1017.        Registers are unchanged; no error codes
  1018.  -----------------------------------------------------------
  1019.  INT 21 - Create PSP (MSDOS generic)
  1020.     REG AH = 26H
  1021.     Reg DX = Segment number to set up PSP at
  1022.     On Return:
  1023.        Current PSP is copied to specified segment
  1024.  -----------------------------------------------------------
  1025.  INT 21 - RANDOM BLOCK READ (MSDOS generic)
  1026.     REG AH = 27H
  1027.     REG DS = SEGMENT ADDRESS OF FCB
  1028.     REG DX = OFFSET ADDRESS OF FCB
  1029.     REG CX = NO. OF RECORDS TO BE READ
  1030.     ON RETURN:
  1031.        REG AL = 0 = SUCCESSFUL READ
  1032.         1 = END OF FILE
  1033.         2 = DATA TRANSFER AREA TOO SMALL
  1034.         3 = PARTIAL RECORD, EOF
  1035.  -----------------------------------------------------------
  1036.  INT 21 - RANDOM BLOCK WRITE (MSDOS generic)
  1037.     REG AH = 28H
  1038.     REG DS = SEGMENT ADDRESS OF FCB
  1039.     REG DX = OFFSET ADDRESS OF FCB
  1040.     REG CX = NO. OF RECORDS TO BE WRITTEN
  1041.     ON RETURN:
  1042.        REG AL = 0 = SUCCESSFUL WRITE
  1043.         1 = DISKETTE FULL
  1044.         2 = DATA TRANSFER AREA TOO SMALL
  1045.  -----------------------------------------------------------
  1046.  INT 21 - Parse Filename (MSDOS generic)
  1047.     REG AH = 29H
  1048.     DS:SI = POINTER TO STRING TO PARSE
  1049.     ES:DI = POINTER TO MEMORY TO FILL WITH UNOPENED FCB
  1050.     AL = BIT MASK TO CONTROL PARSING
  1051.             BIT 0 = 0: PARSING STOPS IF FILE SEPERATOR FOUND
  1052.             1: LEADING SEPERATOR IGNORED
  1053.         1 = 0: DRIVE NUMNER IN FCB SET TO DEFAULT IF
  1054.             STRING CONTAINS NO DRIVE NUMBER
  1055.             1: DRIVE NUMBER IN FCB NOT CHANGED
  1056.         2 = 0: FILENAME IN FCB SET TO BLANKS IF NO
  1057.             FILENAME IN STRING
  1058.             1: FILENAME IN FCB NOT CHANGED IF STRING 
  1059.             DOES NOT CONTAIN A FILENAME
  1060.         3 = 0: EXTENSION IN FCB SET TO BLANKS IF NO
  1061.             EXTENSION IN STRING
  1062.             1: EXTENSION LEFT UNCHANGED
  1063.     ON RETURN:
  1064.     REG AL = 00: NO WILDCARDS IN NAME OR EXTENSION
  1065.          01: WILDCARDS APPEARED IN NAME OR EXTENSION
  1066.         DS:SI = POINTER TO FIRST BYTE AFTER PARSED STRING
  1067.         ES:DI = UNOPENED FCB
  1068.  -----------------------------------------------------------
  1069.  INT 21 - GET CURRENT DATE (MSDOS generic)
  1070.     REG AH = 2AH
  1071.     ON RETURN:
  1072.        REG DL = DAY
  1073.        REG DH = MONTH
  1074.        REG CX = YEAR
  1075.        REG AL = DAY OF THE WEEK (0=SUNDAY, 1=MONDAY, ETC.)
  1076.  -----------------------------------------------------------
  1077.  INT 21 - Set CURRENT DATE (MSDOS generic)
  1078.     REG AH = 2bH
  1079.     REG DL = DAY
  1080.     REG DH = MONTH
  1081.     REG CX = YEAR
  1082.     On Return:
  1083.        AL = 0 if no error
  1084.        AL = 0ffH if bad value sent to routine
  1085.  -----------------------------------------------------------
  1086.  INT 21 - GET CURRENT TIME (MSDOS generic)
  1087.     REG AH = 2CH
  1088.     ON RETURN:
  1089.        REG CH = HOURS
  1090.        REG CL = MINUTES
  1091.        REG DH = SEC
  1092.        REG DL = SEC/100
  1093.     NOTE: TIME IS UPDATED EVERY 5/100 SECOND
  1094.  -----------------------------------------------------------
  1095.  INT 21 - Set CURRENT TIME (MSDOS generic)
  1096.     REG AH = 2DH
  1097.     REG CH = HOURS
  1098.     REG CL = MINUTES
  1099.     REG DH = SEC
  1100.     REG DL = SEC/100
  1101.     On Return:
  1102.        AL = 0 if no error
  1103.        AL = 0ffH if bad value sent to routine
  1104.  -----------------------------------------------------------
  1105.  INT 21 - Set Verify Flag (MSDOS generic)
  1106.     REG AH = 2EH
  1107.      DL = 0
  1108.     AL = 1 if VERIFY on
  1109.     AL = 0 if VERIFY off
  1110.  -----------------------------------------------------------
  1111.  INT 21 - Get Disk Transfer Area Address (MSDOS generic)
  1112.     REG AH = 2FH
  1113.     On Return:
  1114.        Reg ES = SEGMENT address of DTA
  1115.        Reg BX = OFFSET address of DTA
  1116.  -----------------------------------------------------------
  1117.  INT 21 - Get DOS Version (MSDOS generic)
  1118.     REG AH = 30H
  1119.     On Return:
  1120.        Reg AL = Major Version number
  1121.        Reg AH = Minor Version number
  1122.                 (i.e., DOS 2.10 returns AX = 0A02H)
  1123.        Reg BH = OEM number
  1124.        Reg BL:CX = 24-bit user number
  1125.  -----------------------------------------------------------
  1126.  INT 21 - TERMINATE BUT STAY RESIDENT (MSDOS generic)
  1127.     REG AH = 31H
  1128.     REG AL = EXIT CODE
  1129.     REG DX = PROGRAM SIZE, IN PARAGRAPHS
  1130.         ADDRESS IN HEX - XX XX 0 -
  1131.     ON RETURN:
  1132.     REG AX = RETURN CODE (RETRIEVEABLE BY FUNCTION 4DH)
  1133.  -----------------------------------------------------------
  1134.  INT 21 - GET DRIVE PARAMETER BLOCK (MSDOS generic, undocumented)
  1135.     REG AH = 32H
  1136.     DL = DRIVE NUMBER
  1137.         0 = DEFAULT, 1 = A, ETC.
  1138.     ON RETURN:
  1139.     REG AL = 0FFH IF INVALID DRIVE NUMBER, ELSE
  1140.         DS:BX = ADDRESS OF DRIVE PARAMETER BLOCK.
  1141.  
  1142.         STRUCTURE OF DOS DRIVE PARAMETER BLOCK:
  1143.  
  1144. DPBLOCK     STRUCT        ;OFFSET
  1145. DISK_OFFSET    DB    ?    ;  0.  DRIVE NUMBER (0 = A, ETC.)
  1146. UNIT_OFFSET    DB    ?    ;  1.  UNIT NUMBER WITHIN DEVICE DRIVER
  1147. SECTOR_SIZE    DW    ?    ;  2.  NUMBER OF BYTES PER SECTOR
  1148. MAX_CLUSTER    DB    ?    ;  4.  LARGEST SECTOR NUMBER IN CLUSTER
  1149.                 ;      ADD ONE FOR NUMBER OF SECTORS/CLUSTER
  1150. LOG2_SECTORS    DB    ?    ;  5.  LOG BASE TWO OF THE CLUSTER SIZE
  1151. RESERVED    DW    ?    ;  6.  NUMBER OF RESERVED (BOOT) SECTORS
  1152. FAT_COUNT    DB    ?    ;  8.  NUMBER OF COPIES OF THE FAT
  1153. ROOT_COUNT    DW    ?    ;  9.  NUMBER OF ROOT DIRECTORY ENTRIES
  1154. DATA_START    DW    ?    ; 11.  FIRST SECTOR OF DATA ON MEDIUM
  1155. MAX_NUMBER    DW    ?    ; 13.  LARGEST POSSIBLE CLUSTER NUMBER
  1156.                 ;      SUBTRACT ONE FOR NUMBER OF CLUSTERS
  1157. FAT_SECTORS    DB    ?    ; 15.  NUMBER OF SECTORS IN ONE FAT COPY
  1158. ROOT_START    DW    ?    ; 16.  FIRST SECTOR OF ROOT DIRECTORY
  1159. DEVICE_ADDR    DD    ?    ; 18.  CORRESPONDING DEVICE DRIVER ADDRESS
  1160. DESCRIPTOR    DB    ?    ; 22.  MEDIA DESCRIPTOR BYTE FOR MEDIUM
  1161. VALID_BYTE    DB    ?    ; 23.  0FFH INDICATES BLOCK MUST BE REBUILT
  1162. NEXT_BLOCK    DD    ?    ; 24.  ADDRESS OF NEXT DEVICE BLOCK IN LIST
  1163.  
  1164. ;    FROM THIS POINT ON, DOS 3 DIFFERS FROM 2:
  1165.  
  1166.         IF    DOS2
  1167. DIR_START    DW    ?    ; 28.  STARTING CLUSTER OF CURRENT DIRECTORY
  1168.                 ;      ZERO INDICATES THE ROOT DIRECTORY
  1169. PATH_NAME    DB    64 DUP (?)
  1170.                 ; 30.  ASCIIZ CURRENT DIRECTORY PATH STRING
  1171.         ELSE    DOS3
  1172. ;        ON MY XT, THIS WAS ALWAYS:
  1173.         DW    0
  1174.         DW    0FFFFH
  1175.         ENDIF
  1176. DPBLOCK     ENDS
  1177.  -----------------------------------------------------------
  1178.  INT 21 - Get or Set CONTROL-BREAK (MSDOS generic)
  1179.     REG AH = 33H
  1180.     Reg AL = 0 for Get or 1 for Put
  1181.     Reg DL = 0 for OFF or 1 for ON
  1182.     On Return:
  1183.      DL = 0 if BREAK=OFF or 1 if BREAK=ON
  1184.     AL = FFH IF ERROR
  1185.  -----------------------------------------------------------
  1186.  INT 21 - Internal - Return CritSectFlag Pointer (MSDOS generic)
  1187.     REG AH = 34H
  1188.     On Return:
  1189.        ES:BX points to DOS "Critical Section Flag"
  1190.     When byte pointed to is zero, DOS is supposed to be
  1191.     safe to interrupt. NOT RELIABLE according to Chris
  1192.     Dunford.
  1193.        Examination of DOS 2.10 code in this area
  1194.     indicates that the byte immediately FOLLOWING this
  1195.     "Critical Section Flag" must be 00 to permit the
  1196.     PRINT.COM interrupt to be called. This suggests that
  1197.     checking the WORD pointed to, rather than the BYTE,
  1198.     might increase reliability of the test greatly.
  1199.  -----------------------------------------------------------
  1200.  INT 21 - Get Interrupt Vector (MSDOS generic)
  1201.     REG AH = 35H
  1202.     Reg AL = INT number
  1203.     On Return:
  1204.        Reg ES = Segment address of INT vector
  1205.        Reg BX = Offset address of INT vector
  1206.  -----------------------------------------------------------
  1207.  INT 21 - DISK SPACE (MSDOS generic)
  1208.     REG AH = 36H
  1209.     REG DL = DRIVE NUMBER (1-4)
  1210.     ON RETURN:
  1211.        REG AX = ? (SIDES)
  1212.        REG BX = ? (BLOCKS FREE)
  1213.        REG CX = ? (BLOCK SIZE)
  1214.        REG DX = ? (TOTAL BLOCKS)
  1215.     NOTE: MULT AX x CX x BX for FREE SPACE ON DISK
  1216.    MULT AX x CX x DX for TOTAL DISK SPACE
  1217.  -----------------------------------------------------------
  1218.  INT 21 - Internal - multifunction (MSDOS generic)
  1219.     AH=37h
  1220.     AL=0    Read switch character (returns current character in DL)
  1221.        1    Set switch character (specify new character in DL)
  1222.        2    Read device availability (as set by function AL=3)
  1223.        3    Set device availability, where:
  1224.         DL=0 means /DEV/ must preceed device names
  1225.         DL#0 means /DEV/ need not preceed device names
  1226.  
  1227.     Returns:
  1228.  
  1229.     DL =    Switch character (if AL=0 or 1)
  1230.         Device availability flag (if AL=2 or 3)
  1231.  
  1232.     Error return:    
  1233.  
  1234.     AL=0FFh means the value in AL was not in the range 0-3.
  1235.  
  1236.     Note:
  1237.  
  1238.     Functions 2 & 3 appear not to be implemented for dos 3.x
  1239.  -----------------------------------------------------------
  1240.  INT 21 - Get Country-Dependent Information (MSDOS generic)
  1241.     REG AH = 38H
  1242.     Complex and differs between Dos 2.x and Dos 3.x
  1243.     See Peter Norton "Programmer's Guide to the IBM PC", p. 305 
  1244.  -----------------------------------------------------------
  1245.  INT 21 - CREATE A SUBDIRECTORY (MSDOS generic)
  1246.     REG AH = 39H
  1247.     Reg DS = SEGMENT address of ASCIIZ pathname
  1248.     Reg DX = OFFSET address of ASCIIZ pathname
  1249.     On Return:
  1250.        Flag CF = 0 = SUCCESSFUL
  1251.          1 = ERROR
  1252.        Reg AX = Error Code if any
  1253.  -----------------------------------------------------------
  1254.  INT 21 - REMOVE A DIRECTORY ENTRY (MSDOS generic)
  1255.     REG AH = 3AH
  1256.     Reg DS = SEGMENT address of ASCIIZ pathname
  1257.     Reg DX = OFFSET address of ASCIIZ pathname
  1258.     On Return:
  1259.        Flag CF = 0 = SUCCESSFUL
  1260.          1 = ERROR
  1261.        Reg AX = Error Code if any
  1262.  -----------------------------------------------------------
  1263.  INT 21 - CHANGE THE CURRENT DIRECTORY (MSDOS generic)
  1264.     REG AH = 3BH
  1265.     Reg DS = SEGMENT address of ASCIIZ
  1266.     Reg DX = OFFSET address of ASCIIZ
  1267.     On Return:
  1268.        Flag CF = 0 = SUCCESSFUL
  1269.          1 = ERROR
  1270.        Reg AX = Error Code if any
  1271.  -----------------------------------------------------------
  1272.  INT 21 - CREATE A FILE WITH HANDLE (MSDOS generic)
  1273.     REG AH = 3CH
  1274.     REG CX = ATTRIBUTES FOR FILE
  1275.     REG DS = SEGMENT ADDRESS OF ASCIIZ
  1276.     REG DX = OFFSET ADDRESS OF ASCIIZ
  1277.     ON RETURN:
  1278.        FLAG CF = 0 = SUCCESSFUL CREATION
  1279.          1 = ERROR
  1280.        REG AX = FILE HANDLE
  1281.          OR ERROR CODE
  1282.  -----------------------------------------------------------
  1283.  INT 21 - OPEN DISK FILE WITH HANDLE (MSDOS generic)
  1284.     REG AH = 3DH
  1285.     REG AL = ACCESS CODE
  1286.        0 = Read Only
  1287.        1 = Write Only
  1288.        2 = Read/Write
  1289.     REG DS = SEGMENT ADDRESS OF ASCIIZ
  1290.     REG DX = OFFSET ADDRESS OF ASCIIZ
  1291.     ON RETURN:
  1292.        FLAG CF = 0 = SUCCESSFUL OPENING
  1293.          1 = ERROR
  1294.        REG AX  = FILE HANDLE
  1295.      OR ERROR CODE
  1296.  -----------------------------------------------------------
  1297.  INT 21 - CLOSE A FILE WITH HANDLE (MSDOS generic)
  1298.     REG AH = 3EH
  1299.     REG BX = FILE HANDLE
  1300.     ON RETURN:
  1301.        FLAG CF = 0 = SUCCESSFUL CLOSE
  1302.          1 = ERROR
  1303.        REG AX  = ERROR CODE IF ERROR
  1304.  -----------------------------------------------------------
  1305.  INT 21 - READ FROM FILE WITH HANDLE (MSDOS generic)
  1306.     REG AH = 3FH
  1307.     REG BX = FILE HANDLE
  1308.     REG CX = NO. OF BYTES TO READ
  1309.     REG DS = SEGMENT ADDRESS OF BUFFER
  1310.     REG DX = OFFSET ADDRESS OF BUFFER
  1311.     ON RETURN:
  1312.        FLAG CF = 0 = SUCCESSFUL READ
  1313.          1 = ERROR
  1314.        REG AX = 0 = END OF FILE
  1315.         OR NO. OF BYTES READ
  1316.         OR ERROR CODE
  1317.  -----------------------------------------------------------
  1318.  INT 21 - WRITE TO FILE WITH HANDLE (MSDOS generic)
  1319.     REG AH = 40H
  1320.     REG BX = FILE HANDLE
  1321.     REG CX = NO. OF BYTES TO Write
  1322.     REG DS = SEGMENT ADDRESS OF BUFFER
  1323.     REG DX = OFFSET ADDRESS OF BUFFER
  1324.     ON RETURN:
  1325.        FLAG CF = 0 = SUCCESSFUL WRITE
  1326.          1 = ERROR
  1327.        REG AX =  NO. OF BYTES Writtten
  1328.      OR ERROR CODE
  1329.  -----------------------------------------------------------
  1330.  INT 21 - DELETE A FILE (MSDOS generic)
  1331.     REG AH = 41H
  1332.     REG DS = SEGMENT OF ASCIIZ TO DELETE
  1333.     REG DX = OFFSET OF ASCIIZ TO DELETE
  1334.     On Return:
  1335.        Flag CF = 0 = SUCCESSFUL
  1336.          1 = ERROR
  1337.        Reg AX = Error Code if any
  1338.  -----------------------------------------------------------
  1339.  INT 21 - MOVE FILE READ/WRITE POINTER (MSDOS generic)
  1340.     REG AH = 42H
  1341.     REG AL = METHOD VALUE
  1342.        0 = offset from beginning of file
  1343.        1 = offset from present location
  1344.        2 = offset from end of file
  1345.     REG BX = FILE HANDLE
  1346.     REG CX = BYTES OFFSET HIGH
  1347.     REG DX = BYTES OFFSET LOW
  1348.     ON RETURN:
  1349.        FLAG CF = 0 = SUCCESSFUL MOVE
  1350.          1 = ERROR
  1351.        REG DX = NEW LOC. OF R/W POINTER HIGH
  1352.        REG AX = NEW LOC. OF R/W POINTER LOW
  1353.            ERROR CODE IF ERROR
  1354.  -----------------------------------------------------------
  1355.  INT 21 - GET/PUT FILE ATTRIBUTES (MSDOS generic)
  1356.     REG AH = 43H
  1357.     REG AL = 0 = GET FILE ATTRIBUTES
  1358.          1 = PUT FILE ATTRIBUTES
  1359.     REG CX = FILE ATTRIBUTES ON PUT
  1360.         BIT 0 = READ ONLY
  1361.         1 = HIDDEN FILE
  1362.         2 = SYSTEM FILE
  1363.         3 = VOLUME LABEL
  1364.         4 = SUBDIRECTORY
  1365.         5 = WRITTEN SINCE BACKUP
  1366.     REG DX = POINTER TO FILE ASCIIZ FILE NAME
  1367.     ON RETURN:
  1368.        FLAG CF = SET IF ERROR
  1369.        REG AX = Error Code 1, 3, or 5
  1370.        REG CX = FILE ATTRIBUTES ON GET
  1371.  -----------------------------------------------------------
  1372.  INT 21 - IOCTL (MSDOS generic)
  1373.     REG AH = 44H
  1374.     Complex. See T2K manual pages 121-124
  1375.  -----------------------------------------------------------
  1376.  INT 21 - Create Duplicate Handle (MSDOS generic)
  1377.     REG AH = 45H
  1378.     Reg BX = file handle to duplicate
  1379.     On Return:
  1380.        If carry set, AX = Error Code
  1381.        If carry clear, AX = duplicate handle
  1382.  -----------------------------------------------------------
  1383.  INT 21 - Force Duplicate Handle (MSDOS generic)
  1384.     REG AH = 46H
  1385.     Reg BX = Existing file handle
  1386.     Reg CX = new file handle
  1387.     On Return:
  1388.        If CF set, AX = Error Code
  1389.        If clear, both handles now refer to
  1390.           Existing file
  1391.  -----------------------------------------------------------
  1392.  INT 21 - Get Current Directory (MSDOS generic)
  1393.     REG AH = 47H
  1394.     Reg DL = drive (0=default, 1=A, etc.)
  1395.     DS:SI points to 64-byte buffer area
  1396.     On Return:
  1397.        If CY set, AX = Error Code
  1398.        Else DS:DI points to ASCIIZ name of
  1399.     current directory (not including drive ID)
  1400.  -----------------------------------------------------------
  1401.  INT 21 - Allocate Memory (MSDOS generic)
  1402.     REG AH = 48H
  1403.     Reg BX = number of 16-byte paragraphs desired
  1404.     On Return:
  1405.        If CF set:
  1406.           BX = Maximum number available
  1407.        If CF clear:
  1408.           AX = Segment address of allocated space
  1409.  -----------------------------------------------------------
  1410.  INT 21 - Free Memory (MSDOS generic)
  1411.     REG AH = 49H
  1412.     Reg ES = Segment address of area to be freed
  1413.     On Return:
  1414.        If CF set, AX = Error Code
  1415.  -----------------------------------------------------------
  1416.  INT 21 - Adjust Block Size (MSDOS generic)
  1417.     REG AH = 4AH
  1418.     Reg ES = Segment address of block to change
  1419.     Reg BX = New size in paragraphs
  1420.     On Return:
  1421.        If CF set, BX = max number available
  1422.        Else operation was successful
  1423.  -----------------------------------------------------------
  1424.  INT 21 - Load or Execute (MSDOS generic)
  1425.     REG AH = 4BH
  1426.     Complex. See T2K manual pages 131-133
  1427.  -----------------------------------------------------------
  1428.  INT 21 - Quit With Exit Code (MSDOS generic)
  1429.     REG AH = 4CH
  1430.     Reg AL = exit code
  1431.     Does not return. Control passes to DOS
  1432.  -----------------------------------------------------------
  1433.  INT 21 - GET EXIT CODE OF SUBPROGRAM (MSDOS generic)
  1434.     REG AH = 4DH
  1435.     On Return:
  1436.     AL = exit code of subprogram (FNs 31H or 4cH)
  1437.     AH = circumstance which caused termination
  1438.         0 = Terminate/abort
  1439.         1 = Control-C
  1440.         2 = Hard error
  1441.         3 = Terminate and stay resident
  1442.  -----------------------------------------------------------
  1443.  INT 21 - Find First ASCIIZ (MSDOS generic)
  1444.     REG AH = 4EH
  1445.     CX = SEARCH ATTRIBUTES
  1446.     DS:DX = POINTER TO ASCIIZ FILENAME (WITH ATTRIBUTES)
  1447.     ON RETURN:
  1448.     IF CF SET, REG AX = ERROR CODE
  1449.          ELSE, DATA BLOCK WRITTEN AT CURRENT DTA
  1450.  -----------------------------------------------------------
  1451.  INT 21 - Find Next ASCIIZ (MSDOS generic)
  1452.     REG AH = 4FH
  1453.     ON RETURN:
  1454.     IF CF SET, AX = ERROR CODE
  1455.          ELSE, DATA BLOCK WRITTEN AT CURRENT DTA
  1456.  -----------------------------------------------------------
  1457.  INT 21 - Internal - Set PSP Segment (MSDOS generic)
  1458.     REG AH = 50H
  1459.     Reg BX = Segment address of new PSP
  1460.     On Return:
  1461.        No return codes
  1462.  -----------------------------------------------------------
  1463.  INT 21 - Internal - Get PSP Segment (MSDOS generic)
  1464.     REG AH = 51H
  1465.     On Return:
  1466.        BX = Current PSP Segment
  1467.  -----------------------------------------------------------
  1468.  INT 21 - Internal - Unknown (MSDOS generic)
  1469.     REG AH = 52H
  1470.     On Return:
  1471.        Unknown pointer in ES:BX
  1472.  -----------------------------------------------------------
  1473.  INT 21 - Internal - Unknown (MSDOS generic)
  1474.     REG AH = 53H
  1475.     On Return:
  1476.        Unknown
  1477.  -----------------------------------------------------------
  1478.  INT 21 - Get Verify Flag (MSDOS generic)
  1479.     REG AH = 54H
  1480.     On Return:
  1481.        AL = 0 if flag OFF
  1482.        AL = 1 if flag ON
  1483.  -----------------------------------------------------------
  1484.  INT 21 - Internal - Create PSP (MSDOS generic)
  1485.     REG AH = 55H
  1486.     Like FN 26H but creates "child" PSP rather
  1487.     than copying existing one.
  1488.  -----------------------------------------------------------
  1489.  INT 21 - RENAME A FILE (MSDOS generic)
  1490.     REG AH = 56H
  1491.     REG DS = SEGMENT OF ASCIIZ OLD NAME
  1492.     REG DX = OFFSET OF ASCIIZ OLD NAME
  1493.     REG ES = SEGMENT OF ASCIIZ NEW NAME
  1494.     REG DI = OFFSET OF ASCIIZ NEW NAME
  1495.     ON RETURN:
  1496.        FLAG CF = CLEARED = SUCCESSFULL RENAME
  1497.      SET = ERROR &
  1498.      REG AX = ERROR CODE
  1499.  -----------------------------------------------------------
  1500.  INT 21 - Get/Put Date/Time (MSDOS generic)
  1501.     REG AH = 57H
  1502.     AL = FUNCTION CODE
  1503.         0 = GET DATE AND TIME
  1504.         1 = SET DATE AND TIME
  1505.     BX = FILE HANDLE
  1506.     CX = TIME TO BE SET (IF AL = 1)
  1507.     DX = DATE TO BE SET (IF AL = 1)
  1508.     ON RETURN:
  1509.     IF CF SET:
  1510.         REG AX = ERROR CODE
  1511.     IF CF NOT SET:
  1512.         REG CX = TIME OF LAST WRITE (IF AL = 0)
  1513.             DX = DATE OF LAST WRITE (IF AL = 0)
  1514.  -----------------------------------------------------------
  1515.  INT 21 - GET EXTENDED ERROR CODE (DOS 3.X generic)
  1516.     REG AH = 59H
  1517.     BX = VERSION CODE (0000 FOR DOS 3.0)
  1518.     ON RETURN:
  1519.     REG AX = EXTENDED ERROR CODE
  1520.         BH = CLASS OF ERROR
  1521.         BL = SUGGESTED ACTION CODE
  1522.         CH = LOCUS (WHERE ERROR OCCURRED)
  1523.  -----------------------------------------------------------
  1524.  INT 21 - CREATE TMEPORARY FILE (DOS 3.x generic)
  1525.     REG AH = 5AH
  1526.     DS:DX = POINTER TO DIRECTORY PATH NAME
  1527.     CX = FILE ATTRIBUTE
  1528.     ON RETURN:
  1529.     REG AX = ERROR CODE (IF CF SET)
  1530.         DS:DX = PATH NAME (IF CF NOT SET)
  1531.  
  1532.  NOTE: THE FILE CREATED IS NOT TRULY "TEMPORARY". IT MUST BE
  1533.  REMOVED BY THE USER.
  1534.  -----------------------------------------------------------
  1535.  INT 21 - CREATE NEW FILE (DOS 3.x generic)
  1536.    REG AH = 5BH
  1537.     DS:DX = POINTER TO DIRECTORY PATH NAME
  1538.     CX = FILE ATTRIBUTE
  1539.     ON RETURN:
  1540.     REG AX = ERROR CODE (IF CF SET)
  1541.         DS:DX = PATH NAME (IF CF NOT SET)
  1542.  
  1543.  NOTE: UNLIKE FUNCTION 3CH, FUNCTION 5BH WILL FAIL IF THE
  1544.  ALREADY EXISTS.
  1545.  -----------------------------------------------------------
  1546.  INT 21 - LOCK/UNLOCK FILE ACCESS (DOS 3.x generic)
  1547.     REG AH = 5CH
  1548.     AL = 0 IF LOCK
  1549.          1 IF UNLOCK
  1550.     BX = FILE HANDLE
  1551.     CX:DX = OFFSET TO LOCK
  1552.     SI:DI = AMOUNT TO LOCK
  1553.     ON RETURN:
  1554.     REG AX = ERROR CODE (IF CF SET)
  1555.  -----------------------------------------------------------
  1556.  INT 21 - GET PSP ADDRESS (DOS 3.x generic)
  1557.     REG AH = 62H
  1558.     ON RETURN:
  1559.     REG BX = SEGMENT ADDRESS OF PSP
  1560.  -----------------------------------------------------------
  1561.  INT 22 - TERMINATE ADDRESS (MSDOS generic)
  1562.     FAR (DWORD) address of routine to be executed
  1563.  when program "returns to DOS". Should NOT ever be called.
  1564.  -----------------------------------------------------------
  1565.  INT 23 - CONTROL "C" EXIT ADDRESS (MSDOS generic)
  1566.     Automatically called from keyboard scanner when
  1567.  CTRL-C or CTRL-BREAK is detected. Normally aborts program
  1568.  and returns to DOS, but may be changed.
  1569.  -----------------------------------------------------------
  1570.  INT 24 - FATAL ERROR ABORT ADDRESS (MSDOS generic)
  1571.     Automatically called upon detection of unrecoverable
  1572.  disk error. Normally prints "Abort, Retry, or Ignore?" message
  1573.  and takes the reply, but may be changed if desired.
  1574.  -----------------------------------------------------------
  1575.  INT 25 - ABSOLUTE DISK READ (MSDOS generic)
  1576.     Similar to INT 13 function, but this one is generic
  1577.  for all MSDOS rather than being machine specific.
  1578.     ENTRY CONDITIONS:
  1579.     AL = Drive number (0=A, 1=B, etc)
  1580.     DS:BX = Disk Transfer Address (buffer)
  1581.     CX = Number of sectors to read
  1582.     DX = First relative sector to read. 0 reads boot
  1583.          sector, 1 reads FAT, etc.
  1584.     EXIT:
  1585.     If carry set, AL=error code.
  1586.     If carry not set, operation successful.
  1587.     NOTE:  This routine PUSHes the flags onto the stack when it
  1588.     is called, and does NOT remove them at exit. Be sure
  1589.     to POP the stack immediately after returning, to
  1590.     prevent overflow. All of the registers, not just
  1591.     those listed, are changed by the routine.
  1592.  -----------------------------------------------------------
  1593.  INT 26 - ABSOLUTE DISK WRITE (MSDOS generic)
  1594.     All parameters and conditions are the same as for
  1595.     INT 25, except that this routine WRITES to the disk
  1596.     rather than READing from it. Note that it does NOT
  1597.     update the FAT, directories, etc., and can easily
  1598.     destroy a disk unless carefully used.
  1599.  -----------------------------------------------------------
  1600.  INT 27 - TERMINATE BUT STAY RESIDENT (MSDOS generic)
  1601.     REG CS = CURRENT PROGRAM SEGMENT
  1602.     REG DX = LAST PROGRAM BYTE + 1
  1603.     NOTE:     RETURN IS TO DOS
  1604.  -----------------------------------------------------------
  1605.  INT 28 - Internal routine for MSDOS
  1606.     This interrupt is called from inside the "get input
  1607.  from keyboard" routine in DOS, if and only if it is safe to use
  1608.  INT 21 to access the disk at that time. It is used primarily by
  1609.  the PRINT.COM routines, but any number of other routines could
  1610.  be chained to it by saving the original vector, and calling it
  1611.  with a FAR call (or just JMPing to it) at the end of the new
  1612.  routine.
  1613.     Until PRINT.COM installs its own routine, this
  1614.  interrupt vector simply points to an IRET opcode.
  1615.  -----------------------------------------------------------
  1616.  INT 29 - Internal routine for MSDOS
  1617.     This interrupt is called from the DOS output routines
  1618.  if output is going to a device rather than a file, and the
  1619.  device driver's attribute word has bit 3 (04H) set to "1".
  1620.  Nothing more is known about it at this time.
  1621.  -----------------------------------------------------------
  1622.  INT 2E - UNKNOWN
  1623.  -----------------------------------------------------------
  1624.  INT 30 - UNKNOWN
  1625.  -----------------------------------------------------------
  1626.  INT 31 - UNKNOWN
  1627.  -----------------------------------------------------------
  1628.  INT 33 - USED BY MICROSOFT MOUSE
  1629.     FUNCTIONS AND PARAMETERS UNKNOWN
  1630.  -----------------------------------------------------------
  1631.  INT F8 - INTERVAL TIMER (10 MSEC)
  1632.     PARAMETERS UNKNOWN
  1633.  -----------------------------------------------------------
  1634.  INT FA - USART READY (RS-232C)
  1635.     PARAMETERS UNKNOWN
  1636.  -----------------------------------------------------------
  1637.  INT FB - USART Rx READY (keyboard)
  1638.     PARAMETERS UNKNOWN
  1639.  -----------------------------------------------------------
  1640.