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?