- - - Interrupt Structure - - - Orginal work Janet Jack Jan 1985 Corrections & additions J. Weaver Jr. Jan 1985 Addition John Cooper Feb 1985 Addition Skip Gilbrech Feb 1985 Corrections & additions Jim Kyle Apr 1985 Corrections & additions Bob Jack On going ----------------------------------------------------------- INT 0 - DIVIDE ERROR (CPU CHIP) NOTE - 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 (CPU CHIP) NOTE - 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 (CPU CHIP) NOTE - Generated by NMI (Non Maskable Interrupt) signal in hardware. Used for memory parity error trapping. ----------------------------------------------------------- INT 3 - 1-BYTE INTERRUPT (CPU CHIP) NOTE - Generated by opcode CCH. Generally used to set breakpoints for DEBUG. ----------------------------------------------------------- INT 4 - OVERFLOW (CPU CHIP) NOTE - 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 (IBM) NOTE - 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. ----------------------------------------------------------- INT 6 - UNKNOWN ----------------------------------------------------------- INT 7 - UNKNOWN ----------------------------------------------------------- INT 8 thru 0FH - VECTORED HARDWARE LINES (IBM and others) NOTE - In IBM, these 8 interrupts are generated in response to IRQ 0 through IRQ 7 (if enabled via port 21). ----------------------------------------------------------- INT 10 - VIDEO - SET VIDEO MODE (SANYO) REG AH = 0 REG AL = 2 = 80X25 BW 3 = 80X25 COLOR 6 = MONOCHROME GRAPHICS MODE 7 = COLOR GRAPHICS MODE ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR BLINK SPEED (SANYO) REG AH = 1 REG CX = 0107H = FAST CURSOR BLINK <> 0107H = NORMAL CURSOR BLINK ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR POSITION (SANYO) REG AH = 2 REG DH,DL = ROW,COLUMN - 0,0 = UPPER LEFT REG BH = PAGE NO. - 0 = GRAPHICS ----------------------------------------------------------- INT 10 - VIDEO - READ CURSOR POSITION (SANYO) REG AH = 3 REG BH = PAGE NO. - 0 = GRAPHICS ON RETURN: REG DH,DL = ROW,COLUMN REG CH,CL = CURSOR MODE,CURRENT SET ----------------------------------------------------------- INT 10 - VIDEO - SELECT DISPLAY PAGE (SANYO) REG AH = 5 REG AL = NEW PAGE VALUE 0 - 7 FOR MODES 0 & 1 0 - 3 FOR MODES 2 & 3 ----------------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE UP (SANYO) 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 (SANYO) 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 (SANYO) REG AH = 8 REG BH = DISPLAY PAGE ON RETURN: REG AL = CHAR REG AH = ATTRIBUTE OF CHAR - ALPHA MODE ----------------------------------------------------------- INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS (SANYO) 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 (SANYO) REG AH = 0AH REG AL = CHARACTER REG BH = DISPLAY PAGE - ALPHA MODE REG CX = NO. OF CHAR TO WRITE ----------------------------------------------------------- INT 10 - TELETYPE (SCREEN) - SET DOT ON SCREEN (SANYO) REG AH = 0CH REG DX = ROW (0000 - 00C7) REG CX = COLUMN (0000 - 027F) NOTE - VIDEO MODES 6 & 7 ONLY ----------------------------------------------------------- INT 10 - TELETYPE (SCREEN) - STATUS (SANYO) REG AH = 0DH ON RETURN: (VIDEO MODES 2 & 3) REG AH = NO. CHAR ON SCREEN REG AL = CURRENT MODE REG BH = DISPLAY PAGE (VIDEO MODES 6 & 7) REG AL = 1 = DOT SET 0 = DOT NOT SET ----------------------------------------------------------- INT 10 - WRITE CHARACTER - ADVANCE CURSOR (SANYO) REG AH = 0EH REG AL = CHARACTER REG BH = DISPLAY PAGE REG BL = FOREGROUND COLOR (VIDEO MODES 6 & 7 ONLY) ----------------------------------------------------------- INT 10 - GET CURRENT VIDEO MODE (SANYO) REG AH = 0FH ON RETURN: REG AH = # OF COLUMNS (ALWAYS 50) REG AL = CURRENT VIDEO MODE ----------------------------------------------------------- INT 10 - GET VIDEO RAM ADDRESS (SANYO) 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 (SANYO) 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 (SANYO) 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 (SANYO) 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 (IBM, SANYO, and others) ON RETURN: REG AX = UNKNOWN RETURN NOTE - Not used in SANYO. Active in IBM and other computers. Returns code equvilent to equipment connected to computer. ----------------------------------------------------------- INT 12 - MEMORY SIZE (SANYO) ON RETURN: REG AX = NO. OF CONTIGUOUS 1K BLOCKS ----------------------------------------------------------- INT 13 - RESET DISK SYSTEM (SANYO) REG AH = 0 ----------------------------------------------------------- INT 13 - STATUS OF DISK SYSTEM (SANYO) REG AH = 1 ON RETURN: REG AL = STATUS ----------------------------------------------------------- INT 13 - READ SECTORS INTO MEMORY (SANYO) 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: REG AH 0 = SUCCESSFUL = REASON FOR FAILURE FLAG CF 0 = SUCCESSFUL 1 = FAILED ----------------------------------------------------------- INT 13 - WRITES SECTORS FROM MEMORY (SANYO) 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: REG AH 0 = SUCCESSFUL = REASON FOR FAILURE FLAG CF 0 = SUCCESSFUL 1 = FAILED ----------------------------------------------------------- INT 13 - VERIFIES SECTORS (SANYO) 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: REG AH 0 = SUCCESSFUL = REASON FOR FAILURE FLAG CF 0 = SUCCESSFUL 1 = FAILED ----------------------------------------------------------- INT 14 - SERIAL I/O - INITIALIZE USART (SANYO) 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 ----------------------------------------------------------- INT 14 - SERIAL I/O - TRANSMIT CHARACTER (SANYO) REG AH = 1 REG AL = CHARACTER ON RETURN: REG AH, BIT 7, SET IF CHAR NOT SENT ----------------------------------------------------------- INT 14 - SERIAL I/O - RECEIVE CHARACTER (SANYO) REG AH = 2 ON RETURN: REG AL = CHARACTER RECEIVED REG AH, BIT 7, SET IF TIMEOUT OCCURED ----------------------------------------------------------- INT 14 - SERIAL I/O - GET USART STATUS (SANYO) REG AH = 3 ON RETURN: REG AH = BIT 7 = TIMEOUT BIT 5 = TXRDY BIT 4 = BREAK DETECT BIT 3 = FRAMING ERROR BIT 2 = PARITY ERROR BIT 1 = OVERRUN ERROR BIT 0 = RXRDY REG AL = BIT 5 = DSR ----------------------------------------------------------- INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY (SANYO) REG AH = 0 ON RETURN: REG AH = SCAN CODE REG AL = CHARACTER ----------------------------------------------------------- INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR (SANYO) 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 INPUT (SANYO) REG AH = 0AH ON RETURN: REG AH = SCAN CODE REG AL = ASCII CODE ----------------------------------------------------------- INT 16 - KEYBOARD STATUS (SANYO) REG AH = 0BH ON RETURN: (ZF) = 1 = NO ENTRY 0 = CODE AVAILABLE - IN BUFFER - IN REG AX ----------------------------------------------------------- INT 17 - CHARACTER TO PRINTER (SANYO) REG AH = 0 REG AL = CHAR ON RETURN: REG AH = STATUS BIT = 0 = TIME OUT 4 = SELECTED 5 = OUT OF PAPER 7 = BUSY ----------------------------------------------------------- INT 17 - INITIALIZE PRINTER (SANYO) REG AH = 1 ON RETURN: REG AH = STATUS BIT = 0 = TIME OUT 4 = SELECTED 5 = OUT OF PAPER 7 = BUSY ----------------------------------------------------------- INT 17 - STATUS OF PRINTER (SANYO) REG AH = 2 ON RETURN: REG AH = STATUS BIT = 0 = TIME OUT 4 = SELECTED 5 = OUT OF PAPER 7 = BUSY ----------------------------------------------------------- INT 1A - UNKNOWN ----------------------------------------------------------- INT 1B - BREAK KEY (IBM) NOTE - 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 (IBM) NOTE - 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 NOTE - Same action as INT 20; returns to DOS. ----------------------------------------------------------- INT 21 - KEYBOARD INPUT (MSDOS generic) REG AH = 1 ON RETURN: REG AL = CHARACTER ----------------------------------------------------------- INT 21 - DISPLAY OUTPUT (MSDOS generic) REG AH = 2 REG DL = CHAR ----------------------------------------------------------- INT 21 - AUX INPUT - WAIT FOR CHARACTER (MSDOS generic) REG AH = 3 ON RETURN: REG AL = CHARACTER ----------------------------------------------------------- INT 21 - AUX OUTPUT (MSDOS generic) REG AH = 4 REG DL = CHAR ----------------------------------------------------------- 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 ----------------------------------------------------------- INT 21 - STDIN INPUT - NO ECHO (MSDOS generic) REG AH = 7 ON RETURN: FLAG ZF = SET = NO CHARACTER CLEAR = CHARACTER RECIEVED REG AL = CHARACTER ----------------------------------------------------------- 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 REG DS:DX = ADDRESS OF STRING NOTE - STRING TERMINATED WITH "$" ----------------------------------------------------------- INT 21 - BUFFERED KEYBOARD INPUT (MSDOS generic) REG AH = 0AH DS:DX = ADDRESS OF BUFFER NOTE - 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 = 1, 6, 7, 8, 0AH NOTE - 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 NOTE - Flushes all disk buffers. ----------------------------------------------------------- INT 21 - DRIVE COUNT (MSDOS generic) REG AH = 0EH ON RETURN: REG AL = NUMBER OF DRIVES NOTE - Minimum number is 2. ----------------------------------------------------------- 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 NOTE - FCB may contain wildcard chars ON RETURN: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND NOTE - 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 NOTE - FCB may contain wildcard chars. Search First must have been called earlier. ON RETURN: REG AL = 00 = FILE FOUND FF = FILE NOT FOUND NOTE - If file found, FCB is created at DTA address and set up to OPEN or DELETE it. If not found, end of directory. ----------------------------------------------------------- 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 NOTE - FCB contains new name starting at offset byte 17H. ON RETURN: REG AL = 00 = SUCCESSFUL CREATION FF = NO ROOM IN DIRECTORY ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 18H ON RETURN: REG AL = 0 NOTE - Use unknown - Does nothing. ----------------------------------------------------------- INT 21 - GET DEFAULT DRIVE NUMBER (MSDOS generic) REG AH = 19H ON RETURN: REG AL = DEFAULT DRIVE NUMBER (0-3) ----------------------------------------------------------- INT 21 - SET DISK TRANSFER AREA ADDRESS (MSDOS generic) REG AH = 1AH REG DS = SEGMENT ADDRESS OF BUFFER REG DX = OFFSET ADDRESS OF BUFFER ----------------------------------------------------------- INT 21 - DEFAULT DRIVE DISK SIZE (MSDOS generic) REG AH = 1BH ON RETURN: REG DS:BX POINTS TO FAT ID BYTE REG DX = AU's ON DISK REG AL = SECTORS PER AU REG CX = BYTES PER SECTOR NOTE - AU = allocation unit or granules ----------------------------------------------------------- INT 21 - SPECIFIC DRIVE's DISK SIZE (MSDOS generic) REG AH = 1CH Reg DL = DRIVE NUMBER ON RETURN: REG DS:BX POINTS TO FAT ID BYTE REG DX = AU's ON DISK REG AL = SECTORS PER AU REG CX = BYTES PER SECTOR NOTE - AU = allocation unit or granules ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 1DH ON RETURN: REG AL = 0 NOTE - Use unknown - Does nothing. ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 1EH ON RETURN: REG AL = 0 NOTE - Use unknown - Does nothing. ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 1FH NOTE - Other registers unknown ON RETURN: REG AL = 00 = No Error FF = Error REG ES:BX = UNKNOWN VECTOR ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 20H ON RETURN: REG AL = 0 NOTE - Use unknown - Does nothing. ----------------------------------------------------------- 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 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 - 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 NOTE - FCB must be OPEN already. On return, Random Record Field of FCB is set to be same as Current Block and Current Record. ----------------------------------------------------------- INT 21 - SET INTERRUPT VECTOR (MSDOS generic) REG AH = 25H REG AL = INTERRUPT NUMBER REG DS:DX = INTERRUPT VECTOR ----------------------------------------------------------- INT 21 - CREATE PSP (MSDOS generic) REG AH = 26H REG DX = SEGMENT NOTE - 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 NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 page 82 ----------------------------------------------------------- INT 21 - GET CURRENT DATE (MSDOS generic) REG AH = 2AH ON RETURN: REG DL = DAY REG DH = MONTH REG CX = YEAR ----------------------------------------------------------- INT 21 - SET CURRENT DATE (MSDOS generic) REG AH = 2BH REG DL = DAY REG DH = MONTH REG CX = YEAR ON RETURN: REG AL = 0 = NO ERROR FF = ERROR ----------------------------------------------------------- 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: REG AL = 0 = NO ERROR FF = ERROR ----------------------------------------------------------- INT 21 - SET VERIFY FLAG (MSDOS generic) REG AH = 2EH REG AL = 1 = ON 0 = OFF ----------------------------------------------------------- INT 21 - GET DTA ADDRESS (Disk Transfer Area) - (MSDOS generic) REG AH = 2FH ON RETURN: REG ES = SEGMENT REG BX = OFFSET ----------------------------------------------------------- INT 21 - GET DOS VERSION (MSDOS generic) REG AH = 30H ON RETURN: REG AL = MAJOR VERSION NUMBER REG AH = MINOR VERSION NUMBER NOTE - Example, DOS 2.10 returns AX = 0A02H ----------------------------------------------------------- INT 21 - TERMINATE BUT STAY RESIDENT (MSDOS generic) REG AH = 31H REG AL = EXIT CODE REG DX = PROGRAM SIZE, IN 16 BYTE PARAGRAPHS ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 32H NOTE - Other registers unknown ON RETURN: REG AL = 00 = No Error FF = Error REG ES:BX = UNKNOWN VECTOR ----------------------------------------------------------- INT 21 - GET or SET BREAK KEY (MSDOS generic) REG AH = 33H REG AL = 0 = GET 1 = SET REG DL = 0 = OFF 1 = ON ON RETURN: REG DL = 0 = OFF 1 = ON ----------------------------------------------------------- INT 21 - GET CRITICAL SECTION FLAG PIONTER (MSDOS generic) REG AH = 34H ON RETURN: REG ES:BX = POINTER TO FLAG WORD NOTE - DOS can be safely interrupted if flag word is null ----------------------------------------------------------- INT 21 - GET INTERRUPT VECTOR (MSDOS generic) REG AH = 35H Reg AL = INT number ON RETURN: REG ES = SEGMENT REG BX = OFFSET ----------------------------------------------------------- INT 21 - DISK SPACE (MSDOS generic) REG AH = 36H REG DL = DRIVE NUMBER (1-4) ON RETURN: REG AX = UNKNOWN - PERHAPS (SIDES) REG BX = UNKNOWN - PERHAPS (BLOCKS FREE) REG CX = UNKNOWN - PERHAPS (BLOCK SIZE) REG DX = UNKNOWN - PERHAPS (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 - DEVICE - MULTIFUNCTION (MSDOS generic) REG AH = 37H REG AL = 0, 1, 2, 3 to select subfunction REG DL = SWITCHAR byte for subfunction 1 = Device Availability byte for subfn 2 (if 0, devices are in DEV subdir) ON RETURN: REG DL = SWITCHAR (subfunction 0) = DEVICE AVAILABLE BYTE (subfunction 3) ----------------------------------------------------------- INT 21 - GET COUNTRY-DEPENDENT INFORMATION (MSDOS generic) REG AH = 38H NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 pages 101-104 ----------------------------------------------------------- INT 21 - CREATE A SUBDIRECTORY (MSDOS generic) REG AH = 39H REG DS = SEGMENT OF ASCIIZ REG DX = OFFSET OF ASCIIZ ON RETURN: Flag CF = 0 = SUCCESSFUL 1 = ERROR NOTE - REG AX = Error code, if any ----------------------------------------------------------- INT 21 - REMOVE A DIRECTORY ENTRY (MSDOS generic) REG AH = 3AH REG DS = SEGMENT OF ASCIIZ REG DX = OFFSET OF ASCIIZ ON RETURN: Flag CF = 0 = SUCCESSFUL 1 = ERROR NOTE - REG AX = Error code, if any ----------------------------------------------------------- INT 21 - CHANGE THE CURRENT DIRECTORY (MSDOS generic) REG AH = 3BH REG DS = SEGMENT OF ASCIIZ REG DX = OFFSET OF ASCIIZ ON RETURN: Flag CF = 0 = SUCCESSFUL 1 = ERROR NOTE - REG AX = Error code, if any ----------------------------------------------------------- INT 21 - CREATE A FILE WITH HANDLE (MSDOS generic) REG AH = 3CH REG CX = ATTRIBUTES OF FILE REG DS = SEGMENT OF ASCIIZ REG DX = OFFSET OF ASCIIZ ON RETURN: Flag CF = 0 = SUCCESSFUL 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 OF ASCIIZ REG DX = OFFSET OF ASCIIZ ON RETURN: FLAG CF = 0 = SUCCESSFUL 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 1 = ERROR NOTE - REG AX = Error code, if any ----------------------------------------------------------- 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 NOTE - REG AX = Error code, if any ----------------------------------------------------------- INT 21 - MOVE FILE READ/WRITE POINTER (MSDOS generic) REG AH = 42H REG AL = METHOD VALUE NOTE - 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 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 NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 pages 121-124 ----------------------------------------------------------- INT 21 - CREATE DUPLICATE HANDLE (MSDOS generic) REG AH = 45H REG BX = FILE HANDLE TO DUPLICATE ON RETURN: FLAG CF = 0 = SUCCESSFUL 1 = ERROR REG AX = DUPLICATE FILE HANDLE OR ERROR CODE ----------------------------------------------------------- INT 21 - FORCE DUPLICATE HANDLE (MSDOS generic) REG AH = 46H REG BX = CURRENT FILE HANDLE REG CX = NEW FILE HANDLE ON RETURN: FLAG CF = 0 = SUCCESSFUL 1 = ERROR REG AX = ERROR CODE NOTE - If no error, 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. REG DS:SI = 64 BYTE BUFFER AREA ON RETURN: FLAG CF = 0 = SUCCESSFUL 1 = ERROR REG AX = ERROR CODE NOTE - If no error, REG 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: FLAG CF = 1 = REG BX = MAX NUMBER AVAILABLE 0 = REG AX = SEGMENT ADDRESS OF ALLOCATED MEMORY ----------------------------------------------------------- INT 21 - SET MEMORY FREE (MSDOS generic) REG AH = 49H REG ES = SEGMENT ADDRESS OF AREA TO BE FREED ON RETURN: FLAG CF = 0 = SUCCESSFUL 1 = ERROR REG AX = ERROR CODE ----------------------------------------------------------- INT 21 - CHANGE BLOCK SIZE (MSDOS generic) REG AH = 4AH REG ES = SEGMENT ADDRESS OF BLOCK TO CHANGE REG BX = NEW SIZE IN 16 BYTE PARAGRAPHS ON RETURN: FLAG CF = 0 = SUCCESSFUL 1 = ERROR REG BX = MAX NUM AVAIL ----------------------------------------------------------- INT 21 - LOAD OR EXECUTE (MSDOS generic) REG AH = 4BH NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 pages 131-133 ----------------------------------------------------------- INT 21 - PROGRAM TERMINATION - WITH EXIT CODE (MSDOS generic) REG AH = 4CH REG AL = EXIT CODE NOTE - Control passes to DOS ----------------------------------------------------------- INT 21 - EXIT CODE (MSDOS generic) REG AH = 4DH ON RETURN: REG AX = EXIT CODE ----------------------------------------------------------- INT 21 - FIND FIRST ASCIIZ (MSDOS generic) REG AH = 4EH NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 pages 136-138 ----------------------------------------------------------- INT 21 - FIND NEXT ASCIIZ (MSDOS generic) REG AH = 4FH NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 pages 136-138 ----------------------------------------------------------- INT 21 - SET PSP SEGMENT (MSDOS generic) REG AH = 50H REG BX = SEGMENT ADDRESS OF NEW PSP ----------------------------------------------------------- INT 21 - GET PSP SEGMENT (MSDOS generic) REG AH = 51H ON RETURN: REG BX = CURRENT PSP SEGMENT ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 52H ON RETURN: REG ES:BX = UNKNOWN POINTER NOTE - Use unknown ----------------------------------------------------------- INT 21 - INTERNAL (MSDOS generic) REG AH = 53H ON RETURN: UNKNOWN NOTE - Use unknown ----------------------------------------------------------- INT 21 - GET VERIFY FLAG (MSDOS generic) REG AH = 54H ON RETURN: REG AL = 0 = OFF 1 = ON ----------------------------------------------------------- INT 21 - CREATE CHILD PSP (MSDOS generic) REG AH = 55H REG DX = SEGMENT NUMBER FOR PSP ----------------------------------------------------------- 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 SET = ERROR & REG AX = ERROR CODE ----------------------------------------------------------- INT 21 - GET/PUT - DATE/TIME (MSDOS generic) REG AH = 57H NOTE - Very complex, suggested you see: Tandy 2000 Programer's manual Stock no. 26-5403 page 141 ----------------------------------------------------------- INT 22 - TERMINATE ADDRESS (MSDOS generic) NOTE - 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) NOTE - Automatically called from keyboard scanner when CONTROL-C or BREAK is detected. Normally aborts program and returns to DOS, but may be changed. ----------------------------------------------------------- INT 24 - FATAL ERROR ABORT ADDRESS (MSDOS generic) NOTE - 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) REG AL = DRIVE (0-3) REG DS:BX = DTA (buffer) REG CX = NUMBER OF SECTORS TO READ REG DX = FIRST RELATIVE SECTOR TO READ NOTE - 0 reads boot sector, 1 reads FAT, etc. ON RETURN: FLAG CF = CLEARED = SUCCESSFULL SET = ERROR & REG AL = ERROR CODE NOTE - This routine PUSHes the flags onto the stack when it is called, and does NOT remove them at exit All of the registers, not just those listed, are changed by this routine. ----------------------------------------------------------- INT 26 - ABSOLUTE DISK WRITE (MSDOS generic) REG AL = DRIVE (0-3) REG DS:BX = DTA (buffer) REG CX = NUMBER OF SECTORS TO READ REG DX = FIRST RELATIVE SECTOR TO READ NOTE - 0 writes boot sector, 1 writes FAT, etc. ON RETURN: FLAG CF = CLEARED = SUCCESSFULL SET = ERROR & REG AL = ERROR CODE ----------------------------------------------------------- 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 VECTOR (IBM) NOTE - This interrupt is called from inside the "get input from keyboard" routine in DOS, 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 UNKNOWN NOTE - 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) ----------------------------------------------------------- INT FA - USART READY (RS-232C) ----------------------------------------------------------- INT FB - USART Rx READY (keyboard) -----------------------------------------------------------  -------------------------