home *** CD-ROM | disk | FTP | other *** search
/ Compu-Fix / Compu-Fix.iso / referenz / text / msint.doc < prev    next >
Encoding:
Text File  |  1993-03-01  |  61.1 KB  |  1,635 lines

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