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-
i
?
?
?
?
r. unrr NUFTBER wrrHrN DEvrcE DRTvER
; 2. NUMBER OF BYTES PER SECTOR
;
i
+. 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.