Since I had some info which did not appear in: (unusually complete) list of interrupt calls. I have added to it and am now re-posting the augmented list.

//----------------------------------------------------------

 INT O. DIVIDE ERROR / MATH FU**-UP
automatically called at end of DIV or IDIV operation that results in error. Normally set by DOS to display an error message and abort the Program'
 INT 1. SINGLE.STEP
 Generated at end of each machine instruction if TF bit in FLAGS is set. This is what makes the T command of DEBUG work tor single-stepping. Is not generated after MOV to segment register or POP of segment register'
 INT 2 - NMI (Non Maskable Interrupt)
 Generated by NMI-signal in hardware' Used in IBM for memory Parity error trapping'
 INT3.I-BYTE INTERRUPT
 Generated by opcode OCCh. Similar to 8O8O's RST instruction. Generally used to set breakpoints for DEBUG
INT 4 - Overflow (internal interrupt)
 *Generated by INTO instruction if OF flag is set. If flag is not set, INTO is effectively a NOP' Used to trap any
 arithmetic errors when program is ready to handle them rather than immediately when they occur'
 INT 5 - Print-Screen Key
Automatically called by keyboard scan when print screen key is pressed. Normally executes routine to print the screen but may calt any routine that can safely be executed from inside the keyboard scanner.  Status and result byte at address OO5O:OOOO'
 INT5 - BOUND check failed (80286 internal interrupt)
 INT 6 - Undefined Opcode (80286 internal interrupt)
INT 7 - No Math Unit Available (8O286 protected-mode internal)
INT 8 thru 0F - vectorized hardware lines. In IBM, these 8 interrupts are generated in
 response. to IRQ 0 through IRQ 7 (if enabled via port 21)'
 [Tandy 1OOO]
 IRQO
IRQ1 timer interrupt
 IRQ2 keyboard interrupt
 IRQ3 EGA vertical retrace [fixed disk]
 IRQ4 serial Port 2 (com2:)
 IRQs serial Port 1 (com1:)
 rRQ6 rixea dist 
IRQ7
(LPT2 on PCIAT)
 diskette interrupt
 [6ohz ram refresh]
 PPI interrupt (lPt1, lPt2:)
 INT 8 - Double Fault (8O286 protected-mode internal)
 INT 9 - Math Unit Protection Fault (80286 protected-mode interna!)
 INT 0A - Invalid Task State Segment (80286 protected-mode internal)
 INT 0B - Not Present (8O286 protected-mode internal)
 INT 0C - Stack Fault (aO286 protected-mode internal)
 INT 0D-GeneralProtectionViolation(80286protected-mode internal)
 INT 10 - VIDEO - SET VIDEO MODE
 AH=O
 AL=
 O = 4Ox25 B&W
 1 = 4Ox25 COLOR
 2 = 8Ox25 BW
 3 = 8Ox25 COLOR
 4 = 32Ax2OO GRAPHICS,4 COLOR
 5 = 32Ox2OO GRAPHICS, 4 GREY
 6 = 64Ox2OO GRAPHICS' B&W
 7 = I'IONOCHROME
 8 = 16Ox2OO GRAPHICS, 15 COLOR (PCirlTandy IOOO)
 9 = 32Ox2OO GRAPHICS, 16 COLOR (PCjrlTandy looo)
 A = 64Ox2OO GRAPHICS, 4 COLOR (PCjrlTandy IOOO)
 D = 32Ox2OO graphics, 15 color (EGA)
 E = 64Ox2OO graphics, 16 color (EGA)
 F = 64Ox35O graphics, monochrome (EGA)
 1O = 64Ox35O graphtcs,4 or 16 color (EGA)
 INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
 AH=1
 CH= bits 5-5 = blink attribute
 (O0=normal, O1=invis., 1O = slow,- 11=fast)
 bits O-4 = start line for cursor in char' cell
 CL= 
bits O-4 = end line for cursor in char' cell
 INT 10 - VIDEO - SET CURSOR POSITION
 AH=2
DH, DL = ROW, COLUMN - O, O = UPPER LEFT
 BH = PAGE NO. - O = GRAPHICS
 INT TO - VIDEO - READ CURSOR POSITION
 AH=3
 BH = PAGE NO. - O = GRAPHICS
 Return: DH, DL = ROW, Column
 CH, CL = CURSOR MODE, CURRENT SET
 INT 10 VIDEO READ LIGHT PEN POSITION
 AH=4
 Return: AH = O: light pen switch not activated
 AH = 1: light Pen values in registers
 DH = row of current Position
 DL = column of current Position
 CH = raster line (0-199)
 BX = Pixel column (O-319 or O-639)
 INT 10 - VIDEO - SELECT DISPLAY PAGE
 AH=5
 AL=
 O - 7= NEW PAGE VALUE FOR MODES O & 1
 o - 3: NEW PAGE VALUE FOR MODES 2 & 3
 8OH: READ CRT/CPU PAGE REGISTERS
 81H: SET CPU PAGE REGISTER TO VALUE IN BL
 82H: SET CRT PAGE REGISTER TO VALUE IN BH
 83H: SET BOTH DISPLAY REGISTERS
 Return: BH = CRT PAGE REGISTER
 BL = CPU PAGE REGISTER
 INT 10 - VIDEO - SCROLL PAGE UP
 AH=5
 AL = NO. OF LINES BLANKED AT BOTTOM OF PAGE
 O = BLANK WINDOW
 BH = ATTRIBUTESTO BE USED ON BLANK LINE
 WINDOW:
 Cll,CL = UPPER LEFT CORNER
 DH,DL = LOWER RIGHT CORNER
 INT 10 - VIDEO - SCROLL PAGE DOWN
 All=7
 AL = NO. OF LINES BLANKED AT TOP OF PAGE
 O = BLANK WINDOW
 BH = ATTRIBUTESTO BE USED ON BLANK LINE
 WINDOW:
 CH,CL = UPPER LEFT CORNER
 DH,DL = LOWER RIGHT CORNER
 INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
 AH=8
 BH = DISPLAY PAGE
 Return: AL = CHAR
 AH = ATTRIBUTE OF CHAR - ALPIIA MODE
 INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
 AH=9
 AL = CHARACTER
 BH = DISPLAY PAGE - ALPHA MODE
