home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-04-06 | 148.5 KB | 4,274 lines |
- ---------------------------------------------
- The use of -> instead of = signifies that the indicated register or
- register pair contains a pointer to the specified item
- ---------------------------------------------
- INT 05 - PRINT-SCREEN KEY
- Automatically called by keyboard scanner 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 10 - VIDEO - SET VIDEO MODE
- AH = 00h
- AL = mode (graphics mode if graphics resolution listed)
- text pixel graphic color disp scrn system
- resol box resoltn page addr
- 00h = 40x25 8x8 B&W 8 B800 CGA
- = 40x25 8x14 B&W 8 B800 ATI VIP
- 01h = 40x25 8x8 16 8 B800 CGA
- = 40x25 8x14 16 8 B800 ATI VIP
- 02h = 80x25 8x8 B&W 4 B800 CGA
- = 80x25 8x8 B&W 8 B800 EGA/MCGA/VGA
- = 80x25 8x14 B&W 8 B800 ATI VIP
- 03h = 80x25 8x8 16 4 B800 CGA
- = 80x25 8x8 16 8 B800 EGA/MCGA/VGA
- 04h = 40x25 8x8 320x200 4 1 B800 CGA
- 05h = 40x25 8x8 320x200 4 gray 1 B800 CGA
- 06h = 80x25 8x8 640x200 B&W 1 B800 CGA
- 07h = 80x25 9x14 mono 1 B000 MDA/Hercules
- = 80x25 8 EGA/VGA
- = 80x25 9x14 mono B000 ATI VIP
- 08h = 20x25 8x8 160x200 16 B800 PCjr/Tandy 1000
- 09h = 40x25 8x8 320x200 16 B800 PCjr/Tandy 1000
- 0Ah = 80x25 8x8 640x200 4 B800 PCjr/Tandy 1000
- 0Bh = reserved (used internally by EGA BIOS)
- 0Ch = reserved (used internally by EGA BIOS)
- 0Dh = 40x25 8x8 320x200 16 8 A000 EGA/VGA
- 0Eh = 80x25 8x8 640x200 16 4 A000 EGA/VGA
- 0Fh = 80x25 8x14 640x350 mono 2 A000 EGA/VGA
- 10h = 80x25 8x14 640x350 4or16 2 A000 EGA/VGA
- 11h = 80x30 8x16 640x480 mono A000 VGA/MCGA/ATI EGA/ATI VIP
- 12h = 80x30 8x16 640x480 16 A000 VGA/ATI VIP
- = 80x30 8x16 640x480 16/64 A000 ATI EGA Wonder
- 13h = 40x25 8x8 320x200 256 A000 VGA/MCGA/ATI VIP
- 14h = 80x25 8x8 640x200 Lava Chrome II EGA
- 15h = 80x25 8x14 640x350 Lava Chrome II EGA
- 16h = 80x25 8x14 640x350 Lava Chrome II EGA
- 17h = 80x34 8x14 640x480 Lava Chrome II EGA
- 18h = 132x44 8x8 mono Tseng Labs EVA
- = 80x34 8x14 640x480 Lava Chrome II EGA
- 19h = 132x25 8x14 mono Tseng Labs EVA
- 1Ah = 132x28 8x13 mono Tseng Labs EVA
- 22h = 132x44 8x8 Tseng, Ahead
- 23h = 132x25 6x14 Tseng Labs EVA
- = 132x25 8x14 Ahead Systems EGA2001
- = 132x25 8x8 16 B800 ATI EGA Wonder/ATI VIP
- 24h = 132x28 6x13 Tseng Labs EVA
- 25h = 80x60 8x8 640x480 Tseng Labs EVA
- = 640x480 16 VEGA VGA
- 26h = 80x60 8x8 Tseng Labs EVA
- = 80x60 8x8 640x480 Ahead Systems EGA2001
- 27h = 720x512 16 VEGA VGA
- = 132x25 8x8 mono B000 ATI EGA Wonder/ATI VIP
- 28h = ???x??? VEGA VGA
- 29h = 800x600 16 VEGA VGA
- 2Dh = 640x350 256 VEGA VGA
- 2Eh = 640x480 256 VEGA VGA
- 2Fh = 720x512 256 VEGA VGA
- 30h = 800x600 256 VEGA VGA
- = ???x??? B800 AT&T 6300
- 33h = 132x44 8x8 16 B800 ATI EGA Wonder/ATI VIP
- 36h = 960x720 16 VEGA VGA
- 37h = 1024x768 16 VEGA VGA
- = 132x44 8x8 mono B000 ATI EGA Wonder/ATI VIP
- 40h = 80x25 8x16 640x400 2 1 B800 AT&T 6300, Compaq Portable
- = 80x43 VEGA VGA
- 41h = 640x200 16 1 AT&T 6300
- = 132x25 VEGA VGA
- 42h = 80x25 8x16 640x400 16 AT&T 6300
- = 132x43 VEGA VGA
- 43h = unsupported 640x200 of 640x400 viewport AT&T 6300
- = 80x60 VEGA VGA
- 44h = disable VDC and DEB output AT&T 6300
- = 100x60 VEGA VGA
- 48h = 80x50 8x8 640x400 2 B800 AT&T 6300
- 49h = 80x30 8x16 640x480 Lava Chrome II EGA
- 4Dh = 120x25 VEGA VGA
- 4Eh = 120x43 VEGA VGA
- 4Fh = 132x25 VEGA VGA
- 50h = 132x25 9x14 mono Ahead Systems EGA2001
- = 80x30 8x16 640x480 16 Paradise EGA-480
- = 80x43 mono VEGA VGA
- = 640x480 mono??? Taxan 565 EGA
- = 80x34 Lava Chrome II EGA
- 51h = 80x30 8x16 Paradise EGA-480
- = 132x25 mono VEGA VGA
- = 80x34 8x14 640x480 16 ATI EGA Wonder
- = 80x30 Lava Chrome II EGA
- 52h = 132x44 9x8 mono Ahead Systems EGA2001
- = 132x43 mono VEGA VGA
- = 94x29 8x14 752x410 16 ATI EGA Wonder
- = 80x60 Lava Chrome II EGA
- 53h = 100x40 8x14 800x560 16 ATI EGA Wonder/ATI VIP
- = 132x43 Lava Chrome II EGA
- 54h = 132x43 8x8 Paradise EGA-480
- = 132x43 7x9 16/256k B800 Paradise VGA
- = 132x43 8x9 16/256k B800 Paradise VGA on multisync
- = 132x43 Taxan 565 EGA
- = 100x42 8x14 800x600 16 A000 ATI EGA Wonder
- = 132x25 Lava Chrome II EGA
- 55h = 132x25 8x14 Paradise EGA-480
- = 132x25 7x16 16/256k B800 Paradise VGA
- = 132x25 8x16 16/256k B800 Paradise VGA on multisync
- = 132x25 Taxan 565 EGA
- = 80x66 8x8 16/256k A000 ATI VIP
- = 94x29 8x14 752x410 Lava Chrome II EGA
- 56h = 132x43 8x8 3??? 2 B000 NSI Smart EGA+
- = 132x43 7x9 4 B000 Paradise VGA
- = 132x43 8x9 4 B000 Paradisk VGA on multisync
- = 132x43 mono Taxan 565 EGA
- 57h = 132x25 8x14 3??? 4 B000 NSI Smart EGA+
- = 132x25 7x16 4 B000 Paradise VGA
- = 132x25 8x16 4 B000 Paradise VGA on multisync
- = 132x25 mono Taxan 565 EGA
- 58h = 100x75 8x8 800x600 16/256k A000 Paradise VGA
- = 80x33 8x14 16 B800 ATI EGA Wonder/ATI VIP
- 59h = 100x75 8x8 800x600 2 A000 Paradise VGA
- = 80x66 8x8 16/256k A000 ATI VIP
- 5Eh = 640x400 256 Paradise VGA,VEGA VGA
- 5Fh = 640x480 256 Paradise VGA
- 60h = 80x??? ???x400 Corona/Cordata BIOS v4.10+
- = 752x410 VEGA VGA
- 61h = ???x400 Corona/Cordata BIOS v4.10+
- = 720x540 VEGA VGA
- 62h = 800x600 VEGA VGA
- 70h = extended mode set (see below) Everex Micro Enhancer EGA
- 71h = 100x35 8x16 800x600 16of64 A000 NSI Smart EGA+
- 74h = 640x400 2 B800 Toshiba 3100 AT&T mode
- 7Eh = special mode set (see below) Paradise VGA
- 7Fh = special function set (see below) Paradise VGA
- 82h = 80x25 B&W AT&T VDC overlay mode *
- 83h = 80x25 AT&T VDC overlay mode *
- 86h = 640x200 B&W AT&T VDC overlay mode *
- C0h = 640x400 2/prog pallet AT&T VDC overlay mode *
- C4h = disable output AT&T VDC overlay mode *
- D0h = 640x400 2 B800 DEC VAXmate AT&T mode
- ??? = 640x225 Z-100
- ??? = 640x400 Z-100
-
- * for AT&T VDC overlay modes, BL contains the DEB mode, which may be 06h,
- 40h, or 44h
- Note: IBM standard modes do not clear the screen if the high bit of AL is set
- ---------------------------------------------
- INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
- AH = 01h
- CH bits 0-4 = start line for cursor in character cell
- bits 5-6 = blink attribute
- (00=normal, 01=invisible, 10=slow, 11=fast)
- CL bits 0-4 = end line for cursor in character cell
- Note: buggy on EGA systems--BIOS remaps cursor shape in 43 line modes, but
- returns unmapped cursor shape
- ---------------------------------------------
- INT 10 - VIDEO - SET CURSOR POSITION
- AH = 02h
- 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 = 03h
- BH = page number
- 0 in graphics modes
- 0-3 in modes 2&3
- 0-7 in modes 0&1
- Return: DH,DL = row,column
- CH = cursor start line
- CL = cursor end line
- ---------------------------------------------
- INT 10 - VIDEO - READ LIGHT PEN POSITION (all but PS)
- AH = 04h
- Return: AH = 0: light pen switch not activated
- AH = 1: light pen values in registers
- DH,DL = row,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 = 05h
- 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 to values in BH, BL [PCjr only]
- {Corona/Cordata BIOS v4.10+}
- 00h: 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 = 06h
- 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 = 07h
- 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 = 08h
- BH = display page
- Return: AL = character
- AH = attribute of character (alpha modes)
- ---------------------------------------------
- INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
- AH = 09h
- AL = character
- BH = display page
- 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
- Note: all characters are displayed, including CR, LF, and BS
- ---------------------------------------------
- INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
- AH = 0Ah
- AL = character
- BH = display page - alpha mode
- BL = color of character (graphics mode, PCjr only)
- if bit 7 == 1 in graphics mode, character is xor'ed onto screen
- 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
- Note: all characters are displayed, including CR, LF, and BS
- ---------------------------------------------
- INT 10 - VIDEO - SET COLOR PALETTE
- AH = 0Bh
- BH = 0
- BL = border color (0-15) (text modes)
- border color and background color (graphics modes)
- (EGA)
- BL = border color (0-15) and high-intensity background color
- (16-31??? maybe should be high nybble?)
- BH = 1
- BL = palette (0-3)
- ---------------------------------------------
- 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
- BH = display page (ignored if mode only supports one page)
- CX = column
- DX = row
- Note: only valid in graphics modes
- ---------------------------------------------
- INT 10 - VIDEO - READ DOT ON SCREEN
- AH = 0Dh
- BH = display page (ignored if mode only supports one page)
- CX = column
- DX = row
- Return: AL = color read
- Note: only valid in graphics modes
- ---------------------------------------------
- INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
- AH = 0Eh
- AL = character
- BH = display page (alpha modes)
- BL = foreground color (graphics modes)
- Note: characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted
- and do the expected things
- ---------------------------------------------
- INT 10 - VIDEO - GET CURRENT VIDEO MODE
- AH = 0Fh
- Return: AH = number of columns on screen
- AL = current video mode (see INT 10h/AH=00h)
- BH = current active display page
- Note: if mode was set with bit 7 set ("no blanking"), the returned mode will
- also have bit 7 set
- ---------------------------------------------
- INT 10 - VIDEO - SET PALETTE REGISTERS (Jr, PS, TANDY 1000, EGA, VGA)
- AH = 10h
- AL = subfunction
- 00h set palette register
- BL = palette register to set
- BH = color value to store
- (on MCGA, only BX = 0712h is supported)
- 01h set border color register
- BH = color value to store
- 02h set all palette registers and overscan
- ES:DX -> 17-byte list
- bytes 0-15 = values for palette regs. 0-15
- byte 16 = value for border color register
- ---------------------------------------------
- INT 10 - VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
- AX = 1003h
- BL = 00h enable intensity
- = 01h enable blink
- ---------------------------------------------
- INT 10 - VIDEO - GET PALETTE REGISTERS (VGA)
- AH = 10h
- AL = subfunction
- 07h read individual palette register
- BL = palette register number
- Return: BH = palette register value
- 08h read overscan (border color) register
- Return: BH = value
- 09h read all palette registers and overscan register
- ES:DX = buffer address (17 bytes)
- ---------------------------------------------
- INT 10 - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA)
- 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 -> start of string
- Note: recognizes CR, LF, BS, and bell
- ---------------------------------------------
- INT 10 - VIDEO - SAVE/RESTORE VIDEO STATE (PS50+,VGA)
- AH = 1Ch
- CX = requested states
- bit 0 video hardware
- 1 BIOS data areas
- 2 color registers and DAC state
- 3-15 reserved
- AL = 0: return state buffer size
- Return: BX = number of 64 byte blocks needed
- 1: save video state
- ES:BX = buffer address
- 2: restore video state
- ES:BX = buffer address of previously saved state
- Return: AL = 1Ch if function supported
- ---------------------------------------------
- INT 10 - Direct Graphics Interface Standard (DGIS) - INQUIRE AVAILABLE DEVICES
- AX = 6A00h
- BX = 0
- CX = 0
- DX = buffer length (may be 0)
- ES:DI = address of buffer
- Return: BX = number of bytes stored in buffer
- CX = bytes required for all descriptions (0 if no DGIS)
- Note: buffer contains descriptions and addresses of DGIS-compatible display(s)
- and printer(s)
- ---------------------------------------------
- INT 10 - DGIS - REDIRECT CHARACTER OUTPUT
- AX = 6A01h
- CX = 0
- ES:DI = address of device to send INT 10 output to
- Return: CX = 0 output could not be redirected
- else INT 10h output now routed to requested display
- ---------------------------------------------
- INT 10 - DGIS - INQUIRE INT 10 OUTPUT DEVICE
- AX = 6A02h
- ES:DI = 0:0
- Return: ES:DI = 0:0 if current display is non-DGIS
- else address of the current DGIS INT 10 display
- ---------------------------------------------
- INT 10 - VIDEO - SET VIDEO MODE (VEGA EXTENDED EGA/VGA)
- AX = 6F05h
- BL = mode (graphics mode if graphics resolution listed)
- text pixel graphic color disp scrn system
- resol box resoltn page addr
- 62h = 800x600 16 VEGA Extended EGA
- 65h = 1024x768 16 VEGA Extended EGA
- 66h = 640x400 256 VEGA Extended VGA
- 67h = 640x480 256 VEGA Extended VGA
- 68h = 720x540 256 VEGA Extended VGA
- 69h = 800x600 256 VEGA Extended VGA
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - READ ONE REGISTER
- AH = F0h
- BL = register number
- DX = group index
- Pointer/data chips
- 00h CRT Controller (25 reg) 3B4h mono modes, 3D4h color modes
- 08h Sequencer (5 registers) 3C4h
- 10h Graphics Controller (9 registers) 3CEh
- 18h Attribute Controller (20 registers) 3C0h
- Single registers
- 20h Miscellaneous Output register 3C2h
- 28h Feature Control register (3BAh mono modes, 3DAh color modes)
- 30h Graphics 1 Position register 3CCh
- 38h Graphics 2 Position register 3CAh
- Return: BL = data
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - WRITE ONE REGISTER
- AH = F1h
- DX = group index (see function F0h)
- BL = register number
- BH = value to write
- Return: BL = data
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER RANGE
- AH = F2h
- CH = starting register number
- CL = Number of registers (>1)
- DX = group index
- 00h CRTC (3B4h mono modes, 3D4h color modes)
- 08h Sequencer 3C4h
- 10h Graphics Controller 3CEh
- 18h Attribute Controller 3C0h
- ES:BX -> buffer, CL bytes
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - WRITE REGISTER RANGE
- AH = F3h
- CH = starting register
- CL = number of registers (>1)
- DX = group index
- 00h CRTC (3B4h mono modes, 3D4h color modes)
- 08h Sequencer 3C4h
- 10h Graphics Controller 3CEh
- 18h Attribute Controller 3C0h
- ES:BX -> buffer, CL bytes
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
- AH = F4h
- CX = number of registers (>1)
- ES:BX -> table of records in this format:
- bytes 1-2 group index
- Pointer/data chips
- 00h CRTC (3B4h mono modes, 3D4h color modes)
- 08h Sequencer 3C4h
- 10h Graphics Controller 3CEh
- 18h Attribute Controller 3C0h
- Single registers
- 20h Miscellaneous Output register 3C2h
- 28h Feature Control register (3BAh mono modes, 3DAh color)
- 30h Graphics 1 Position register 3CCh
- 38h Graphics 2 Position register 3CAh
- byte 3 register number (0 for single registers)
- byte 4 register value
- ---------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - READ REGISTER SET
- AH = F5h
- CX = number of registers (>1)
- ES:BX -> table of records in this format:
- bytes 1-2 port number
- Pointer/data chips
- 00h CRTC (3B4h mono modes, 3D4h color modes)
- 08h Sequencer 3C4h
- 10h Graphics Controller 3CEh
- 18h Attribute Controller 3C0h
- Single registers
- 20h Miscellaneous Output register 3C2h
- 28h Feature Control register (3BAh mono modes, 3DAh color)
- 30h Graphics 1 Position register 3CCh
- 38h Graphics 2 Position register 3CAh
- byte 3 register number (0 for single registers)
- byte 4 register value
- --------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - REVERT TO DEFAULT REGISTERS
- AH = F6h
- --------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - DEFINE DEFAULT REGISTER TABLE
- AH = F7h
- DX = port number
- Pointer/data chips
- 00h CRTC (3B4h mono modes, 3D4h color modes)
- 08h Sequencer 3C4h
- 10h Graphics Controller 3CEh
- 18h Attribute Controller 3C0h
- Single registers
- 20h Miscellaneous Output register 3C2h
- 28h Feature Control register (3BAh mono modes, 3DAh color modes)
- 30h Graphics 1 Position register 3CCh
- 38h Graphics 2 Position register 3CAh
- ES:BX address of table of one byte entries, one byte
- to be written to each register
- --------------------------------------------
- INT 10 - Microsoft Mouse driver EGA support - INTERROGATE DRIVER
- AH = FAh
- BX = 0
- Return: BX = 0 if mouse driver not present
- ES:BX -> EGA Register Interface version number, if present:
- byte 1 = major release number
- byte 2 = minor release number
- --------------------------------------------
- INT 11 - EQUIPMENT DETERMINATION
- Return: AX = equipment flag bits
- 0 diskette installed
- 1 8087 present
- 2 mouse installed (PS2 only)
- 2,3 number of 16K banks of RAM on motherboard (PC only)
- number of 64K banks of RAM on motherboard (XT only)
- always = 11 on AT and above
- 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, 10 = 3, 11 = 4
- 8 0 = dma present, 1 = no dma on system (PCjr???)
- 9-11 number of RS232 cards
- 12 game I/O attached
- 13 serial printer installed (PCjr)
- internal modem installed (PC/Convertible)
- 14,15 number of printers
- ---------------------------------------------
- INT 12 - MEMORY SIZE
- Return: AX = number of contiguous 1K blocks of memory
- ---------------------------------------------
- INT 13 - DISK - RESET DISK SYSTEM
- AH = 00h
- DL = drive (if bit 7 is set both hard disks and floppy disks reset)
- ---------------------------------------------
- INT 13 - DISK - STATUS OF DISK SYSTEM
- AH = 01h
- DL = drive (hard disk if bit 7 set)
- 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 (floppy disk)
- 09h = DMA across 64K boundary
- 0Ah = bad sector detected (hard disk)
- 0Bh = bad track detected (hard disk)
- 0Ch = unsupported track
- 0Dh = invalid number of sectors on format (hard disk)
- 0Eh = control data address mark detected (hard disk)
- 0Fh = DMA arbitration error (hard disk)
- 10h = bad CRC/ECC
- 11h = data ECC corrected (hard disk)
- 20h = controller failure
- 40h = seek failed
- 80h = time out
- AAh = drive not ready (hard disk)
- BBh = undefined error (hard disk)
- CCh = write fault (hard disk)
- E0h = status register error (hard disk)
- FFh = sense operation failed (hard disk)
- ---------------------------------------------
- INT 13 - DISK - READ SECTORS INTO MEMORY
- AH = 02h
- 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 on error
- AH = status (see AH=1 above)
- AL = number of sectors read
- ---------------------------------------------
- INT 13 - DISK - WRITE SECTORS FROM MEMORY
- AH = 03h
- AL = number of sectors to write
- CH = track (if hard disk, bits 8,9 in high bits of CL)
- CL = sector (if hard disk, high two bits are high bits of track #)
- DH = head
- DL = drive
- ES:BX = address of buffer
- Return: CF set on error
- AH = status (see AH=1 above)
- AL = number of sectors written
- ---------------------------------------------
- INT 13 - DISK - VERIFY SECTORS
- AH = 04h
- 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 on error
- AH = status (see AH=1 above)
- AL = number of sectors verified
- ---------------------------------------------
- INT 13 - FLOPPY - FORMAT TRACK
- AH = 05h
- AL = number of sectors to create on this track
- CH = track
- CL = sector
- DH = head
- DL = drive
- ES:BX -> 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 - FIXED DISK - FORMAT TRACK
- AH = 05h
- 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 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
- AH = 06h
- AL = interleave value
- 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 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
- AH = 07h
- 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 - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
- AH = 08h
- DL = drive number
- Return: CF set on error
- AH = status code (see AH=1 above)
- BL = drive type (see AH=17h below) (AT/PS2 floppies only)
- DL = number of consecutive acknowledging drives
- DH = maximum value for head number
- CL = maximum value fo sector number
- CH = maximum value for cylinder number
- ES:DI = drive parameter table
- ---------------------------------------------
- INT 13 - FIXED DISK - INITIALIZE TWO FIXED DISK BASE TABLES (XT,AT,XT286,PS)
- AH = 09h
- 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 - FIXED DISK - READ LONG (XT,AT,XT286,PS)
- AH = 0Ah
- DL = drive ID
- DH = head
- CH = cylinder (bits 8,9 in high bits of CL)
- CL = sector
- ES:BX -> buffer to fill
- Return: CF set on error
- AH = status code (see AH=1 above)
- AL = number of sectors read
- Note: used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - WRITE LONG (XT,AT,XT286,PS)
- AH = 0Bh
- DL = drive ID
- DH = head
- CH = cylinder (bits 8,9 in high bits of CL)
- CL = sector
- ES:BX -> buffer containing data
- Return: CF set on error
- AH = status code (see AH=1 above)
- AL = number of sectors written
- Note: used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - SEEK TO CYLINDER (XT,AT,XT286,PS)
- 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 - FIXED DISK - ALTERNATE DISK RESET (XT,AT,XT286,PS)
- AH = 0Dh
- DL = drive ID
- Return: CF set on error
- AH = status code (see AH=1 above)
- ---------------------------------------------
- INT 13 - FIXED DISK - READ SECTOR BUFFER (XT,PS)
- AH = 0Eh
- ES:BX -> buffer
- Return: CF set on error
- AH = status code (see AH=1 above)
- Notes: transfers controller's sector buffer. No data is read from the drive
- used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - WRITE SECTOR BUFFER (XT,PS)
- AH = 0Fh
- ES:BX -> buffer
- Return: CF set on error
- AH = status code (see AH=1 above)
- Notes: should be called before formatting to initialize the controller's
- sector buffer.
- used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - TEST FOR DRIVE READY (XT,AT,XT286,PS)
- AH = 10h
- DL = drive ID
- Return: CF set on error
- AH = status code (see AH=1 above)
- ---------------------------------------------
- INT 13 - FIXED DISK - RECALIBRATE DRIVE (XT,AT,XT286,PS)
- AH = 11h
- DL = drive ID
- Return: CF set on error
- AH = status code (see AH=1 above)
- ---------------------------------------------
- INT 13 - FIXED DISK - CONTROLER RAM DIAGNOSTIC (XT,PS)
- AH = 12h
- Return: CF set on error
- AH = status code (see AH=1 above)
- Note: used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - DRIVE DIAGNOSTIC (XT,PS)
- AH = 13h
- Return: CF set on error
- AH = status code (see AH=1 above)
- Note: used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - FIXED DISK - CONTROLLER DIAGNOSTICS (XT,AT,XT286,PS)
- AH = 14h
- Return: CF set on error
- AH = status code (see AH=1 above)
- Note: used for diagnostics only on PS/2 systems
- ---------------------------------------------
- INT 13 - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
- AH = 15h
- DL = drive ID
- Return: CF set on error
- 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 - FLOPPY DISK - CHANGE OF DISK STATUS (AT,XT2,XT286,CONV,PS)
- AH = 16h
- DL = drive to check
- Return: AH = disk change status
- 0 = no disk change
- 6 = disk changed
- ---------------------------------------------
- INT 13 - DISK - SET TYPE (AT,XT2,XT286,CONV,PS)
- AH = 17h
- AL = disk type
- 00h = no disk
- 01h = regular disk in regular drive
- 02h = regular disk in high-capacity drive
- 03h = high-capacity disk in high-capacity drive
- 04h = 720K disk in 720K drive
- DL = drive ID
- ---------------------------------------------
- INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
- 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 drive type unknown
- 80h there is no disk in the drive
- ES:DI -> 11-byte parameter table
- ---------------------------------------------
- INT 13 - FIXED DISK - PARK HEADS (XT286,PS)
- AH = 19h
- DL = drive
- Return: CF set on error
- AH = status (see AH=1 above)
- ---------------------------------------------
- INT 13 - ESDI FIXED DISK - FORMAT UNIT (PS)
- AH = 1Ah
- AL = defect table count
- CL = format modifiers
- bit 0: ignore primary defect map
- bit 1: ignore secondary defect map
- bit 2: update secondary defect map
- bit 3: perform surface analysis
- bit 4: generate periodic interrupt
- DL = drive
- ES:BX -> defect table
- Return: CF set on error
- AH = status (see AH=1 above)
- Note: if periodic interrupt selected, INT 15h/AH=0Fh is called after each
- cylinder is formatted
- ---------------------------------------------
- INT 13 - DISK - ??? (PS/2)
- AH = 1Ch
- AL = ??? (0Ah one value)
- Return: ???
- Note: used by LLFORMAT.COM on PS/2 50/60 reference disk
- ---------------------------------------------
- INT 13 - DISK - ??? (Western Digital "Super BIOS")
- AH = 20h
- ???
- Return: ???
- Note: seems to return some kind of status
- ---------------------------------------------
- INT 14 - SERIAL I/O - INITIALIZE USART
- AH = 00h
- 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 (0-3)
- 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 in receive line signal detected
- 4: Clear-To-Send
- 5: Data-Set-Ready
- 6: ring detected
- 7: receive line signal detected
- ---------------------------------------------
- INT 14 - FOSSIL (Fido/Opus/Seadog Standard Interface Level) - INITIALIZE
- AH = 00h
- AL = initializing parameters
- 7 - 6 - 5 4 - 3 2 1 - 0
- -BAUD RATE- PARITY STOP WORD
- BITS LENGTH
- 000 19200 bd 00 none 0-1 10 - 7
- 001 38400 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 (0-3)
- Return: AH = RS-232 status code bits
- 0: RDA - input data is available in buffer
- 1: OVRN - data has been lost
- 5: THRE - room is available in output buffer
- 6: TSRE - output buffer empty
- AL = modem status bits
- 3: always 1
- 7: DCD - carrier detect
- ---------------------------------------------
- INT 14 - SERIAL I/O - TRANSMIT CHARACTER
- AH = 01h
- AL = character
- DX = port number (0-3)
- Return: AX = port status (see AH = 00h above)
- ---------------------------------------------
- INT 14 - SERIAL I/O - RECEIVE CHARACTER
- AH = 02h
- DX = port number (0-3)
- Return: AL = character received
- AH = RS-232 status code (see AH = 00h above)
- Note: will timeout if DSR is not asserted, even if function 03h returns
- data ready
- ---------------------------------------------
- INT 14 - FOSSIL - RECEIVE CHARACTER WITH WAIT
- AH = 02h
- DX = port number (0-3)
- Return: AL = character received
- AH = 00h
- ---------------------------------------------
- INT 14 - SERIAL I/O - GET USART STATUS
- AH = 03h
- DX = port number (0-3)
- Return: AX = port status code (see AH = 00h above)
- ---------------------------------------------
- INT 14 - SERIAL I/O - EXTENDED INITIALIZE (CONVERTIBLE,PS)
- AH = 04h
- 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
- DX = port number
- Return: AX = port status code (see AH = 00h above)
- ---------------------------------------------
- INT 14 - FOSSIL - INITIALIZE DRIVER
- AH = 04h
- DX = port number
- optionally BX=4F50h
- ES:CX = address of byte to be set upon ^C
- Return: AX = 1954h (if successful)
- BL = maximum function number supported (excluding 7Eh and above)
- BH = revision of FOSSIL supported
- DTR is raised
- ---------------------------------------------
- INT 14 - SERIAL I/O - EXTENDED COMMUNICATION PORT CONTROL (CONVERTIBLE,PS)
- AH = 05h
- 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: AX = status
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - DEINITIALIZE DRIVER
- AH = 05h
- DX = port number
- Return: none
- DTR is not affected
- ---------------------------------------------
- INT 14 - FOSSIL - RAISE/LOWER DTR
- AH = 06h
- DX = port
- AL = DTR state to be set
- 00h = lower
- 01h = raise
- ---------------------------------------------
- INT 14 - FOSSIL - RETURN TIMER TICK PARAMETERS
- AH = 07h
- Return: AL = timer tick interrupt number
- AH = ticks per second on interrupt number in AL
- DX = approximate number of milliseconds per tick
- ---------------------------------------------
- INT 14 - FOSSIL - FLUSH OUTPUT BUFFER WAITING TILL ALL OUTPUT IS DONE
- AH = 08h
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - PURGE OUTPUT BUFFER THROWING AWAY ALL PENDING OUTPUT
- AH = 09h
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - PURGE INTPUT BUFFER THROWING AWAY ALL PENDING INPUT
- AH = 0Ah
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - TRANSMIT NO WAIT
- AH = 0Bh
- AL = character
- DX = port number
- Return: AX = 0000h character not accepted
- = 0001h character accepted
- ---------------------------------------------
- INT 14 - FOSSIL - NON-DESTRUCTIVE READ AHEAD
- AH = 0Ch
- DX = port number
- Return: AX = FFFFh character not available
- AX = 00xxh character xx available
- ---------------------------------------------
- INT 14 - FOSSIL - KEYBOARD READ WITHOUT WAIT
- AH = 0Dh
- Return: AX = FFFFh character not available
- = xxyyh standard IBM-style scan code
- ---------------------------------------------
- INT 14 - FOSSIL - KEYBOARD READ WITH WAIT
- AH = 0Eh
- Return: AX = xxyyh standard IBM-style scan code
- ---------------------------------------------
- INT 14 - FOSSIL - ENABLE/DISABLE FLOW CONTROL
- AH = 0Fh
- AL = bit mask describing flow control requested
- 0: xon/xoff on transmit (watch for xoff while sending)
- 1: CTS/RTS (CTS on transmit/RTS on receive)
- 2: reserved
- 3: xon/xoff on receive (send xoff when buffer near full)
- 4-7: all 1
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - EXTENDED ^C/^K CHECKING AND TRANSMIT ON/OFF
- AH = 10h
- AL = bit mask
- 0: enable/disable ^C/^K checking
- 1: enable/disable the transmitter
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - SET CURRENT CURSOR LOCATION
- AH = 11h
- DH = row
- DL = column
- Note: this is the same as INT 10/AH=02h
- ---------------------------------------------
- INT 14 - FOSSIL - READ CURRENT CURSOR LOCATION
- AH = 12h
- Return: DH = row
- DL = column
- Note: this is the same as INT 10/AH=03h
- ---------------------------------------------
- INT 14 - FOSSIL - SINGLE CHARACTER ANSI WRITE TO SCREEN
- AH = 13h
- AL = character
- ---------------------------------------------
- INT 14 - FOSSIL - ENABLE OR DISABLE WATCHDOG PROCESSING
- AH = 14h
- AL = 01h enable watchdog
- 00h disable watchdog
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - WRITE CHARACTER TO SCREEN USING BIOS SUPPORT ROUTINES
- AH = 15h
- AL = character
- ---------------------------------------------
-
- INT 14 - FOSSIL - INSERT/DELETE FUNCTION FROM TIMER TICK CHAIN
- AH = 16h
- AL = function
- 00h = delete
- 01h = add
- ES:DX -> routine to call
- Return: AX = 0000h successful
- 0001h unsuccessful
- ---------------------------------------------
- INT 14 - FOSSIL - REBOOT SYSTEM
- AH = 17h
- AL = method
- 00h = cold boot
- 01h = warm boot
- ---------------------------------------------
- INT 14 - FOSSIL - READ BLOCK
- AH = 18h
- CX = maximum number of characters to transfer
- DX = port number
- ES:DI -> user buffer
- Return: AX = number of characters transfered
- ---------------------------------------------
- INT 14 - FOSSIL - WRITE BLOCK
- AH = 19h
- CX = maximum number of characters to transfer
- DX = port number
- ES:DI -> user buffer
- Return: AX = number of characters transfered
- ---------------------------------------------
- INT 14 - FOSSIL - BREAK BEGIN OR END
- AH = 1Ah
- AL = 00h stop sending 'break'
- 01h start sending 'break'
- DX = port number
- ---------------------------------------------
- INT 14 - FOSSIL - RETURN INFORMATION ABOUT THE DRIVER
- AH = 1Bh
- DX = port number
- CX = size of user buffer
- ES:DI -> user buffer
- Return: AX = number of characters transferred
- Structure =
- WORD size of structure in bytes
- BYTE FOSSIL spec driver conforms to
- BYTE revision level of this specific driver
- DWORD pointer to ASCII identification string
- WORD size of the input buffer
- WORD number of bytes left in buffer
- WORD size of the output buffer
- WORD number of bytes left in buffer
- BYTE width of screen
- BYTE length of screen
- BYTE actual baud rate, computer to modem
- ---------------------------------------------
- INT 14 - FOSSIL - INSTALL AN EXTERNAL APPLICATION FUNCTION
- AH = 7Eh
- AL = code assigned to external application
- ES:DX -> entry point
- Return: AX = 1954h
- BL = code assigned to application (same as input AL)
- DH = 00h failed
- 01h successful
- ---------------------------------------------
- INT 14 - FOSSIL - REMOVE AN EXTERNAL APPLICATION FUNCTION
- AH = 7Fh
- AL = code assigned to external application
- ES:DX -> entry point
- Return: AX = 1954h
- BL = code assigned to application (same as input AL)
- DH = 00h failed
- 01h successful
- ---------------------------------------------
- Int 15 - SYSTEM - FORMAT UNIT PERIODIC INTERRUPT (PS ESDI drives only)
- AH = 0Fh
- AL = phase code
- 00h reserved
- 01h surface analysis
- 02h formatting
- Return: CF clear if formatting should continue, set if it should terminate
- Note: called during ESDI drive formatting after each cylinder is completed
- ---------------------------------------------
- INT 15 - PRINT.COM - ??? (AT,XT286,PS50+)
- AH = 20h
- AL = subfunction
- 00h ???
- 01h ???
- 10h setup of SYSREQ routine (OS hook)
- 11h completion of SYSREQ function (OS hook)
- Note: AL = 0,1 set or reset some flags which affect what PRINT does when it
- tries to access the disk
- ---------------------------------------------
- INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
- AH = 21h
- AL = subfunction
- 00h read POST log
- 01h write POST log
- BH = device ID
- BL = error code
- Return: CF set on error
- AH = status (00h OK, 01h list full, 80h invalid cmd, 86h unsupported)
- if function 00h:
- BX = number of error codes stored
- ES:DI -> error log
- Note: the log is a series of words, the first byte of which identifies the
- error code and the second the device.
- ---------------------------------------------
- INT 15 - OS HOOK - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
- AH = 4Fh
- AL = scan code
- CF set
- Return: CF set
- AL = scan code
- CF clear
- scan code should not be used
- Note: Called by INT 9 handler to translate scan codes
- ---------------------------------------------
- INT 15 - OS HOOK - DEVICE OPEN (AT,XT2,XT286,PS)
- AH = 80h
- BX = device ID
- CX = process type
- Return: CF set on error
- AH = status
- ---------------------------------------------
- INT 15 - OS HOOK - DEVICE CLOSE (AT,XT2,XT286,PS)
- AH = 81h
- BX = device ID
- CX = process type
- Return: CF set on error
- AH = status
- ---------------------------------------------
- INT 15 - OS HOOK - DEVICE PROGRAM TERMINATE (AT,XT2,XT286,PS)
- AH = 82h
- BX = device ID
- Return: CF set on error
- AH = status
- Note: closes all devices opened with function 80h
- ---------------------------------------------
- INT 15 - SYSTEM - EVENT WAIT (AT,XT286,CONV,PS)
- AH = 83h
- AL = subservice
- 0 = set interval
- 1 = cancel
- ES:BX -> 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 - SYSTEM - READ JOYSTICK (AT,XT2,XT286,PS)
- AH = 84h
- DX = subservice
- 0 get switch settings
- Return: AL = switch settings (bits 7-4)
- 1 read joystick inputs
- Return: AX = A(x) value
- BX = A(y) value
- CX = B(x) value
- DX = B(y) value
- ---------------------------------------------
- INT 15 - OS HOOK - SYSTEM REQUEST KEY PRESSED (AT,XT2,XT286,CONV,PS)
- AH = 85h
- AL = 0 press
- = 1 release
- Return: CF set on error
- AH = status
- Note: called by keyboard decode routine
- ---------------------------------------------
- INT 15 - SYSTEM - WAIT (AT,XT2,XT286,CONV,PS)
- AH = 86h
- CX,DX = number of microseconds to wait (only accurate to 977 us)
- Return: CF clear: after wait elapses
- CF set: immediately due to error
- ---------------------------------------------
- INT 15 - EXTENDED MEMORY - BLOCK MOVE (AT,XT286,PS)
- AH = 87h
- CX = number of words to move
- ES:SI -> global descriptor table
- 00h-0Fh zero
- 10h-11h source segment length in bytes (2*CX-1 or greater)
- 12h-14h 24-bit linear source address
- 15h access rights byte (93h)
- 16h-17h zero
- 18h-19h destination segment length in bytes (2*CX-1 or greater)
- 1Ah-1Ch 24-bit linear destination address
- 1Dh access rights byte (93h)
- 1Eh-2Fh zero
- Return: CF set on error
- AH = status
- 00h source copied into destination
- 01h parity error
- 02h interrupt error
- 03h address line 20 gating failed
- ---------------------------------------------
- INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (AT,XT286,PS)
- AH = 88h
- Return: AX = memory size in K
- ---------------------------------------------
- INT 15 - SYSTEM - SWITCH TO VIRTUAL MODE (AT,XT286,PS50+)
- 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 -> 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 - OS HOOK - DEVICE BUSY LOOP (AT,XT2,XT286,CONV,PS)
- AH = 90h
- AL = type code
- 00h: disk
- 01h: diskette
- 02h: keyboard
- 03h: PS/2 pointing device
- 80h: network
- FCh: disk reset
- FDh: diskette motor start
- FEh: printer
- ES:BX -> request block for type codes 80h through BFh
- Return: CF set if wait time satisfied
- CF clear if driver must perform wait
- Note: type codes are allocated as follows:
- 00-7F non-reentrant devices; OS must arbitrate access
- 80-BF reentrant devices; ES:BX points to a unique control block
- C0-FF wait-only calls, no complementary INT 15/AH=91h call
- ---------------------------------------------
- INT 15 - OS HOOK - SET FLAG AND COMPLETE INTERRUPT (AT,XT2,XT286,CONV,PS)
- AH = 91h
- AL = type code, see AH=90h above
- ES:BX -> request block for type codes 80h through BFh
- Return: AH = 0
- ---------------------------------------------
- INT 15 - SYSTEM - GET CONFIGURATION (XT after 1/10/86,AT mdl 3x9,CONV,XT286,PS)
- AH = C0h
- Return: CF set if BIOS doesn't support call
- ES:BX -> 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/AH=4Fh 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
- res1 dw 0
- res2 dw 0
- Note: the 1/10/86 XT BIOS returns an incorrect value for featbyte.
- ---------------------------------------------
- INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
- AH = C1h
- Return: CF set on error
- ES = segment of data area
- ---------------------------------------------
- INT 15 - POINTING DEVICE BIOS INTERFACE (PS,DESQview 2.x)
- AH = C2h
- AL = subfunction
- 00h enable/disable
- BH = 00h disable
- 01h enable
- 01h reset
- Return: BH = device ID
- 02h set sampling rate
- BH = 00h 10/second
- 01h 20/second
- 02h 40/second
- 03h 60/second
- 04h 80/second
- 05h 100/second
- 06h 200/second
- 03h set resolution
- BH = 00h one count per mm
- 01h two counts per mm
- 02h four counts per mm
- 03h eight counts per mm
- 04h get type
- Return: BH = device ID
- 05h initialize
- BH = data package size (1 - 8 bytes)
- 06h get/set scaling factor
- BH = 00h return device status
- Return: BL = status
- bit 0: right button pressed
- bit 1: reserved
- bit 2: left button pressed
- bit 3: reserved
- bit 4: 0 if 1:1 scaling, 1 if 2:1 scaling
- bit 5: device enabled
- bit 6: 0 if stream mode, 1 if remote mode
- bit 7: reserved
- CL = resolution (see function 03h)
- DL = sample rate, reports per second
- 01h set scaling at 1:1
- 02h set scaling at 2:1
- 07h set device handler address
- ES:BX = user device handler
- Return: CF set on error
- AH = status
- 00h successful
- 01h invalid function
- 02h invalid input
- 03h interface error
- 04h need to resend
- 05h no device handler installed
- --------------------------------------------
- INT 15 - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
- AH = C3h
- AL = 00h disable
- 01h enable
- BX = timer counter
- Return: CF set on error
- Note: the watchdog timer generates an NMI
- ---------------------------------------------
- INT 15 - PROGRAMMABLE OPTION SELECT (PS50+)
- AH = C4h
- AL = 00h return base POS register address
- 01h enable slot
- BL = slot number
- 02h enable adapter
- Return: CF set on error
- DX = base POS register address (if function 00h)
- ---------------------------------------------
- INT 16 - KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
- AH = 00h
- Return: AH = scan code
- AL = character
- ---------------------------------------------
- INT 16 - KEYBOARD - CHECK BUFFER, DO NOT CLEAR
- AH = 01h
- Return: ZF = 0 character in buffer
- AH = scan code
- AL = character
- ZF = 1 no character in buffer
- ---------------------------------------------
- INT 16 - KEYBOARD - GET SHIFT STATUS
- AH = 02h
- 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 - SET DELAYS (Jr,AT model 339,XT286,PS)
- AH = 03h
- AL = subfunction
- 0 reset typematic (PCjr)
- 1 increase initial delay (PCjr)
- 2 increase continuing delay (PCjr)
- 3 increase both delays (PCjr)
- 4 turn off typematic (PCjr)
- 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 - KEYCLICK (Jr,CONV)
- AH = 04h
- AL =
- 0 click off
- 1 click on
- ---------------------------------------------
- INT 16 - KEYBOARD - WRITE TO KEYBOARD BUFFER (AT model 339,XT2,XT286,PS)
- AH = 05h
- CH = scan code
- CL = character
- Return: AL = 1 if buffer full
- ---------------------------------------------
- INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
- AH = 10h
- Return: AH = scan code
- AL = character
- ---------------------------------------------
- INT 16 - KEYBOARD - CHECK ENHANCED KEYSTROKE (AT model 339,XT2,XT286,PS)
- 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 model 339,XT2,XT286,PS)
- AH = 12h
- Return: AL (same as for AH=02h)
- 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 - PRINTER - OUTPUT CHARACTER
- AH = 00h
- AL = character
- DX = printer port (0-3)
- 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 - PRINTER - INITIALIZE
- AH = 01h
- DX = printer port (0-3)
- Return: AH = status (see AH = 00h above)
- ---------------------------------------------
- INT 17 - PRINTER - GET STATUS
- AH = 02h
- DX = printer port (0-3)
- Return: AH = status (see AH = 00h above)
- ---------------------------------------------
- INT 18 - TRANSFER TO ROM BASIC
- causes transfer to ROM-based 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 - CLOCK - GET TIME OF DAY
- AH = 00h
- Return: CX:DX = 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 - CLOCK - SET TIME OF DAY
- AH = 01h
- CX:DX = clock count
- Return: time of day set
- ---------------------------------------------
- INT 1A - CLOCK - READ REAL TIME CLOCK (AT,XT286,CONV,PS)
- AH = 02h
- Return: CH = hours in BCD
- CL = minutes in BCD
- DH = seconds in BCD
- ---------------------------------------------
- INT 1A - CLOCK - SET REAL TIME CLOCK (AT,XT286,CONV,PS)
- AH = 03h
- CH = hours in BCD
- CL = minutes in BCD
- DH = seconds in BCD
- DL = 1, if daylight savings; 0 if standard time
- Return: CMOS clock set
- ---------------------------------------------
- INT 1A - CLOCK - READ DATE FROM REAL TIME CLOCK (AT,XT286,CONV,PS)
- AH = 04h
- Return: DL = day in BCD
- DH = month in BCD
- CL = year in BCD
- CH = century (19h or 20h)
- ---------------------------------------------
- INT 1A - CLOCK - SET DATE IN REAL TIME CLOCK (AT,XT286,CONV,PS)
- AH = 05h
- DL = day in BCD
- DH = month in BCD
- CL = year in BCD
- CH = century (19h or 20h)
- Return: CMOS clock set
- ---------------------------------------------
- INT 1A - CLOCK - SET ALARM (AT,XT286,CONV,PS)
- AH = 06h
- CH = hours in BCD
- CL = minutes in BCD
- DH = seconds in BCD
- Return: CF set if alarm already set or clock inoperable
- INT 4Ah will be called when alarm goes off, every 24 hours until reset
- ---------------------------------------------
- INT 1A - CLOCK - RESET ALARM (AT,XT286,CONV,PS)
- AH = 07h
- Return: alarm disabled
- ---------------------------------------------
- INT 1A - CLOCK - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
- AH = 08h
- CH = hours in BCD
- CL = minutes in BCD
- DH = seconds in BCD
- ---------------------------------------------
- INT 1A - CLOCK - READ RTC ALARM TIME AND STATUS (CONV,PS30)
- AH = 09h
- 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 - CLOCK - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
- AH = 0Ah
- Return: CF set on error
- CX = count of days since Jan 1,1980
- ---------------------------------------------
- INT 1A - CLOCK - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
- AH = 0Bh
- CX = count of days since Jan 1,1980
- Return: CF set on error
- ---------------------------------------------
- INT 1A - PCjr - SET UP SOUND MULTIPLEXOR
- AH = 80h
- AL = 0 source is 8253 channel 2
- 1 source is cassette input
- 2 source is I/O channel "Audio IN"
- 3 source is sound generator chip
- ---------------------------------------------
- INT 1A - AT&T 6300 - READ TIME AND DATE
- AH = FEh
- Return: BX = day count (1 = Jan 1, 1984)
- CH = hour
- CL = minute
- DH = second
- DL = hundredths
- ---------------------------------------------
- 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 time-of-day 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 in PC and most compatibles)
- DB step rate & head unload times
- DB head load time & DMA
- DB motor off time in clock ticks (36 or 37 typical)
- DB sector size in bytes (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 (F6h typical)
- DB head-settle time ms (typical 25, 1.10->0, 2.10->15, 3.10->1)
- DB motor start-up time (1/8 secs) (typical 4, 2.10->2)
- ---------------------------------------------
- INT 1F -> GRAPHICS SET 2
- (NOT a vector!) pointer to bitmaps for high 128 chars
- ---------------------------------------------
- INT 20 - Minix - SEND/RECEIVE MESSAGE
- AX = process ID of other process
- BX -> 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--identical to INT 21/AH=00h
- ---------------------------------------------
- INT 21 - DOS - PROGRAM TERMINATION
- AH = 00h
- Return: never
- ---------------------------------------------
- INT 21 - DOS - KEYBOARD INPUT
- AH = 01h
- Return: AL = character read
- Note: ^C/^Break are checked, and INT 23h executed if read
- character is echoed to standard output
- ---------------------------------------------
- INT 21 - DOS - DISPLAY OUTPUT
- AH = 02h
- DL = character to send to standard output
- Note: ^C/^Break are checked, and INT 23h executed if pressed
- ---------------------------------------------
- INT 21 - DOS - AUX INPUT
- AH = 03h
- Return: AL = character read
- ---------------------------------------------
- INT 21 - DOS - AUX OUTPUT
- AH = 04h
- DL = character to send
- ---------------------------------------------
- INT 21 - DOS - PRINTER OUTPUT
- AH = 05h
- DL = character to print
- ---------------------------------------------
- INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER OUTPUT
- AH = 06h
- DL = character <> FFh
- ---------------------------------------------
- INT 21 - DOS - DIRECT CONSOLE I/O CHARACTER INPUT
- AH = 06h
- DL = 0FFh
- Return: ZF set = no character
- ZF clear = character recieved
- AL = character
- Notes: Character is echoed to STDOUT if received.
- ^C/^Break are NOT checked
- ---------------------------------------------
- INT 21 - DOS - DIRECT STDIN INPUT, NO ECHO
- AH = 07h
- Note: same as function 06h for input but char not echoed
- ---------------------------------------------
- INT 21 - DOS - KEYBOARD INPUT, NO ECHO
- AH = 08h
- Return: AL = character
- Note: same as function 07h, but ^C/^Break are checked
- ---------------------------------------------
- INT 21 - DOS - PRINT STRING
- AH = 09h
- DS:DX = address of string terminated by "$"
- Note: ^C/^Break checked, and INT 23h called if pressed
- ---------------------------------------------
- INT 21 - DOS - BUFFERED KEYBOARD INPUT
- AH = 0Ah
- DS:DX = address of buffer
- Note: first byte of buffer must contain maximum length
- on entry, second byte contains actual length of previous line which may
- be recalled with the DOS line-editing commands
- on return the second byte contains actual length, third and
- subsequent bytes contain the input line
- ---------------------------------------------
- INT 21 - DOS - CHECK STANDARD INPUT STATUS
- AH = 0Bh
- Return: AL = FFh if character available
- 00h if no character
- Note: ^C/^Break checked, and INT 23h called if pressed
- ---------------------------------------------
- INT 21 - DOS - CLEAR KEYBOARD BUFFER
- AH = 0Ch
- AL must be 1, 6, 7, 8, or 0Ah.
- Notes: Flushes all typeahead input, then executes function specified by AL
- (effectively 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 - DOS - DISK RESET
- AH = 0Dh
- Note: Flushes all disk buffers.
- ---------------------------------------------
- INT 21 - DOS - SELECT DISK
- AH = 0Eh
- DL = new default drive number (0 = A, 1 = B, etc.)
- Return: AL = number of logical drives
- ---------------------------------------------
- INT 21 - DOS - OPEN DISK FILE
- AH = 0Fh
- DS:DX = address of FCB
- Return: AL = 00h file found
- FFh file not found
- Note: (DOS 3.x) file opened in compatibility mode
- ---------------------------------------------
- INT 21 - DOS - CLOSE DISK FILE
- AH = 10h
- DS:DX = address of FCB
- Return: AL = 00h directory update successful
- FFh file not found in directory
- ---------------------------------------------
- INT 21 - DOS - SEARCH FIRST USING FCB
- AH = 11h
- DS:DX = address of FCB
- Return: AL = status
- 00h file found
- FFh file not found
- Note: If file found, FCB is created at DTA address and set up to
- OPEN or DELETE it.
- ---------------------------------------------
- INT 21 - DOS - SEARCH NEXT USING FCB
- AH = 12h
- DS:DX = address of FCB
- Return: AL = status
- 00h file found
- FFh file not found
- Note: If file found, FCB is created at DTA address and set up to
- OPEN or DELETE it.
- ---------------------------------------------
- INT 21 - DOS - DELETE FILE via FCB
- AH = 13h
- DS:DX = address of FCB with filename field filled with template for
- deletion ('?' wildcard allowed)
- Return: AL = status
- 00h file found
- FFh file not found
- ---------------------------------------------
- INT 21 - DOS - SEQUENTIAL DISK FILE READ
- AH = 14h
- DS:DX = address of FCB
- Return: AL = status
- 0 successful read
- 1 end of file
- 2 data transfer area too small
- 3 partial record, EOF
- ---------------------------------------------
- INT 21 - DOS - SEQUENTIAL DISK RECORD WRITE
- AH = 15h
- DS:DX = address of FCB
- Return: AL = status
- 0 successful write
- 1 disk full
- 2 data transfer area too small
- ---------------------------------------------
- INT 21 - DOS - CREATE A DISK FILE
- AH = 16h
- DS:DX = address of FCB
- Return: AL = status
- 00h successful creation
- FFh directory full
- Note: if file already exists, it is truncated to zero length
- ---------------------------------------------
- INT 21 - DOS - RENAME FILE via FCB
- AH = 17h
- DS:DX = address of FCB
- FCB contains new name starting at byte 17h.
- Return: AL = status
- 00h file found
- FFh file not found
- ---------------------------------------------
- INT 21 - DOS internal - UNUSED
- AH = 18h
- Return: AL = 0
- ---------------------------------------------
- INT 21 - DOS - GET DEFAULT DISK NUMBER
- AH = 19h
- Return: AL = current drive number (letter - 'A')
- ---------------------------------------------
- INT 21 - DOS - SET DISK TRANSFER AREA ADDRESS
- AH = 1Ah
- DS:DX = address of buffer
- ---------------------------------------------
- INT 21 - DOS - ALLOCATION TABLE INFORMATION
- AH = 1Bh
- Return: DS:BX points to FAT ID byte for default drive
- DX = number of allocation units on disk
- AL = number of sectors per allocation unit (cluster)
- CX = number of bytes per sector
- ---------------------------------------------
- INT 21 - DOS - ALLOCATION TABLE INFORMATION FOR SPECIFIC DEVICE
- 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 - DOS internal - UNUSED
- AH = 1Dh
- Return: AL = 0
- ---------------------------------------------
- INT 21 - DOS internal - UNUSED
- AH = 1Eh
- Return: AL = 0
- ---------------------------------------------
- INT 21 - DOS internal - GET DEFAULT DRIVE PARAMETER BLOCK
- AH = 1Fh
- Return: AL = 00h No Error
- FFh Error
- DS:BX -> drive parameter block
- Note: for DOS 2.x and 3.x, this just invokes function 32h with DL = 0
- ---------------------------------------------
- INT 21 - DOS internal - UNUSED
- AH = 20h
- Return: AL = 0
- ---------------------------------------------
- INT 21 - DOS - RANDOM DISK RECORD READ
- AH = 21h
- DS:DX = address of FCB
- Return: AL = status
- 0 successful read
- 1 end of file
- 2 data transfer area too small
- 3 partial record, EOF
- ---------------------------------------------
- INT 21 - DOS - RANDOM DISK RECORD WRITE
- AH = 22h
- DS:DX = address of FCB
- Return: AL = status (see AH = 21h above)
- ---------------------------------------------
- INT 21 - DOS - GET FILE SIZE
- AH = 23h
- DS:DX = address of unopened FCB with filename and record size fields
- initialized
- Return: AL = status
- 00h file found
- FFh file not found
- Note: FCB's random-record field set to number of records (rounded up)
- ---------------------------------------------
- INT 21 - DOS - 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 - DOS - SET INTERRUPT VECTOR
- AH = 25h
- AL = interrupt number
- DS:DX = new vector to be used for specified interrupt
- ---------------------------------------------
- INT 21 - DOS - CREATE PSP
- AH = 26h
- DX = Segment number to set up PSP at
- Return: Current PSP is copied to specified segment
- Note: new PSP is updated with memory size information; INTs 22h, 23h, 24h
- taken from interrupt vector table
- ---------------------------------------------
- INT 21 - DOS - RANDOM BLOCK READ
- AH = 27h
- DS:DX = address of FCB
- CX = number of records to be read
- Return: AL = status
- 0 successful read
- 1 end of file
- 2 data transfer area too small
- 3 partial record, EOF
- ---------------------------------------------
- INT 21 - DOS - RANDOM BLOCK WRITE
- AH = 28h
- DS:DX = address of FCB
- CX = number of records to be written
- if zero, truncate file to current random file position
- Return: AL = status
- 0 successful write
- 1 disk full
- 2 data transfer area too small
- ---------------------------------------------
- INT 21 - DOS - PARSE FILENAME
- AH = 29h
- DS:SI -> string to parse
- ES:DI -> buffer to fill with unopened FCB
- AL = bit mask to control parsing
- 0 = 0: parsing stops if file separator found
- 1: leading separator ignored
- 1 = 0: drive number in FCB set to default drive if not present
- in string
- 1: drive number in FCB not changed
- 2 = 0: filename in FCB set to blanks if no filename in string
- 1: filename in FCB not changed if string does not contain
- a filename
- 3 = 0: extension in FCB set to blanks if no extension in string
- 1: extension left unchanged
- Return: AL = 00h: no wildcards in name or extension
- 01h: wildcards appeared
- FFh: drive specifier invalid
- DS:SI -> first byte after parsed string
- ES:DI buffer filled with unopened FCB
- ---------------------------------------------
- INT 21 - DOS - GET CURRENT DATE
- AH = 2Ah
- Return: DL = day
- DH = month
- CX = year
- AL = day of the week (0=Sunday, 1=Monday, etc.)
- ---------------------------------------------
- INT 21 - DOS - SET CURRENT DATE
- AH = 2Bh
- DL = day
- DH = month
- CX = year
- Return: AL = 00h if no error
- = FFh if bad value sent to routine
- Note: DOS 3.3 also sets CMOS clock
- ---------------------------------------------
- INT 21 - DESQview - INSTALLATION CHECK
- AH = 2Bh
- AL = subfunction (DV v2.00+)
- 01h get version
- Return: BX = version (BH = major, BL = minor)
- Note: early copies of v2.00 return 0002h
- 02h get shadow buffer info, and start shadowing
- Return: BH = rows in shadow buffer
- BL = columns in shadow buffer
- DX = segment of shadow buffer
- 04h get shadow buffer info
- Return: BH = rows in shadow buffer
- BL = columns in shadow buffer
- DX = segment of shadow buffer
- 05h stop shadowing
- CX = 4445h ('DE')
- DX = 5351h ('SQ')
- Return: AL = FFh if DESQview not installed
- Note: in DESQview v1.x, there were no subfunctions; this call only identified
- whether or not DESQview was loaded
- ---------------------------------------------
- INT 21 - DOS - GET CURRENT TIME
- AH = 2Ch
- Return: CH = hours
- CL = minutes
- DH = seconds
- DL = hundredths of seconds
- Note: time is updated approximately every 5/100 second
- ---------------------------------------------
- INT 21 - DOS - SET CURRENT TIME
- AH = 2Dh
- CH = hours
- CL = minutes
- DH = seconds
- DL = hundredths of seconds
- Return: AL = 00h if no error
- = FFh if bad value sent to routine
- Note: DOS 3.3 also sets CMOS clock
- ---------------------------------------------
- INT 21 - DOS - SET VERIFY FLAG
- AH = 2Eh
- DL = 0
- AL = 1 VERIFY on
- 0 VERIFY off
- ---------------------------------------------
- INT 21 - DOS 2+ - GET DISK TRANSFER AREA ADDRESS
- AH = 2Fh
- Return: ES:BX = address of DTA
- ---------------------------------------------
- INT 21 - DOS 2+ - GET DOS VERSION
- AH = 30h
- Return: AL = Major Version number (0 for DOS 1.x)
- AH = Minor Version number
- BH = OEM number
- 00h IBM
- 16h DEC
- BL:CX = 24-bit user number
- ---------------------------------------------
- INT 21 - DOS 2+ - TERMINATE BUT STAY RESIDENT
- AH = 31h
- AL = exit code
- DX = program size, in paragraphs
-
- ---------------------------------------------
- INT 21 - DOS 2+ internal - GET DRIVE PARAMETER BLOCK
- AH = 32h
- DL = drive number
- 0 = default, 1 = A, etc.
- Return: AL = 0FFh if invalid drive number, else
- DS:BX -> drive parameter block.
-
- Structure of DOS Drive Parameter Block:
- Offset Size Description
- 00h BYTE drive number (0 = A, etc.)
- 01h BYTE unit number within device driver
- 02h WORD number of bytes per sector
- 04h BYTE largest sector number in cluster (one less than sect/clust)
- 05h BYTE log base two of the cluster size
- 06h WORD number of reserved (boot) sectors
- 08h BYTE number of copies of the FAT
- 09h WORD number of root directory entries
- 0Bh WORD first data sector on medium
- 0Dh WORD largest possible cluster number (one more than # data clust)
- 0Fh BYTE number of sectors in one FAT copy
- 10h WORD first sector of root directory
- 12h DWORD address of device driver for this drive
- 16h BYTE media descriptor byte for medium
- 17h BYTE FFh indicates block must be rebuilt
- (DOS 3.x) 00h indicates block accessed
- 18h DWORD address of next device block, offset = FFFFh indicates last
- ---DOS 2.x only---
- 1Ch WORD starting cluster of current directory (0 = root directory)
- 1Eh 64 BYTEs ASCIZ current directory path string
- ---DOS 3.x---
- ; this was always:
- 1Ch WORD = 0 probably unused, values left from before
- 1Eh WORD = 0FFFFh block was built
- ---------------------------------------------
- INT 21 - DOS 2+ - EXTENDED CONTROL-BREAK CHECKING
- AH = 33h
- AL = subfunction
- 00h get state
- 01h set state
- DL = 0 for OFF or 1 for ON
- 02h internal, called by PRINT.COM (DOS 3.1)
- 05h internal, return boot drive in DL (1=A:) (not in DOS 3.1)
- Return: DL = current BREAK setting if AL = 00h
- 0 BREAK=OFF
- 1 BREAK=ON
- AL = FFh if error
- ---------------------------------------------
- INT 21 - DOS 2+ internal - RETURN CritSectFlag POINTER
- AH = 34h
- Return: ES:BX -> 1-byte DOS "Critical Section Flag", also known as InDOS flag
- Notes: when the critical section flag is nonzero, code within DOS is being
- executed. It is safe to enter DOS when both the critical section flag
- and the critical error flag are zero.
-
- The critical error flag is the byte after the critical section flag in
- DOS 2.x, and the byte BEFORE the critical section flag in DOS 3.x
- (except COMPAQ DOS 3.0, where the critical error flag is located 1AAh
- bytes BEFORE the critical section flag)
- ---------------------------------------------
- INT 21 - DOS 2+ - GET INTERRUPT VECTOR
- AH = 35h
- AL = interrupt number
- Return: ES:BX = value of interrupt vector
- ---------------------------------------------
- INT 21 - DOS 2+ - GET DISK SPACE
- AH = 36h
- DL = drive code (0 = default, 1 = A, 2 = B, etc.)
- Return: AX = number of sectors per cluster
- or 0FFFFh if invalid drive
- BX = number of available clusters
- CX = bytes per sector
- DX = total clusters
- Note: multiply AX * CX * BX for free space on disk
- multiply AX * CX * DX for total disk space
- ---------------------------------------------
- INT 21 - DOS 2+ internal - SWITCHAR/AVAILDEV
- AH = 37h
- AL = subfunction
- 0 Read switch character (returns current character in DL)
- 1 Set switch character (specify new character in DL)
- 2 (DOS 2.x only) Read device availability (as set by function AL=3)
- 3 (DOS 2.x only) Set device availability, where:
- DL = 0 means \DEV\ must preceed device names
- DL <> 0 means \DEV\ need not preceed device names
- Return: AL = FFh means the value in AL was not in the range 0-3.
- DL = Switch character (if AL=0 or 1)
- Device availability flag (if AL=2 or 3)
- ---------------------------------------------
- INT 21 - DOS 2+ - GET COUNTRY-DEPENDENT INFORMATION
- AH = 38h
- --DOS 2.x--
- AL = 0 get current-country info
- DS:DX = segment:offset of buffer for returned info
- Return: BX = country code
- buffer at DS:DX filled as follows:
- bytes 0-1 = date format 0 = USA mm dd yy
- 1 = Europe dd mm yy
- 2 = Japan yy mm dd
- byte 2 = currency symbol
- byte 3 = 00h
- byte 4 = thousands separator char
- byte 5 = 00h
- byte 6 = decimal separator char
- byte 7 = 00h
- bytes 8-1Fh reserved
-
- --DOS 3.x--
- AL = 0 for current country
- AL = 01h thru 0FEh for specific country with code <255
- AL = 0FFh for specific country with code >= 255
- BX = 16-bit country code
- DS:DX = segment:offset of buffer for returned info
- DX = 0FFFFh if setting country code, rather than getting info
- Return: (if DX <> 0FFFFh)
- CF set on error
- AX = error code (02h)
- CF clear if successful
- BX = country code
- DS:DX filled in:
- WORD date format (see above)
- 5 BYTEs currency symbol string, ASCIZ
- BYTE thousands separator char
- BYTE 00h
- BYTE decimal separator char
- BYTE 00h
- BYTE date separator char
- BYTE 00h
- BYTE time separator char
- BYTE 00h
- BYTE currency format
- bit 2 = set if currency symbol replaces decimal pt
- bit 1 = number of spaces between value and curr sym
- bit 0 = 0 if currency symbol precedes value
- 1 if currency symbol follows value
- BYTE number of digits after decimal in currency
- BYTE time format
- bit 0 = 0 if 12-hour clock
- 1 if 24-hour clock
- DWORD address of case map routine (FAR CALL, AL = char to map)
- BYTE data-list separator char
- BYTE 00h
- 10 BYTEs reserved
- ---------------------------------------------
- INT 21 - DOS 2+ - CREATE A SUBDIRECTORY (MKDIR)
- AH = 39h
- DS:DX = address of ASCIZ pathname
- Return: CF set on error
- AX = error code (03h,05h)
- ---------------------------------------------
- INT 21 - DOS 2+ - REMOVE A DIRECTORY ENTRY (RMDIR)
- AH = 3Ah
- DS:DX = address of ASCIZ pathname
- Return: CF set on error
- AX = error code (03h,05h,06h,10h)
- ---------------------------------------------
- INT 21 - DOS 2+ - CHANGE THE CURRENT DIRECTORY (CHDIR)
- AH = 3Bh
- DS:DX = address of ASCIZ directory name
- Return: CF set on error
- AX = error code (03h)
- ---------------------------------------------
- INT 21 - DOS 2+ - CREATE A FILE WITH HANDLE (CREAT)
- AH = 3Ch
- CX = attributes for file
- bit 0: read-only
- 1: hidden
- 2: system
- 3: volume label
- 4: reserved, must be zero (directory)
- 5: archive bit
- 7: if set, file is shareable under Novell NetWare
- DS:DX = address of ASCIZ filename
- Return: CF set on error
- AX = error code (03h,04h,05h)
- CF clear if successful
- AX = file handle
- ---------------------------------------------
- INT 21 - DOS 2+ - OPEN DISK FILE WITH HANDLE
- AH = 3Dh
- AL = access code
- 0 = Read Only
- 1 = Write Only
- 2 = Read/Write
- AL bits 7-3 = file-sharing modes (DOS 3.x)
- bit 7 = inheritance flag, set for no inheritance
- bits 4-6 = sharing mode
- 000 compatibility mode
- 001 exclusive (deny all)
- 010 write access denied (deny write)
- 011 read access denied (deny read)
- 100 full access permitted (deny none)
- bit 3 = reserved, should be zero
- DS:DX = address of ASCIZ filename
- Return: CF set on error
- AX = error code (01h,02h,03h,04h,05h,0Ch)
- CF clear if successful
- AX = file handle
- ---------------------------------------------
- INT 21 - DOS 2+ - CLOSE A FILE WITH HANDLE
- AH = 3Eh
- BX = file handle
- Return: CF set on error
- AX = error code (06h)
- ---------------------------------------------
- INT 21 - DOS 2+ - READ FROM FILE WITH HANDLE
- AH = 3Fh
- BX = file handle
- CX = number of bytes to read
- DS:DX = address of buffer
- Return: CF set on error
- AX = error code (05h,06h)
- CF clear if successful
- AX = number of bytes read (0 if at EOF before call)
- ---------------------------------------------
- INT 21 - DOS 2+ - WRITE TO FILE WITH HANDLE
- AH = 40h
- BX = file handle
- CX = number of bytes to write
- DS:DX -> buffer
- Return: CF set on error
- AX = error code (05h,06h)
- CF clear if successful
- AX = number of bytes actually written
- Note: if CX is zero, no data is written, and the file is truncated or extended
- to the current position
- ---------------------------------------------
- INT 21 - DOS 2+ - DELETE A FILE (UNLINK)
- AH = 41h
- DS:DX -> ASCIZ name of file to delete
- Return: CF set on error
- AX = error code (02h,05h)
- ---------------------------------------------
- INT 21 - DOS 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
- AH = 42h
- AL = method value
- 0 = offset from beginning of file
- 1 = offset from present location
- 2 = offset from end of file
- BX = file handle
- CX:DX = offset in bytes
- Return: CF set on error
- AX = error code (01h,06h)
- CF clear if successful
- DX:AX = new offset
- ---------------------------------------------
- INT 21 - DOS 2+ - GET/PUT FILE ATTRIBUTES (CHMOD)
- AH = 43h
- AL =
- 0 = get file attributes
- 1 = put file attributes
- CX = file attribute bits
- 0 = read only
- 1 = hidden file
- 2 = system file
- 3 = volume label
- 4 = subdirectory
- 5 = written since backup
- 8 = shareable (Novell NetWare)
- DS:DX -> ASCIZ file name
- Return: CF set on error
- AX = error code (01h,02h,03h,05h)
- CX = file attributes on get
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
- AX = 4400h
- BX = file or device handle
- Return: CF set on error
- AX = error code
- CF clear if successful
- DX = device info
- If bit 7 set: (character device)
- bit 0: console input device
- 1: console output device
- 2: NUL device
- 3: CLOCK$ device
- 4: device is special
- 5: binary (raw) mode
- 6: Not EOF
- 12: network device (DOS 3.x)
- 14: can process IOCTL control strings (func 2-5)
- If bit 7 clear: (file)
- bits 0-5 are block device number
- 6: file has not been written
- 12: network device (DOS 3.x)
- 14: ??? (DOS 3.x)
- 15: file is remote (DOS 3.x)
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
- AX = 4401h
- BX = device handle
- DH = 0
- DL = device information to set (bits 0-7 from function 0)
- Return: CF set on error
- AX = error code
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - READ CHARACTER DEVICE CONTROL STRING
- AX = 4402h
- BX = device handle
- CX = number of bytes to read
- DS:DX -> buffer
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = number of bytes read
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - WRITE CHARACTER DEVICE CONTROL STRING
- AX = 4403h
- BX = device handle
- CX = number of bytes to write
- DS:DX -> buffer
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = number of bytes written
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - READ BLOCK DEVICE CONTROL STRING
- AX = 4404h
- BL = drive number (0=default)
- CX = number of bytes to read
- DS:DX -> buffer
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = number of bytes read
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - WRITE BLOCK DEVICE CONTROL STRING
- AX = 4405h
- BL = drive number (0=default)
- CX = number of bytes to write
- DS:DX -> buffer
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = number of bytes written
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
- AX = 4406h
- BX = file or device handle
- Return: AL = FFh device ready
- 00h device not ready
- ---------------------------------------------
- INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
- AX = 4407h
- BX = file or device handle
- Return: AL = FFh device ready
- 00h device not ready
- Note: for DOS 2.x, files are always ready for output
- ---------------------------------------------
- INT 21 - DOS 3.x - IOCTL - BLOCK DEVICE CHANGEABLE
- AX = 4408h
- BL = drive number (0=default)
- Return: AX = 00h removable
- 01h fixed
- 0Fh invalid drive
- ---------------------------------------------
- INT 21 - DOS 3.x - IOCTL - BLOCK DEVICE LOCAL
- AX = 4409h
- BL = drive number (0=default)
- Return: DX = attribute word, bit 12 set if device is remote
- ---------------------------------------------
- INT 21 - DOS 3.x - IOCTL - HANDLE LOCAL
- AX = 440Ah
- BX = file handle
- Return: DX = attribute word, bit 15 set if file is remote
- Note: if file is remote, Novell Advanced NetWare 2.0 returns the number of
- the file server on which the handle is located in CX
- ---------------------------------------------
- INT 21 - DOS 3.x - IOCTL - SET SHARING RETRY COUNT
- AX = 440Bh
- CX = delay (default 1)
- DX = retry count (default 3)
- Return: CF set on error
- AX = error code
- ---------------------------------------------
- INT 21 - DOS 3.2 - IOCTL - GENERIC
- AX = 440Ch
- BX = device handle
- CH = category code
- 00h unknown (DOS 3.3)
- 01h COMn: (DOS 3.3)
- 03h CON (DOS 3.3)
- 05h LPTn:
- CL = function
- 45h set iteration count
- 4Ah select code page
- 4Ch start code-page preparation
- 4Dh end code-page preparation
- 65h get iteration count
- 6Ah query selected code page
- 6Bh query prepare list
- DS:DX -> parameter block
- for CL=45h WORD iteration count
- for CL=4Ah,4Dh,6Ah WORD length of data
- WORD code page ID
- for CL=4Ch WORD flags
- WORD length of remainder of parameter block
- WORD number of code pages following
- N WORDs code page 1,...,N
- for CL=6Bh WORD length of following data
- WORD number of hardware code pages
- N WORDs hardware code pages 1,...,N
- WORD number of prepared code pages
- N WORDs prepared code pages 1,...,N
- Return: CF set on error
- AX = error code
- ---------------------------------------------
- INT 21 - DOS 3.2 - IOCTL - BLOCK DEVICE REQUEST
- AX = 440Dh
- BL = drive number (0=default)
- CH = category code
- 08h disk drive
- CL = function
- 40h set device parameters
- 41h write logical device track
- 42h format and verify logical device track
- 60h get device parameters
- 61h read logical device track
- 62h verify logical device track
- DS:DX -> parameter block
- for functions 40h, 60h
- BYTE special functions
- bit 0 set if function to use current BPB, clear if Device BIOS
- Parameter Block field contains new default BPB
- bit 1 set if function to use track layout fields only
- must be clear if CL=60h
- bit 2 set if all sectors in track same size (should be set)
- bits 3-7 reserved
- BYTE device type
- 00h 320K/360K disk
- 01h 1.2M disk
- 02h 720K disk
- 03h single-density 8-inch disk
- 04h double-density 8-inch disk
- 05h fixed disk
- 06h tape drive
- 07h other type of block device
- WORD device attributes
- bit 0 set if nonremovable medium
- bit 1 set if door lock supported
- bits 2-15 reserved
- WORD number of cylinders
- BYTE media type
- 00h 1.2M disk (default)
- 01h 320K/360K disk
- 31 BYTEs device BPB (see function 53h)
- WORD number of sectors per track (start of track layout field)
- N word pairs: number,size of each sector in track
- for functions 41h, 61h
- BYTE reserved, must be zero
- WORD number of disk head
- WORD number of disk cylinder
- WORD number of first sector to read/write
- WORD number of sectors
- DWORD transfer address
- for functions 42h, 62h
- BYTE reserved, must be zero
- WORD number of disk head
- WORD number of disk cylinder
- Return: CF set on error
- AX = error code
- ---------------------------------------------
- INT 21 - DOS 3.2 - IOCTL - GET LOGICAL DRIVE MAP
- AX = 440Eh
- BL = drive number (0=default)
- Return: CF set on error
- AX = error code
- CF clear if successful
- AL = 0 block device has only one logical drive assigned
- 1..26 the last letter used to reference the drive (1=A:,etc)
- ---------------------------------------------
- INT 21 - DOS 3.2 - IOCTL - SET LOGICAL DRIVE MAP
- AX = 440Fh
- BL = physical drive number (0=default)
- Return: CF set on error
- AX = error code
- Note: maps logical drives to physical drives, similar to DOS's treatment of
- a single physical floppy drive as both A: and B:
- ---------------------------------------------
- INT 21 - DOS 2+ - CREATE DUPLICATE HANDLE (DUP)
- AH = 45h
- BX = file handle to duplicate
- Return: CF set on error
- AX = error code (04h,06h)
- CF clear if successful
- AX = new file handle
- ---------------------------------------------
- INT 21 - DOS 2+ - FORCE DUPLICATE HANDLE (FORCDUP,DUP2)
- AH = 46h
- BX = existing file handle
- CX = new file handle
- Return: CF set on error
- AX = error code (04h,06h)
- Note: closes file with handle BX if it is still open
- ---------------------------------------------
- INT 21 - DOS 2+ - GET CURRENT DIRECTORY
- AH = 47h
- DL = drive (0=default, 1=A, etc.)
- DS:SI points to 64-byte buffer area
- Return: CF set on error
- AX = error code (0Fh)
- Note: the returned path does not include the initial backslash
- ---------------------------------------------
- INT 21 - DOS 2+ - ALLOCATE MEMORY
- AH = 48h
- BX = number of 16-byte paragraphs desired
- Return: CF set on error
- AX = error code (07h,08h)
- BX = maximum available
- CF clear if successful
- AX = segment of allocated memory block
- ---------------------------------------------
- INT 21 - DOS 2+ - FREE MEMORY
- AH = 49h
- ES = segment address of area to be freed
- Return: CF set on error
- AX = error code (07h,09h)
- ---------------------------------------------
- INT 21 - DOS 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
- AH = 4Ah
- ES = segment address of block to change
- BX = new size in paragraphs
- Return: CF set on error
- AX = error code (07h,08h,09h)
- BX = maximum size possible for the block
- ---------------------------------------------
- INT 21 - DOS 2+ - LOAD OR EXECUTE (EXEC)
- AH = 4Bh
- AL = subfunction
- 0 = load and execute program
- 1 = load but do not execute (internal)
- 3 = load overlay; do not create PSP
- DS:DX = filename
- ES:BX = parameter block
- AL =
- 0: WORD segment of environment (0 = use current)
- DWORD -> command line
- DWORD -> FCB 1
- DWORD -> FCB 2
- 1: WORD segment of environment (0 = use current)
- DWORD -> command line
- DWORD -> FCB 1
- DWORD -> FCB 2
- DWORD (DOS 3.x) will hold SS:SP on return
- DWORD (DOS 3.x) will hold entry point (CS:IP) on return
- 3: WORD segment load address
- WORD segment relocation factor
- Return: CF set on error
- AX = error code (01h,02h,05h,08h,0Ah,0Bh)
- CF clear if successful
- if function 1 and DOS 3.x or DESQview, process ID set to new
- program's PSP; get with function 62h
- if function 1 and DOS 2.x, new program's initial stack and
- entry point returned in registers
- Note: DOS 2.x destroys all registers, including SS:SP
-
- Structure of .EXE file header:
- 00h WORD 4Dh, 5Ah signature (sometimes 5Ah, 4Dh)
- 02h WORD image size remainder (program size mod 512)
- 04h WORD file size in pages (program size div 512)
- 06h WORD number of relocation items
- 08h WORD header size in paragraphs
- 0Ah WORD minimum extra paragraphs needed
- 0Ch WORD maximum extra paragraphs needed
- 0Eh WORD stack segment
- 10h WORD stack offset
- 12h WORD word checksum of entire file
- 14h DWORD initial CS:IP
- 18h WORD offset of relocation table
- 1Ah WORD overlay number
- ---------------------------------------------
- INT 21 - DOS 2+ - QUIT WITH EXIT CODE (EXIT)
- AH = 4Ch
- AL = exit code
- Return: never returns
- ---------------------------------------------
- INT 21 - DOS 2+ - GET EXIT CODE OF SUBPROGRAM (WAIT)
- AH = 4Dh
- Return: AL = exit code of subprogram (functions 31h or 4Ch)
- AH = circumstance which caused termination
- 0 = Terminate/abort
- 1 = Control-C
- 2 = Hard error
- 3 = Terminate and stay resident
- ---------------------------------------------
- INT 21 - DOS 2+ - FIND FIRST ASCIZ (FIND FIRST)
- AH = 4Eh
- CX = search attributes
- DS:DX -> ASCIZ filename
- Return: CF set on error
- AX = error code (02h,12h)
- [DTA] = data block
- undocumented fields, 21 bytes total
- ---PCDOS 3.10---
- BYTE drive letter
- 11 BYTEs search template
- BYTE search attributes
- ---DOS 2.x (and DOS 3.x except 3.1???)---
- BYTE search attributes
- BYTE drive letter
- 11 BYTEs search template
- ---both 2.x and 3.x---
- WORD entry count within directory
- 4 BYTEs reserved
- WORD cluster number of parent directory
- BYTE attribute of file found
- WORD file time
- WORD file date
- DWORD file size
- 13 BYTEs ASCIZ filename+extension
- ---------------------------------------------
- INT 21 - DOS 2+ - FIND NEXT ASCIZ (FIND NEXT)
- AH = 4Fh
- [DTA] = data block from last AH = 4Eh/4Fh call
- Return: CF set on error
- AX = error code (12h)
- [DTA] = data block, see AH = 4Eh above
- ---------------------------------------------
- INT 21 - DOS 2+ internal - SET PSP SEGMENT
- AH = 50h
- BX = segment address of new PSP
- Note: under DOS 2.xx, this function cannot be invoked inside an INT 28h handler
- without setting the Critical Error flag
- ---------------------------------------------
- INT 21 - DOS 2+ internal - GET PSP SEGMENT
- AH = 51h
- Return: BX = current PSP segment
- Note: under DOS 2.xx, this function cannot be invoked inside an INT 28h handler
- without setting the Critical Error flag
-
- Structure of PSP:
- 00h 2 BYTEs program exit point
- 02h WORD memory size in paragraphs
- 04h BYTE unused
- 05h 5 BYTEs CP/M entry point
- 0Ah DWORD terminate address (old INT 22h)
- 0Eh DWORD break address (old INT 23h)
- 12h DWORD critical error handler (old INT 24h)
- 16h WORD parent PSP segment
- 18h 20 BYTEs DOS 2+ open file table, FFh = unused
- 2Ch WORD DOS 2+ environment segment
- 2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call
- 32h WORD DOS 3.x max open files
- 36h DWORD DOS 3.x open file table address
- 38h 24 BYTEs unused by DOS versions <= 3.3
- 50h 3 BYTEs DOS function dispatcher (FAR routine)
- 53h 9 BYTEs unused
- 5Ch 16 BYTEs FCB #1, filled in from first commandline argument
- 6Ch 20 BYTEs FCB #2, filled in from second commandline argument
- 80h 128 BYTEs command tail / default DTA buffer
- ---------------------------------------------
- INT 21 - DOS 2+ internal - GET LIST OF LISTS
- AH = 52h
- Return: ES:BX points to DOS list of lists
-
- List of Lists:
- Bytes Value
- -2&-1 segment of first memory control block
- 00h-03h pointer to first DOS Device Control Block (see function 32h)
- 04h-07h pointer to list of DOS file tables
- DWORD pointer to next file table
- WORD number of files in this table
- 35h bytes per file
- 00h-01h number of file handles referring to this file
- 02h access mode (see function 3Dh)
- 03h-04h ???
- 05h-06h device info word (see function 44h/AL=00h)
- 07h-0Ah pointer to device driver header if character device
- pointer to DOS Device Control Block if block device (see
- func 32h for format)
- 0Bh-0Ch starting cluster of file
- 0Dh-0Eh file time in packed format
- 0Fh-10h file date in packed format
- 11h-14h file size
- 15h-18h current offset in file
- 19h-1Ah ???
- 1Bh-1Ch last cluster read
- 1Dh-1Eh number of sector containing directory entry
- 1Fh offset of directory entry within sector (byte offset/32)
- 20h-2Ah filename in FCB format (no path, no period, blank-padded)
- 2Bh-30h unused??? I see 0 always
- 31h-32h PSP segment of file's owner
- 33h-34h unused??? I see 0 always
- 08h-0Bh pointer to CLOCK$ device driver, whether installable or resident
- 0Ch-0Fh pointer to actual CON: device driver, whether installable or resident
- -----DOS 2.x
- 10h number of logical drives in system
- 11h-12h maximum bytes/block of any block device
- 13h-16h pointer to first disk buffer
- 10h bytes control info followed by the 512-byte buffer
- DWORD pointer to next disk buffer, FFFFh if last
- 4 BYTEs ???
- WORD logical sector number
- 2 BYTEs ???
- DWORD pointer to DOS Device Control Block (see function 32h)
- 17h Beginning (not a pointer--the real beginning!) of NUL device driver.
- This is the first device on DOS's linked list of device drivers.
- -----DOS 3.x
- 10h-11h maximum bytes/block of any block device
- 12h-15h pointer to first disk buffer
- 10h bytes control info per disk buffer, followed by 512-byte buffer
- DWORD pointer to next disk buffer, FFFFh if last
- BYTE drive (0=A:)
- BYTE flags
- bit 7: ???
- bit 6: ???
- bit 5: contents may be overwritten if set (buffer not dirty)
- bit 4: ???
- bit 3: sector in data area
- bit 2: sector in root directory
- bit 1: sector in FAT
- bit 0: ???
- WORD logical sector number
- BYTE ???
- BYTE ???
- DWORD pointer to DOS Device Control Block (see function 32h)
- WORD unused??? (almost always 0)
- 16h-19h pointer to array of drive info:
- 51h bytes per drive, starting with A: ...
- 00h-42h current path as ASCIZ, starting with 'x:\'
- 43h ??? I see zero always
- 44h ??? I see 40h always
- 45h-48h pointer to DOS Disk Block for this drive
- 49h-4Ah starting cluster of current dir, 0 = root, -1 never accessed
- 4Bh-4Ch ??? I see FFFFh always
- 4Dh-4Eh ??? I see FFFFh always
- 4Fh-50h ??? I see 2 always
- 1Ah-1Dh pointer to FCB table (if CONFIG.SYS contains FCBS=)
- 1Eh-1Fh size of FCB table
- 20h number of block devices
- 21h value of LASTDRIVE command in CONFIG.SYS (default 5)
- 22h Beginning (not a pointer--the real beginning!) of NUL device driver.
- This is the first device on DOS's linked list of device drivers.
- device driver header format:
- DWORD pointer to next driver or -1 if last driver
- WORD device attributes
- bit 15 character device if set, block if clear
- bit 14 IOCTL supported
- bit 13 output until busy (character device)
- non-IBM format (block devices)
- bit 12 reserved
- bit 11 OPEN/CLOSE/RM calls supported
- bit 10-5 reserved
- bit 4 device is special (uses INT 29 for fast console output)
- bit 3 device is CLOCK
- bit 2 device is NUL
- bit 1 device is standard output
- bit 0 device is standard input
- WORD device strategy entry point
- WORD device interrupt entry point
- 8 BYTEs blank-padded character device name
- WORD (CD-ROM driver) 0
- BYTE (CD-ROM driver) drive letter
- BYTE (CD-ROM driver) number of units
- ---------------------------------------------
- INT 21 - DOS 2+ internal - TRANSLATE BPB
- AH = 53h
-
- ---------------------------------------------
- INT 21 - DOS 2+ - GET VERIFY FLAG
- AH = 54h
- Return: AL = 0 if flag OFF
- AL = 1 if flag ON
- ---------------------------------------------
- INT 21 - DOS 2+ internal - CREATE PSP
- AH = 55h
- DX = segment number at which to set up PSP
- Note: Like func 26h but creates "child" PSP rather than copying existing one.
- ---------------------------------------------
- INT 21 - DOS 2+ - RENAME A FILE
- AH = 56h
- DS:DX -> ASCIZ old name
- ES:DI -> ASCIZ new name
- Return: CF set on error
- AX = error code (02h,03h,05h,11h
- Note: allows move between directories on same logical volume
- (DOS 3.x) allows renaming of directories
- ---------------------------------------------
- INT 21 - DOS 2+ - GET FILE'S DATE/TIME
- AX = 5700h
- BX = file handle
- Return: CF set on error
- AX = error code (01h,06h)
- CF clear if successful
- CX = time of last write
- DX = date of last write
- ---------------------------------------------
- INT 21 - DOS 2+ - SET FILE'S DATE/TIME
- AX = 5701h
- BX = file handle
- CX = time to be set
- DX = date to be set
- Return: CF set on error
- AX = error code (01h,06h)
- ---------------------------------------------
- INT 21 - DOS 3.x - GET/SET MEMORY ALLOCATION STRATEGY
- AH = 58h
- AL = function code
- 0 = get allocation strategy
- 1 = set allocation strategy
- BL = strategy code
- 0 first fit (use first memory block large enough)
- 1 best fit (use smallest memory block large enough)
- 2 last fit (use high part of last usable memory block)
- Return: CF set on error
- AX = error code (01h)
- CF clear if successful
- AX = strategy code
- Note: the Set subfunction accepts any value in BL; 2 or greater means last fit.
- the Get subfunction returns the last value set, so programs should check
- whether the value is >= 2, not just equal to 2.
- ---------------------------------------------
- INT 21 - DOS 3.x - GET EXTENDED ERROR CODE
- AH = 59h
- BX = version code (0000 for DOS 3.x)
- Return: AX = extended error code
- BH = class of error
- BL = suggested action code
- CH = locus (where error occurred)
- CL, DX, SI, DI, BP, DS, and ES destroyed
-
- Error codes:
- 01h function number invalid
- 02h file not found
- 03h path not found
- 04h too many open files (no handles available)
- 05h access denied
- 06h invalid handle
- 07h memory control block destroyed
- 08h insufficient memory
- 09h memory block address invalid
- 0Ah environment invalid
- 0Bh format invalid
- 0Ch access code invalid
- 0Dh data invalid
- 0Fh invalid drive
- 10h attempted to remove current directory
- 11h not same device
- 12h no more files
- 13h disk write-protected
- 14h unknown unit
- 15h drive not ready
- 16h unknown command
- 17h data error (CRC)
- 18h bad request structure length
- 19h seek error
- 1Ah unknwon media type (non-DOS disk)
- 1Bh sector not found
- 1Ch printer out of paper
- 1Dh write fault
- 1Eh read fault
- 1Fh general failure
- 20h sharing violation
- 21h lock violation
- 22h disk change invalid
- ES:DI -> ASCIZ volume label of required disk
- 23h FCB unavailable
- 24h sharing buffer overflow
- 25h-31h reserved
- 32h Network request not supported (DOS 3.1 + MS Networks)
- 33h Remote computer not listening
- 34h Duplicate name on network
- 35h Network name not found
- 36h Network busy
- 37h Network device no longer exists
- 38h Network BIOS command limit exceeded
- 39h Network adapter hardware error
- 3Ah Incorrect response from network
- 3Bh Unexpected network error
- 3Ch Incompatible remote adapter
- 3Dh Print queue full
- 3Eh Queue not full
- 3Fh Not enough space to print file
- 40h Network name was deleted
- 41h Network: Access denied
- 42h Network device type incorrect
- 43h Network name not found
- 44h Network name limit exceeded
- 45h Network BIOS session limit exceeded
- 46h Temporarily paused
- 47h Network request not accepted
- 48h Print/disk redirection paused (DOS 3.1 + MS Networks)
- 49h-4Fh reserved
- 50h file exists
- 51h reserved
- 52h cannot make directory
- 53h fail on INT 24h
- 54h (DOS 3.3) too many redirections
- 55h (DOS 3.3) duplicate redirection
- 56h (DOS 3.3) invalid password
- 57h (DOS 3.3) invalid parameter
- 58h (DOS 3.3) network write fault
- Error Classes:
- 01h out of resource (storage space or I/O channels)
- 02h temporary situation (file or record lock)
- 03h authorization (denied access)
- 04h internal (system software bug)
- 05h hardware failure
- 06h system failure (configuration file missing or incorrect)
- 07h application program error
- 08h not found
- 09h bad format
- 0Ah locked
- 0Bh media error
- 0Ch already exists
- 0Dh unknown
- Suggested Action:
- 01h retry
- 02h delayed retry
- 03h prompt user to reenter input
- 04h abort after cleanup
- 05h immediate abort
- 06h ignore
- 07h retry after user intervention
- Error Locus:
- 01h unknown or not appropriate
- 02h block device (disk error)
- 03h network related
- 04h serial device (timeout)
- 05h memory related
- ---------------------------------------------
- INT 21 - DOS 3.x - CREATE UNIQUE FILE
- AH = 5Ah
- DS:DX -> ASCIZ directory path name ending with a '\' + 13 bytes to
- receive generated filename
- CX = file attribute
- Return: CF set on error
- AX = error code (03h,05h)
- CF clear if successful
- AX = file handle
- DS:DX -> path name
- Note: The file created is not truly "temporary". It MUST be removed by the
- user.
- ---------------------------------------------
- INT 21 - DOS 3.x - CREATE NEW FILE
- AH = 5Bh
- DS:DX -> ASCIZ directory path name
- CX = file attribute
- Return: CF set on error
- AX = error code (03h,04h,05h,50h)
- CF clear if successful
- DS:DX -> path name
- Note: Unlike function 3Ch, function 5Bh will fail if the file already exists.
- ---------------------------------------------
- INT 21 - DOS 3.x - LOCK/UNLOCK FILE ACCESS
- AH = 5Ch
- AL = 00h lock
- 01h unlock
- BX = file handle
- CX:DX = starting offset of region to lock
- SI:DI = size of region to lock
- Return: CF set on error
- AX = error code (01h,06h,21h)
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - INDIRECT FUNCTION CALL
- AX = 5D00h
- DS:DX -> buffer containing register values
- AX, BX, CX, DX, SI, DI, DS, ES
- for a call to INT 21h
- Return: as appropriate for function being called
- Notes: does not check AH. Out of range values will crash the system
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - SYNC???
- AX = 5D01h
- ???
- Return: ???
- Note: does something to each disk file in the System File Table which has been
- written to; if remote file, calls INT 2F/AX=1107h
- seems to update the time stamp of all open files which have been written
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - network - ???
- AX = 5D02h
- ???
- Return: ???
- Note: error unless network is loaded
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - network - ???
- AX = 5D03h
- ???
- Return: ???
- Note: error unless network is loaded
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - network - ???
- AX = 5D04h
- ???
- Return: ???
- Note: error unless network is loaded
- ---------------------------------------------
- INT 21 - DOS 3.1 internal - network - ???
- AX = 5D05h
- ???
- Return: ES:DI = ???
- BX = ???
- CX = ???
- Note: error unless network is loaded
- ---------------------------------------------
- INT 21 - DOS 3.x internal - GET ADDRESS OF CRITICAL ERROR FLAG
- AX = 5D06h
- Return: DS:SI -> critical error flag
- BX = ???
- CX = ???
- Notes: this call does a lot of other work in addition to returning the pointer
- setting CritErr flag allows use of functions 50h/51h from INT 28h under
- DOS 2.x by forcing use of correct stack
- ---------------------------------------------
- INT 21 - DOS 3.x internal - ???
- AH = 5Dh
- AL = subfunction
- 07h: ???
- 08h: ??? (used by COMMAND.COM)
- 09h: ??? (used by COMMAND.COM)
- Return: ???
- Note: in DOS 3.10, these are identical, and call INT 2F/AX=1125h
- ---------------------------------------------
- INT 21 - DOS 3.1+ internal - SET EXTENDED ERROR INFORMATION
- AX = 5D0Ah
- DS:DX = address of 11-word error information
- words 0 to 7: values of AX,BX,CX,DX,SI,DI,DS,ES that func 59h
- will return
- words 8 to 10: zero (reserved)
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - GET MACHINE NAME
- AX = 5E00h
- DS:DX -> buffer for ASCIZ name (16 bytes)
- Return: CF set on error
- AX = error code (01h)
- CH = 0 if name not defined
- <> 0 defined
- CL = NETBIOS name number
- DS:DX -> ASCIZ machine name
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - SET MACHINE NAME
- AX = 5E01h
- DS:DX -> ASCIZ name
- CL = name number
- CH = ???
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - SET PRINTER SETUP
- AX = 5E02h
- BX = Redirection list index
- CX = length of setup string (<= 64)
- DS:SI -> string buffer
- Return: CF set on error
- AX = error code (01h)
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - GET PRINTER SETUP
- AX = 5E03h
- BX = Redirection list index
- ES:DI -> string buffer
- Return: CF set on error
- AX = error code (01h)
- CX = length of setup string (<= 64)
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - GET REDIRECTION LIST ENTRY
- AX = 5F02h
- BX = Redirection list index
- DS:SI -> 16 char local device name buffer
- ES:DI -> 128 char network name buffer
- Return: CF set on error
- AX = error code (01h,12h)
- BH = Device status flag (BIT 0 = 0 if valid)
- BL = device type (03 if printer, 04 if drive)
- CX = stored parameter value (user data)
- Note: DX and BP are destroyed by this call!
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - REDIRECT DEVICE
- AX = 5F03h
- BL = device type
- 03 = printer device
- 04 = file device
- CX = stored parameter value
- DS:SI -> ASCIZ source device name
- ES:DI -> destination ASCIZ network path + ASCIZ password
- Return: CF set on error
- AX = error code (01h,03h,05h,08h)
- ---------------------------------------------
- INT 21 - DOS 3.1 + Microsoft Networks - CANCEL REDIRECTION
- AX = 5F04h
- DS:SI -> ASCIZ device name or network path
- Return: CF set on error
- AX = error code (01h,0Fh)
- ---------------------------------------------
- INT 21 - DOS 3.x internal - RESOLVE PATH STRING TO FULLY QUALIFIED PATH STRING
- AH = 60h
- DS:SI = relative path string
- ES:DI = buffer for fully qualified name
- Return: buffer filled with qualified name; may return error code, unknown.
- ---------------------------------------------
- INT 21 - DOS 3.x internal - UNUSED
- AH = 61h
- Return: AL = 0
- ---------------------------------------------
- INT 21 - DOS 3.x - GET PSP ADDRESS
- AH = 62h
- Return: BX = segment address of PSP
- ---------------------------------------------
- INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE
- AH = 63h
- AL = subfunction
- 0 = get system lead byte table
- 1 = set/clear interim console flag
- DL = 1/0 to set/clear interim console flag
- 2 = get interim console flag
- Return: CF set on error
- AX = error code
- DS:SI -> lead byte table (AL = 0)
- DL = interim console flag (AL = 2)
- Note: does not preserve any registers other than SS:SP
- ---------------------------------------------
- INT 21 - DOS 3.2 internal - ???
- AH = 64h
- AL = subfunction
- 00h get ???
- Return: DL = ???
- 01h set ???
- DL = ???
- 02h get and set ???
- DL = new ???
- Return: DL = old ???
- ---------------------------------------------
- INT 21 - DOS 3.3 internal - ???
- AH = 64h
- AL = flag
- 0 ???
- non-0 ???
- Return: nothing
- Note: seems to have something to do with the network
- ---------------------------------------------
- INT 21 - DOS 3.3 - GET EXTENDED COUNTRY INFORMATION
- AH = 65h
- AL = info ID
- 01h get general internationalization info
- 02h get pointer to uppercase table
- 04h get pointer to filename uppercase table
- 06h get pointer to collating sequence table
- BX = code page (-1=global code page)
- DX = country ID (-1=current country)
- ES:DI -> country information buffer
- CX = size of buffer (>= 5)
- Return: CF set on error
- AX = error code
- CF clear if succesful
- CX = size of country information returned
- ES:DI -> country information:
- BYTE info ID
- if info ID == 1
- WORD size
- WORD country ID
- WORD code page
- 34 BYTEs see function 38h
- if info ID == 2
- DWORD pointer to uppercase table
- WORD table size
- 128 BYTEs uppercase equivalents (if any) of chars 80h-FFh
- if info ID == 4
- DWORD pointer to collating table
- WORD table size
- 256 BYTEs values used to sort characters 00h-FFh
- if info ID == 6
- DWORD pointer to filename uppercase table
- WORD table size
- 128 BYTEs uppercase equivalents (if any) of chars 80h-FFh
- ---------------------------------------------
- INT 21 - DOS 3.3 - GET GLOBAL CODE PAGE TABLE
- AH = 6601h
- Return: CF set on error
- AX = error code
- CF clear if successful
- BX = active code page
- DX = system code page
- ---------------------------------------------
- INT 21 - DOS 3.3 - SET GLOBAL CODE PAGE TABLE
- AX = 6602h
- BX = active code page
- 437 US
- 850 Multilingual
- 860 Portugal
- 863 Canada (French)
- 865 Norway/Denmark
- DX = system code page (active page at boot time)
- Return: CF set on error
- AX = error code
- ---------------------------------------------
- INT 21 - DOS 3.3 - SET HANDLE COUNT
- AH = 67h
- BX = desired number of handles (max 255)
- Return: CF set if error (and error code in AX)
- ---------------------------------------------
- INT 21 - DOS 3.3 - COMMIT FILE, WRITE ALL BUFFERED DATA TO DISK
- AH = 68h
- BX = file handle
- Return: CF set on error (and error code in AX)
- Note: if BX <= 20, no action is taken
- ---------------------------------------------
- INT 21 - DOS 4.0 internal - GET DISK SERIAL NUMBER
- AH = 69h
- AL = subfunction???
- 0
- DS:DX -> buffer
- WORD ??? (zero)
- DWORD disk serial number (binary)
- 11 BYTEs volume label or "NO NAME " if none present
- 8 BYTEs FAT type--string "FAT12 " or "FAT16 "
- Return: buffer filled with appropriate values
- ---------------------------------------------
- INT 21 - DOS 4.0 internal - ???
- AH = 6Ah
- ???
- Return: ???
- ---------------------------------------------
- INT 21 - DOS 4.0 internal - ???
- AH = 6Bh
- ???
- Return: ???
- ---------------------------------------------
- INT 21 - DOS 4.0 - EXTENDED OPEN/CREATE
- AX = 6C00h
- BL = open mode as in AL for normal open
- BH = 0WF00000
- W = auto commit on write
- F = return error rather than doing INT 24h
- CX = create attribute
- DL = action if file exists/does not exists
- bits 7-4 action if file does not exist
- 0000 fail
- 0001 create
- bits 3-0 action if file exists
- 0000 fail
- 0001 open
- 0010 replace/open
- DH = 0
- DS:SI -> ASCIZ file name
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = file handle
- CX = 1 file opened
- 2 file created
- 3 file replaced
- ---------------------------------------------
- INT 21 - ???
- AH = 89h
- ???
- Note: called by Microsoft C 4.0 startup code
- ---------------------------------------------
-
- INT 22 - DOS - TERMINATE ADDRESS
- FAR (DWORD) address of routine to be executed when program "returns to DOS".
- Should NEVER be called directly.
- ---------------------------------------------
- INT 23 - DOS - CONTROL "C" EXIT ADDRESS
- Automatically called from keyboard scanner when CTRL-C or CTRL-BREAK is
- detected. Normally aborts program and returns to DOS, but may be changed.
- ---------------------------------------------
- INT 24 - DOS - FATAL ERROR HANDLER ADDRESS
- Automatically called upon detection of unrecoverable I/O error.
- Normally points to routine in resident part of COMMAND.COM that prints
- "Abort, Retry, Ignore?" message and takes the reply, but may be overridden
- if desired.
-
- Provides the following values in registers on entry to interrupt handler:
- AH: bit 7 = 0 disk I/O error
- = 1 other error -- if block device, bad FAT
- -- if char device, code in DI
- bit 6 unused
- bit 5 = 1 if Ignore allowed, 0 if not (DOS 3.x)
- bit 4 = 1 if Retry allowed, 0 if not (DOS 3.x)
- bit 3 = 1 if Fail allowed, 0 if not (DOS 3.x)
- bit 2 \ disk area of error 00 = DOS area 01 = FAT
- bit 1 / 10 = root dir 11 = data area
- bit 0 = 1 if write, 0 if read
- AL = drive number if AH bit 7 = 1, otherwise undefined
- BP:SI = address of device header for which error occurred
- block device if high bit of BP:[SI+4] set
- low byte of DI:
- 00h write-protect error
- 01h unknown unit
- 02h drive not ready
- 03h unknown command
- 04h data error (bad CRC)
- 05h bad request structure length
- 06h seek error
- 07h unknown media type
- 08h sector not found
- 09h printer out of paper
- 0Ah write fault
- 0Bh read fault
- 0Ch general failure
- 0Dh (DOS 3.x) sharing violation
- 0Eh (DOS 3.x) lock violation
- 0Fh (DOS 3.x) invalid disk change
- 10h (DOS 3.x) FCB unavailable
- 11h (DOS 3.x) sharing buffer overflow
- Handler must return
- AL = 00 ignore error
- = 01 retry operation
- = 02 terminate program through INT 22h
- = 03 fail system call in progress (DOS 3.x)
- ---------------------------------------------
- INT 25 - DOS - ABSOLUTE DISK READ (except DOS 4.0/COMPAQ DOS 3.31 >32M partitn)
- AL = Drive number (0=A, 1=B, etc)
- DS:BX = Disk Transfer Address (buffer)
- CX = Number of sectors to read
- DX = First relative sector to read
- Return: CF set on error
- AL = error code issued to INT 24h in low half of DI
- AH = 80h if attachment failed to respond
- 40h if seek operation failed
- 20h if controller failed
- 10h if data error (bad CRC)
- 08h if DMA failure
- 04h if requested sector not found
- 03h if write-protected disk
- 02h if bad address mark
- 01h if bad command
- Note: ORIGINAL FLAGS ON STACK! May destroy all registers except segment regs
- ---------------------------------------------
- INT 25 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK READ (>32M hard-disk partitn)
- AL = Drive number (0=A, 1=B, etc)
- CX = FFFFh
- DS:BX = Packet address
- DWORD sector number
- WORD number of sectors to read
- DWORD transfer address
- Return: same as above???
- Note: partition is potentially >32M (and requires this form of the call) if
- bit 1 of device attribute word in device driver is set
- ---------------------------------------------
- INT 26 - DOS - ABSOLUTE DISK WRITE (except DOS 4.0/COMPAQ DOS 3.31 >32M partn)
- AL = Drive number (0=A, 1=B, etc)
- DS:BX = Disk Transfer Address (buffer)
- CX = Number of sectors to write
- DX = First relative sector to write
- Return: CF set on error
- AL = error code issued to INT 24h in low half of DI
- AH = same error codes as for INT 25h
- Note: ORIGINAL FLAGS ON STACK!
- ---------------------------------------------
- INT 26 - DOS 4.0/COMPAQ DOS 3.31 - ABSOLUTE DISK WRITE (>32M hard-disk partitn)
- AL = Drive number (0=A, 1=B, etc)
- CX = FFFFh
- DS:BX = Packet address
- DWORD sector number
- WORD number of sectors to write
- DWORD transfer address
- Return: same as above???
- Note: partition is potentially >32M (and requires this form of the call) if
- bit 1 of device attribute word in device driver is set
- ---------------------------------------------
- INT 27 - DOS - TERMINATE BUT STAY RESIDENT
- CS = current program segment
- DX = last program byte + 1
- Return: never
- ---------------------------------------------
- INT 28 - DOS 2+ internal - KEYBOARD BUSY LOOP
- This interrupt is called from inside the "get input from keyboard" routine
- in DOS, if and only if it is safe to use INT 21 to access the disk at that
- time. It is used primarily by the PRINT.COM routines and TSR programs, but
- any number of other routines could be chained to it by saving the original
- vector, and calling it with a FAR call (or just JMPing to it) at the end of
- the new routine.
-
- The INT 28h handler may invoke any INT 21h function except functions 00h
- through 0Ch (and 50h/51h under DOS 2.xx unless DOS CritErr flag is set).
-
- Until some program installs its own routine, this interrupt vector simply
- points to an IRET opcode.
- ---------------------------------------------
- INT 29 - DOS 2+ internal - FAST PUTCHAR
- This interrupt is called from the DOS output routines if output is going to
- a device rather than a file, and the device driver's attribute word has
- bit 3 (04h) set to "1".
- ---------------------------------------------
- INT 2E - DOS 2+ internal - EXECUTE COMMAND
- DS:SI -> counted CR-terminated command string
-
- The top-level command.com executes the command; all registers are destroyed
- as in EXEC (INT 21/AH=4Bh).
- ---------------------------------------------
- INT 2F - notes
- AH identifies which program is to handle the interrupt
- 00h-7Fh reserved for DOS
- C0h-FFh reserved for applications
- AL is the function code
- This is a general mechanism for verifying the presence of a TSR and
- communicating with it.
- ---------------------------------------------
- INT 2F - BMB Compuscience Canada Utilities Interface
- AH = xx (dynamically assigned based upon a search for a multiplex
- number which doesn't answer installed)
- AL = 00h install check
- ES:DI = EBEB:BEBE
- Return: AL = 00h - not installed
- 01h - not installed, no ok to install
- FFh - installed and is ES:DI=EBEB:BEBE then ES:DI will point
- to a string 'BMB xxxx' where xxxx is a product name and
- version
- ---------------------------------------------
- INT 32 - reserved
- ---------------------------------------------
- INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
- AX = 0000h
- Return: AX = status
- 0 hardware/driver not installed
- -1 hardware/driver installed
- BX = number of buttons
- -1 two buttons
- 0 other than two
- 3 Mouse Systems mouse
- ---------------------------------------------
- INT 33 - MS MOUSE - SHOW MOUSE CURSOR
- AX = 0001h
- ---------------------------------------------
- INT 33 - MS MOUSE - HIDE MOUSE CURSOR
- AX = 0002h
- Note: multiple calls to hide the cursor will require multiple calls to
- function 01h to unhide it.
- ---------------------------------------------
- INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
- AX = 0003h
- Return: BX = button status
- bit 0 left button pressed if 1
- bit 1 right button pressed if 1
- bit 2 middle button pressed if 1 (Mouse Systems mouse)
- CX = column
- DX = row
- ---------------------------------------------
- INT 33 - MS MOUSE - POSITION MOUSE CURSOR
- AX = 0004h
- CX = column
- DX = row
- ---------------------------------------------
- INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
- AX = 0005h
- BX = button
- 0 left
- 1 right
- 2 middle (Mouse Systems mouse)
- Return: AX = button states
- bit 0 left button pressed if 1
- bit 1 right button pressed if 1
- bit 2 middle button pressed if 1 (Mouse Systems mouse)
- BX = number of times specified button has been pressed since last call
- CX = column at time specified button was last pressed
- DX = row at time specified button was last pressed
- ---------------------------------------------
- INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
- AX = 0006h
- BX = button
- 0 left
- 1 right
- 2 middle (Mouse Systems mouse)
- Return: AX = button states
- bit 0 left button pressed if 1
- bit 1 right button pressed if 1
- bit 2 middle button pressed if 1 (Mouse Systems mouse)
- BX = number of times specified button has been released since last call
- CX = column at time specified button was last released
- DX = row at time specified button was last released
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
- AX = 0007h
- CX = minimum column
- DX = maximum column
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
- AX = 0008h
- CX = minimum row
- DX = maximum row
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
- AX = 0009h
- BX = column of cursor hot spot in bitmap (-16 to 16)
- CX = row of cursor hot spot (-16 to 16)
- ES:DX -> bitmap
- 16 words screen mask
- 16 words cursor mask
- each word defines the sixteen pixels of a row, low bit
- rightmost
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE TEXT CURSOR
- AX = 000Ah
- BX = hardware/software text cursor
- 0 software
- CX = screen mask
- DX = cursor mask
- 1 hardware
- CX = start scan line
- DX = end scan line
- Note: when the software cursor is selected, the char/attribute data at the
- current screen position is ANDed with the screen mask and then XORed
- with the cursor mask
- ---------------------------------------------
- INT 33 - MS MOUSE - READ MOTION COUNTERS
- AX = 000Bh
- Return: CX = number of mickeys mouse moved horizontally since last call
- DX = number of mickeys mouse moved vertically
- Notes: a mickey is the smallest increment the mouse can sense
- positive values indicate up/right
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
- AX = 000Ch
- CX = call mask
- bit 0 call if mouse moves
- bit 1 call if left button pressed
- bit 2 call if left button released
- bit 3 call if right button pressed
- bit 4 call if right button released
- bit 5 call if middle button pressed (Mouse Systems mouse)
- bit 6 call if middle button released (Mouse Systems mouse)
- ES:DX = address of FAR routine
- Note: when the subroutine is called, it is passed the following values:
- AX = condition mask (same bit assignments as call mask)
- BX = button state
- CX = cursor column
- DX = cursor row
- DI = horizontal mickey count
- SI = vertical mickey count
- ---------------------------------------------
- INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
- AX = 000Dh
- ---------------------------------------------
- INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
- AX = 000Eh
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
- AX = 000Fh
- CX = number of mickeys per 8 pixels horizontally
- DX = number of mickeys per 8 pixels vertically
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
- AX = 0010h
- CX,DX = X,Y coordinates of upper left corner
- SI,DI = X,Y coordinates of lower right corner
- Note: mouse cursor is hidden during updating, and needs to be explicitly turned
- on again
- ---------------------------------------------
- INT 33 - PCMOUSE - SET LARGE GRAPHICS CURSOR BLOCK
- AX = 0012h
- BH = cursor width in words
- CH = rows in cursor
- BL = horizontal hot spot (-16 to 16)
- CL = vertical hot spot (-16 to 16)
- ES:DX -> bit map of screen and cursor maps
- Return: AX = -1 if successful
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
- AX = 0013h
- DX = threshold speed in mickeys/second, 0 = default of 64/second
- Note: if speed exceeds threshold, the cursor's on-screen motion is doubled
- ---------------------------------------------
- INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
- AX = 0014h
- ???
- ---------------------------------------------
- INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
- AX = 0015h
- Return: BX = size of buffer needed to store driver state
- ---------------------------------------------
- INT 33 - MS MOUSE - SAVE DRIVER STATE
- AX = 0016h
- ES:DX -> buffer for driver state
- ---------------------------------------------
- INT 33 - MS MOUSE - RESTORE DRIVER STATE
- AX = 0017h
- ES:DX -> buffer containing saved state
- ---------------------------------------------
- INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
- AX = 001Dh
- ???
- ---------------------------------------------
- INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
- AX = 001Eh
- Return: ???
- ---------------------------------------------
- INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
- AX = 0042h
- Return: AX = FFFFh successful
- BX = buffer size in bytes for functions 50h and 52h
- = 0 MSMOUSE not installed
- = 42h functions 42h, 50h, and 52h not supported
- ---------------------------------------------
- INT 33 - PCMOUSE - SAVE MSMOUSE STATE
- AX = 0050h
- BX = buffer size
- ES:DX -> buffer
- Return: AX = FFFFh if successful
- ---------------------------------------------
- INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
- AX = 0052h
- BX = buffer size
- ES:DX -> buffer
- Return: AX = FFFFh if successful
- ---------------------------------------------
- INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h)
- ---------------------------------------------
- INT 41 - FIXED DISK PARAMETERS (XT,AT,XT2,XT286,PS except ESDI disks)
- WORD cylinders
- BYTE heads
- WORD starting reduced write current cylinder (XT only, 0 for others)
- WORD starting write pre-comp cylinder
- BYTE maximum ECC burst length
- BYTE control byte
- bits 0-2: drive option (XT only, 0 for others)
- bit 3: set if more than 8 heads
- bit 4: always 0
- bit 5: set if manufacturer's defect map on max cylinder+1
- bit 6: disable ECC retries
- bit 7: disable access retries
- BYTE standard timeout (XT only, 0 for others)
- BYTE formatting timeout (XT only, 0 for others)
- BYTE timeout for checking drive (XT only, 0 for others)
- WORD landing zone (AT/PS2)
- BYTE sectors/track (AT/PS2)
- BYTE 0
- ---------------------------------------------
- INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h)
- ---------------------------------------------
- INT 42 - Z100 - ???
- ---------------------------------------------
- INT 43 - EGA/VGA/PS - User font table
- ---------------------------------------------
- INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
- ---------------------------------------------
- INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
- ---------------------------------------------
- INT 44 - Z100 - ???
- ---------------------------------------------
- INT 45 - Z100 - ???
- ---------------------------------------------
- INT 46 - Secondary Fixed Disk Params (see INT 41h) (AT,XT286,PS except ESDI)
- ---------------------------------------------
- INT 46 - Z100 - ???
- ---------------------------------------------
- INT 47 - reserved
- ---------------------------------------------
- INT 48 - PCjr - Cordless Keyboard Translation
- ---------------------------------------------
- INT 49 - PCjr - Non-keyboard Scan Code Translation Table
- ---------------------------------------------
- INT 4A - AT/CONV/PS - User Alarm
- Invoked by BIOS when real-time clock alarm occurs
- ---------------------------------------------
- INT 4B - reserved
- ---------------------------------------------
- INT 4C - reserved
- ---------------------------------------------
- INT 4D - reserved
- ---------------------------------------------
- INT 4E - reserved
- ---------------------------------------------
- INT 4F - reserved
- ---------------------------------------------
- INT 50 to 57 - IRQ0-IRQ7 relocated by DESQview
- ---------------------------------------------
- INT 50 to 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program
- ---------------------------------------------
- INT 58 - reserved
- ---------------------------------------------
- INT 59 - GSS Computer Graphics Interface (GSS*CGI)
- DS:DX -> block of 5 array pointers
- Return: CF set on error
- AX = error code
- CF clear if successful
- AX = return code
- Note: INT 59 is the means by which GSS*CGI language bindings communicate with
- GSS*CGI device drivers and the GSS*CGI device driver controller. also
- used by the IBM Graphic Development Toolkit
- ---------------------------------------------
- INT 5A - Cluster adapter BIOS entry address
- ???
- ---------------------------------------------
- INT 61 - reserved for user interrupt
- ---------------------------------------------
- INT 62 - reserved for user interrupt
- ---------------------------------------------
- INT 63 - reserved for user interrupt
- ---------------------------------------------
- INT 64 - reserved for user interrupt
- ---------------------------------------------
- INT 65 - reserved for user interrupt
- ---------------------------------------------
- INT 66 - reserved for user interrupt
- ---------------------------------------------
- INT 67 - LIM EMS - GET MANAGER STATUS
- AH = 40h
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested by application
- Note: this call can be used only after establishing that the EMS driver
- is in fact present
- ---------------------------------------------
- INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
- AH = 41h
- Return: AH = 00h function successful
- BX = segment of page frame
- AH = error code (see AH=40h above)
- ---------------------------------------------
- INT 67 - LIM EMS - GET NUMBER OF PAGES
- AH = 42h
- Return: AH = 00h function successful
- BX = number of unallocated pages
- DX = total number of pages
- AH = error code (see AH=40h above)
- ---------------------------------------------
- INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
- AH = 43h
- BX = number of logical pages to allocate
- Return: AH = status
- 00h function successful
- DX = handle
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 85h no more handles available
- 87h more pages requested than physically exist
- 88h more pages requested than currently available
- 89h zero pages requested
- ---------------------------------------------
- INT 67 - LIM EMS - MAP MEMORY
- AH = 44h
- AL = physical page number (0-3)
- BX = logical page number
- DX = handle
- Return: AH = status
- 00h function successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Ah invalid logical page number
- 8Bh illegal physical-page number
- ---------------------------------------------
- INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
- AH = 45h
- DX = EMM handle
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 86h error in save or restore of mapping context
- ---------------------------------------------
- INT 67 - LIM EMS - GET EMM VERSION
- AH = 46h
- Return: AH = status
- 00h successful
- AL = EMM version number
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- ---------------------------------------------
- INT 67 - LIM EMS - SAVE MAPPING CONTEXT
- AH = 47h
- DX = handle
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Ch page-mapping hardware state save area is full
- 8Dh save of mapping context failed
- ---------------------------------------------
- INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
- AH = 48h
- DX = handle
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Eh restore of mapping context failed
- ---------------------------------------------
- INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
- AH = 49h
- Note: defined in EMS 3.0, but undocumented in EMS 3.2
- ---------------------------------------------
- INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
- AH = 4Ah
- Note: defined in EMS 3.0, but undocumented in EMS 3.2
- ---------------------------------------------
- INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
- AH = 4Bh
- Return: AH = status
- 00h successful
- BX = number of EMM handles
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- ---------------------------------------------
- INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
- AH = 4Ch
- DX = EMM handle
- Return: AH = status
- 00h successful
- BX = number of logical pages
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- ---------------------------------------------
- INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
- AH = 4Dh
- ES:DI -> array to receive information
- Return: AH = status
- 00h successful
- BX = number of active EMM handles
- array filled with 2-word entries, consisting of a handle
- and the number of pages allocated to that handle
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- ---------------------------------------------
- INT 67 - LIM EMS - GET OR SET PAGE MAP
- AH = 4Eh
- AL = 00h if getting mapping registers
- 01h if setting mapping registers
- 02h if getting and setting mapping registers at once
- 03h if getting size of page-mapping array
- DS:SI -> array holding information (AL=01/02)
- ES:DI -> array to receive information (AL=00/02)
- Return: AH = status
- 00h successful
- AL = bytes in page-mapping array (subfunction 03h only)
- array pointed to by ES:DI receives mapping info (AL=00/02)
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Fh undefined subfunction parameter
- A3h contents of source array corrupted (EMS 4.0?)
- Note: this function was designed to be used by multitasking operating systems
- and should not ordinarily be used by appplication software.
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
- AH = 4Fh
- AL = subfunction
- 00h get partial page map
- DS:SI -> structure containing list of segments whose mapping
- contexts are to be saved
- ES:DI -> array to receive page map
- 01h set partial page map
- DS:SI -> structure containing saved partial page map
- 02h get size of partial page map
- BX = number of mappable segments in the partial map to be saved
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Bh one of specified segments is not mappable
- 8Fh undefined subfunction parameter
- A3h contents of partial page map corrupted or count of mappable
- segments exceeds total number of mappable segments in system
- AL = size of partial page map for subfunction 02h
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
- AH = 50h
- AL = subfunction
- 00h
- 01h
- DX = handle
- CX = number of entries in array
- DS:SI -> mapping array
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Ah one or more logical pages are invalid
- 8Bh one or more physical pages are invalid
- 8Fh invalid subfunction
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
- AH = 51h
- DX = handle
- BX = number of pages to be allocated to handle
- Return: BX = actual number of pages allocated to handle
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 87h more pages requested than present in system
- 88h more pages requested than currently available
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
- AH = 52h
- AL = subfunction
- 00h get handle attributes
- 01h set handle attributes
- BL = new attribute (see returned AL)
- 02h get attribute capability
- DX = handle
- Return: AL = attribute (for subfunction 00h)
- 00h handle is volatile
- 01h handle is nonvolatile
- AL = attribute capability (for subfunction 02h)
- 00h only volatile handles supported
- 01h both volatile and non-volatile supported
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Fh undefined subfunction
- 90h undefined attribute type
- 91h feature not supported
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
- AH = 53h
- AL = subfunction
- 00h get handle name
- ES:DI -> 8-byte handle name array
- 01h set handle name
- DS:SI -> 8-byte handle name
- DX = handle
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 83h invalid handle
- 84h undefined function requested
- 8Fh undefined subfunction
- A1h duplicate handle name
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
- AH = 54h
- AL = subfunction
- 00h get handle directory
- ES:DI -> buffer for handle directory
- 01h search for named handle
- DS:SI -> 8-byte name
- 02h get total number of handles
- Return: AL = number of entries in handle directory (subfunction 00h)
- DX = value of named handle (subfunction 01h)
- BX = total number of handles (subfunction 02h)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Fh undefined subfunction
- A0h no such handle name
- A1h a handle found had no name
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
- AH = 55h
- AL = subfunction
- 00h physical page numbers provided by caller
- 01h segment addresses provided by caller
- DX = handle
- DS:SI -> structure containing map and jump address
- Return: (at target address unless error)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 83h invalid handle
- 84h undefined function requested
- 8Ah invalid logical page number encountered
- 8Bh invalid physical page number encountered
- 8Fh invalid subfunction
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
- AH = 56h
- AL = subfunction
- 00h physical page numbers provided by caller
- DX = handle
- DS:SI -> structure containing page map and call address
- 01h segment addresses provided by caller
- DX = handle
- DS:SI -> structure containing page map and call address
- 02h get page map stack space required
- Return: (if successful, the target address is called. Use a RETF to return and
- restore mapping context)
- BX = stack space required (subfunction 02h)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 83h invalid handle
- 84h undefined function requested
- 8Ah invalid logical page number encountered
- 8Bh invalid physical page number encountered
- 8Fh undefined subfunction
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
- AH = 57h
- AL = subfunction
- 00h move memory region
- 01h exchange memory region
- DS:SI -> structure describing source and destination
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 83h invalid handle
- 84h undefined function requested
- 8Ah invalid logical page number encountered
- 8Fh undefined subfunction
- 92h successful, but a portion of the source region has been
- overwritten
- 93h length of source or destination region exceeds length of region
- allocated to either source or destination handle
- 94h conventional and expanded memory regions overlap
- 95h offset within logical page exceeds size of logical page
- 96h region length exceeds 1M
- 97h source and destination EMS regions have same handle and overlap
- 98h memory source or destination type undefined
- A2h attempted to wrap around 1M conventional address space
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
- AH = 58h
- AL = subfunction
- 00h get mappable physical address array
- ES:DI -> buffer to be filled with array
- 01h get number of entries in m.p.a. array
- Return: CX = number of entries in array
- AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 84h undefined function requested
- 8Fh undefined subfunction
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
- AH = 59h
- AL = subfunction
- 00h get hardware configuration array
- ES:DI -> buffer to be filled with array
- 01h get unallocated raw page count
- Return: BX = unallocated raw pages (subfunction 01h)
- DX = total raw pages (subfunction 01h)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 84h undefined function requested
- 8Fh undefined subfunction
- A4h access denied by operating system
- Note: subfunction 00h is for use by operating systems only, and can be
- enabled or disabled at any time by the operating system
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
- AH = 5Ah
- AL = subfunction
- 00h allocate standard pages
- 01h allocate raw pages
- BX = number of pages to allocate
- Return: DX = handle
- AH = status
- 00h successful
- 80h internal error
- 81h hardware failure
- 84h undefined function requested
- 85h no more handles available
- 87h insufficient memory pages in system
- 88h insufficient memory pages available
- 8Fh undefined subfunction
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
- AH = 5Bh
- AL = subfunction
- 00h get alternate map register set
- 01h set alternate map register set
- BL = new alternate map register set number
- ES:DI -> map register context save area if BL=0
- 02h get alternate map save array size
- 03h allocate alternate map register set
- 04h deallocate alternate map register set
- BL = number of alternate map register set
- Return: BL = current active alternate map register set number if nonzero (AL=0)
- ES:DI -> map register context save area if BL=0 (AL=0)
- DX = array size in bytes (subfunction 02h)
- BL = number of alternate map register set; zero if not supported (AL=3)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Fh undefined subfunction
- 9Ah specified alternate map register set not supported
- 9Bh all alternate map register sets currently allocated
- 9Ch alternate map register sets not supported
- 9Dh undefined or unallocated alternate map register set
- A3h source array corrupted
- A4h operating system denied access
- Note: this function is for use by operating systems only, and can be
- enabled or disabled at any time by the operating system
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
- AH = 5Bh
- AL = subfunction
- 05h allocate DMA register set
- 06h enable DMA on alternate map register set
- BL = DMA register set number
- DL = DMA channel number
- 07h disable DMA on alternate map register set
- BL = DMA register set number
- 08h deallocate DMA register set
- BL = DMA register set number
- Return: BL = DMA register set number; zero if not supported (subfunction 05h)
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Fh undefined subfunction
- 9Ah specified DMA register set not supported
- 9Bh all DMA register sets currently allocated
- 9Ch alternate DMA sets not supported
- 9Dh undefined or unallocated DMA register set
- 9Eh dedicated DMA channels not supported
- 9Fh specified dedicated DMA channel not supported
- A3h source array corrupted
- A4h operating system denied access
- Note: this function is for use by operating systems only, and can be
- enabled or disabled at any time by the operating system
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
- AH = 5Ch
- Return: AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- ---------------------------------------------
- INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
- AH = 5Dh
- AL = subfunction
- 00h enable OS Function Set
- 01h disable OS Function Set
- 02h return access key (resets memory manager, returns access key at
- next invocation)
- BX,CX = access key returned by first invocation
- Return: BX,CX = access key, returned only on first invocation of function
- AH = status
- 00h successful
- 80h internal error
- 81h hardware malfunction
- 84h undefined function requested
- 8Fh undefined subfunction
- A4h operating system denied access
- ---------------------------------------------
- INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
- AH = 60h
- ES:DI -> buffer
- Return: AH = status
- AL = number of entries
- buffer at ES:DI filled
- ---------------------------------------------
- INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
- AH = 61h
- ???
- Return: ???
- Note: can be used by accelerator card manufacturer to flush RAM cache, ensuring
- that the cache accurately reflects what the processor would see without
- the cache.
- ---------------------------------------------
- INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
- AH = 68h
- ES:DI -> buffer
- Return: AH = status
- AL = number of entries
- buffer at ES:DI filled
- Note: equivalent to LIM 4.0 function 58h
- ---------------------------------------------
- INT 67 - EEMS - MAP PAGE INTO FRAME
- AH = 69h
- AL = frame number
- BX = page number
- DX = handle
- Return: AH = status
- Note: similar to EMS function 44h
- ---------------------------------------------
- INT 67 - EEMS - PAGE MAPPING
- AH = 6Ah
- AL = subfunction
- 00h save partial page map
- CH = first page frame
- CL = number of frames
- ES:DI -> buffer which is to be filled
- 01h restore partial page map
- CH = first page frame
- CL = number of frames
- DI:SI -> previously saved page map
- 02h save and restore partial page map
- CH = first page frame
- CL = number of frames
- ES:DI = buffer for current page map
- DI:SI = new page map
- 03h get size of save array
- CH = first page frame
- CL = number of frames
- Return: AL = size of array in bytes
- 04h switch to standard map register setting
- 05h switch to alternate map register setting
- 06h deallocate pages mapped to frames in conventional memory
- CH = first page frame
- CL = number of frames
- Return: AH = status
- Note: similar to EMS function 4Eh, except that a subrange of pages can
- be specified
- ---------------------------------------------
-
- ---------------------------------------------
- INT 80 - reserved for BASIC
- ---------------------------------------------
- INT 81 - reserved for BASIC
- ---------------------------------------------
- INT 82 - reserved for BASIC
- ---------------------------------------------
- INT 83 - reserved for BASIC
- ---------------------------------------------
- INT 84 - reserved for BASIC
- ---------------------------------------------
- INT 85 - reserved for BASIC
- ---------------------------------------------
- INT 86 - Relocated (by NETBIOS) INT 18
- ---------------------------------------------
- INT 86 to F0 - used by BASIC while in interpreter
- ---------------------------------------------
- INT E0 - CP/M-86 function calls
- ---------------------------------------------
- INT EF - GEM - INTERFACE
- CX = 0473h
- DS:DX -> GEM parameter block
- ---------------------------------------------
- INT F0 - used by BASIC while in interpreter
- ---------------------------------------------
- INT F1 - reserved for user interrupt
- ---------------------------------------------
- INT F2 - reserved for user interrupt
- ---------------------------------------------
- INT F3 - reserved for user interrupt
- ---------------------------------------------
- INT F4 - reserved for user interrupt
- ---------------------------------------------
- INT F5 - reserved for user interrupt
- ---------------------------------------------
- INT F6 - reserved for user interrupt
- ---------------------------------------------
- INT F7 - reserved for user interrupt
- ---------------------------------------------
- INT F8 - 10 ms INTERVAL TIMER (TANDY???)
- ---------------------------------------------
- INT F9 - reserved for user interrupt
- ---------------------------------------------
- INT FA - USART READY (RS-232C) (TANDY???)
- ---------------------------------------------
- INT FB - USART Rx READY (keyboard) (TANDY???)
- ---------------------------------------------
- INT FC - reserved for user interrupt
- ---------------------------------------------
- INT FD - reserved for user interrupt
- ---------------------------------------------
- INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
- ---------------------------------------------
- INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
- ---------------------------------------------
- INT FF - Z100 - WARM BOOT
- ---------------------------------------------
-
-
-
-