greenber@timeinc.UUCP (Ross M. Greenberg) (07/30/85)
========================================================================== Interrupt List for MS-DOS (2.xx only) (With some notes on Dos 3.xx) Additions and corrections to Bob Jack's SANYO-oriented file describing the INT structure. Includes list of all undocumented INT21 functions and for most tells what they do. - - - Interrupt Structure - - - Orginal work Janet Jack January 1985 Corrections & additions J. Weaver Jr. January 1985 Addition John Cooper February 1985 Addition Skip Gilbrech February 1985 Corrections & additions Bob Jack Ongoing Additions and Cxns Jim Kyle April 1985 Recent Additions and Corrections: (7/25/85) John Ruschmeyer (...!ihnp4!vax135!petsd!moncol!john) Bill Frolik (...!ihnp4!hplabs!hp-pcd!bill) Ross M. Greenberg (...!ihnp4!timeinc!greenber) ----------------------------------------------------------- INT 0 - DIVIDE ERROR Automatically called at end of DIV or IDIV operation that results in error. Normally set by DOS to display an error message and abort the program. ----------------------------------------------------------- INT 1 - SINGLE-STEP Generated at end of each machine instruction if TF bit in FLAGS is set. This is what makes the T command of DEBUG work for single-stepping. Is not generated after MOV to segment register or POP of segment register. ----------------------------------------------------------- INT 2 - NMI (Non Maskable Interrupt) Generated by NMI signal in hardware. Used in IBM for memory parity error trapping. ----------------------------------------------------------- INT 3 - 1-BYTE INTERRUPT Generated by opcode 0CCh. Similar to 8080's RST instruction. Generally used to set breakpoints for DEBUG. ----------------------------------------------------------- INT 4 - OVERFLOW Generated by INTO instruction if OF flag is set. If flag is not set, INTO is effectively a NOP. Used to trap any arithmetic errors when program is ready to handle them rather than immediately when they occur. ----------------------------------------------------------- INT 5 - Print-Screen Key Automatically called by keyboard scan when print- screen key is pressed. Normally executes routine to print the screen, but may call any routine that can safely be executed from inside the keyboard scanner. Status and result byte at address 0050:0000. ----------------------------------------------------------- INT 6 - UNKNOWN ----------------------------------------------------------- INT 7 - UNKNOWN ----------------------------------------------------------- INT 8 thru 0FH - Vectored Hardware Lines (in IBM at least) In IBM, these 8 interrupts are generated in response to IRQ 0 through IRQ 7 (if enabled via port 21). IRQ0 - Timer interrupt IRQ1 - Keyboard interrupt IRQ4 - serial controller IRQ6 - diskette interrupt IRQ7 - PPI interrupt ----------------------------------------------------------- INT 10 - VIDEO - SET VIDEO MODE REG AH = 0 REG AL = 0 = 40x25 B&W 1 = 40x25 COLOR 2 = 80x25 BW 3 = 80x25 COLOR 4 = 320x200 GRAPHICS, 4 COLOR 5 = 320x200 GRAPHICS, 4 GREY 6 = 640x200 GRAPHICS, B&W 7 = MONOCHROME GRAPHICS MODE 8 = 160x200 GRAPHICS, 16 COLOR 9 = 320x200 GRAPHICS, 16 COLOR A = 640x200 GRAPHICS, 4 COLOR Note: Modes 8-10 are only available on the PCjr (and Tandy 1000). ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR CHARACTERISTICS REG AH = 1 REG CH = bit values: bits 5-6 = blink attribute (00=normal, 01=invis., 11=fast) bits 0-4 = start line for cursor in char. cell REG CL = bit values: bits 0-4 = end line for cursor in char. cell ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR POSITION REG AH = 2 REG DH,DL = ROW,COLUMN - 0,0 = UPPER LEFT REG BH = PAGE NO. - 0 = GRAPHICS ----------------------------------------------------------- INT 10 - VIDEO - READ CURSOR POSITION REG AH = 3 REG BH = PAGE NO. - 0 = GRAPHICS ON EXIT: REG DH,DL = ROW,COLUMN REG CH,CL = CURSOR MODE,CURRENT SET ----------------------------------------------------------- INT 10 - VIDEO - READ LIGHT PEN POSITION REG AH = 4 ON EXIT: REG AH = 0: light pen switch not activated AH = 1: light pen values in registers DH = row of current position DL = column of current position CH = raster line (0-199) BX = pixel column (0-319 or 0-639) ----------------------------------------------------------- INT 10 - VIDEO - SELECT DISPLAY PAGE REG AH = 5 REG AL = 0 - 7: NEW PAGE VALUE FOR MODES 0 & 1 0 - 3: NEW PAGE VALUE FOR MODES 2 & 3 80H: READ CRT/CPU PAGE REGISTERS 81H: SET CPU PAGE REGISTER TO VALUE IN BL 82H: SET CRT PAGE REGISTER TO VALUE IN BH 83H: SET BOTH DISPLAY REGISTERS ON EXIT: REG BH = CRT PAGE REGISTER BL = CPU PAGE REGISTER ----------------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE UP REG AH = 6 REG AL = NO. OF LINES BLANKED AT BOTTOM OF PAGE 0 = BLANK WINDOW REG BH = ATTRIBUTES TO BE USED ON BLANK LINE WINDOW: REG CH,CL = UPPER LEFT CORNER REG DH,DL = LOWER RIGHT CORNER ----------------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE DOWN REG AH = 7 REG AL = NO. OF LINES BLANKED AT TOP OF PAGE 0 = BLANK WINDOW REG BH = ATTRIBUTES TO BE USED ON BLANK LINE WINDOW: REG CH,CL = UPPER LEFT CORNER REG DH,DL = LOWER RIGHT CORNER ----------------------------------------------------------- INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION REG AH = 8 REG BH = DISPLAY PAGE ON EXIT: REG AL = CHAR REG AH = ATTRIBUTE OF CHAR - ALPHA MODE ----------------------------------------------------------- INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS REG AH = 9 REG AL = CHARACTER REG BH = DISPLAY PAGE - ALPHA MODE REG BL = ATTRIBUTES OF CHAR REG CX = NO. OF CHAR TO WRITE ----------------------------------------------------------- INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS REG AH = 0AH REG AL = CHARACTER REG BH = DISPLAY PAGE - ALPHA MODE REG BL = COLOR OF CHARACTER (GRAPHICS MODE) REG CX = NO. OF CHAR TO WRITE ----------------------------------------------------------- INT 10 - SET COLOR PALETTE REG AH = 0BH REG BH = PALETTE COLOR ID REG BL = COLOR TO BE USED W/COLOR ID ----------------------------------------------------------- INT 10 - WRITE DOT ON SCREEN REG AH = 0CH REG AL = COLOR OF DOT REG DX = ROW (0000 - 00C7) REG CX = COLUMN (0000 - 027F) NOTE: VIDEO MODES 6 & 7 ONLY ----------------------------------------------------------- INT 10 - READ DOT ON SCREEN REG AH = 0DH REG CX = COLUMN (0000 - 027F) REG DX = ROW (0000 - 00C7) ON RETURN: REG AL = COLOR READ ----------------------------------------------------------- INT 10 - WRITE CHARACTER - ADVANCE CURSOR (TTY WRITE) REG AH = 0EH REG AL = CHARACTER REG BL = FOREGROUND COLOR (VIDEO MODES 6 & 7 ONLY) ----------------------------------------------------------- INT 10 - GET CURRENT VIDEO MODE REG AH = 0FH ON RETURN: REG AH = # OF COLUMNS ON SCREEN REG AL = CURRENT VIDEO MODE REG BH = CURRENT ACTIVE DISPLAY PAGE ----------------------------------------------------------- INT 10 - SET PALETTE REGISTERS (PCjr AND TANDY 1000) REG AH = 10H AL = 0: SET PALETTE REGISTER BL = PALETTE REGISTER TO SET BH = COLOR VALUE TO STORE AL = 1: SET BORDER COLOR REGISTER BH = COLOR VALUE TO STORE AL = 2: SET ALL PALETTE REGISTERS ES:DX = POINTER TO 17-BYTE LIST BYTES 0-15 = VALUES FOR PALETTE REGS. 0-15 BYTE 16 = VALUE FOR BORDER REGISTER ----------------------------------------------------------- INT 10 - WRITE STRING, DON'T MOVE CURSOR (PC/AT ONLY) REG AH = 13H AL = 0 BL = ATTRIBUTE BH = DISPLAY PAGE NUMBER DX = STARTING CURSOR POSITION CX = LENGTH OF STRING ES:BP = POINTER TO START OF STRING ----------------------------------------------------------- INT 10 - WRITE STRING, MOVE CURSOR AFTER STRING (PC/AT ONLY) REG AH = 13H AL = 1 BL = ATTRIBUTE BH = DISPLAY PAGE NUMBER DX = STARTING CURSOR POSITION CX = LENGTH OF STRING ES:BP = POINTER TO START OF STRING ----------------------------------------------------------- INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES; DON'T MOVE CURSOR (PC/AT ONLY) REG AH = 13H AL = 2 BH = DISPLAY PAGE NUMBER DX = STARTING CURSOR POSITION CX = LENGTH OF STRING ES:BP = POINTER TO START OF STRING ----------------------------------------------------------- INT 10 - WRITE STRING OF ALTERNATING CHARACTERS, ATTRIBUTES; MOVE CURSOR (PC/AT ONLY) REG AH = 13H AL = 3 BH = DISPLAY PAGE NUMBER DX = STARTING CURSOR POSITION CX = LENGTH OF STRING ES:BP = POINTER TO START OF STRING ----------------------------------------------------------- INT 10 - GET VIDEO RAM ADDRESS REG AH = 70H ON RETURN: REG AX = SEGMENT ADDRESS OF THE FOLLOWING [BX] = OFFSET ADDRESS OF GREEN PLANE [CX] = SEGMENT ADDRESS OF GREEN PLANE [DX] = SEGMENT ADDRESS OF RED/BLUE PLANE (RED OFFSET = 0, BLUE OFFSET = 4000) ----------------------------------------------------------- INT 10 - GET INCRAM ADDRESSES REG AH = 71H ON RETURN: REG AX = SEGMENT ADDRESS OF THE FOLLOWING [BX] = SEGMENT ADDRESS OF INCRAM [CX] = OFFSET ADDRESS OF INCRAM ----------------------------------------------------------- INT 10 - SCROLL SCREEN RIGHT REG AH = 72H REG AL = NO. OF COLUMNS BLANKED AT LEFT OF PAGE 0 = BLANK WINDOW REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS WINDOW: REG CH,CL = UPPER LEFT CORNER REG DH,DL = LOWER RIGHT CORNER ---------------------------------------------------------- INT 10 - SCROLL SCREEN LEFT REG AH = 73H REG AL = NO. OF COLUMNS BLANKED AT RIGHT OF PAGE 0 = BLANK WINDOW REG BH = ATTRIBUTES TO BE USED ON BLANK COLUMNS WINDOW: REG CH,CL = UPPER LEFT CORNER REG DH,DL = LOWER RIGHT CORNER ----------------------------------------------------------- INT 11 - EQUIPMENT DETERMINATION ON RETURN: REG AX = "equipment flag" bit 0 diskette installed bit 1 8087 present bit 2,3 always = 11 bit 4,5 initial video mode 01 = 40x25 COLOR 10 = 80x25 COLOR 11 = 80X25 IBM monochrome bit 6,7 number of diskette drives (only if bit 0 = 1) 00 = 1, 01 = 2 bit 8 0 = dma present, 1= no dma on system bit 9,10,11 number of RS232 cards bit 12 game I/O attached bit 13 serial printer installed (IBM-PCjr) bit 14,15 number of printers ----------------------------------------------------------- INT 12 - MEMORY SIZE ON RETURN: REG AX = NO. OF CONTIGUOUS 1K BLOCKS ----------------------------------------------------------- INT 13 - RESET DISK SYSTEM REG AH = 0 ----------------------------------------------------------- INT 13 - STATUS OF DISK SYSTEM REG AH = 1 ON RETURN: REG AL = STATUS 01H = BAD COMMAND 02H = ADDRESS MARK NOT FOUND 03H = WRITE ATTEMPTED ON WRITE-PROTECTED DISK 04H = SECTOR NOT FOUND 06H = DISKETTE REMOVED 08H = DMA OVERRUN 09H = DMA ACROSS 64K BOUNDARY 10H = BAD CRC 20H = CONTROLLER FAILURE 40H = SEEK FAILED 80H = TIME OUT ----------------------------------------------------------- INT 13 - READ SECTORS INTO MEMORY REG AH = 2 REG AL = NO. OF SECTORS REG CH = TRACK NO. REG CL = SECTOR NO. REG DH = HEAD NO. REG DL = DRIVE NO. REG ES:BX = ADDRESS OF BUFFER ON RETURN: CF = SUCCESS/FAILURE SIGNAL REG AH = STATUS (SEE ABOVE) AL = NUMBER OF SECTORS READ ----------------------------------------------------------- INT 13 - WRITES SECTORS FROM MEMORY REG AH = 3 REG AL = NO. OF SECTORS REG CH = TRACK NO. REG CL = SECTOR NO. REG DH = HEAD NO. REG DL = DRIVE NO. REG ES:BX = ADDRESS OF BUFFER ON RETURN: CF = SUCCESS/FAILURE SIGNAL REG AH = STATUS (SEE ABOVE) AL = NUMBER OF SECTORS WRITTEN ----------------------------------------------------------- INT 13 - VERIFIES SECTORS REG AH = 4 REG AL = NO. OF SECTORS REG CH = TRACK NO. REG CL = SECTOR NO. REG DH = HEAD NO. REG DL = DRIVE NO. ON RETURN: CF = SUCCESS/FAILURE SIGNAL REG AH = STATUS (SEE ABOVE) AL = NUMBER OF SECTORS VERIFIED ----------------------------------------------------------- INT 13 - FORMAT DISKETTE TRACK REG AH = 5 AL = NUMBER OF SECTORS CH = TRACK NUMBER CL = SECTOR NUMBER DH = HEAD NUMBER DL = DRIVE NUMBER ES:BX = POINTER TO 4-BYTE ADDRESS FIELD BYTE 1 = TRACK BYTE 2 = HEAD BYTE 3 = SECTOR BYTE 4 = BYTES/SECTOR ON RETURN: CF = SUCCESS/FAILURE SIGNAL REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - GET CURRENT DRIVE PARAMETERS (PC/AT ONLY) REG AH = 8 ON RETURN: CF = SUCCESS/FAILURE FLAG REG AH = STATUS CODE (SEE ABOVE) DL = NUMBER OF DRIVES DH = MAX. NUMBER OF SIDES CL = MAX. NUMBER OF SECTORS CH = MAX. NUMBER OF TRACKS ----------------------------------------------------------- INT 13 - INITIAL TWO FIXED DISK BASE TABLES (PC/AT ONLY) REG AH = 9 ON RETURN: CF = SUCCESS/FAILURE FLAG REG AH = STATUS CODE (SEE ABOVE) INTERRUPT 41 POINTS TO TABLE FOR DRIVE 0 INTERRUPT 46 POINTS TO TABLE FOR DRIVE 1 ----------------------------------------------------------- INT 13 - READ LONG (PC/AT ONLY) REG AH = 0AH DL = DRIVE ID DH = HEAD NUMBER CH = CYLINDER NUMBER CL = SECTOR NUMBER ES:BX = POINTER TO BUFFER ON RETURN: CF = SUCCESS/FAILURE FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - WRITE LONG (PC/AT ONLY) REG AH = 0BH DL = DRIVE ID DH = HEAD NUMBER CH = SECTOR NUMBER ES:BX = POINTER TO BUFFER ON RETURN: CF = SUCCESS/FAILURE FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - SEEK TO CYLINDER (PC/AT ONLY) REG AH = 0CH DL = DRIVE ID DH = HEAD NUMBER CH = SECTOR NUMBER ON RETURN: CF = SUCCESS/FAILURE FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - ATLERNATE DISK RESET (PC/AT ONLY) REG AH = 0DH DL = DRIVE ID ON RETURN: CF = SUCCESS/FAIL FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - TEST FOR DRIVE READY (PC/AT ONLY) REG AH = 10H DL = DRIVE ID ON RETURN: CF = SUCCESS/FAIL FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - RECALIBRATE DRIVE (PC/AT ONLY) REG AH = 11H DL = DRIVE ID ON RETURN: CF = SUCCESS/FAIL FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY) REG AH = 14H ON RETURN: CF = SUCCESS/FAIL FLAG REG AH = STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 13 - GET DISK TYPE (PC/AT ONLY) REG AH = 15H DL = DRIVE ID ON RETURN: REG AH = DISK TYPE 0 = DISK NOT THERE 1 = DISKETTE, NO CHANGE DETECTION PRESENT 2 = DISKETTE, CHANGE DETECTION PRESENT 3 = FIXED DISK CX,DX = NUMBER OF 512-BYTE SECTORS WHEN AH = 3 ----------------------------------------------------------- INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY) REG AH = 16H ON RETURN: REG DL = DRIVE THAT HAD DISK CHANGE AH = DISK CHANGE STATUS 00 = NO DISK CHANGE 01 = DISK CHANGED ----------------------------------------------------------- INT 13 - SET DISK TYPE (PC/AT ONLY) REG AH = 17H AL = DISK TYPE 00 = NO DISK 01 = REGULAR DISKETTE IN REGULAR DRIVE 02 = HIGH-CAP. DISK IN HIGH-CAP. DRIVE ----------------------------------------------------------- INT 14 - SERIAL I/O - INITIALIZE USART REG AH = 0 REG AL = INITIALIZING PARAMETERS BIT 7 - 6 - 5 4 - 3 2 1 - 0 -BAUD RATE- PARITY STOP WORD BITS LENGTH 000 110 BD 00 NONE 0-1 10 - 7 001 150 BD 01 ODD 1-2 11 - 8 010 300 BD 11 EVEN 011 600 BD 100 1200 BD 101 2400 BD 110 4800 BD 111 9600 BD (4800 ON PCjr) DX = PORT NUMBER ----------------------------------------------------------- INT 14 - SERIAL I/O - TRANSMIT CHARACTER REG AH = 1 AL = CHARACTER DX = PORT NUMBER ON RETURN: REG AH = RS-232 STATUS CODE BIT 0 = 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 BIT 0 = DELTA CLEAR-TO-SEND 1 = DELTA DATA-SET-READY 2 = TRAILING EDGE RING DETECTED 3 = CHANGE, RECEIVE LINE SIGNAL DETECTED 4 = CLEAR-TO-SEND 5 = DATA-SET-READY 6 = RING DETECTED 7 = RECEIVE LINE SIGNAL DETECTED ----------------------------------------------------------- INT 14 - SERIAL I/O - RECEIVE CHARACTER REG AH = 2 ON RETURN: REG AL = CHARACTER RECEIVED REG AH = RS-232 STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 14 - SERIAL I/O - GET USART STATUS REG AH = 3 ON RETURN: REG AH = RS-232 STATUS CODE (SEE ABOVE) REG AL = MODEM STATUS CODE (SEE ABOVE) ----------------------------------------------------------- INT 15 - TURN ON CASSETTE MOTOR REG AH = 0 ----------------------------------------------------------- INT 15 - TURN OFF CASSETTE MOTOR REG AH = 1 ----------------------------------------------------------- INT 15 - READ DATA BLOCKS FROM CASSETTE REG AH = 2 CX = COUNT OF BYTES ES:BX = POINTER TO DATA AREA ON RETURN: CF = ERROR SIGNAL REG DX = COUNT OF BYTES READ ES:BX = POINTER PAST LAST BYTE READ ----------------------------------------------------------- INT 15 - WRITE DATA BLOCKS TO CASSETTE REG AH = 3 CX = COUNT OF BYTES TO WRITE ES:BX = POINTER TO DATA AREA ON RETURN: REG ES:BX = POINTER PAST LAST BYTE WRITTEN ----------------------------------------------------------- INT 15 - DEVICE OPEN (PC/AT ONLY) REG AH = 80 BX = DEVICE ID CX = PROCESS TYPE ----------------------------------------------------------- INT 15 - DEVICE CLOSE (PC/AT ONLY) REG AH = 81 BX = DEVICE ID CX = PROCESS TYPE ----------------------------------------------------------- INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY) REG AH = 82 BX = DEVICE ID ----------------------------------------------------------- INT 15 - EVENT WAIT (PC/AT ONLY) REG AH = 83 AL = SUBSERVICE 0 = SET INTERVAL 1 = CANCEL ES:BX = POINTER TO CALLER'S MEMORY CX,DX = NUMBER OF MICROSECONDS TO WAIT ----------------------------------------------------------- INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY) REG AH = 84 DX = 0 ON RETURN: REG AL = SWITCH SETTINGS ----------------------------------------------------------- INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY) REG AH = 84 DX = 1 ON RETURN: REG AX = A(x) VALUE BX = A(y) VALUE CX = B(x) VALUE DX = B(y) VALUE ----------------------------------------------------------- INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY) REG AH = 85 AL = 00 PRESS AL = 01 BREAK ----------------------------------------------------------- INT 15 - WAIT (PC/AT ONLY) REG AH = 86 CX,DX = NUMBER OF MICROSECONDS TO WAIT ----------------------------------------------------------- INT 15 - EXTENDED MEMORY - BLOCK MOVE (PC/AT ONLY) REG AH = 87 CX = NUMBER OF WORDS TO MOVE ES:SI = POINTER TO TABLE ----------------------------------------------------------- INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (PC/AT ONLY) REG AH = 88 ON RETURN: REG AX = MEMORY SIZE ----------------------------------------------------------- INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY) REG AH = 89 ----------------------------------------------------------- INT 15 - DEVICE BUSY LOOP (PC/AT ONLY) REG AH = 90 AL = TYPE CODE ----------------------------------------------------------- INT 15 - SET FLAG AND COMPLETE INTERRUPT REG AH = 91 AL = TYPE CODE ----------------------------------------------------------- INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY REG AH = 0 ON RETURN: REG AH = SCAN CODE REG AL = CHARACTER ----------------------------------------------------------- INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR REG AH = 1 ON RETURN: FLAG ZF = 0 = CHAR IN BUFFER REG AH = SCAN CODE REG AL = CHARACTER FLAG ZF = 1 = NO CHAR IN BUFFER ----------------------------------------------------------- INT 16 - KEYBOARD I/O - GET SHIFT STATUS REG AH = 2 ON RETURN: REG AL = SHIFT STATUS BITS BIT 0 = RIGHT SHIFT KEY DEPRESSED 1 = LEFT SHIFT KEY DEPRESSED 2 = CTRL DEPRESSED 3 = ALT DEPRESSED 4 = SCROLL LOCK ACTIVE 5 = NUM LOCK ACTIVE 6 = CAPS LOCK ACTIVE 7 = INSERT STATE ACTIVE ----------------------------------------------------------- INT 16 - KEYBOARD - SET DELAYS (PCjr ONLY) REG AH = 3 AL = 0: RESET TYPEMATIC AL = 1: INCREASE INITIAL DELAY AL = 2: INCREASE CONTINUING DELAY AL = 3: INCREASE BOTH DELAYS AL = 4: TURN OFF TYPEMATIC ----------------------------------------------------------- INT 16 - KEYBOARD - KEYCLICK (PCjr ONLY) REG AH = 4 AL = 0: CLICK OFF AL = 1: CLICK ON ----------------------------------------------------------- INT 17 - CHARACTER TO PRINTER REG AH = 0 REG AL = CHAR ON RETURN: REG AH = STATUS BIT 0 = TIME OUT 1 = UNUSED 2 = UNUSED 3 = I/O ERROR 4 = SELECTED 5 = OUT OF PAPER 6 = ACKNOWLEDGE 7 = NOT BUSY ----------------------------------------------------------- INT 17 - INITIALIZE PRINTER REG AH = 1 ON RETURN: REG AH = STATUS (SEE ABOVE) ----------------------------------------------------------- INT 17 - STATUS OF PRINTER REG AH = 2 ON RETURN: REG 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 REG AH = 0 ON RETURN: REG CX = high (most signif.) portion of clock count DX = low (least signif.) portion of clock count AL = 0 if clock was read or written (via AH=0,1) withing the current 24-hour period Otherwise, AL > 0 ----------------------------------------------------------- INT 1A - SET TIME OF DAY REG AH = 1 CX = high (most signif.) portion of clock count DX = low (least signif.) portion of clock count ----------------------------------------------------------- INT 1A - READ REAL TIME CLOCK (PC/AT ONLY) REG AH = 2 ON RETURN: REG CH = HOURS CL = MINUTES DH = SECONDS ----------------------------------------------------------- INT 1A - SET REAL TIME CLOCK (PC/AT ONLY) REG AH = 3 CH = HOURS CL = MINUTES DH = SECONDS DL = 1, IF DAYLIGHT SAVINGS; 0 IF STANDARD TIME ----------------------------------------------------------- INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY) REG AH = 4 ON RETURN: REG DL = DAY DH = MONTH CL = YEAR CH = CENTURY (19 OR 20) ----------------------------------------------------------- INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY) REG AH = 5 DL = DAY DH = MONTH CL = YEAR CH = CENTURY (19 OR 20) ----------------------------------------------------------- INT 1A - SET ALARM (PC/AT ONLY) REG AH = 6 CH = HOURS CL = MINUTES DH = SECONDS ON RETURN: INT. 4A = ADDRESS OF ALARM ROUTINE ----------------------------------------------------------- INT 1A - RESET ALARM (PC/AT ONLY) REG AH = 7 ----------------------------------------------------------- INT 1B - CTRL-BREAK KEY (on IBM at least) This interrupt is called when the keyboard scanner of the IBM machines detects CTRL and BREAK pressed at the same time. It normally points to a 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 (on IBM at least) This interrupt is called (in the IBM) at the end of each time-update operation by the real-time clock routines. It normally points to an IRET unless PRINT.COM has been installed. ----------------------------------------------------------- INT 20 - PROGRAM TERMINATION (MSDOS generic) NOTE: NO PARAMETERS - RETURNS TO DOS ----------------------------------------------------------- INT 21 - PROGRAM TERMINATION (MSDOS generic) Reg AH = 0 Same action as INT 20; returns to DOS. ----------------------------------------------------------- INT 21 - KEYBOARD INPUT (MSDOS generic) REG AH = 1 ON RETURN: REG AL = CHARACTER READ ----------------------------------------------------------- INT 21 - DISPLAY OUTPUT (MSDOS generic) REG AH = 2 REG DL = CHAR ----------------------------------------------------------- INT 21 - AUX Input (MSDOS generic) Reg AH = 3 Return with char in reg AL. NOTE - Waits for char, gives no error indications. ----------------------------------------------------------- INT 21 - AUX Output (MSDOS generic) Reg AH = 4 Reg DL = char to send to AUX No error indications!! ----------------------------------------------------------- INT 21 - PRINTER OUTPUT (MSDOS generic) REG AH = 5 REG DL = CHAR ----------------------------------------------------------- INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT (MSDOS generic) REG AH = 06H REG DL = CHAR ----------------------------------------------------------- INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT (MSDOS generic) REG AH = 06H REG DL = 0FFH ON RETURN: FLAG ZF = SET = NO CHARACTER CLEAR = CHARACTER RECIEVED REG AL = CHARACTER Character is echoed to STDOUT if received. ----------------------------------------------------------- INT 21 - Direct STDIN Input, no echo (MSDOS generic) Reg AH = 7 Same as Function 6 for input but char not echoed. ----------------------------------------------------------- INT 21 - KEYBOARD INPUT - NO ECHO (MSDOS generic) REG AH = 8 ON RETURN: REG AL = CHAR ----------------------------------------------------------- INT 21 - PRINT STRING (MSDOS generic) REG AH = 9 DS:DX = ADDRESS OF STRING NOTE: STRING TERMINATED WITH "$" ----------------------------------------------------------- INT 21 - BUFFERED KEYBOARD INPUT (MSDOS generic) REG AH = 0AH DS:DX = ADDRESS OF BUFFER FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH ON RETURN SECOND BYTE HAS ACTUAL LENGTH ----------------------------------------------------------- INT 21 - CHECK STANDARD INPUT STATUS (MSDOS generic) REG AH = 0BH ON RETURN: REG AL = FFH IF CHAR TYPED 00H IF NOT TYPED ----------------------------------------------------------- INT 21 - Clear Keyboard Buffer (MSDOS generic) Reg AH = 0CH Reg AL must be 1, 6, 7, 8, or 0aH. Flushes all typeahead input, then executes function specified by AL (by moving it to AH and repeating the INT 21 call). ----------------------------------------------------------- INT 21 - Disk Reset (MSDOS generic) Reg AH = 0DH Flushes all disk buffers. ----------------------------------------------------------- INT 21 - SELECT DISK (MSDOS generic) REG AH = 0EH REG DL = new default drive number (0 = A, 1 = B, etc.) ON RETURN: AL = number of logical drives ----------------------------------------------------------- INT 21 - OPEN DISK FILE (MSDOS generic) REG AH = 0FH REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND ----------------------------------------------------------- INT 21 - CLOSE DISK FILE (MSDOS generic) REG AH = 10H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ----------------------------------------------------------- INT 21 - Search First using FCB (MSDOS generic) REG AH = 11H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB FCB may contain wildcard chars. On Return: REG AL = 00 = 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 - Search Next using FCB (MSDOS generic) REG AH = 12H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB Search First must have been called earlier. On Return: Same as Search First; if AL = 0ffH, no more left. ----------------------------------------------------------- INT 21 - Delete File via FCB (MSDOS generic) REG AH = 13H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB On Return: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND ----------------------------------------------------------- INT 21 - SEQUENTIAL DISK FILE READ (MSDOS generic) REG AH = 14H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 0 = SUCCESSFUL READ 1 = END OF FILE 2 = DATA TRANSFER AREA TOO SMALL 3 = PARTIAL RECORD, EOF ----------------------------------------------------------- INT 21 - SEQUENTIAL DISK RECORD WRITE (MSDOS generic) REG AH = 15H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 0 = SUCCESSFUL WRITE 1 = DISKETTE FULL 2 = DATA TRANSFER AREA TOO SMALL ----------------------------------------------------------- INT 21 - CREATE A DISK FILE (MSDOS generic) REG AH = 16H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 00 = SUCCESSFUL CREATION FF = NO ROOM IN DIRECTORY ----------------------------------------------------------- INT 21 - Rename File via FCB (MSDOS generic) REG AH = 17H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB FCB contains new name starting at byte 17H. On Return: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND ----------------------------------------------------------- INT 21 - Internal - does nothing (MSDOS generic) REG AH = 18H On Return: AL = 0 ----------------------------------------------------------- INT 21 - Default Disk Number (MSDOS generic) REG AH = 19H On Return: AL = current drive number (letter - 'A') ----------------------------------------------------------- INT 21 - SET DISK TRANSFER AREA ADDRESS (MSDOS generic) REG AH = 1AH REG DS = SEGMENT ADDRESS OF BUFFER REG DX = OFFSET ADDRESS OF BUFFER ON RETURN: Registers are unchanged, no error codes ----------------------------------------------------------- INT 21 - Default Drive Disk Size (MSDOS generic) REG AH = 1BH On 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 (MSDOS generic) REG AH = 1CH Reg DL = Drive Number to check On 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 (MSDOS generic) REG AH = 1DH On Return: AL = 0 ----------------------------------------------------------- INT 21 - Internal - does nothing (MSDOS generic) REG AH = 1EH On Return: AL = 0 ----------------------------------------------------------- INT 21 - Internal - unknown but like FN 32 (MSDOS generic) REG AH = 1fH Other registers unknown On Return: REG AL = 00 = No Error FF = Error Unknown vector returned in ES:BX. ----------------------------------------------------------- INT 21 - Internal - does nothing (MSDOS generic) REG AH = 20H On Return: AL = 0 ----------------------------------------------------------- INT 21 - RANDOM DISK RECORD READ (MSDOS generic) REG AH = 21H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 0 = SUCCESSFUL READ 1 = END OF FILE 2 = DATA TRANSFER AREA TOO SMALL 3 = PARTIAL RECORD, EOF ----------------------------------------------------------- INT 21 - Random Disk Write (MSDOS generic) REG AH = 22H Same setup as Random Read, but writes to disk ----------------------------------------------------------- INT 21 - FILE SIZE (MSDOS generic) REG AH = 23H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB ON RETURN: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND FCB SET TO NO. OF RECORDS ----------------------------------------------------------- INT 21 - Set Random Record Field (MSDOS generic) REG AH = 24H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB FCB must be OPEN already On Return: Random Record Field of FCB is set to be same as Current Block and Current Record. No error code is returned. ----------------------------------------------------------- INT 21 - Set Interrupt Vector (MSDOS generic) REG AH = 25H Reg AL = INT number DS:DX = new vector to be used for specified INT On Return: Registers are unchanged; no error codes ----------------------------------------------------------- INT 21 - Create PSP (MSDOS generic) REG AH = 26H Reg DX = Segment number to set up PSP at On Return: Current PSP is copied to specified segment ----------------------------------------------------------- INT 21 - RANDOM BLOCK READ (MSDOS generic) REG AH = 27H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB REG CX = NO. OF RECORDS TO BE READ ON RETURN: REG AL = 0 = SUCCESSFUL READ 1 = END OF FILE 2 = DATA TRANSFER AREA TOO SMALL 3 = PARTIAL RECORD, EOF ----------------------------------------------------------- INT 21 - RANDOM BLOCK WRITE (MSDOS generic) REG AH = 28H REG DS = SEGMENT ADDRESS OF FCB REG DX = OFFSET ADDRESS OF FCB REG CX = NO. OF RECORDS TO BE WRITTEN ON RETURN: REG AL = 0 = SUCCESSFUL WRITE 1 = DISKETTE FULL 2 = DATA TRANSFER AREA TOO SMALL ----------------------------------------------------------- INT 21 - Parse Filename (MSDOS generic) REG AH = 29H DS:SI = POINTER TO STRING TO PARSE ES:DI = POINTER TO MEMORY TO FILL WITH UNOPENED FCB AL = BIT MASK TO CONTROL PARSING BIT 0 = 0: PARSING STOPS IF FILE SEPERATOR FOUND 1: LEADING SEPERATOR IGNORED 1 = 0: DRIVE NUMNER IN FCB SET TO DEFAULT IF STRING CONTAINS NO DRIVE NUMBER 1: DRIVE NUMBER IN FCB NOT CHANGED 2 = 0: 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 = 0: EXTENSION IN FCB SET TO BLANKS IF NO EXTENSION IN STRING 1: EXTENSION LEFT UNCHANGED ON RETURN: REG AL = 00: NO WILDCARDS IN NAME OR EXTENSION 01: WILDCARDS APPEARED IN NAME OR EXTENSION DS:SI = POINTER TO FIRST BYTE AFTER PARSED STRING ES:DI = UNOPENED FCB ----------------------------------------------------------- INT 21 - GET CURRENT DATE (MSDOS generic) REG AH = 2AH ON RETURN: REG DL = DAY REG DH = MONTH REG CX = YEAR REG AL = DAY OF THE WEEK (0=SUNDAY, 1=MONDAY, ETC.) ----------------------------------------------------------- INT 21 - Set CURRENT DATE (MSDOS generic) REG AH = 2bH REG DL = DAY REG DH = MONTH REG CX = YEAR On Return: AL = 0 if no error AL = 0ffH if bad value sent to routine ----------------------------------------------------------- INT 21 - GET CURRENT TIME (MSDOS generic) REG AH = 2CH ON RETURN: REG CH = HOURS REG CL = MINUTES REG DH = SEC REG DL = SEC/100 NOTE: TIME IS UPDATED EVERY 5/100 SECOND ----------------------------------------------------------- INT 21 - Set CURRENT TIME (MSDOS generic) REG AH = 2DH REG CH = HOURS REG CL = MINUTES REG DH = SEC REG DL = SEC/100 On Return: AL = 0 if no error AL = 0ffH if bad value sent to routine ----------------------------------------------------------- INT 21 - Set Verify Flag (MSDOS generic) REG AH = 2EH DL = 0 AL = 1 if VERIFY on AL = 0 if VERIFY off ----------------------------------------------------------- INT 21 - Get Disk Transfer Area Address (MSDOS generic) REG AH = 2FH On Return: Reg ES = SEGMENT address of DTA Reg BX = OFFSET address of DTA ----------------------------------------------------------- INT 21 - Get DOS Version (MSDOS generic) REG AH = 30H On Return: Reg AL = Major Version number Reg AH = Minor Version number (i.e., DOS 2.10 returns AX = 0A02H) Reg BH = OEM number Reg BL:CX = 24-bit user number ----------------------------------------------------------- INT 21 - TERMINATE BUT STAY RESIDENT (MSDOS generic) REG AH = 31H REG AL = EXIT CODE REG DX = PROGRAM SIZE, IN PARAGRAPHS ADDRESS IN HEX - XX XX 0 - ON RETURN: REG AX = RETURN CODE (RETRIEVEABLE BY FUNCTION 4DH) ----------------------------------------------------------- INT 21 - Internal - unknown (MSDOS generic) REG AH = 32H Other registers unknown On Return: REG AL = 00 = No Error FF = Error Unknown vector returned in ES:BX. ----------------------------------------------------------- INT 21 - Get or Set CONTROL-BREAK (MSDOS generic) REG AH = 33H Reg AL = 0 for Get or 1 for Put Reg DL = 0 for OFF or 1 for ON On Return: DL = 0 if BREAK=OFF or 1 if BREAK=ON AL = FFH IF ERROR ----------------------------------------------------------- INT 21 - Internal - Return CritSectFlag Pointer (MSDOS generic) REG AH = 34H On Return: ES:BX points to DOS "Critical Section Flag" When byte pointed to is zero, DOS is supposed to be safe to interrupt. 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 00 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 (MSDOS generic) REG AH = 35H Reg AL = INT number On Return: Reg ES = Segment address of INT vector Reg BX = Offset address of INT vector ----------------------------------------------------------- INT 21 - DISK SPACE (MSDOS generic) REG AH = 36H REG DL = DRIVE NUMBER (1-4) ON RETURN: REG AX = ? (SIDES) REG BX = ? (BLOCKS FREE) REG CX = ? (BLOCK SIZE) REG DX = ? (TOTAL BLOCKS) 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 - multifunction (MSDOS generic) 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=0 means /DEV/ must preceed device names DL#0 means /DEV/ need not preceed device names Returns: DL = Switch character (if AL=0 or 1) Device availability flag (if AL=2 or 3) Error return: AL=0FFh means the value in AL was not in the range 0-3. Note: Functions 2 & 3 appear not to be implemented for dos 3.x ----------------------------------------------------------- INT 21 - Get Country-Dependent Information (MSDOS generic) REG AH = 38H Complex and differs between Dos 2.x and Dos 3.x See Peter Norton "Programmer's Guide to the IBM PC", p. 305 ----------------------------------------------------------- INT 21 - CREATE A SUBDIRECTORY (MSDOS generic) REG AH = 39H Reg DS = SEGMENT address of ASCIIZ pathname Reg DX = OFFSET address of ASCIIZ pathname On Return: Flag CF = 0 = SUCCESSFUL 1 = ERROR Reg AX = Error Code if any ----------------------------------------------------------- INT 21 - REMOVE A DIRECTORY ENTRY (MSDOS generic) REG AH = 3AH Reg DS = SEGMENT address of ASCIIZ pathname Reg DX = OFFSET address of ASCIIZ pathname On Return: Flag CF = 0 = SUCCESSFUL 1 = ERROR Reg AX = Error Code if any ----------------------------------------------------------- INT 21 - CHANGE THE CURRENT DIRECTORY (MSDOS generic) REG AH = 3BH Reg DS = SEGMENT address of ASCIIZ Reg DX = OFFSET address of ASCIIZ On Return: Flag CF = 0 = SUCCESSFUL 1 = ERROR Reg AX = Error Code if any ----------------------------------------------------------- INT 21 - CREATE A FILE WITH HANDLE (MSDOS generic) REG AH = 3CH REG CX = ATTRIBUTES FOR FILE REG DS = SEGMENT ADDRESS OF ASCIIZ REG DX = OFFSET ADDRESS OF ASCIIZ ON RETURN: FLAG CF = 0 = SUCCESSFUL CREATION 1 = ERROR REG AX = FILE HANDLE OR ERROR CODE ----------------------------------------------------------- INT 21 - OPEN DISK FILE WITH HANDLE (MSDOS generic) REG AH = 3DH REG AL = ACCESS CODE 0 = Read Only 1 = Write Only 2 = Read/Write REG DS = SEGMENT ADDRESS OF ASCIIZ REG DX = OFFSET ADDRESS OF ASCIIZ ON RETURN: FLAG CF = 0 = SUCCESSFUL OPENING 1 = ERROR REG AX = FILE HANDLE OR ERROR CODE ----------------------------------------------------------- INT 21 - CLOSE A FILE WITH HANDLE (MSDOS generic) REG AH = 3EH REG BX = FILE HANDLE ON RETURN: FLAG CF = 0 = SUCCESSFUL CLOSE 1 = ERROR REG AX = ERROR CODE IF ERROR ----------------------------------------------------------- INT 21 - READ FROM FILE WITH HANDLE (MSDOS generic) REG AH = 3FH REG BX = FILE HANDLE REG CX = NO. OF BYTES TO READ REG DS = SEGMENT ADDRESS OF BUFFER REG DX = OFFSET ADDRESS OF BUFFER ON RETURN: FLAG CF = 0 = SUCCESSFUL READ 1 = ERROR REG AX = 0 = END OF FILE OR NO. OF BYTES READ OR ERROR CODE ----------------------------------------------------------- INT 21 - WRITE TO FILE WITH HANDLE (MSDOS generic) REG AH = 40H REG BX = FILE HANDLE REG CX = NO. OF BYTES TO Write REG DS = SEGMENT ADDRESS OF BUFFER REG DX = OFFSET ADDRESS OF BUFFER ON RETURN: FLAG CF = 0 = SUCCESSFUL WRITE 1 = ERROR REG AX = NO. OF BYTES Writtten OR ERROR CODE ----------------------------------------------------------- INT 21 - DELETE A FILE (MSDOS generic) REG AH = 41H REG DS = SEGMENT OF ASCIIZ TO DELETE REG DX = OFFSET OF ASCIIZ TO DELETE On Return: Flag CF = 0 = SUCCESSFUL 1 = ERROR Reg AX = Error Code if any ----------------------------------------------------------- INT 21 - MOVE FILE READ/WRITE POINTER (MSDOS generic) REG AH = 42H REG AL = METHOD VALUE 0 = offset from beginning of file 1 = offset from present location 2 = offset from end of file REG BX = FILE HANDLE REG CX = BYTES OFFSET HIGH REG DX = BYTES OFFSET LOW ON RETURN: FLAG CF = 0 = SUCCESSFUL MOVE 1 = ERROR REG DX = NEW LOC. OF R/W POINTER HIGH REG AX = NEW LOC. OF R/W POINTER LOW ERROR CODE IF ERROR ----------------------------------------------------------- INT 21 - GET/PUT FILE ATTRIBUTES (MSDOS generic) REG AH = 43H REG AL = 0 = GET FILE ATTRIBUTES 1 = PUT FILE ATTRIBUTES REG CX = FILE ATTRIBUTES ON PUT BIT 0 = READ ONLY 1 = HIDDEN FILE 2 = SYSTEM FILE 3 = VOLUME LABEL 4 = SUBDIRECTORY 5 = WRITTEN SINCE BACKUP REG DX = POINTER TO FILE ASCIIZ FILE NAME ON RETURN: FLAG CF = SET IF ERROR REG AX = Error Code 1, 3, or 5 REG CX = FILE ATTRIBUTES ON GET ----------------------------------------------------------- INT 21 - IOCTL (MSDOS generic) REG AH = 44H Complex. See T2K manual pages 121-124 ----------------------------------------------------------- INT 21 - Create Duplicate Handle (MSDOS generic) REG AH = 45H Reg BX = file handle to duplicate On Return: If carry set, AX = Error Code If carry clear, AX = duplicate handle ----------------------------------------------------------- INT 21 - Force Duplicate Handle (MSDOS generic) REG AH = 46H Reg BX = Existing file handle Reg CX = new file handle On Return: If CF set, AX = Error Code If clear, both handles now refer to Existing file ----------------------------------------------------------- INT 21 - Get Current Directory (MSDOS generic) REG AH = 47H Reg DL = drive (0=default, 1=A, etc.) DS:SI points to 64-byte buffer area On Return: If CY set, AX = Error Code Else DS:DI points to ASCIIZ name of current directory (not including drive ID) ----------------------------------------------------------- INT 21 - Allocate Memory (MSDOS generic) REG AH = 48H Reg BX = number of 16-byte paragraphs desired On Return: If CF set: BX = Maximum number available If CF clear: AX = Segment address of allocated space ----------------------------------------------------------- INT 21 - Free Memory (MSDOS generic) REG AH = 49H Reg ES = Segment address of area to be freed On Return: If CF set, AX = Error Code ----------------------------------------------------------- INT 21 - Adjust Block Size (MSDOS generic) REG AH = 4AH Reg ES = Segment address of block to change Reg BX = New size in paragraphs On Return: If CF set, BX = max number available Else operation was successful ----------------------------------------------------------- INT 21 - Load or Execute (MSDOS generic) REG AH = 4BH Complex. See T2K manual pages 131-133 ----------------------------------------------------------- INT 21 - Quit With Exit Code (MSDOS generic) REG AH = 4CH Reg AL = exit code Does not return. Control passes to DOS ----------------------------------------------------------- INT 21 - GET EXIT CODE OF SUBPROGRAM (MSDOS generic) REG AH = 4DH On Return: AL = exit code of subprogram (FNs 31H or 4cH) AH = circumstance which caused termination 0 = Terminate/abort 1 = Control-C 2 = Hard error 3 = Terminate and stay resident ----------------------------------------------------------- INT 21 - Find First ASCIIZ (MSDOS generic) REG AH = 4EH CX = SEARCH ATTRIBUTES DS:DX = POINTER TO ASCIIZ FILENAME (WITH ATTRIBUTES) ON RETURN: IF CF SET, REG AX = ERROR CODE ELSE, DATA BLOCK WRITTEN AT CURRENT DTA ----------------------------------------------------------- INT 21 - Find Next ASCIIZ (MSDOS generic) REG AH = 4FH ON RETURN: IF CF SET, AX = ERROR CODE ELSE, DATA BLOCK WRITTEN AT CURRENT DTA ----------------------------------------------------------- INT 21 - Internal - Set PSP Segment (MSDOS generic) REG AH = 50H Reg BX = Segment address of new PSP On Return: No return codes ----------------------------------------------------------- INT 21 - Internal - Get PSP Segment (MSDOS generic) REG AH = 51H On Return: BX = Current PSP Segment ----------------------------------------------------------- INT 21 - Internal - Unknown (MSDOS generic) REG AH = 52H On Return: Unknown pointer in ES:BX ----------------------------------------------------------- INT 21 - Internal - Unknown (MSDOS generic) REG AH = 53H On Return: Unknown ----------------------------------------------------------- INT 21 - Get Verify Flag (MSDOS generic) REG AH = 54H On Return: AL = 0 if flag OFF AL = 1 if flag ON ----------------------------------------------------------- INT 21 - Internal - Create PSP (MSDOS generic) REG AH = 55H Like FN 26H but creates "child" PSP rather than copying existing one. ----------------------------------------------------------- INT 21 - RENAME A FILE (MSDOS generic) REG AH = 56H REG DS = SEGMENT OF ASCIIZ OLD NAME REG DX = OFFSET OF ASCIIZ OLD NAME REG ES = SEGMENT OF ASCIIZ NEW NAME REG DI = OFFSET OF ASCIIZ NEW NAME ON RETURN: FLAG CF = CLEARED = SUCCESSFULL RENAME SET = ERROR & REG AX = ERROR CODE ----------------------------------------------------------- INT 21 - Get/Put Date/Time (MSDOS generic) REG AH = 57H AL = FUNCTION CODE 0 = GET DATE AND TIME 1 = SET DATE AND TIME BX = FILE HANDLE CX = TIME TO BE SET (IF AL = 1) DX = DATE TO BE SET (IF AL = 1) ON RETURN: IF CF SET: REG AX = ERROR CODE IF CF NOT SET: REG CX = TIME OF LAST WRITE (IF AL = 0) DX = DATE OF LAST WRITE (IF AL = 0) ----------------------------------------------------------- INT 21 - GET EXTENDED ERROR CODE (DOS 3.X generic) REG AH = 59H BX = VERSION CODE (0000 FOR DOS 3.0) ON RETURN: REG AX = EXTENDED ERROR CODE BH = CLASS OF ERROR BL = SUGGESTED ACTION CODE CH = LOCUS (WHERE ERROR OCCURRED) ----------------------------------------------------------- INT 21 - CREATE TMEPORARY FILE (DOS 3.x generic) REG AH = 5AH DS:DX = POINTER TO DIRECTORY PATH NAME CX = FILE ATTRIBUTE ON RETURN: REG AX = ERROR CODE (IF CF SET) DS:DX = PATH NAME (IF CF NOT SET) NOTE: THE FILE CREATED IS NOT TRULY "TEMPORARY". IT MUST BE REMOVED BY THE USER. ----------------------------------------------------------- INT 21 - CREATE NEW FILE (DOS 3.x generic) REG AH = 5BH DS:DX = POINTER TO DIRECTORY PATH NAME CX = FILE ATTRIBUTE ON RETURN: REG AX = ERROR CODE (IF CF SET) DS:DX = PATH NAME (IF CF NOT SET) NOTE: UNLIKE FUNCTION 3CH, FUNCTION 5BH WILL FAIL IF THE ALREADY EXISTS. ----------------------------------------------------------- INT 21 - LOCK/UNLOCK FILE ACCESS (DOS 3.x generic) REG AH = 5CH AL = 0 IF LOCK 1 IF UNLOCK BX = FILE HANDLE CX:DX = OFFSET TO LOCK SI:DI = AMOUNT TO LOCK ON RETURN: REG AX = ERROR CODE (IF CF SET) ----------------------------------------------------------- INT 21 - GET PSP ADDRESS (DOS 3.x generic) REG AH = 62H ON RETURN: REG BX = SEGMENT ADDRESS OF PSP ----------------------------------------------------------- INT 22 - TERMINATE ADDRESS (MSDOS generic) FAR (DWORD) address of routine to be executed when program "returns to DOS". Should NOT ever be called. ----------------------------------------------------------- INT 23 - CONTROL "C" EXIT ADDRESS (MSDOS generic) 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 (MSDOS generic) Automatically called upon detection of unrecoverable disk error. Normally prints "Abort, Retry, or Ignore?" message and takes the reply, but may be changed if desired. ----------------------------------------------------------- INT 25 - ABSOLUTE DISK READ (MSDOS generic) Similar to INT 13 function, but this one is generic for all MSDOS rather than being machine specific. ENTRY CONDITIONS: AL = Drive number (0=A, 1=B, etc) DS:BX = Disk Transfer Address (buffer) CX = Number of sectors to read DX = First relative sector to read. 0 reads boot sector, 1 reads FAT, etc. EXIT: If carry set, AL=error code. If carry not set, operation successful. NOTE: This routine PUSHes the flags onto the stack when it is called, and does NOT remove them at exit. Be sure to POP the stack immediately after returning, to prevent overflow. All of the registers, not just those listed, are changed by the routine. ----------------------------------------------------------- INT 26 - ABSOLUTE DISK WRITE (MSDOS generic) All parameters and conditions are the same as for INT 25, except that this routine WRITES to the disk rather than READing from it. Note that it does NOT update the FAT, directories, etc., and can easily destroy a disk unless carefully used. ----------------------------------------------------------- INT 27 - TERMINATE BUT STAY RESIDENT (MSDOS generic) REG CS = CURRENT PROGRAM SEGMENT REG DX = LAST PROGRAM BYTE + 1 NOTE: RETURN IS TO DOS ----------------------------------------------------------- INT 28 - Internal routine for MSDOS 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 routine for MSDOS 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 (04H) set to "1". Nothing more is known about it at this time. ----------------------------------------------------------- INT 2E - UNKNOWN ----------------------------------------------------------- INT 30 - UNKNOWN ----------------------------------------------------------- INT 31 - UNKNOWN ----------------------------------------------------------- INT F8 - INTERVAL TIMER (10 MSEC) PARAMETERS UNKNOWN ----------------------------------------------------------- INT FA - USART READY (RS-232C) PARAMETERS UNKNOWN ----------------------------------------------------------- INT FB - USART Rx READY (keyboard) PARAMETERS UNKNOWN ----------------------------------------------------------- -- ------------------------------------------------------------------ Ross M. Greenberg @ Time Inc, New York --------->{vax135 | ihnp4}!timeinc!greenber<--------- I highly doubt that Time Inc. would make me their spokesperson. ---- "I saw _Lassie_. It took me four shows to figure out why the hairy kid never spoke. I mean, he could roll over and all that, but did that deserve a series?"
bright@dataio.UUCP (Walter Bright) (07/30/85)
In article <364@timeinc.UUCP> greenber@timeinc.UUCP (Ross M. Greenberg) writes: > ----------------------------------------------------------- > INT 8 thru 0FH - Vectored Hardware Lines (in IBM at least) > In IBM, these 8 interrupts are generated in > response to IRQ 0 through IRQ 7 (if enabled via port 21). > IRQ0 - Timer interrupt > IRQ1 - Keyboard interrupt IRQ3 - RS232 port (com2:) > IRQ4 - serial controller (com1:) > IRQ6 - diskette interrupt > IRQ7 - PPI interrupt Note IRQ3.
greenber@timeinc.UUCP (Ross M. Greenberg) (07/31/85)
Please.....pretty please......with a cherry on top.... Mail me corrections to the list (in diff format if possible), and I'll post an update when there are enough of them. Let's not clutter the net if we can avoid it, eh? Thanks. Ross -- ------------------------------------------------------------------ Ross M. Greenberg @ Time Inc, New York --------->{vax135 | ihnp4}!timeinc!greenber<--------- I highly doubt that Time Inc. would make me their spokesperson. ---- "I saw _Lassie_. It took me four shows to figure out why the hairy kid never spoke. I mean, he could roll over and all that, but did that deserve a series?"
vr0z05@unido.UUCP (08/03/85)
> ----------------------------------------------------------- > INT 8 thru 0FH - Vectored Hardware Lines (in IBM at least) > In IBM, these 8 interrupts are generated in > response to IRQ 0 through IRQ 7 (if enabled via port 21). > IRQ0 - Timer interrupt > IRQ1 - Keyboard interrupt IRQ3 - RS232 port (com2:) > IRQ4 - serial controller (com1:) IRQ5 - fixed disk > IRQ6 - diskette interrupt > IRQ7 - PPI interrupt Note IRQ3 and IRQ5. /* ---------- */ Uwe Hoch (...ihnp4!hpfcla!hpbbn!unido!vr0z05)