BL = ATTRIBUTES OF CHAR
 6{ = NO. OF CHAR TO WRITE
 INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
 AH = OAH
 AL = CHARACTER
 gi = DTSPLAY PAGE - ALPHA MODE
 e't = COLOR OF CHARACTER (GRAPHICS lloDE)
 CX = NO. OF CHAR TO WRITE
 INT 10. SET COLOR PALETTE
 AH = OBH
 BH = PALETTE COLOR ID
 BL = COLOR TO BE USED WICOLOR ID
 INT 10. WRITE DOT ON SCREEN
 AH = OCH
 AL = COLOR OF DOT
 DX = ROW (oOoO - O0CT)
 CX = COLUMN (OOOO'O27F)
 NOTE: VIDEO itODES 5 & 7 ONLY
 INT 10. RE.AD DOT ON SCREEN
 AH = ODH
 Q[ = COLUMN (OOOO - O27F)
 DX = ROW (OOOO - OOCT)
 Return: AL = COLOR READ
 INTIo-WRITECHARACTER-ADVANCEcuRsoR(TTYWRITE
 AH = OEH
 AL = CHARACTER
 )
 BL = FOREGROUND COLOR (VIDEO MODES 6 & 7 ONLY)
 INT 10 . GET CURRENT VIDEO MODE
 AH = OFH
 Return: AH = # OF COLUMNS ON SCREEN
 AL = CURRENT VIDEO MODE
 BH = CURRENTACTIVE DISPLAY PAGE
 INT 10 - SET PALEfiE REGISTERS (PCjr AND TANDY IOOO)
 lfl 
= lOH
 AL = O: SET PALETTE REGISTER
 BL = PALETTE REGISTER TO SET
 BH = COLORVALUETO STORE
 AL = 1: SET BORDER COLOR REGISTER
 gH = COLORVALUETO STORE
 AL = 2: SET ALL PALETTE REGISTERS
 ES:DX = POINTERTO 17-BYTE LIST
 BYTES O-15 = VALUES FOR PALETTE REGS. O-15
 BYTE 16 = VALUE FOR BORDER REGISTER
 INT 10 . WRITE STRING, DON'T MOVE CURSOR (PCIAT ONLY)
 AH = 13H
 AL=O
 BL = ATTRIBUTE
 BH = DISPLAY PAGE NUMBER
 DX = STARTING CURSOR POSITION
 CX = LENGTH OF STRING
CH,CL = UPPER LEFT CORNER
 On,Ol = LOWER RIGHT CORNER
 ;
 NT 10 - Get Video Buffer (TopView/DESQviewlTaskView)
 ag=FE
 Ei:DI = segment:offset of assumed video buffer
 Returns:
 ES:DI = segment:offset of actual video buffer
 INT 10 - UPdate Video Buffer (TopView/ D ESQview/TaskView)
 66=FF
 CX = number of sequential characters that have been modified
 oi = ofset of first iharacter that has been modified
 ES = segment of video buffer
 INT 11. EQUIPMENT DETERMINATION
 Return: AX = "equipment flag" bits
 O diskette installed
 1 
8087 Present
 2r3 alwaYs = 11
 4,5 initial video mode
 O1 = 4Ox25 COLOR
 tO = 8Ox25 COLOR
 11 = 8OX25 IBM monochrome
 6,7 number of diskette drives (only if bit O = 1)
 I 
OO=1rOL=2
 O = dma Present, 1= no dma on system
 9,10,11 number of RS232 cards
 t2 
game I/O attached
 13 lerial printer installed (IBl'l-PCir)
 L4,tS number of Printers
 INT 12 - }IEMORY SIZE
 Return: AX = NO. OF CONTIGUOUS 1K BLOCKS
 INT 13 - RESET DISK SYSTEM
 AH=O
 IHT 13. STATUS OF DISK SYSTEM
 AH=1
 Return: AL = STATUS
 O1H = BAD COMMAND
 O2H = ADDRESS MARK NOT FOUND
 O3H = WRITE ATTEMPTED ON WRITE-PROTECTED DISK
 O4H = SECTOR NOT FOUND
 O6H = DISKEfiE REMOVED
 O8H = DMlt OVERRUN
 O9H = DMA ACROSS 64K BOUNDARY
 1OH = BAD CRC
 2OH = CONTROLTER FAILURE
 4OH = SEEK FAILED
 8OH = TIME OUT
 INT 13 . READ SECTORS INTO IqEMORY
 AH=2
 11 = NO. OF SECTORS
 CH = TRACK NO.
 CL = SECTOR NO.
O = DISK NOT THERE
 i = oiixerrE, No cHANGE DETEcrroN PRESENT
 t = ;iaKirrr, cnnncE DErEcrroN PRESENT
 3 = FIXED DISK
 ix,rif ;nulliin oF s12-BYrE sEcroRs wHEN AH = 3
 INT '.3 - CHANGE OF DISK STATUS (PCIAT ONLY)
 AH = 16H
 neturn: DL = DRIVE THAT HAD DISK CHANGE
 AH = DISKCHANGESTATUS
 gg = NO DISKCHANGE
 O1 = DISK CHANGED (5?)
 rNT 13 - sET DISK TYPE eclAT ONLY)
 AH = 17H
 AL = DISKTYPE
 O0 = NO DISK
 O1 = REGULAR DISK IN REGULAR DRIVE
 O2 = REGULAR DISK IN HIGH-CAP. DRIVE
 O3 = HIGH-CAP. DISK IN HIGH-CAP' DRM
 DL = DRIVE ID
 INT 14 - SERIAL UA - INITIALIZE USART
 AH=O
 I\L = INITIALIZING PARAMETERS
 7-6-5 
4'3 
2 1-o-BAUD RATE- PI\RITY STOP WORD
 BITS LENGTH
 ooo 110 BD OO NONE O-1 LA - 7
 oo1 150 BD 01 oDD L-2 11 - 8
 o10 300 BD 11 EVEN
 o11 60(} BD
 100 1200 BD
 101 2400 BD
 110 4800 BD
 111 9600 BD (4800 ON PCjr)
 DX = PORT NUMBER
 INT 14 - SERIAL TlO - TRANSMIT CHARACTER
 AH=1
 AL = CHARACTER
 DX = PORT NUMBER
 Return: AH = RS-232 STATUS CODE BITS
 O = DATA READY
 1 = OVERRUN ERROR
 2 = PARITY ERROR
 3 = FRAMING ERROR
 4 = BREAK DETECTED
 5 = TRANSMISSION BUFFER REG' EMPTY
 6 = TRANSMISSION SHIFT REG' EMPTY
 7 = TIME OUT
 AL = MODEM STATUS BITS
 O = DELTA CLEAR-TO-SEND
 1 = DELTA DATA-SET-READY
 2 = TRAILING EDGE RING DETECTED
 3 = CHANGE, R.ECEM LINE SIGNAL DETECTED
 4 = CLEAR-TO-SEND
 5 = DATA-SET-READY
6=
 J= RING DETECTED
 AH=2
 RECEIVE LINE SIGNAL DETECTED
 rNT 14 - SERTAL tto - RECETVE CHARACTER
 Return: AL = CHARACTER RECEMD
 AH=3
 AH = RS-232 STATUS CODE (SEE ABOVE)
 rNT 14 - SERTAL tto - GET USART STATUS
 Return: AH = RS-232 STATUS CODE (SEE ABOVE)
 AL = MODEM STATUS CODE (SEE ABOVE)
 INT 15 - TURN ON CASSETTE MOTOR
 AH=O
 INT 15 - TURN OFF CASSETTE }4OTOR
 AH=1
 INT 15 . READ DATA BLOCKS FROM CASSETTE
 AH=2
 CX = COUNT OF BYTES
 ES:BX = POINTERTO DATAAREA
 Return: CF = ERROR SIGNAL
 DX = COUNT OF BYTES READ
 ES:BX = POINTER PAST LAST BYTE READ
 INT 15 - WRITE DATA BLOCKS TO CASSETTE
 AH=3
 CX = COUNT OF BYTES TO WRITE
 ES:BX = POINTER TO DATA AREA
 RCTUTN: ES:BX = POINTER PAST LAST BYTE WRITTEN
 INT 1s - DEVICE OPEN (PC/ AT ONLY)
 AH=8O
 RCIUTN: BX = DEVICE ID
 CX = PROCESSTYPE
 rNT ls - DEVTCE CLOSE (PC/AT ONLY)
 AH=81
 Return: BX = DEVICE ID
 CX = PROCESSTYPE
 INT 15 - DEVICE PROGRAM TERIIrNATE (PCIAT ONLY)
 AH=82
 Return: BX = DEVICE ID
 INT 1s - EVENT WArT (PCIAT ONLY)
 AH=83
 AL = SUBSERVICE
 O = SET INTERVAL
 I = CANCEL
 ES:BX = POINTER TO CALLER'S MEMORY
 CX,DX = NUMBER OF I'IICROSECONDS TO WAIT
 rNT 1s - READ JOYSTICK SWITCH SETTTNGS (PC/AT ONLY)
 AH=84
 DX=O
Return: AL = SWITCH SETTINGS
 rNT 1s - READ IoYSTICK INPUTS (PC/AT ONLY)
 AH=84
 DX=1
 Return: g[ = A(x) VALUE
 BX = A(Y) VALUE
 Cx - B(x) VALUE
 Dx = B(y) VALUE
 INT 1s - SYSTEI'I REQUEST KEY PRESS (PClAr ONLY)
 AH=85
 Return: AL = OO PRESS
 AL = 01 BREAK
 rNT 1s - WArr (PCIAT ONLY)
 Ag=96
 Return: CX'DX = NUMBER OF MICROSECONDS TO WAIT
 INT 15 - EXTENDED MEMORY'BLOCK MOVE (PC1AT ONLY)
 AH=87
 CX = NUMBER OF WORDS TO MOVE
 ES:SI = POINTER TO TABLE
 INT 15 - EXTENDED MEMORY'GET ME}IORY SIZE
 AH=88
 Return: AX = MEMORY SIZE
 INT 15 - SWITCH TO VIRTUAL MODE (PCIAT ONLY)
 AH=89
 rNT 1s - DEVTCE BUSY LOOP (PCIAT ONLY)
 AH=9O
 AL = TYPE CODE
 INT 15. SET FLAG AND COMPLETE INTERRUPT
 ag=91
 (PClAr ONLY)
 AL = TYPE CODE
 INT 15 - KEYBOARD tlo - READ CHAR FROM BUFFER - WAIT IF EMPTY
 AH=O
 Return: AH = SCAN CODE
 AL = CHARACTER
 INT 16 - KEYBOARDT/O - CHECK BUFFER - DO NOT CLEAR
 AH=1
 Return: FLAG ZF = O = CHAR IN BUFFER
 AH = SCAN CODE
 AL = CHARACTER.
 FLAG ZF = 1 = NO CHAR IN BUFFER
 INT 16 - KEYBOARD UO. GET SHIFT STATUS
 AH=2
 AL = SHrFT STATUS BITS
 O = RIGHT SHIFT KEY DEPRESSED
 1 = LEFT SHIFT KEY DEPRESSED
 2 = CTRL DEPRESSED
 3 = ALT DEPRESSED
4 = SCROLL LOCK ACTM
 5 = NUtt LOCK ACTM
 6 = CAPS LOCK ACTM
 AH=3
 7 = INSERT STATE ACTM
 INT 16 - KEYBOARD I/O - SET DELAYS (PCjr, AT' PSl2)
 AL = O: RESET TYPEMATIC (PCjr)
 11 = r; TNcREAsE rNrrrAL DELAY (Pcjr)
 al = Z: INCREASE CONTINUING DELAY (PCir)
 AL = 3: INCREASE BOTH DELAYS (PCjr)
 AL = 4: TURN OFF TYPEMATIC (PCir)
 AL = 5: Set typematic rate (AT or 9S!2)
 BH = OO - Og for delays of 25Oms, SOOms, 750ms' or ls
 BL = OO - 1F for typematic rates of 30cps down to 2cps
 INT 16 - KEYBOARDI,/O - KEYCLICK (PCir ONLY)
 AH=4
 AL = O: CLICK OFF
 AL = 1: CLICK ON
 INT 16 - KEYBOARD - Write to keyboard buffer (AT or PS/2 with enhanced kbd)
 AH=5
 CH = scan code
 CL = character
 ffi;;;;;;l;;;;;;;;;=.;; 
AH=1O
 Return:
 AH = scan code
 & or Ps/2with enhanced kbd)
 AL = character
 INT 16 - KEYBOARD - Check enhanced keystroke (AT or PSl2 with enhanced kbd)
 AH=11
 Return:
 ZF = A if keYstroke available
 AH = scan code \ meaningless if ZF = 1
 AL = character /
 ZF = L if kbd buffer emPty
 INT 16 - KEYBOARD - Get enhanced shift flags (AT or PSl2 with enhanced kbd)
 AH=12
 Return:
 AL (same as for a6=O2)
 bit 7: Ins ON
 bit 5: CaPslock ON
 bit 5: Numlock ON
 bit 4: ScrollLock ON
 bit 3: Either ALT keY down
 bit 2: Either CTRL keY down
 bit 1: Left shift keY down
 bit O: Right shift keY down
 AH
 bit 7: SysReq keY down
 bit 6: CaPslock keY down
 bit 5: Numlock keY down
 bit 4: Scrolllock keY down
 bit 3: Right Alt keY down
bit 2: Right Ctrl keY down
 bit 1: Left Alt keY down
 bit O: Right Alt key down
 INT 17 - CHARACTER TO PRINTER
 Atl=O
 AL = CHAR
 Return: AH = STATUS BITS
 O = TIME OUT
 1 = UNUSED
 2 = UNUSED
 3 = IlO ERR'OR
 4 = SELECTED
 5 = OUT OF PAPER
 5 = ACKNOWLEDGE
 7 = NOT BUSY
 INT 17 . INITIITLIZE PRINTER
 AH=1
 Return: AH = STATUS (SEE ABOVE)
 INT 17 - STATUS OF PRINTER
 AH=2
 Return: AH = STATUS (SEE ABOVE)
 INT 18 . TRANSFER TO ROM BASIC
 CAUSES TRANSFER TO ROM-BASED BASIC (IBM'PC)
 OFTEN REBOOTS A COMPATABLE
 INT 19 - DISK BOOT
 cAusEs REBOOT OF DISK SYSTEM (NO MEMORY TEST PERFORMED)
 INT 1A - GET TIME OF DAY
 AH=O
 Return:CX=high(mostsignif.)portionofclockcount
 DX = low (least signif') portion of clock count
 AL = O if ciock was read or written (via AH=O,l)- 
withing the current 24-hour period
 Otherwise, AL > O
 INT 1A - SET TIME OF DAY
 AH=1
 Q( = high (most signif.) portion of clock count
 DX = low (least signif.) portion of clock count
 rNT 1A - READ REAL TrME CLOCK (PC/ AT ONLY)
 AH=2
 Return: CH = HOURS
 CL = MINUTES
 DH = SECONDS
 rNT 1A - SET REAL TrME CLOCK (PC/ AT ONLY)
 AH=3
 Return: CH = HOURS
 CL = MINUTES
 DH = SECONDS
 DL = 1, IF DAYLIGHT SAVINGS; O IF STANDARD TIME
rNT tA - READ DATE FROM REAL TrME CLOCK (PCIAT ONLY)
 AH=4
 Return: DL = DAY
 DH = MONTH
 CL = YEAR
 CH = CENTURY (19 OR 20)
 INT 1A - SET DATE IN REAL TIME CLOCK (PCIAT ONLY)
 AH=5
 DL = DAY
 DH = ]4ONTH
 CL = YEAR
 CH = CENTURY (19 OR 20)
 rNT 1A - SET ALART{ (PCIAT ONLY)
 AH=6
 CH = HOURS
 CL = MINUTES
 DH = SECONDS
 Return: INT. 4A = ADDRESS OF ALARM ROUTINE
 rNT 1A - RESET ALARM (PCIAT ONLY)
 AH=7
 INT 18. CTRL-BREAK KEY
 This interrupt is called when the keyboard scanner of
 the IBM ma;hines detects CTRL and BREAK pressed at the same
 time. It normally points to a simple IRET so that it does
 nothing, but many Programs change it to return a CTRL-C scan
 code and thus invoke INT 23.
 INT 1C . CLOCK TICK
 This interrupt is catted (in the IBM) at the end of
 eachtime-updateoperationbythereal.timeGlockroutines.It
 normally points to an IRET uniess PRINT.COM has been installed'
 INT 1D -> 6845 Video fnit tables
 table for modes O and 1 \
 table for modes 2 and 3 \ each table is 16 bytes long
 table for modes 4r5, and 6 /
 table for mode 7 
/
 4 words -- size of video RAl.l for modes al 1, 2/ 3, 4/5, anil GlV
 8 bytes -- number of columns in each mode
 8 bytes -- video controller mode byte for each mode
 INT 1E -> Diskette Params (BASE TABLE)
 Default at fOOO:efc7
 db
 db
 db
 db
 db
 db
 db
 db
 db
 db
 db
 step rate & head unload times
 head load time & DMA
 motor off time
 sector size (O->128, L->256, 2->5L2, 3->LA24)
 last sector number (8 or 9 tYPical)
 inter-sector gaP size on read/write (42 typical)
 data transfer length (255 typical)
 inter-sector gap size on format (80 typical)
 sector fill on format (f6 tYPical)
 head-settle time ms (typical 25, 2.1O->15)
 motor start-uP time (U8 secs) (typical 4,2'LO->2)
INT lF -> GraPhics Set 2
 INT 20 - PROGRAM TERMINATION
 RETURNS TO DOS
 INT 21 - PROGRA}4 TERMINATION
 Ag = OOH
 Same action as INT 2O; returns to DOS'
 INT 21 - KEYBOARD INPUT
 AH = OlH
 Return: AL = CHARACTER READ
 INT 21 - DISPLAY OUTPUT
 66 = O2H
 DL = CHAR
 INT 21 - AUX InPut
 AH = O3H
 Return: AL = CHARACTER READ
 INT 21 - AUX OutPut
 AH = O4H
 OL = CHAR
 INT 21 - PRINTER OUTPUT
 AH = O5H
 DL = CHAR
 INT 21 . DIRECT CONSOLE I.IO' CHARI\CTER OUTPUT
 AH = O6H
 DL = CHAR <> OFFH
 INT 21. DIRECT CONSOLE IIO' CHARACTER INPUT
 AH = OGH
 DL = OFFH
 RetuTN: FLAG ZF = SET = NO CHARACTER
 CLEAR = CHARACTER RECIEVED
 AL = CHARACTER
 Character is echoed to STDOUT if received'
 INT 21 - Direct STDIN InPut, no echo
 Reg AH = O7H
 Same as Function 5 for input but char not echoed'
 INT 21 . KEYBOARD INPUT. NO ECHO
 AH = O8H
 Return: AL = CHAR
 IT{T 21 - PRINT STRING
 AH = O9H
 DS:DX = ADDRESS OF STRING TERMINATED WITH "$"
 INT 21 - BUFFERED KEYBOARD INPUT
 [H = OAH
 DS:DX = ADDRESS OF BUFFER
 FIRST BYTE OF BUFFER MUST HAVE I..TAX LENGTH
ON RETURN SECOND BYTE HASACTUAL LENGTH
 INT 21 - CHECK STANDARD INPUT STATUS
 AH = oBH
 Return: AL =
 FFH IF CHAR TYPED
 OOH IF NOT TYPED
 INT 21 - Clear KeYboard Buffer
 AH = OCH
 AL must be 1, 6, 7, 8, or OaH'
 Flushes all typeahead input, then executes function specified
 by AL (Oy moving it to AH and repeating the INT 21 call)'
 rf AL contains a yalue not in the list above, the keyboard buffer is
 flushed and no other action is taken'
 INT 21 - Disk Reset
 Reg AH = ODH
 Flushes all disk buffers.
 INT 21 - SELECT DISK
 AH = OEH
 DL = new default drive number (O = A, 1 = B, etc')
 Return: AL = number of logical drives
 INT 21 - OPEN DISK FILE
 AH = OFH
 DS = SEGITIENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 OO = FILE FOUND
 FF = FILE NOT FOUND
 INT 21 - CLOSE DISK FILE
 AH = lOH
 DS = SEGIIENT ADDRESS OF FCB
 P[ = OFFSET ADDRESS OF FCB
 INT 21 - Search First using FCB
 AH = l1H
 DS = SEGI4ENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 OO = FILE FOUND
 FF = FfLE NOT FOUND
 If fite found, FCB is created at DTA address and
 set up to OPEN or DELETE it.
 INT 21 - Search Next using FCB
 afl = 12H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 OO = FILE FOUND
 FF = FILE NOT FOUND
 If file found, FCB is created at DTA address and
 set up to OPEN or DELETE it'
INT 21 - Delete File via FCB
 AH = 13H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 Q$ = FILE FOUND
 FF = FILE NOT FOUND
 INT 21 . SEQUENTIAL DISK FILE READ
 AH = 14lt
 OS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 O = SUCCESSFUL READ
 1 = END OF FILE
 2 = DATATRANSFER AREATOO SMALL
 3 = PARTIAL RECORD, EOF
 rNT 2t - SEQUENTTAL DrsK RECORD WRITE
 AH = 15H
 OS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 O = SUCCESSFUL WRITE
 1 = DISKETTE FULL
 2 = DATATRANSFERAREATOO SMALL
 INT 21 . CREATE A DISK FILE
 AH = 16H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 OO = SUCCESSFUL CREATION
 ff = NO R'OOM IN DIR'ECTOR'Y
 INT 21 - Rename File via FCB
 AH = 17H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 FCB contains new name starting at byte 17H'
 Return: AL =
 OO = FILE FOUND
 FF = FILE NOT FOUND
 INT 21 - Internal - does nothing
 AH = 18H )OO(
 Return: AL = O
 INT 21 - Default Disk Number
 AH = 19H
 Return: AL = current drive number (letter - 'A')
 INT 21 . SET DISK TRANSFER AREA ADDRESS
 AH = 1AH
 DS = SEGMENT ADDRESS OF BUFFER
 DX = OFFSET ADDRESS OF BUFFER
 INT 21 - Default DriYe Disk Size
AH = lBH
 Return: DS:BX Points to FAT ID bYte
 DX = number of allocation units on disk
 AL = number of sectors Per AU
 CX = number of bYtes Per sector
 INT 21 - SPecific Drive's Disk Size
 AH = 1CH
 DL = Drive Number to check
 Return: DS:BX Points to FAT ID bYte
 DX = number of allocation units on disk
 AL = number of sectors Per AU
 CX = number of bYtes Per sector
 INT 21 - Internal - does nothing
 AH = 1DH )OO(
 Return: AL = O
 INT 21 - Internal - does nothing
 AH = 1EH )OO(
 Return: AL = O
 INT21-Internat-GETDEFAULTDRIVEPARAMETERBLocK
 AH = 1FH
 Return: A.L =
 OO = No Error
 FF = Error
 (DS:BX) = ADDRESS OF DRM PARAMETER BLOCK'
 (THIS IUST INVOKES FUNCTION 32H WITH DL = O)
 INT 21 - Internal - does nothing
 AH = 2OH )OO(
 Return: AL = O
 INT 21 . RANDOM DISK RECORD READ
 AH = 21H
 DS = SEGT'IENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 O = SUCCESSFUL READ
 1 = END OF FILE
 2 = DATA TRANSFER AREA TOO SMALL
 3 = PARTIAL RECORD, EOF
 INT 21 - Random Disk Write
 AH = 22H
 Same setup as Random Read, but writes to disk
 INT 21 - FILE SIZE
 AH = 23H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 Return: AL =
 OO = FILE FOUND
 FF = FILE NOT FOUND
 FCB SET TO NO. OF RECORDS
 INT 21 - Set Random Record Field
AH = 24H
 DS = SEGMENT ADDRESS OF FCB
 DX = OFFSET ADDRESS OF FCB
 FCB must be oPEN already
 Return: Random Record Field of FCB is set to be
 ="-" as Current Block and Current Record'
 INT 21 - Set Interrupt Vector
 AH = 25H
 AL = INT number
 DS:DX = new vector to be used for specified INT
 INT 21 - Create PSP
 AH = 26H
 DX = Segment number to set uP PSP at
 Current PSP is iopied to specified segment
 INT 21. RANDOM BLOCK READ
 AH = 27H
 DS = SEGMENT ADDRESS OF FCB
 P)( = OFFSET ADDRESS OF FCB
 CX = NO, OF RECORDS TO BE READ
 Return: AL =
 O = SUCCESSFUL READ
 1 = END OF FILE
 2 = DATA TRANSFER AREA TOO SMALL
 3 = PARTIAL RECORD, EOF
 INT 21 - RANDOM BLOCK WRITE
 afl = 28H
 DS = SEGMENT ADDRESS OF FCB
 P[ = OFFSET ADDRESS OF FCB
 CX = NO. OF RECORDS TO BE WRITTEN
 Return: AL =
 O = SUCCESSFUL WRITE
 I 
= DfSKETTE FULL
 2 = DATATRANSFERAREATOO SMALL
 INT 21 - Parse Filename
 AH = 29H
 DS:Sr = POINTERTO STRING TO PARSE
 ES:DI=POINTERToMEMoRYToFILLWITHUNoPENEDFcB
 AL = BIT ITIASK TO CONTR.OL PARSING
 O = O: PARSING STOPS IF FILE SEPERATOR FOUND
 1: LEADING tSPgtuATOR IGNORED
 1 = O: DRIVE NUMNER IN FCB SET TO DEFAULT IF
 STRING CONTAINS NO DRIVE NU}{BER
 1: DRIVE NUI'IBER IN FCB NOT CHANGED
 2 = O: FILENAME IN FCB SET TO BLANKS IF NO FILENAME IN STRING
 1: FILENAME IN FCB NOT CHANGED IF STRING
 DOES NOT CONTAIN A FILENAME
 3 = O: EXTENSION IN FCB SET TO BLANKS IF NO EXTENSION IN STRING
 1: EXTENSION LEFT UNCHANGED
 Return: AL = OO: NO WILDCARDS IN NAME OR EXTENSfON
 O1: WILDCARDS APPEARED IN NAME OR EXTENSION
 DS:SI=P0INTERToFIRSTBYTEAFTERPARSEDSTRING
 ES:DI = UNOPENED FCB
INT 21 . GET CURRENT DATE
 AH = 2AH
 Return: DL = DAY
 DH = MONTH
 CX = YEAR
 AL = DAY OF THE WEEK (O=SUNDAY, 1=MONDAY, ETC')
 INT 21 . SCt CURRENT DATE
 AH = 2BH
 DL = DAY
 DH = MONTH
 CX = YEAR
 Return: AL = O if no error
 AL = OffH if bad value sent to routine
 INT 21 - GET CURRENT TIME
 AH = 2CH
 Return: CH = HOURS
 CL = MINUTES
 DH = SEC
 DL = SEC/1OO
 NOTE: TII-IE IS UPDATED EVERY 5/1OO SECOND
 INT 21 - Set CURRENT TIME
 AH = 2DH
 CH = HOURS
 CL = MINUTES
 DH = SEC
 DL = SEC/1OO
 Return: AL = O if no error
 AL = OffH if bad value sent to routine
 INT 21 - Set Verify Flag
 AH = 2EH
 DL=O
 AL = 1 if VERIFY on
 AL = O if VERfFY off
 INT 21 - Get Disk Transfer Area Address
 AH = 2FH
 REIUTN: ES = SEGMENT AddTCSS Of DTA
 BX = OFFSET address of DTA
 INT 21 - Get DOS Version
 AH = 3OH- 
Return: AL = Maior Version number
 AH = Minor Version number
 BH = OEM number
 BL:CX = 24-bit user number
 INT 21 . TERMINATE BUT STAY RESIDENT
 AH = 31H
 AL = EXIT CODE
 DX = PROGRAM SIZE, IN PARAGRAPHS
 INT 21 .INIETNAI . GET DRIVE PARAMETER BLOCK
 AH = 32H
 DL = DRIVE NUMBER
O=DEFAULT,l=A,ETC.
 i"trrnt AL = OFFH IF INVALID DRM NUMBER' ELSE
 DS:BX = ADDRESS OF DRIVE PARAMETER BLOCK.
 STRUCTURE OF DOS DRIVE PARAMETER BLOCK:
 DPBLOCK STRUCT
 ;OFFSET
 DISK_OFFSET DB
 UNIT_OFFSET DB
 SECTOR_SIZE DW
 MAX_CLUSTER DB
 LOG2_SECTORS DB ?
 RESERVED DW ?
 FAT_COUNT DB ?
 ROOT_COUNT DW ?
 DATA_START DW ?
 MAX-NUMBER DW ?
 FAT-SECTORS
 ROOT_START
 DEVICE_ADDR
 DESCRIPTOR
 VALID_BYTE
 NEXT_BLOCK
 DB?
 DW?
 DD?
 DB?
 DB?
 DD?
 ; O. DRIVE NUMBER (O = A, ETCr-

?
 ?
 ?
 ?
 r. unrr NUFTBER wrrHrN DEvrcE DRTvER
 ; 2. NUMBER OF BYTES PER SECTOR
 ; 

+. mne Esr sEcroR NUMBER rN cLUsrER
 ADD ONE FOR NUMBER OF SECTORS/CLUSTER
 ; 5. LOG BASE TWO OF THE CLUSTER SIZE
 ; b. NuMeERoF RESERvED (Boor) sEcroRs
 ; 8. NUMBER OF COPIES OF THE FAT
 ; 9. NUIIIBER OF ROOT DIRECTORY ENTRIES
 ;11. FIRST SECTOR OF DATA ON MEDIUM
 i 
; tg. LARGEST POSSIBLE CLUSTER NUMBER
 SUBTRACT ONE FOR NUMBER OF CLUSTERS
 ; 15. NUMBER OF SECTORS IN ONE FAT COPY
 i 
; 15. FIRST SECTOR OF ROOT DIRECTORY
 re. conREsPoNDrNG DEvrcE DRTvERADDRESS
 ;'22. MEDIA DESCRIPTOR BYTE FOR MEDIUM
 izg. own rNDrcATEs BLocK MUsr BE REBUTLT
 ;24. ADDRESS OF NEXT DEVICE BLOCKIN LIST
 FROM THrS POrNT ON, DOS 3 DTFFERS FROM 2:
 IF 
DOS2
 DrR_STARTDW?;2S.STARTINGCLUSTEROFCURRENTDIRECTORY
 i 
PATH-NAI'IE DB 64 DUP (?)
 zrno rNDrcATEsrHE Roor DrREcroRY
 ELSE DOS3
 ; 
; 3O-. I\SCIIZ CURRENT DIRECTORY PATH STRING
 ON MY XT, THIS WAS ALWAYS:
 DWO
 DW OFFFFH
 ENDIF
 DPBLOCK ENDS
 INT 21 . GCt Or SEt CONTROL.BREAK
 AH = 33H
 AL = O for Get or 1 for Put
 DL = O for OFF or 1 for ON
 Return: DL = O if BREAK=OFF or 1 if BREAK=ON
 AL = FFH IF ERROR
 INT 21 - Internal - Return CritsectFlag Pointer
 AH = 34H
 Return: ES:BX points to DOS "Critical Section Flag"
 When byte pointed to is zero, DOS is supposed to be
 safe to inteirupt. NOT RELIABLE according to Chris Dunford.
 Examination of DOS 2.10 code in this area
 indicates that the byte immediately FOLLOWING this
 "Critical Section Flag" must be O0 to permit the
 PRINT.COM interrupt to be called. This suggests that
 checking the WORD pointed to, rather than the BYTE,
might increase reliability of the test greatly'
 INT 21 - Get InterruPt Vector
 [H = 3SH
 AL = INT number
 Return: ES = Segment address of INT vector
 BX = Offset address of INT vector
 INT 21 - DISK SPACE
 [H = 36H
 DL = DRrVE NUMBER (1-4)
 Return:AX=?(SIDES)
 BX=?(BLOCKSFREE)
 CX=?(BLOCKSIZE)
 DX=?(TOTALBLOCKS)
 NOTE: MULT AX x CX x BX for FREE SPACE ON DISK
 MULT AX x CX x DX for TOTAL DISK SPACE
 INT 21 - Internal - switchar/availdev
 AH = 37H
 AL=
 0 Read switch character (returns current character in DL)
 1 Set switch character (specify new character in DL)
 2 Read device availability (as set by function AL=3)
 3 Set device availabilitY, where:
 DL = O means /DEV/ must Preceed device names
 DL <> O means |DEV/ need not preceed device names
 Return: DL = Switch character (if AL=O or 1)
 Device availability flag (if AL=2 or 3)
 AL=oFFhmeansttrevalueinALwasnotintherangeo-3.
 Functions 2 & 3 appear not to be implemented for dos 3'x
 INT 21 - Get Country-Dependent Information
 AH = 38H
 Complex and differs between Dos 2.x and Dos 3'x
 See Feter Norton "Programmer's Guide to the IBt{ PC", p' 3O5
 rNT 21 - CREATE A SUBDTRECTORY (MKDTR)
 AH = 39H
 DS = SEGMENT AddTCSS Of ASCIIZ PAthNAMC
 DX = OFFSET address of ASCIfZ pathname
 Return: Ftag CF = 1 if error
 AX = Error Code if anY
 INT 21 - REMOVE A DTRECTORY ENTRY (RMDTR)
 ' 

AH - 3AH
 DS = SEGMENT AddTCSS Of ASCIIZ PAIhNAMC
 DX = OFFSET address of ASCIIZ pathname
 Return: FIag CF = t if error
 A)K = Error Code if anY
 INT 21 - CHANGE THE CURRENT DTRECTORY (CHDTR)
 46 = 3BH
 DS = SEGMENT address ofASCIIZ
 DX = OFFSET address ofASCIIZ
 Return: Flag CF = 1 if error
 AX = Error Code if anY
rNT 21 - CREATE A FrLE WrTH HANDLE (CR.EAT)
 AH = 3CH
 CX = ATTRIBUTES FOR FILE
 DS = SEGMENT ADDRESS OF ASCIIZ
 DX = OFFSET ADDRESS OF ASCIIZ
 Return: Flag CF = 1 if error
 A)( = File Handle or Error Code
 INT 21 - OPEN DISK FILE WITH HANDLE
 AH = 3DH
 AL = ACCESS CODE
 O = Read Only
 1 = Write Only
 2 = Read/Write
 OPtions (3.x):
 8OH = no inheritance
 lOH = deny readlwrite
 2OH = denY write
 3OH = deny read
 4OH = deny none
 DS = SEGMENT ADDRESS OF ASCIIZ
 P[ = OFFSET ADDRESS OF ASCIIZ
 Return: Flag CF = 1 if error
 AX = File Handle or Error Code
 INT 21 - CLOSE A FILE WITH HANDLE
 AH = 3EH
 BX = FILE HANDLE
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 21 - READ FROU FILE WITH HANDLE
 AH = 3FH
 BX = FILE HANDLE
 CX = NO. OF BYTESTO READ
 DS = SEGMENT ADDRESS OF BUFFER
 DX = OFFSET ADDRESS OF BUFFER
 Return: Flag CF = 1 if error
 AX = Bytes Read or Error Code
 INT 21 . WRITE TO FILE WITH HANDLE
 AH = 4OH
 BX = FILE HANDLE
 CX = NO. OF BYTES TO Write
 DS = SEGMENT ADDRESS OF BUFFER
 DX = OFFSET ADDRESS OF BUFFER
 Return: Flag CF = 1 if eror
 AX = Bytes Read or Error Code
 INT 21 - DELETE A FILE (UNLINK)
 AH = 41H
 OS = SEGIIENT OF ASCIIZ TO DELETE
 DX = OFFSET OF ASCIIZ TO DELETE
 Return: Flag CF = 1 if error
 AX = Error Code if any
 INT 21 - MOVE FILE READ/WRITE POINTER (LSEEK)
 AH = 42H
AL - METHOD VALUE
 O = offset from beginning of file
 1 = offset from Present location
 2 = offset from end of file
 BX = FILE HANDLE
 CX = BYTES OFFSET HIGH
 DX = BYTES OFFSET LOW
 Return: Ftag CF = 1 if error
 A)f = Offset low word or Error Code
 DX = Offset high word
 INT 21 . GET/PUT FILE ATTRIBUTES (CHIIOD)
 AH = 43H
 AL=
 O = GET FILE ATTRIBUTES
 f = PUT FILE ATTRIBUTES
 CX = FILE ATTRIBUTES BITS ON PUT
 O = READ ONLY
 1 = HIDDEN FILE
 2 = SYSTEM FILE
 3 = VOLUME LABEL
 4 = SUBDIRECTORY
 5 = WRfTTEN SINCE BACKUP
 DX = POINTERTO FILE ASCIIZ FILE NAME
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 CX = FILE ATTRIBUTES ON GET
 INT 21 - IOCTL
 AH = 44H
 l[L =
 O = Get device information (DX)
 1 = Set device information (DL' DH = O)
 DX BITS =
 O = console inPut device
 1 = console outPut device
 2 = null device
 3 = clock device
 5 = binary mode
 6=EOF
 7 = as device
 if not, EOF = O if channel has been written
 bits O-5 are block device number
 12= network device
 l=
 t=
 4=
 $=
 14= can process control strings (AL=2-5)
 Read CX bytes to DS:DX from BX control chan
 Write CX bytes from DS:DX from BX control chan
 as 2 but for drive BL
 as 3 but for drive BL
 AX = number of bYtes transfered
 6 = Get input status
 7 = Get output status
 AX = FFH for ready or OOH for not ready
 g = Is block device BL changeable?
 AX=O=y€s
9 = Is logical device BL local?
 Oi lattriUute word) bit 12 (1OOOH) = O = yes
 1O= Is handle BX local?
 DX (attribute word) bit 15 (8OOOH) = O = yes --
11= Changl snaring retry count to DX (def 3), !e-taV-!X (def 1)
 ex - fil" liandle loist- = drive number wlO = default)
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 21 - Create Duplicate Handle (DUP)
 AH = 45H
 BX = file handle to duPlicate
 Return: Flag CF = 1 if error
 AX = File handle or Error Code
 INT 21 - Force Duplicate Handle (FoRCDUP) (DUP2)
 AH = 46H
 BX = Existing file handle
 CX = new file handle
 Return: Flag CF = 1 if error
 AX = File handle or Error Code
 INT 21 - Get Current DirectorY
 a1 = 47H
 DL = drive (O=default, 1=A, etc.)
 DS:SI Points to 54-bYte buffer area
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 21 - Allocate MemorY
 AH = 48H
 BX = number of 16-byte paragraphs desired
 Return: Flag CF = 1 if error
 AX = Segment of allocated memory or Error Code
 BX = Maximum available on error
 INT 21 - Free MemorY
 AH = 49H
 ES = Segment address of area to be freed
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 21 - Adjust Block Size (SETBLOCK)
 AH = 4AH
 ES = Segment address of block to change
 BX = New size in paragraPhs
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 BX = Maximum available on error
 INT 21 - Load or Execute (EXEC)
 AH = 4BH
 AL=
 O = load and execute Program
 2 = Ioad (Internal) but do not execute
 3 = load overlaY; do not create PSP
 DS:DX = filename
 ES:BX = parameter block
AL=
 O =) word segment environment pointer
 dword command line Pointer
 dword FCB 1
 dword FCB 2
 3 =) word segment load address
 word segment relocation factor
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 struct exec {
 ' 
unsigined exec-magic; !* Ox4d, Ox5a signaturex/
 unsigned "i."]i"t;- 
/* image size remainder (mod 5t2) * /
 unsilned exe{size; /* lile size in pages (5L2.) * /
 unsilned exec_nreli /x number of relocation items x/
 unsitned "*e{hsi=ei l* header size in paragraphs */
 unsitned exe{min; " /* minimum extra paragraphs x/
 unsigned e*e{ma*i /* maximum extra paragraphs */
 unsitned exec-ss; /* stack segment x/
 unsi[ned exec-sP; /* stack offset */
 unsilned ur.{"Lt.rn ; /* word checksum of entire tile * /
 unsigned exec-Pc; /* initial Pc*/
 unsilned exec-ls; /* code segment x/
 unsitned exec-orel; /* offset of relocation table */
 l;
 unsilned exec-ovnoi l* overlay number x/
 INT 21 - Quit with Exit code (EXIT)
 trfi = 4CH
 AL = exit code
 rNT 21 - GET EXrT CODE OF SUBPROGRAM (WArr)
 AH = 4DH
 Return: AL = exit code of subprogram (FNs 31H or 4cH)
 AH = circumstance which caused termination
 O = Terminate/abort
 1 = Control-C
 2 = Hard error
 3 = Terminate and stay resident
 INT 21 - Find First ASCTIZ (FIND FIRST)
 AH = 4EH
 CX = SEARCH ATTRIBUTES
 DS:DX = POINTER TO ASCIIZ FILENAME (WITH ATTRIBUTES)
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 (DTA) = data block
 INT 21 - Find Next ASCIIZ (FIND NEXT)
 AH = 4FH
 Return: Flag CF = 1 if error
 A)K = Error Code if anY
 (DTA) = data block
 INT 21 - Internal - Set PSP Segment
 AH = SOH
 BX = Segment address of new PSP
INT 21 - Interna! - Get PSP Segment
 AH = 51H
 Return: BX = Current PSP Segment
 struct psp {
 char psp_int2o[2l; /* OOh: exit */
 unsigned psp_msizei /* 02h: memory size in paragraphs */
 char psp_res0[l]; lx A4hz X)O( (O) x/
 char psp_dos[S]; /x OSh: far call to dos x/
 int (xpsp_term)O; 1x Oah: terminate address x/
 unsigned psp_tseg; /* Och: terminate segment */
 int (*psp_break)O; /x Oeh: break address x/
 unsigned psp_bseg; /* 1Oh: break segment x,/
 int (xpsp_error)O; /* 12h: error address */
 unsigned psp_eseg; /* L4h= error segment */
 unsigned psp_ppsp; /* 16h: parent psp segment */
 char psp_ofile[2o]; /* 18h: open files, Oxff = unused x/
 unsigned psp_envp; /* 2ch: environment segment x/
 char psp_res2[4]; /* Zeh:m(.*/
 int psp*nfiles; l* 32ht max open files */
 char *psp_aofile; /* 3qh: ofile address x/
 unsigned psp_aosegi /* 35h: ofile segment *,/
 char psp_res3[24]; /x 38h: X)(J(. * /
 char psp_int21[3]; /x SOh: int 21, far return */
 char psp_res4[2]; /* 53h: )OO( */
 char psp_xtcbLlTl; /x 55h: FCB #1 extension x/
 char psp_fcbltgl; /* Sch: FCB #1 x/
 char psp_xfcbzl7l; /* 65h: FCB #2 extension x/
 char psp_fcbzf2ol; /* 6ch: FCB #2*/
 char psp_dma[128]; l* 8Oh: Command Tail */
 );
 INT 21 - Internal - Get Disk List
 AH = 52H
 Return: ES:BX points to DOS list of lists
 List of Lists:
 Bytes Value
 O-3 Pointer to first DOS disk block (see func 36H)
 4-7 Partially Unknown. Pointer to a device driver. Maybe first
 resident driver?
 8-B Partially Unknown. Pointer to a device driver. Maybe first
 resident character device driver?
 C-F Pointer to actual CON: device driver, whether installable
 or resident
 10-11 Unknown. O2OOH. A byte/blocksize value???
 12-15 Unknown. Pointer to current directory block????
 16-19 Partially Undefined: Pointer to array of drive info:
 51H bytes per drive, starting with A: ...
 OO-3F Current path as ASCffZ, starting with 'x:\'
 4A-43 Unknown. I see zeros always
 44 Unknown. Flags? I see 4OH, except for
 entry after last valid entry = OOH
 45-48 Pointer to DOS Disk Block for this drive
 49-4A Unknown. Current track or block? -1 if never
 accessed.
 4B-4E Unknown. I see -1 always
 4F-52 Unknown. f see 2 always
1A-1D
 1E-1F
 20
 2t
 22
 , 
Unknown. Pointer to data area, maybe including cluster
 allocation table?
 Unknown. I see zero always
 Unknown. May be number of block devices,
 Unknown, Iutay be number of resident devices or ??? (5 always)
 Beginning (not a pointer. The real beginning!) of NUL device
 driver. This is the first device on DOS's linked list
 of device drivers.
 INT 21 - Internal - Translate BPB
 AH = 53H
 DS:SI points to BPB (Bios Parameter Block)
 ES:BP points to area for DOS Disk Block
 Translates BPB (Bios Parameter Block, see below)
 into a DOS Disk Block (see function call 32h).
 BPB
 Bytes Value
 O-1 Bytes/sector. Get from DDB bytes 2-3.
 2 
Sectors/cluster. Get from: (DDB byte 4) + 1
 3-4 Reserved sectors. Get from: DDB bytes 6-7
 5 
Number of FATs. Get from: DDB byte 8
 6-7 Number of root dir entries. Get from: DDB bytes 9-A
 8-9 Total # of sectors. Get from:
 ((DDB bytes D-E) - 1) * (sectors per cluster (BPB byte 2))
 A 
+ (DDB Bytes B-C)
 Media descriptor byte. Get from: DDB byte 16
 B-C Number of sectors/FAT. Get from: DDB byte F
 INT 21 - Get Verify Flag
 AH = 54H
 Return: AL = O if flag OFF
 AL = 1 if flag ON
 INT 21 - Internal - Create PSP
 AH = 55H
 DX = Segment number to set up PSP at
 Like FN 26H but creates "child" PSP rather
 than copying existing one.
 INT 21 - RENAME A FIIE
 AH = 56H
 DS = SEGMENT OF ASCIIZ OLD NAME
 DX = OFFSET OF ASCIIZ OLD NAME
 ES = $661Y1ENT OF ASCIIZ NEW NAIvIE
 DI = OFFSET OF ASCIIZ NEW NAME
 Return: Flag CF = 1 if error
 AX = Error Code if any
 fNT 21 - Get/Put Date/Time
 AH = 57H
 AL = FUNCTION CODE
 O = GET DATE AND TTME
 1 = SET DATE AND TIME
 BX = FTLE HANDLE
 CX = TIME TO BE SET (IF AL = 1)
 DX = DATE TO BE SET (IF AL = 1)
 Return: Flag CF = 1 if error
A)K = Error Code if anY
 CX = TIME OF LAST WRITE (IF AL = O)
 DX = DATE OF LAST WRITE (IF AL = O)
 INT 21 - Get/Set allocation strategy
 AH = 58H
 AL = FUNCTION CODE
 O = GET ALLOCATION STRATEGY
 1 = SET ALLOCATION STRATEGY
 BX = STRATEGY CODE (IF AL = 1)
 O = first fit
 1 = best fit
 2 = last fit
 Return: Flag CF = I if error
 nf = StrategY code or Error Code
 rNT 21 - GET EXTENDED ERROR CODE (DOS 3'X)
 AH = 59H
 BX = VERSION CODE (OOOO FOR DOS 3'O)
 Return: AX = EXTENDED ERROR CODE
 BH = CLASS OF ERROR
 BL = SUGGESTED ACTION CODE
 CH = LoCUS (WHERE ERROR OCCURRED)
 Error codes:
 O1 function number invalid
 O2 file not found
 03 Path not found
 O4 too many oPen files
 O5 access denied
 O6 invalid handle
 O7 memorY control block destroYed
 O8 insufficient memorY
 O9 memorY block address invalid
 OA environment invalid
 OB format invalid
 OC access code invalid
 oD data invalid
 OF invalid drive
 10 attemPted to remove current directory
 11 not same device
 12 no more files
 13 disk write-Protected
 14 unknown unit
 15 drive not readY
 16 unknown command
 17 data error (CRC)
 18 bad request structure length
 19 seek error
 1A unknwon media tYPe
 18 sector not found
 lC Printer out of PaPer
 1D write fault
 1E read fault
 1F general failure
 2O sharing violation
 21 lock violation
 22 disk change invalid
 23 FCB unavailable
24-3L reserved
 32 Network request not supported (DOS 3'1 + MS Netlvorks)
 33 Remote comPuter not listening
 34 DuPlicate name on network
 35 Network name not found
 36 Network busY
 37 Network device no longer exists
 38 Network BIOS command timit exceeded
 39 Network adaPter hardware error
 3A Incorrect response from network
 39 UnexPected network error
 3C IncomPatibte remote adaPter
 3D Print queue full
 3E Queue not full
 3F Not enough sPace to Print file
 4O Network name was deleted
 41 Network: Access denied
 42 Network device tYPe incorrect
 43 Network name not found
 44 Network name limit exceeded
 45 Network BIOS session limit exceeded
 46 TemPorarilY Paused
 47 Network request not accePted
 48 Print/disk redirection paused (DOS 3'1 + MS Networks)
 49-4F reserved
 5O file exists
 51 reserved
 52 cannot make directorY
 53 fail on INT 24h
 Error Classes:
 O1 out of resource
 O2 temPorarY situation
 O3 authorization (denied access)
 O4 internal
 O5 hardware failure
 O6 system failure
 O7 aPPlication Program error
 O8 not found
 O9 bad format
 OA Iocked
 OB media error
 OC alreadY exists
 OD unknown
 Suggested Action:
 O1 retrY
 O2 delayed retrY
 O3 PromPt user
 O4 abort after cleanuP
 O5 immediate abort
 O6 ignore
 O7 retry after user intervention
 Error Locus:
 O1 unknown or not aPProPriate
 O2 block device
 O3 network related
 O4 serial device
 05 memorY related
INT 21 - CREATE TMEPORARY FILE (DOS 3'x)
 AH = SAH
 DS:DX = POINTER TO DIRECTORY PATH NAME
 CX = FILE ATTRIBUTE
 Return: Flag CF = 1 if error
 llX = Error Code if anY
 DS:DX = PATH NAME
 NOTE: THE FILE CREATED IS NOT TRULY "TEMPORARY". IT MUST BE
 REMOVED BY THE USER.
 INT 21 - CREATE NEW FILE (DOS 3.x)
 AH = SBH
 DS:DX = POINTER TO DIRECTORY PATH NAME
 CX = FILE ATTRIBUTE
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 DS:DX = PATH NAME
 NOTE: UNLIKE FUNCTION 3CH, FUNCTION 5BH WILL FAIL IF THE FILE
 ALREADY EXISTS.
 INT 21 - LOCK/UNLOCK FILE AccESS (DOS 3'x)
 f,fl = SCH
 AL=
 O IF LOCK
 1 IF UNLOCK
 BX = FILE HANDLE
 CX:DX = OFFSET TO LOCK
 SI:DI = AMOUNT TO LOCK
 Return: Ftag CF = 1 if error
 AX = Error Code if anY
 INT 21 - Internal - Unknown
 AH = SDH )OO(
 INT 21 - Get Machin€ Name (DOS 3.1 + Microsoft Networks)
 AX = SEOOH
 DS:DX -> buffer for IISCIIZ name
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 CH = O if name not defined
 CL = NETBIOS name number
 Il{T 21 - Set Printer Setup (DOS 3.1 + Microsoft Networks)
 AX = 5EO2H
 BX = Redirection list index
 CX = length of setuP string 1= 64
 DS:SI -> string buffer
 Return: Flag CF = L if error
 A)K = Error Code if anY
 INT 21 - Get Printer Setup (DOS 3.1 + Microsoft Networks)
 AX = 5EO3H
 BX = Redirection list index
 ES:DI -> string buffer
 Return: FIag CF = 1 if error
 AX = Error Code if anY
CX = length of setup string <= 64
 INT 21 - Get Redirection List Entry (DOS 3.1 + Microsoft Networks)
 AX = 5FO2H
 BX = Redirection list index
 DS:DI -> 128 char local device name buffer
 ES:DI -> 128 char network name buffer
 Return: Flag CF = 1 if error
 AX = Error Code if any
 BX = Device status flag (BIT O = O if valid)
 BL = device type
 CX = stored param value
 DX, BP destroYed
 INT 21 - Redirect Device (DOS 3.1 + Microsoft Networks)
 AX = 5FO3H
 BL = device type
 03 = printer device
 O4 = file device
 CX = stored param value
 DS:SI -> source device name
 ES:DI -> destination ASCIIZ network path + ASCIIZ password
 Return: Flag CF = 1 if error
 AX = Error Code if any
 INT 21 - Cancel Redirection (DOS 3.1 + Microsoft Networks)
 AX = 5FO4H
 DS:SI -> device name or network Path
 Return; Flag CF = 1 if error
 AX = Error Code if any
 INT 21 - Internal - Resolve path string to fully qualified path string
 AH = 6Oh
 DI:SI = relative path strings
 ES:DI = buffer for fully qualified name
 Returns: buffer filled with qualified name
 may return error code, unknown.
 INT 21 - Internal - Unknown
 AH = 61H
 Returns AL = O in DOS 3,1 (unused function)
 ...9 21 - GET PSP ADDRESS (DOS 3.x)
 AH = 62H
 REtuTn: BX = SEGMENT ADDRESS OF PSP
 ?E? A.1 - GET LEAD BYTE TABLE (DOS 2.25 only)
 AH = 63H
 AL = SUBFUNCTION
 Q = get system lead byte table
 ] 
1 = set/clear interim console flag
 = get interim console flag
 DL = UO to set/clear interim console flag
 Return: DS:SI -> lead byte table (AL = O)
 DL = interim console flag (AL = 2)
 INT 21 - CED installable commands
 AH = OFFH
INT 22 - TERMINATE ADDRESS
 FAR (DWORD) address of routine to be executed
 when program "returns to DOS". Should NOT ever be called.
 INT 23 . CONTROL ''C'' EXIT ADDRESS
 Automatically called from keyboard scanner when
 CTRL-C or CTRL-BREAK is detected. Normally aborts program
 and returns to DOS, but may be changed.
 INT 24 . FATAL ERROR ABORT ADDRESS
 Automatically called upon detection of unrecoverable
 disk error. Normally prints "Abort, Retry, or lgnore?" message
 and takes the reply, but may be changed if desired.
 Provides the following values in registers on entry to interruPt handler:
 .AX:
 bit 15 = O disk llO error
 AL = drive number
 bit 15 = 1 other error
 BP:SI = address of device header for which error occurred
 low byte of DI:
 OO = write-protect error
 o1
 o2
 o3
 o4
 o5
 o6
 o7
 o8
 o9
 OA
 OB
 oc
 unknown unit
 drive not ready
 unknown command
 data error (bad CRC)
 bad request structure length
 seek error
 unknown media type
 sector not found
 printer out of paper
 write fault
 read fault
 general failure
 OF = invalid disk change (DOS 3.x)
 Handler must return
 AL = OO ignore error
 = O1 retry operation
 = O2 terminate program through INT 23
 = O3 fail system call in progress (DOS 3.x)
 ..+? 25 - ABSOLUTE DISK READ
 AL = Drive number (O=A, 1=8, etc)
 DS:BX = Disk Transfer Address (buffer)
 CX = Number of sectors to read
 DX = First relative sector to read
 Return; Flag CF = 1 if error
 AX = Error Code if any
 ORTGINAL FLAGS ON STACK!
 INT 26 . ABSOLUTE DISK WRITE
 AL = Drive number (O=A, 1=8, etc)
 DS:BX = Disk Transfer Address (buffer)
 CX = Number of sectors to write
 DX = First relative sector to write
 Return: Flag CF = 1 if error
 AX = Error Code if any
ORIGINAL FLAGS ON STACK!
 INT 27 . TERMINATE BUT STAY RESIDENT
 CS = CURRENT PROGRAM SEGI,IENT
 DX = LAST PROGRAM BYTE + 1
 INT 28 - Internal - Keyboard Busy Loop
 This interrupt is called from inside the "get input
 from keyboard" routine in Dos, if and only if it is safe to use
 INT 21 to access the disk at that time. It is used primarily by
 the PRINT.COM routines, but any number of other routines could
 be chained to it by saving the original vector, and calling it
 with a FAR call (or just JMPing to it) at the end of the new
 routine.
 Until PRINT.COM installs its own routine, this
 interrupt vector simply points to an IRET opcode'
 INT 29 - Internal - Fast Putchar
 This interrupt is called from the DOS output routines
 if output is going to a device rather than a file, and the
 device driver's attribute word has bit 3 (O4H) set to "1"
 INT 2A - Network Installation Check (Microsoft Networks)
 AH = OOH
 Return: AH <> O if installed
 INT 2A - Check Direct l/O (Microsoft Networks)
 AX = O3OOH
 DS:SI -> ASCIIZ disk device name
 Return: CF == O if allowed
 INT 2A - Execute NETBIOS (Microsoft Networks)
 AH = O4H
 AL = O for error retry, 1 for no retry
 ES:BX -> NCB
 Return: AX = O for no error
 AH = 1, AL = error code
 It{T 2A - Get Network Resource Information (Microsoft Networks)
 AX = OSOOH
 Return: AX = reserved
 BX=#networknames
 CX = # commands
 ' 
DX = # sessions
 lB - Internal routine for MSDOS (IRET) )Ofi-]- Internal routine for MSDOS (IRET) )oO(
 fNT 2D - fnternal routine for MSDOS (IRET) X)O(
 INT 2E'Internal - Execute Command
 ES:SI -> counted CR-terminated command string
 The top-level command.com executes the command; all
 registers are destroyed as in exec.
 INT 2F - Multiplexor - PRINT Installation Check
AX = O1OOH
 Return: AH =
 FFtl if installed
 OlH if not installed, not OK to install
 OOH if not installed, OK to install
 INT 2F - Multiplexor - PRINT Submit file
 AX = O1OlH
 DS:DX.>packetofonebytelevelandDwoRDfilepointer
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 2F - Multiplexor - PRINT Remove file
 AX = O1O2H
 DS:DX -> file name (wildcards allowed)
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 2F - Multiplexor - PRINT Remove all files
 RX = O1O3H
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 2F - Multiplexor - PRINT Hotd queue/Get status
 AX = O1O4H
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 DX = Error count
 DS;SI -> print queue (null-string terminated
 list of 54-byte file names)
 INT 2F - Multiplexor - PRINT Restart queue
 AX = O1O5H
 Return: Flag CF = 1 if error
 AX = Error Code if anY
 INT 2F - Multiplexor - ASSIGN Installation Check
 AX = O6OOH
 Return: AH <> O if installed
 INT 2F - llultiplexor - ASSIGN-r'{=O6O1H)OO(
 : JF - Ittlultiplexor - MSDOS Internal
 AH = 1OH )OO(
 F - Multiplexor - MSDOS Internal
 All = 11H X)O(
 INT 2F - Multiplexor - MSDOS Internal
 AH = 12H )OO(
 INT 2F - Multiplexor - APPEND Installation Check
 AX = BTOOH
 Return: AH <> O if installed
 INT 2F - Multiplexor - APPEND
 AX = B7O1H X)O(
INT 2F - Multiplexor - Netowrk Program Installation Check
 AX = BSOOH
 Return: AH <> O if installed
 INT 2F - Multiplexor - Get Current Post Address
 AX = B8O3H
 Return: ES:BX = post address
 INT 2F - Uultiplexor - Set New Post Address
 AX = B8O4H
 ES:BX = new post address
 INT 33 - USED BY MICROSOFT T'IOUSE
 INT 40 - Relocated (by fixed disk) Floppy Handler
 INT 41 -> Fixed Disk Params
 dw cylinders
 db heads
 dwO
 dw write Pre-comP
 dbo
 db O "control byte"
 db o,o,o
 dw landing zone
 db sectors/track
 dbo
 INT 42 - Relocated (by EGA) Video Handler
 INT 43 -> EGA Initialization Params
 INT 44 -> EGA/PCir fonts
 INT 46 -> Secondary Fixed Disk Params
 IHT 48 - PCjr Cordless Keyboard Translation
 .tf{T 49 -> PCjr Non-keyboard Scan Code Translation Table
 {T 4A ET User Alarm
 Jt thru 77 - Nf Vectored Hardware Lines
 IFQS - 
IRQ9 - 
IRQTO - 
IRQ11 - 
IRQ12 - 
IRQ13 - 
IRQ14 - 
IRQ15 - 
real-time clock
 LAN adapter 1 (to IRQ2)
 reserved
 reserved
 reserved
 80287 error (to NMI)
 fixed disk
 reserved
 INT 86 - Relocated (by NETBIOS) INT 18
 INT 5C - NETBIOS interface
 ES:BX -) Network Control BIock
INT F8 . INTERVAL TIMER (10 MSEC)
 INT FA - USART READY (RS-232C)
 INT FB - USART Rx READY (keYboard)
ES:BP = POINTER TO START OF STRING
 INT 10 - WRITE STRING, MOVE CURSOR AFTER STRING (PCIAT ONLY)
 AH = !16
 AL=1
 BL = IaIPIBUTE
 BH = DISPLAY PAGE NUMBER
 DX = gf4pTING CURSOR POSITTON
 CX = l-f116TH OF STRING
 ES:BP = POINTERTO START OF STRING
 INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
 DON'T ltovE cuRsoR (Pc/AT ONrY)
 AH = 13H
 AL=2
 BH . DISPLAY PAGE NUI{BER
 DX = glapllNc CURSOR POSTTION
 CX = LENGTH OF STRING
 ES:BP = POINTER TO START OF STRING
 INT 10. WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES;
 MOVE CURSOR (PC/AT ONLY)
 AH = 13H
 AL=3
 BH = DISPLAY PAGE NUMBER
 DX _ STARTING CURSOR POSITION
 CX = l-f1t16TH OF STRING
 ES:BP = POINTER TO START OF STRING
 INT 10 - GET VIDEO RAM ADDRESS
 AH = 7OH
 RetTTTn: AX = SEGMENT ADDRESS oF THE FoLLowING
 [BX] - OFFSET ADDRESS OF GREEN PTANE
 [CX] = SEGMENT ADDRESS OF GREEN PLANE
 IDXJ = SEGI{ENT ADDRESS OF RED/BLUE PLANE
 (RED OFFSET = O, BLUE OFFSET = 4OOO)
 INT 10 - GET INCRAM ADDRESSES
 AH = 71H
 Return: AX = SEGMENT ADDRESS OF THE FOLLOWING
 [BX] - SEGMENTADDRESS OF INCRAM
 tcxl - oFFSET ADDRESS OF TNCRAM
 INT 1() - SCROLL SCREEN RIGHT
 AH = 7211
 AL = NO. OF COLUMNS BLANKED AT LEFI OF PAGE
 O = BLANK WINDOW
 BH = fif-IpIBUTES TO BE USED ON BLANK COLUMNs WINDOW:
 CH,CL = UPPER LEFT CORNER
 DH,DL = LOWER RIGHT CORNER
 rNT 10 - SCROLL SCREEN LEFT
 AH = 73H
 AL = NO. OF COLUMNS BLANKED AT RIGHT OF PAGE
 O = BLANK WINDOW
 BH = ATTRIBUTES TO BE USED ON BTANK COLUMNS WINDOW:

You must be logged in to post comments.

Comments powered by CComment