ralf@B.GP.CS.CMU.EDU (Ralf Brown) (12/06/87)
The interrupt list is now too large to send in a single message even when ARCed. Strip the headers and trailers off of each of the three parts of the list, concatenate, and download in ASCII mode. You should get a 136,177 byte file containing 3276 lines. The "cut" lines all start with "*-*-*", to avoid confusion with the separator lines in the file. *-*-*----------------cut here for part 1 of 3-------------------*-*-* While you may want to remove the following header from this file for your own use, please do not redistribute the file without it, so that credit may be given where credit is due. ----------------------------------------------------------- Last edited 12/5/87 This list is the result of the time and effort of a large number of people, among them Janet Jack January 1985 (original list) J. Weaver Jr. January 1985 John Cooper February 1985 Skip Gilbrech February 1985 Bob Jack Jim Kyle April 1985 John Ruschmeyer <ihnp4!vax135!petsd!moncol!john> August 1985 Bill Frolik <ihnp4!hplabs!hp-pcd!bill> August 1985 Ross M. Greenberg <greenber%timeinc.uucp@brl.arpa> August 1985 Dan Lanciani <ddl@harvard.*> TANDY function calls Ralf Brown <ralf@cs.cmu.edu> INT 24h and DOS func 59h error codes Dan Davison <dd@lanl.gov> DOS 3.3 function calls 11/87 Bill White <wwhite@teknowledge-vaxc.arpa> DOS 3.3 11/87 Richard Hargrove <killer!richardh@harvard.harvard.edu> EGA 11/87 Vincent Broman <broman@bugs.nosc.mil> Cordata BIOS/Minix 12/87 Information on the INT 10h functions supported by the EGA BIOS was derived from the article "Graphic Enhancement" found in the April 1985 _PC Tech Journal_, pages 58ff., and is marked with the string {ega}. jrh. Information on functions unique to the Portable PC and the Convertible was derived from a similar list compiled by David E. Powell, and added by Ralf Brown on 11/14/87. Information on LIM EMS 3.2 functions was derived from _Advanced_MSDOS_, by Ray Duncan. Added by Ralf Brown 11/19/87. Information on LIM EMS 4.0 functions was derived from the transcription of the specification by Dick Flanagan and Ben Lomond. Added by Ralf Brown, 11/20/87 ----------------------------------------------------------- If you know any information which is not in this list, or which is incorrect, please let me know! Ralf Brown Arpa: ralf@cs.cmu.edu UUCP: {uunet,ucbvax,harvard}!cs.cmu.edu!ralf BIT: ralf%cs.cmu.edu@cmuccvma FIDO: Ralf Brown at 1:129/31 (more subject to change than the others) ----------------------------------------------------------- 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 (unless you have a very early 8088 with a microcode bug). ----------------------------------------------------------- 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 (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 call any routine that can safely be executed from inside the keyboard scanner. Status and result byte for default handler is at address 0050:0000. ----------------------------------------------------------- INT 5 - BOUND check failed (80286 internal interrupt) ----------------------------------------------------------- INT 6 - Undefined Opcode (80286 internal interrupt) ----------------------------------------------------------- INT 7 - No Math Unit Available (80286 protected-mode internal) ----------------------------------------------------------- INT 8 thru 0F - Vectored Hardware Lines In IBM, these 8 interrupts are generated in response to IRQ 0 through IRQ 7 (if enabled via port 21h). [Tandy 1000] IRQ0 - timer interrupt IRQ1 - keyboard interrupt IRQ2 - EGA vertical retrace [fixed disk] IRQ3 - serial port 2 (com2:) IRQ4 - serial port 1 (com1:) IRQ5 - fixed disk [60 Hz ram refresh] (LPT2 on PC/AT) IRQ6 - diskette interrupt IRQ7 - PPI interrupt (lpt1:, lpt2:) ----------------------------------------------------------- INT 8 - Double Fault (80286 protected-mode internal) ----------------------------------------------------------- INT 9 - Math Unit Protection Fault (80286 protected-mode internal) ----------------------------------------------------------- INT 0A - Invalid Task State Segment (80286 protected-mode internal) ----------------------------------------------------------- INT 0B - Not Present (80286 protected-mode internal) ----------------------------------------------------------- INT 0C - Stack Fault (80286 protected-mode internal) ----------------------------------------------------------- INT 0D - General Protection Violation (80286 internal interrupt) Called in real mode when an instruction attempts to access a word operand located at offset 0FFFFh ----------------------------------------------------------- INT 0E - Page Fault (80386 native-mode internal) ----------------------------------------------------------- INT 10 - VIDEO - SET VIDEO MODE AH = 0 AL = mode 0 = 40x25 B&W 1 = 40x25 color 2 = 80x25 B&W 3 = 80x25 color 4 = 320x200 graphics, 4 color 5 = 320x200 graphics, 4-tone gray scale 6 = 640x200 graphics, B&W 7 = monochrome 8 = 160x200 graphics, 16 color (PCjr/Tandy 1000) 9 = 320x200 graphics, 16 color(PCjr/Tandy 1000) 0Ah = 640x200 graphics, 4 color (PCjr/Tandy 1000) 0Bh = reserved (used internally by EGA BIOS) 0Ch = reserved (used internally by EGA BIOS) 0Dh = 320x200 graphics, 16 color (EGA) 0Eh = 640x200 graphics, 16 color (EGA) 0Fh = 640x350 graphics, monochrome (EGA) 10h = 640x350 graphics, 4 or 16 color (EGA) 11h = ???x??? graphics, ??? colors (VGA) 12h = ???x??? graphics, ??? colors (VGA) 13h = ???x??? graphics, ??? colors (VGA) 30h = ???x??? (AT&T 6300) 40h = 640x400 graphics (AT&T 6300) 60h = 400 line graphics+80 column text (Corona/Cordata BIOS v4.10+) 61h = 400 line graphics (Corona/Cordata BIOS v4.10+) 74h = 640x400 graphics (Toshiba 3100) ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR CHARACTERISTICS AH = 1 CH bits 5-6 = blink attribute (00=normal, 01=invisible, 10 = slow, 11=fast) CH bits 0-4 = start line for cursor in char. cell CL bits 0-4 = end line for cursor in char. cell ----------------------------------------------------------- INT 10 - VIDEO - SET CURSOR POSITION AH = 2 DH,DL = row, column (0,0 = upper left) BH = page number 0 in graphics modes 0-3 in modes 2&3 0-7 in modes 0&1 ----------------------------------------------------------- INT 10 - VIDEO - READ CURSOR POSITION AH = 3 BH = page number 0 in graphics modes 0-3 in modes 2&3 0-7 in modes 0&1 Return: DH = row DL = column CH = cursor start line CL = cursor end line ----------------------------------------------------------- INT 10 - VIDEO - READ LIGHT PEN POSITION AH = 4 Return: 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) {ega} old graphics modes CX = {ega} raster line (0-nnn) new graphics modes BX = pixel column (0-319 or 0-639) ----------------------------------------------------------- INT 10 - VIDEO - SELECT DISPLAY PAGE AH = 5 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 [PCjr only] 81h: set CPU page register to value in BL [PCjr only] 82h: set CRT page register to value in BH [PCjr only] 83h: set both display registers [PCjr only] {Corona/Cordata BIOS v4.10+} 0: set address of graphics bitmap buffer (video modes 60h,61h) BX = segment of buffer 0Fh: get address of graphics bitmap buffer (video modes 60h,61h) Return: BH = CRT page register (if AL >= 80h) BL = CPU page register (if AL >= 80h) DX = segment of graphics bitmap buffer (video modes 60h,61h; AL=0Fh) ----------------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE UP AH = 6 AL = number of lines to scroll window (0 = blank whole window) BH = attributes to be used on blanked lines CH,CL = row,column of upper left corner of window to scroll DH,DL = row,column of lower right corner of window ----------------------------------------------------------- INT 10 - VIDEO - SCROLL PAGE DOWN AH = 7 AL = number of lines to scroll window (0 = blank whole window) BH = attributes to be used on blanked lines CH,CL = row,column of upper left corner of window to scroll DH,DL = row,column of lower right corner of window ----------------------------------------------------------- INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION AH = 8 BH = display page Return: AL = character AH = attribute of character (alpha modes) ----------------------------------------------------------- INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS AH = 9 AL = character BH = display page - alpha mode BL = attributes of char (alpha modes) or color (graphics modes) if bit 7 == 1 in graphics mode, character is xor'ed onto screen CX = number of times to write character ----------------------------------------------------------- INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS AH = 0Ah AL = character BH = display page - alpha mode BL = color of character (graphics mode) CX = number of times to write character {ega} in graphics modes, replication count in CX works correctly only if all character written are contains on the same row ----------------------------------------------------------- INT 10 - VIDEO - SET COLOR PALETTE {ega} CGA-compatible modes AH = 0Bh BH = palette color ID BL = color to be used with color ID {ega} (graphics modes) if BH == 0, BL contains background and border colors (0-15) if BH == 1, BL contains palette being selected (0-1) (text modes) if BH == 0, BL contains border color (0-15) only {ega} BL contains border color (0-15) and high-intensity background color (16-31) ----------------------------------------------------------- INT 10 - VIDEO - WRITE DOT ON SCREEN AH = 0Ch AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5) if bit 7 set, new color will be XORed with current pixel DX = row (0 - 199) CX = column (0 - 319 in modes 4/5, 0 - 639 in mode 6) Note: video modes 4-6 only ----------------------------------------------------------- INT 10 - VIDEO - READ DOT ON SCREEN AH = 0Dh CX = column (0 - 319 or 639) DX = row (0 - 199) Return: AL = color read ----------------------------------------------------------- INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE) AH = 0Eh AL = character BH = display page (alpha modes) BL = foreground color (graphics modes) ----------------------------------------------------------- INT 10 - VIDEO - GET CURRENT VIDEO MODE AH = 0Fh Return: AH = number of columns on screen AL = current video mode BH = current active display page ----------------------------------------------------------- INT 10 - VIDEO - SET PALETTE REGISTERS (PCjr, TANDY 1000, {ega}) 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 {ega} AL = 3: toggle intensity/blinking bit BL = 0: enable intensity BL = 1: enable blink ----------------------------------------------------------- INT 10 - Character generator functions {ega} AH = 11h The following functions will cause a mode set, completely resetting the video environment, but without clearing the video buffer AL = 00h, 10h: load user-specified patterns ES:BP = pointer to user table CX = count of patterns to store DX = character offset into map 2 block BL = block to load in map 2 BH = number of bytes per character pattern AL = 01h, 11h: load ROM monochrome patterns (8 by 14) BL = block to load AL = 02h, 12h: load ROM 8 by 8 double-dot patterns BL = block to load AL = 03h: set block specifier BL = block specifier The routines called with AL=1x are designed to be called only immediately after a mode set and are similar to the routines called with AL=0x, except that: Page 0 must be active. Bytes/character is recalculated. Max character rows is recalculated. CRT buffer length is recalculated. CRTC registers are reprogrammed as follows: R09 = bytes/char-1 ; max scan line (mode 7 only) R0A = bytes/char-2 ; cursor start R0B = 0 ; cursor end R12 = ((rows+1)*(bytes/char))-1 ; vertical display end R14 = bytes/char ; underline loc (*** BUG: should be 1 less ***) The following functions are meant to be called only after a mode set: AL = 20h: user 8 by 8 graphics characters (INT 1FH) ES:BP = pointer to user table AL = 21h: user graphics characters ES:BP = pointer to user table CX = bytes per character BL = row specifier 0: user set - DL = number of rows 1: 14 rows 2: 25 rows 3: 43 rows AL = 22h: ROM 8 by 14 set BL = row specifier AL = 23h: ROM 8 by 8 double dot BL = row specifier AL = 30h: return information BH = pointer specifier 0: INT 1Fh pointer 1: INT 44h pointer 2: ROM 8 by 14 character font pointer 3: ROM 8 by 8 double dot font pointer 4: ROM 8 by 8 DD font (top half) 5: ROM alpha alternate (9 by 14) pointer Returns: ES:BP = specified pointer value CX = bytes/character DL = character rows on screen ----------------------------------------------------------- INT 10 - Alternate function select {ega} AH = 12h BL = 10h: return EGA information Returns: BH = 0: color mode in effect (3Dx) 1: mono mode in effect (3Bx) BL = 0: 64k bytes memory installed 1: 128k bytes memory installed 2: 192k bytes memory installed 3: 256k bytes memory installed CH = feature bits CL = switch settings BL = 20h: select alternate print screen routine ----------------------------------------------------------- INT 10 - WRITE STRING (PC/AT ONLY) AH = 13h AL = mode bit 0: set in order to move cursor after write bit 1: set if string contains alternating characters and attributes BL = attribute if AL bit 1 clear BH = display page number DH,DL = row,column of starting cursor position CX = length of string ES:BP = pointer to start of string ----------------------------------------------------------- INT 10 - LOAD LCD CHARACTER FONT (CONVERTIBLE ONLY) AH = 14h AL = 0 load user-specified font ES:DI = pointer to character font BH = number of bytes per character BL = 0: load main font (block 0) 1: load alternate font (block 1) CX = number of characters to store DX = character offset into RAM font area AL = 1 load system rom default font BL = 0: load main font (block 0) 1: load alternate font (block 1) AL = 2 set mapping of LCD high intensity attributes BL = 0: ignore high intensity attribute 1: map high intensity to underscore 2: map high intensity to revrese video 3: map high intensity to selected alternate font ----------------------------------------------------------- INT 10 - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE ONLY) AH = 15h Return: AX = alternate display adapter type ES:DI = pointer to parameter table word 0: monitor model number 1: vertical pixels per meter 2: horizontal pixels per meter 3: total vertical pixels 4: total horizontal pixels 5: horizontal pixel separation in micrometers 6: vertical pixel separation in micrometers ----------------------------------------------------------- INT 10 - GET VIDEO RAM ADDRESS [TANDY 1000] AH = 70h Return: 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 [TANDY 1000] AH = 71h Return: AX = segment address of the following [BX] = segment address of INCRAM [CX] = offset address of INCRAM ----------------------------------------------------------- INT 10 - SCROLL SCREEN RIGHT [TANDY 1000] AH = 72h AL = number of columns blanked at left of window 0 = blank entire window BH = attributes to be used on blank columns CH,CL = row, column of upper left corner of window DH,DL = row, column of lower right corner ---------------------------------------------------------- INT 10 - SCROLL SCREEN LEFT [TANDY 1000] AH = 73h AL = number of columns blanked at right of window 0 = blank entire window BH = attributes to be used on blank columns CH,CL = row, column of upper left corner of window DH,DL = row, column of lower right corner ----------------------------------------------------------- INT 10 - Get Video Buffer (TopView/DESQview/TaskView) AH = FEh ES:DI = segment:offset of assumed video buffer Return: ES:DI = segment:offset of actual video buffer ----------------------------------------------------------- INT 10 - Update Video Buffer (TopView/DESQview/TaskView) AH = FFh CX = number of sequential characters that have been modified DI = offset of first character that has been modified ES = segment of video buffer ----------------------------------------------------------- INT 11 - EQUIPMENT DETERMINATION Return: AX = "equipment flag" bits 0 diskette installed 1 8087 present 2,3 always = 11 4,5 initial video mode 01 = 40x25 COLOR 10 = 80x25 COLOR 11 = 80X25 IBM monochrome 6,7 number of diskette drives (only if bit 0 = 1) 00 = 1, 01 = 2 8 0 = dma present, 1= no dma on system (PCjr?) 9,10,11 number of RS232 cards 12 game I/O attached 13 serial printer installed (IBM-PCjr) internal modem installed (Convertible) 14,15 number of printers ----------------------------------------------------------- INT 12 - MEMORY SIZE Return: AX = number of contiguous 1K blocks of memory ----------------------------------------------------------- INT 13 - RESET DISK SYSTEM AH = 0 ----------------------------------------------------------- INT 13 - STATUS OF DISK SYSTEM AH = 1 Return: AL = status 00h = successful completion 01h = bad command 02h = address mark not found 03h = write attempted on write-protected disk 04h = sector not found 05h = reset failed (hard disk) 06h = diskette changed 07h = parameter act. failed (hard disk) 08h = DMA overrun 09h = DMA across 64K boundary 0Ah = bad sector detected (hard disk) 0Bh = bad track detected (hard disk) 0Ch = unsupported track 10h = bad CRC/ECC 11h = data ECC corrected 20h = controller failure 40h = seek failed 80h = time out AAh = drive not ready (hard disk) BBh = undefined error (hard disk) ----------------------------------------------------------- INT 13 - READ SECTORS INTO MEMORY AH = 2 AL = number of sectors to read CH = track (for hard disk, bits 8,9 in high bits of CL) CL = sector DH = head DL = drive ES:BX = address of buffer to fill Return: CF = set if error occurred AH = status (see AH=1 above) AL = number of sectors read ----------------------------------------------------------- INT 13 - WRITES SECTORS FROM MEMORY AH = 3 AL = number of sectors to write CH = track (for hard disk, bits 8,9 in high bits of CL) CL = sector DH = head DL = drive ES:BX = address of buffer Return: CF = set if error occurred AH = status (see AH=1 above) AL = number of sectors written ----------------------------------------------------------- INT 13 - VERIFY SECTORS AH = 4 AL = number of sectors to verify CH = track (for hard disk, bits 8,9 in high bits of CL) CL = sector DH = head DL = drive Return: CF = set if error occurred AH = status (see AH=1 above) AL = number of sectors verified ----------------------------------------------------------- INT 13 - FORMAT DISKETTE TRACK (FLOPPY) AH = 5 AL = number of sectors to create on this track CH = track CL = sector DH = head DL = drive ES:BX = pointer to array of 4-byte address fields byte 1 = track byte 2 = head byte 3 = sector byte 4 = bytes/sector 0=128, 1=256, 2=512, 3=1024 Return: CF set if error occurred AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - FORMAT TRACK (HARD DISK) AH = 5 AL = interleave value (XT only) ES:BX = 512-byte format buffer the first 2*(sectors/track) bytes contain F,N for each sector F = 00 for good sector, 80h for bad sector N = sector number CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT, PORTABLE ONLY) AH = 6 AL = interleave value (XT only) ES:BX = 512-byte format buffer the first 2*(sectors/track) bytes contain F,N for each sector F = 00 for good sector, 80h for bad sector N = sector number CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - FORMAT DRIVE STARTING AT GIVEN TRACK (XT, PORTABLE ONLY) AH = 7 AL = interleave value (XT only) ES:BX = 512-byte format buffer, see AH=6 above CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - GET CURRENT DRIVE PARAMETERS (PC/XT and PC/AT) AH = 8 DL = DRIVE NUMBER Return: CF set on error AH = status code (see AH=1 above) DL = number of consecutive acknowledging drives DH = maximum value for head number CL = maximum value fo sector number CH = maximum value for cylinder number ----------------------------------------------------------- INT 13 - INITIALIZE TWO FIXED DISK BASE TABLES (PC/AT ONLY) AH = 9 Return: CF set on error AH = status code (see AH=1 above) INT 41h points to table for drive 0 INT 46h points to table for drive 1 ----------------------------------------------------------- INT 13 - READ LONG (PC/AT ONLY) AH = 0Ah DL = drive ID DH = head CH = cylinder (bits 8,9 in high bits of CL) CL = sector ES:BX = pointer to buffer to fill Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - WRITE LONG (PC/AT ONLY) AH = 0Bh DL = drive ID DH = head CH = cylinder (bits 8,9 in high bits of CL) CL = sector ES:BX = pointer to buffer containing data Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - SEEK TO CYLINDER (PC/XT and PC/AT) AH = 0Ch DL = drive ID DH = head CH = cylinder (bits 8,9 in high bits of CL) Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - ALTERNATE DISK RESET (PC/XT and PC/AT) AH = 0Dh DL = drive ID Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - READ SECTOR BUFFER (XT, PORTABLE ONLY) AH = 0Eh AL = number of sectors CH = cylinder (bits 8,9 in top two bits of CL) CL = sector number DH = head number DL = drive number ES:BX = pointer to buffer Return: AL = number of sectors actually transferred AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - WITE SECTOR BUFFER (XT, PORTABLE ONLY) AH = 0Fh AL = number of sectors CH = cylinder (bits 8,9 in top two bits of CL) CL = sector number DH = head number DL = drive number ES:BX = pointer to buffer Return: AL = number of sectors actually transferred AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - TEST FOR DRIVE READY (PC/AT ONLY) AH = 10h DL = drive ID Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - RECALIBRATE DRIVE (PC/XT and PC/AT) AH = 11h DL = drive ID Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - CONTROLER RAM DIAGNOSTIC (XT, PORTABLE ONLY) AH = 12h Return: AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - DRIVE DIAGNOSTIC (XT, PORTABLE ONLY) AH = 13h Return: AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY) AH = 14h Return: CF set on error AH = status code (see AH=1 above) ----------------------------------------------------------- INT 13 - GET DISK TYPE (PC/AT ONLY) AH = 15h DL = drive ID Return: AH = disk type 0 = disk not there 1 = floppy, no change detection present 2 = floppy with change detection 3 = fixed disk CX:DX = number of 512-byte sectors ----------------------------------------------------------- INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY) AH = 16h DL = drive to check Return: AH = disk change status 0 = no disk change 6 = disk changed ----------------------------------------------------------- INT 13 - SET DISK TYPE (PC/AT ONLY) AH = 17h AL = disk type 00 = no disk 01 = regular disk in regular drive 02 = regular disk in high-capacity drive 03 = high-capacity disk in high-capacity drive DL = drive ID ----------------------------------------------------------- INT 13 - SET MEDIA TYPE FOR FORMAT (PORTABLE? CONVERTIBLE? XT286?) AH = 18h DL = drive number CH = lower 8 bits of number of tracks CL = sectors per track (bits 0-5) top 2 bits of number of tracks (bits 6,7) Return: AH = 00h requested combination supported 01h function not available 0Ch not supported or druve type unknown 80h there is no disk in the drive ES:DI = pointer to 11-byte parameter table ----------------------------------------------------------- INT 13 - PARK FIXED DISK HEADS (XT MODEL 286 ONLY) AH = 19h ----------------------------------------------------------- INT 14 - SERIAL I/O - INITIALIZE USART AH = 0 AL = initializing parameters 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 Return: AX port status--see below ----------------------------------------------------------- INT 14 - SERIAL I/O - TRANSMIT CHARACTER AH = 1 AL = character DX = port number Return: AH = RS-232 status code bits 0: data ready 1: overrun error 2: parity error 3: framing error 4: break detected 5: transmission buffer register empty 6: transmission shift register empty 7: time out--if set, other bits invalid AL = modem status bits 0: delta Clear-To-Send 1: delta Data-Set-Ready 2: trailing edge of 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 AH = 2 Return: AL = character received AH = RS-232 status code (see above) ----------------------------------------------------------- INT 14 - SERIAL I/O - GET USART STATUS AH = 3 Return: AH = RS-232 status code (see above) AL = modem status code (see above) ----------------------------------------------------------- INT 14 - EXTENDED INITIALIZE (CONVERTIBLE?) AH = 4 AL = break status 0 if break 1 if no break BH = parity 0 no parity 1 odd parity 2 even parity 3 stick parity odd 4 stick parity even BL = number of stop bits 0: one stop bit 1: two stop bits (1.5 if 5 bit word length) CH = word length 0: 5 bits 1: 6 bits 2: 7 bits 3: 8 bits CL = baud rate 0: 110 1: 150 2: 300 3: 600 4: 1200 5: 2400 6: 4800 7: 9600 8: 19200 Return: AL = modem status (see above) AH = line control status (see above) ----------------------------------------------------------- INT 14 - EXTENDD COMMUNICATION PORT CONTROL (CONVERTIBLE?) AH = 5 AL = 0 read modem control register Return: BL = modem control register (see below) AH = status AL = 1 write modem control register BL = modem control register bit 0: data terminal ready bit 1: request to send bit 2: OUT1 bit 3: OUT2 bit 4: LOOP bits 5-7 reserved Return: AH = status ----------------------------------------------------------- INT 15 - TURN ON CASSETTE MOTOR AH = 0 ----------------------------------------------------------- INT 15 - TURN OFF CASSETTE MOTOR AH = 1 ----------------------------------------------------------- INT 15 - READ DATA BLOCKS FROM CASSETTE AH = 2 CX = count of bytes ES:BX = pointer to data area Return: CF set on error 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 Return: ES:BX = pointer past last byte written ----------------------------------------------------------- INT 15 - DESQview/TopView/TaskView - Give up CPU time AX = 1000h Return: after other process(es) run ----------------------------------------------------------- INT 15 - DESQview/TopView/TaskView - Get Version AX = 1022h BX = 0 Return: BX nonzero, TopView or compat loaded TaskView returns BX = 0001h ----------------------------------------------------------- INT 15 - DESQview/TopView/TaskView commands AH = 11h AL = various ----------------------------------------------------------- INT 15 - DESQview/TopView/TaskView commands AH = 12h AL = various ----------------------------------------------------------- INT 15 - PRINT.COM - Internal AH = 20h AL = subfunction 00h ??? 01h ??? Note: sets or resets some flags which affect what PRINT does when it tries to access the disk ----------------------------------------------------------- INT 15 - READ/MODIFY PROFILES (CONVERTIBLE ONLY) AH = 40h AL = subfunction 0: get system profile in CX and BX 1: set system profile from CX and BX 2: get internal modem profile in BX 3: set internal modem profile from BX ----------------------------------------------------------- INT 15 - WAIT ON EXTERNAL EVENT (CONVERTIBLE ONLY) AH = 41h AL = condition type bits 0-2: condition to wait for 0 = any external event 1 = compare and return if equal 2 = compare and return if not equal 3 = test and return if not zero 4 = test and return if zero bit 3: reserved bit 4: 1=port address, 0=user byte bits 5-7: reserved BH = condition compare or mask value BL = timeout value times 55 milliseconds 0 means no timeout DX = I/O port address if AL bit 4 set ES:DI = pointer to user byte if AL bit 4 clear ----------------------------------------------------------- INT 15 - REQUEST SYSTEM POWER OFF (CONVERTIBLE ONLY) AH = 42h AL = 0 to use system profile 1 to foce suspend regardless of system profile ----------------------------------------------------------- INT 15 - READ SYSTEM STATUS (CONVERTIBLE ONLY) AH = 43h Return: AL = status bits bit 0: LCD detached bit 1: reserved bit 2: RS232/parallel adapter powered on bit 3: internal modem powered on bit 4: power activated by alarm bit 5: standby power lost bit 6: extern apower in use bit 7: power low ----------------------------------------------------------- INT 15 - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE ONLY) AH = 44h AL = 0 to power off 1 to power on ----------------------------------------------------------- INT 15 - KEYBOARD INTERCEPT (CONVERTIBLE ONLY) AH = 4Fh AL = scan code CF set Return: AL = scan code CF set (Called by INT 9 handler to translate scan codes) ----------------------------------------------------------- INT 15 - DEVICE OPEN (PC/AT ONLY) AH = 80h BX = device ID CX = process type ----------------------------------------------------------- INT 15 - DEVICE CLOSE (PC/AT ONLY) AH = 81h BX = device ID CX = process type ----------------------------------------------------------- INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY) AH = 82h BX = device ID ----------------------------------------------------------- INT 15 - EVENT WAIT (PC/AT ONLY) AH = 83h AL = SUBSERVICE 0 = set interval 1 = cancel ES:BX = pointer to event flag (bit 7 set when interval expires) CX,DX = number of microseconds to wait (only accurate to 977 us) Return: CF set if function already busy ----------------------------------------------------------- INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY) AH = 84h DX = 0 Return: AL = switch settings (bits 7-4) ----------------------------------------------------------- INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY) AH = 84h DX = 1 Return: 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) AH = 85h (called by keyboard decode routine) Return: AL = 00 press AL = 01 release ----------------------------------------------------------- INT 15 - WAIT (PC/AT AND AFTER) AH = 86h CX,DX = number of microseconds to wait (only accurate to 977 us) ----------------------------------------------------------- INT 15 - EXTENDED MEMORY - BLOCK MOVE (286/386 machines only) AH = 87h CX = number of words to move ES:SI = pointer to global descriptor table offset 0h null descriptor 8h uninitialized, will be made into GDT descriptor 10h descriptor for source of move 18h descriptor for destination of move 20h uninitialized, used by BIOS 28h uninitialized, will be made into SS descriptor ----------------------------------------------------------- INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (286/386 machines only) AH = 88h Return: AX = memory size ----------------------------------------------------------- INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY) AH = 89h BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts) BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts) DS:SI = pointer to GDT for protected mode offset 0h null descriptor 8h GDT descriptor 10h IDT descriptor 18h DS 20h ES 28h SS 30h CS 38h uninitialized, used to build descriptor for BIOS CS CX = offset into protected-mode CS to jump to Return: CF set on error AH = 0FFh error enabling address line 20 ----------------------------------------------------------- INT 15 - DEVICE BUSY LOOP (PC/AT ONLY) AH = 90h AL = TYPE CODE 00h: disk 01h: diskette 02h: keybaord 80h: network (ES:BX = NCB) FCh: disk reset FDh: diskette motor start FEh: printer Return: CF set if wait time satisfied ----------------------------------------------------------- INT 15 - SET FLAG AND COMPLETE INTERRUPT AH = 91h AL = type code, see AH=90h above ----------------------------------------------------------- INT 15 - GET SYSTEM CONFIGURATION (XT after 1/10/86, PC Conv, XT286, PS/2) AH = C0h Return: CF = 1 if BIOS doesn't support call ES:BX pointer to ROM table byte_count dw ? ; number of bytes following model db ? ; PC=ff, XT=fe or fb, PCjr = fd, etc, etc submodel db ? ; distingushes between AT and XT/286, etc. BIOS_rev db ? ; 0 for first release, 1 for 2nd, etc. featbyte db ? ; 80h = DMA channel 3 used by hd BIOS ; 40h = 2nd 8259 installed ; 20h = Real-Time Clock installed ; 10h = INT 15h called upon INT 9h ; 8h = wait for external event supported ; 4h = extended BIOS area allocated at 640K ; 2h = bus is Micro Channel instead of PC ; 1h reserved ----------------------------------------------------------- INT 15 - DESQview ? - ??? AH = C2h AL = subfunction 00h ??? BH = ??? 01h set something to default values 02h ??? BH = ??? 03h ??? BH = ??? 04h points to RET instruction 05h same as 01h, but also takes input value in BH BH = ??? 06h ??? BH = 01h or 02h stored, otherwise ignored 07h ??? ES:BX = pointer to ??? Return: AL = 00h Note: the values in BH for those functions that take it as input are stored in different locations for each subfunction ----------------------------------------------------------- INT 15 - DESQview (TopView?) - ??? AH = 0DEh ----------------------------------------------------------- INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY AH = 0 Return: AH = scan code AL = character ----------------------------------------------------------- INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR AH = 1 Return: ZF = 0 character in buffer AH = scan code AL = character ZF = 1 no character in buffer ----------------------------------------------------------- INT 16 - KEYBOARD I/O - GET SHIFT STATUS AH = 2 AL = shift status bits 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 I/O - SET DELAYS (PCjr, AT, PS/2) AH = 3 AL = 0: reset typematic (PCjr) AL = 1: increase initial delay (PCjr) AL = 2: increase continuing delay (PCjr) AL = 3: increase both delays (PCjr) AL = 4: turn off typematic (PCjr) AL = 5: Set typematic rate (AT or PS/2) BH = 00 - 03 for delays of 250ms, 500ms, 750ms, or 1s BL = 00 - 1F for typematic rates of 30cps down to 2cps ----------------------------------------------------------- INT 16 - KEYBOARD I/O - KEYCLICK (PCjr ONLY) AH = 4 AL = 0: 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 Return: AL = 1 if buffer full ----------------------------------------------------------- INT 16 - KEYBOARD - Get enhanced keystroke (AT or PS/2 with enhanced kbd) AH = 10h Return: AH = scan code AL = character ----------------------------------------------------------- INT 16 - KEYBOARD - Check enhanced keystroke (AT or PS/2 with enhanced kbd) AH = 11h Return: ZF = 0 if keystroke available AH = scan code \ meaningless if ZF = 1 AL = character / ZF = 1 if kbd buffer empty ----------------------------------------------------------- INT 16 - KEYBOARD - Get enhanced shift flags (AT or PS/2 with enhanced kbd) AH = 12h Return: AL (same as for AH=02) bit 7: Ins ON bit 6: 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 0: 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 0: Right Alt key down ----------------------------------------------------------- INT 17 - OUTPUT CHARACTER TO PRINTER AH = 0 AL = character Return: AH = status bits 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 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-bases BASIC (IBM-PC) often reboots a compatible; often has no effect at all ----------------------------------------------------------- INT 19 - DISK BOOT causes reboot of disk system (no memory test performed) ----------------------------------------------------------- INT 1A - GET TIME OF DAY AH = 0 Return: 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) within the current 24-hour period Otherwise, AL > 0 ----------------------------------------------------------- INT 1A - SET TIME OF DAY 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) AH = 2 Return: CH = hours CL = minutes DH = seconds ----------------------------------------------------------- INT 1A - SET REAL TIME CLOCK (PC/AT ONLY) 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) AH = 4 Return: DL = day DH = month CL = year CH = century (19 or 20) ----------------------------------------------------------- INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY) AH = 5 DL = day DH = month CL = year CH = century (19 or 20) ----------------------------------------------------------- INT 1A - SET ALARM (PC/AT ONLY) AH = 6 CH = hours CL = minutes DH = seconds Return: CF set if alarm already set or clock inoperable INT 4Ah will be called when alarm goes off ----------------------------------------------------------- INT 1A - RESET ALARM (PC/AT ONLY) AH = 7 ----------------------------------------------------------- INT 1A - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE ONLY) AH = 8 CH = hours in BCD CL = minutes in BCD DH = seconds in BCD ----------------------------------------------------------- INT 1A - READ RTC ALARM TIME AND STATUS (CONVERTIBLE ONLY) AH = 9 Return: CH = hours in BCD CL = minutes in BCD DH = seconds in BCD DL = alarm status 0 alarm not enabled 1 alarm enabled but will not power up system 2 alarm will power up system ----------------------------------------------------------- INT 1A - SET UP SOUND MULTIPLEXOR (PCjr ONLY) AH = 80h AL = 0 source is 8253 channel 2 1 source is cassette input 2 source is I/O channle "Audio IN" 3 source is sound generator chip ----------------------------------------------------------- INT 1B - CTRL-BREAK KEY 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 short routine in DOS which sets the Ctrl-C flag, thus invoking INT 23h the next time DOS checks for Ctrl-C. ----------------------------------------------------------- INT 1C - CLOCK TICK 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. ----------------------------------------------------------- INT 1D -> 6845 Video Init tables table for modes 0 and 1 \ table for modes 2 and 3 \ each table is 16 bytes long and table for modes 4,5, and 6 / contains values for 6845 registers table for mode 7 / 4 words -- size of video RAM for modes 0/1, 2/3, 4/5, and 6/7 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 f000:efc7 db step rate & head unload times db head load time & DMA db motor off time db sector size (0->128, 1->256, 2->512, 3->1024) db last sector number (8 or 9 typical) db inter-sector gap size on read/write (42 typical) db data transfer length (255 typical) db inter-sector gap size on format (80 typical) db sector fill on format (f6 typical) db head-settle time ms (typical 25, 2.10->15) db motor start-up time (1/8 secs) (typical 4, 2.10->2) ----------------------------------------------------------- INT 1F -> Pointer to Graphics Set 2--contains bitmaps for high 128 chars ----------------------------------------------------------- INT 20 - Minix - SEND/RECEIVE MESSAGE AX = process ID of other process BX = pointer to message CX = 1 send 2 receive 3 send&receive Note: the message contains the system call number (numbered as in V7 Unix(tm)) and the call parameters ----------------------------------------------------------- INT 20 - DOS - PROGRAM TERMINATION returns to DOS ----------------------------------------------------------- INT 21 - PROGRAM TERMINATION AH = 00h Same action as INT 20; returns to DOS. ----------------------------------------------------------- INT 21 - KEYBOARD INPUT AH = 01h Return: AL = character read ----------------------------------------------------------- INT 21 - DISPLAY OUTPUT AH = 02h DL = character ----------------------------------------------------------- INT 21 - AUX Input AH = 03h Return: AL = character read ----------------------------------------------------------- INT 21 - AUX Output AH = 04h DL = character to send ----------------------------------------------------------- INT 21 - PRINTER OUTPUT AH = 05h DL = character to print ----------------------------------------------------------- INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT AH = 06h DL = character <> FFh ----------------------------------------------------------- INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT AH = 06h DL = 0FFh Return: ZF set = no character ZF clear = character recieved AL = character Note: Character is echoed to STDOUT if received. ----------------------------------------------------------- INT 21 - Direct STDIN Input, no echo Reg AH = 07h Note: same as Function 6 for input but char not echoed ----------------------------------------------------------- INT 21 - KEYBOARD INPUT - NO ECHO AH = 08h Return: AL = character ----------------------------------------------------------- INT 21 - PRINT STRING AH = 09h DS:DX = address of string terminated by "$" ----------------------------------------------------------- INT 21 - BUFFERED KEYBOARD INPUT AH = 0Ah DS:DX = address of buffer Note: first byte of buffer must contain maximum length on return the second byte contains actual length, third and subsequent bytes contain the input line ----------------------------------------------------------- INT 21 - CHECK STANDARD INPUT STATUS AH = 0Bh Return: AL = FFh if character available 00h if no character ----------------------------------------------------------- INT 21 - Clear Keyboard Buffer AH = 0Ch 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). If AL contains a value not in the list above, the keyboard buffer is flushed and no other action is taken. ----------------------------------------------------------- INT 21 - Disk Reset AH = 0Dh Flushes all disk buffers. ----------------------------------------------------------- INT 21 - SELECT DISK AH = 0Eh DL = new default drive number (0 = A, 1 = B, etc.) Return: AL = number of logical drives ----------------------------------------------------------- INT 21 - OPEN DISK FILE AH = 0Fh DS:DX = address of FCB Return: AL = 00h file found FFh file not found ----------------------------------------------------------- INT 21 - CLOSE DISK FILE AH = 10h DS:DX = address of FCB Return: AL = 00h directory update successful FFh file not found in directory ----------------------------------------------------------- INT 21 - Search First using FCB AH = 11h DS:DX = address of FCB Return: AL = 00h = file found FFh = 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 AH = 12h DS:DX = address of FCB Return: AL = 00h = file found FFh = 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:DX = address of FCB Return: AL = 00h = file found FFh = file not found ----------------------------------------------------------- INT 21 - SEQUENTIAL DISK FILE READ AH = 14h DS:DX = address of FCB Return: AL = 0 = successful read 1 = end of file 2 = data transfer area too small 3 = partial record, EOF ----------------------------------------------------------- INT 21 - SEQUENTIAL DISK RECORD WRITE AH = 15h DS:DX = address of FCB Return: AL = 0 = successful write 1 = disk full 2 = data transfer area too small ----------------------------------------------------------- INT 21 - CREATE A DISK FILE AH = 16h DS:DX = address of FCB Return: AL = 00h = successful creation FFh = directory full ----------------------------------------------------------- INT 21 - Rename File via FCB AH = 17h DS:DX = address of FCB FCB contains new name starting at byte 17h. Return: AL = 00h = file found FFh = file not found ----------------------------------------------------------- INT 21 - Internal - does nothing AH = 18h Return: AL = 0 ----------------------------------------------------------- INT 21 - Default Disk Number AH = 19h Return: AL = current drive number (letter - 'A') ----------------------------------------------------------- INT 21 - SET DISK TRANSFER AREA ADDRESS AH = 1Ah DS:DX = address of buffer ----------------------------------------------------------- INT 21 - Default Drive Disk Size AH = 1Bh Return: DS:BX points to FAT ID byte DX = number of allocation units on disk AL = number of sectors per allocation unit (cluster) 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 allocation unit (cluster) CX = number of bytes per sector ----------------------------------------------------------- INT 21 - Internal - does nothing AH = 1Dh Return: AL = 0 ----------------------------------------------------------- INT 21 - Internal - does nothing AH = 1Eh Return: AL = 0 ----------------------------------------------------------- INT 21 - Internal - GET DEFAULT DRIVE PARAMETER BLOCK AH = 1Fh Return: AL = 00h No Error FFh Error (DS:BX) = ADDRESS OF DRIVE PARAMETER BLOCK. Note: for DOS 2.x and 3.x, this just invokes function 32h with DL = 0 ----------------------------------------------------------- INT 21 - Internal - does nothing AH = 20h Return: AL = 0 ----------------------------------------------------------- INT 21 - RANDOM DISK RECORD READ AH = 21h DS:DX = address of FCB Return: AL = 0 = 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:DX = address of FCB Return: AL = 00h = file found FFh = file not found FCB SET TO NO. OF RECORDS ----------------------------------------------------------- INT 21 - Set Random Record Field AH = 24h DS:DX = address of FCB Return: Random Record Field of FCB is set to be same as Current Block and Current Record. Note: FCB must be OPEN already ----------------------------------------------------------- INT 21 - Set Interrupt Vector AH = 25h *-*-*-------remove anything after this line and concatenate part 2-------*-*-* -- {harvard,uunet,ucbvax}!b.gp.cs.cmu.edu!ralf -=-=- AT&T: (412)268-3053 (school) ARPA: RALF@B.GP.CS.CMU.EDU |"Tolerance means excusing the mistakes others make. FIDO: Ralf Brown at 129/31 | Tact means not noticing them." --Arthur Schnitzler BITnet: RALF%B.GP.CS.CMU.EDU@CMUCCVMA -=-=- DISCLAIMER? I claimed something?