Index for category B - BIOS
Table of Contents by Order
05 - INT 05 - PRINT SCREEN
11 - INT 11 - BIOS - GET EQUIPMENT LIST
12 - INT 12 - BIOS - GET MEMORY SIZE
1300 - INT 13 - DISK - RESET DISK SYSTEM
1301 - INT 13 - DISK - GET STATUS OF LAST OPERATION
1302 - INT 13 - DISK - READ SECTOR(S) INTO MEMORY
1303 - INT 13 - DISK - WRITE DISK SECTOR(S)
1304 - INT 13 - DISK - VERIFY DISK SECTOR(S)
1305 - INT 13 - FLOPPY - FORMAT TRACK
1305 - INT 13 - FIXED DISK - FORMAT TRACK
1306 - INT 13 - FIXED DISK - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT,PORT)
1307 - INT 13 - FIXED DISK - FORMAT DRIVE STARTING AT GIVEN TRACK (XT,PORT)
1308 - INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)
1309 - INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS)
130A - INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later)
130B - INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later)
130C - INT 13 - HARD DISK - SEEK TO CYLINDER
130D - INT 13 - HARD DISK - RESET HARD DISKS
130E - INT 13 - HARD DISK - READ SECTOR BUFFER (XT only)
130F - INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only)
1310 - INT 13 - HARD DISK - CHECK IF DRIVE READY
1311 - INT 13 - HARD DISK - RECALIBRATE DRIVE
1312 - INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS)
1313 - INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS)
1314 - INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC
1315 - INT 13 - DISK - GET DISK TYPE (XT 1986/1/10 or later,XT286,AT,PS)
1316 - INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1986/1/10 or later,XT286,AT,PS)
1317 - INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS)
1318 - INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
1319 - INT 13 - FIXED DISK - PARK HEADS ON ESDI DRIVE (XT286,PS)
13FF - INT 13 - IBM SurePath BIOS - Officially "Private" Function
1500 - INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only)
1501 - INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only)
1502 - INT 15 - CASSETTE - READ DATA (PC and PCjr only)
1503 - INT 15 - CASSETTE - WRITE DATA (PC and PCjr only)
1504 - INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS)
1505 - INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS)
1508 - INT 15 - IBM SurePath BIOS - WAIT REQUESTED TIME PERIOD
1521 - INT 15 - SYSTEM - POWER-ON SELF-TEST ERROR LOG (PS50+)
1522 - INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC
152300 - INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ??? CMOS DATA
152301 - INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SET ??? CMOS DATA
152302 - INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ROM STARTUP VIDEO REG TABLES
152303 - INT 15 U - IBM BIOS - SMART ENERGY SYSTEM - ???
152304 - INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SYSTEM SETUP
152305 - INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET PROCESSOR SPEED
1540 - INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE)
1541 - INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others)
1542 - INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX)
1543 - INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE)
1544 - INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE)
1544F1 - INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
1544F2BX0604 - INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
1544F3 - INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK
154F - INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS)
155101 - INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER
1580 - INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS)
1581 - INT 15 C - OS HOOK - DEVICE CLOSE
1582 - INT 15 C - OS HOOK - PROGRAM TERMINATION
1583 - INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+)
1584 - INT 15 - BIOS - JOYSTICK SUPPORT (XT after 1982/11/8,AT,XT286,PS)
1585 - INT 15 C - OS HOOK - SysReq KEY ACTIVITY (AT,PS)
1586 - INT 15 - BIOS - WAIT (AT,PS)
1587 - INT 15 - SYSTEM - COPY EXTENDED MEMORY
1588 - INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+)
1589 - INT 15 - SYSTEM - SWITCH TO PROTECTED MODE
1590 - INT 15 - OS HOOK - DEVICE BUSY (AT,PS)
1591 - INT 15 - OS HOOK - DEVICE POST (AT,PS)
1592 - INT 15 - IBM SurePath BIOS - Officially "Private" Function
15A0 - INT 15 - IBM SurePath BIOS - ACCESS LOADABLE-ABIOS SIGNATURE
15AB - INT 15 - IBM SurePath BIOS - Officially "Private" Function
15C0 - INT 15 - SYSTEM - GET CONFIGURATION (XT >1986/1/10,AT mdl 3x9,CONV,XT286,PS)
15C1 - INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS)
15C3 - INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+)
15C4 - INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+)
15C5 - INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95)
15C6 - INT 15 U - later PS/2 models - GET POS DATA
15C7 - INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION
15C8 - INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS
15C9 - INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION
15CA - INT 15 U - PS/2 Model 95 - READ/WRITE CMOS MEMORY
15CB - INT 15 U - PS/2 Model 95 - RESERVED
15CC - INT 15 U - PS/2 Model 95 - RESERVED
15CD - INT 15 U - PS/2 Model 95 - RESERVED
15CE--BL00 - INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL
15CF - INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL
15D0 - INT 15 - later PS/2s - RESERVED
15D100DX0000 - INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES
15D101 - INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER
15D102 - INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS
15D103DX0000 - INT 15 - later PS/2s - RETURN ENTIRE DDT
15D104 - INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID
15D2 - INT 15 - later PS/2s - RESERVED
15D3 - INT 15 - later PS/2s - RESERVED
15D4 - INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT)
15D5 - INT 15 - later PS/2s - RESERVED
15D600BL00 - INT 15 - later PS/2s - READ BOOT DEVICE ID
15D600BL01 - INT 15 - later PS/2s - WRITE BOOT DEVICE ID
15D601BL00 - INT 15 - later PS/2s - READ BOOT DEVICE KEY
15D601BL01 - INT 15 - later PS/2s - WRITE BOOT DEVICE KEY
15D602 - INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION
1600 - INT 16 - KEYBOARD - GET KEYSTROKE
1601 - INT 16 - KEYBOARD - CHECK FOR KEYSTROKE
1602 - INT 16 - KEYBOARD - GET SHIFT FLAGS
1603 - INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY
1604 - INT 16 - KEYBOARD - SET KEYCLICK (PCjr only)
1605 - INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only)
1605 - INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only)
1609 - INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY
1610 - INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only)
1611 - INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only)
1612 - INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only)
1620 - INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE (122-key kbd support only)
1621 - INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE (122-key kbd support only)
1622 - INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only)
1700 - INT 17 - PRINTER - WRITE CHARACTER
1701 - INT 17 - PRINTER - INITIALIZE PORT
1702 - INT 17 - PRINTER - GET STATUS
18 - INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC)
19 - INT 19 - SYSTEM - BOOTSTRAP LOADER
1A00 - INT 1A - TIME - GET SYSTEM TIME
1A01 - INT 1A - TIME - SET SYSTEM TIME
1A02 - INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
1A03 - INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS)
1A04 - INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
1A05 - INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS)
1A06 - INT 1A - TIME - SET ALARM (AT,XT286,PS)
1A07 - INT 1A - TIME - CANCEL ALARM (AT,XT286,PS)
1A08 - INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE)
1A09 - INT 1A - TIME - READ RTC ALARM TIME AND STATUS (CONV,PS30)
1A0A - INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS)
1A0B - INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS)
1A0C - INT 1A - TIME - SET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM)
1A0D - INT 1A - TIME - RESET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM)
1A0E - INT 1A - TIME - GET RTC DATE/TIME ALARM AND STATUS (IBM)
1A0F - INT 1A - TIME - INITIALIZE REAL-TIME CLOCK
1B - INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER
1C - INT 1C - TIME - SYSTEM TIMER TICK
1D - INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES
1E - INT 1E - SYSTEM DATA - DISKETTE PARAMETERS
1F - INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT
40 - INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
41 - INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE ADDRESS [NOT A VECTOR!]
46 - INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE ADDRESS [NOT A VECTOR!]
48 - INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
49 - INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
4A - INT 4A C - SYSTEM - USER ALARM HANDLER
4D00 - INT 4D - TI Professional PC - DISK - RESET DISK SYSTEM
4D01 - INT 4D - TI Professional PC - DISK - GET STATUS OF LAST OPERATION
4D02 - INT 4D - TI Professional PC - DISK - READ SECTOR(S) INTO MEMORY
4D03 - INT 4D - TI Professional PC - DISK - WRITE SECTOR(S) FROM MEMORY
4D04 - INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR CRC(S)
4D05 - INT 4D - TI Professional PC - DISK - NOP
4D06 - INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR(S)
4D07 - INT 4D - TI Professional PC - DISK - GET RETRY STATUS OF LAST OPERATION
4D08 - INT 4D - TI Professional PC - DISK - SET STANDARD DEVICE INTERFACE TABLE
4D09 - INT 4D - TI Professional PC - DISK - SET DEVICE INTERFACE TABLE ADDRESS
4D0A - INT 4D - TI Professional PC - DISK - GET DEVICE INTERFACE TABLE ADDRESS
4D0B - INT 4D - TI Professional PC - DISK - TURN OFF ALL DRIVES
FE - INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
FF - INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
INT 05 - PRINT SCREEN Desc: dump the current text screen to the first printer Notes: normally invoked by the INT 09 handler when PrtSc key is pressed, but may be invoked directly by applications byte at 0050h:0000h contains status used by default handler 00h not active 01h PrtSc in progress FFh last PrtSc encountered error default handler is at F000h:FF54h in IBM PC and 100%-compatible BIOSes since the BOUND instruction also calls INT 05h, but returns control to the BOUND instruction, a failed BOUND check will cause an infinite loop of PrtScreens unless the INT 05 handler is aware of the problem and checks whether the interrupt was invoked by a BOUND instruction BUG: some old BIOSes/applications appear to destroy BP on return SeeAlso: INT 10/AH=12h/BL=20h,INT 4A"Tandy 2000",INT 5E"TI Professional" SeeAlso: INT 80"Phar Lap"Top
INT 11 - BIOS - GET EQUIPMENT LIST Return: (E)AX = BIOS equipment list word (see #00226,#03215 at INT 4B"Tandy") Note: since older BIOSes do not know of the existence of EAX, the high word of EAX should be cleared before this call if any of the high bits will be tested SeeAlso: INT 4B"Tandy 2000",MEM 0040h:0010h Bitfields for BIOS equipment list: Bit(s) Description (Table 00226) 0 floppy disk(s) installed (number specified by bits 7-6) 1 80x87 coprocessor installed 3-2 number of 16K banks of RAM on motherboard (PC only) number of 64K banks of RAM on motherboard (XT only) 2 pointing device installed (PS) 3 unused (PS) 5-4 initial video mode 00 EGA, VGA, or PGA 01 40x25 color 10 80x25 color 11 80x25 monochrome 7-6 number of floppies installed less 1 (if bit 0 set) 8 DMA support installed (PCjr, Tandy 1400LT) DMA support *not* installed (Tandy 1000's) 11-9 number of serial ports installed 12 game port installed 13 serial printer attached (PCjr) internal modem installed (PC/Convertible) 15-14 number of parallel ports installed ---Compaq, Dell, and many other 386/486 machines-- 23 page tables set so that Weitek coprocessor addressable in real mode 24 Weitek math coprocessor present ---Compaq Systempro--- 25 internal DMA parallel port available 26 IRQ for internal DMA parallel port (if bit 25 set) 0 = IRQ5 1 = IRQ7 28-27 parallel port DMA channel 00 DMA channel 0 01 DMA channel 0 ??? 10 reserved 11 DMA channel 3 Notes: Some implementations of Remote (Initial) Program Loader (RPL/RIPL) don't set bit 0 to indicate a "virtual" floppy drive, although the RPL requires access to its memory image through a faked drive A:. This may have caused problems with releases of DOS 3.3x and earlier, which assumed A: and B: to be invalid drives then and would discard any attempts to access these drives. Implementations of RPL should set bit 0 to indicate a "virtual" floppy. The IBM PC DOS 3.3x-2000 IBMBIO.COM contains two occurences of code sequences like: INT 11h JMP SHORT skip DB 52h,50h,53h; "RPS" skip: OR AX,1 TEST AX,1 While at the first glance this seems to be a bug since it just wastes memory and the condition is always true, this could well be a signature for an applyable patch to stop it from forcing AX bit 0 to be always on. MS-DOS IO.SYS does not contain these signatures, however. BUGs: Some old BIOSes didn't properly report the count of floppy drives installed to the system. In newer systems INT 13h/AH=15h can be used to retrieve the number of floppy drives installed. Award BIOS v4.50G and v4.51PG erroneously set bit 0 even if there are no floppy drives installed; use two calls to INT 13/AH=15h to determine whether any floppies are actually installed SeeAlso: INT 12"BIOS",#03215 at INT 4B"Tandy 2000"Top
INT 12 - BIOS - GET MEMORY SIZE Return: AX = kilobytes of contiguous memory starting at absolute address 00000h Note: this call returns the contents of the word at 0040h:0013h; in PC and XT, this value is set from the switches on the motherboard SeeAlso: INT 11"BIOS",INT 2F/AX=4A06h,INT 4C"Tandy 2000",MEM 0040h:0013hTop
INT 13 - DISK - RESET DISK SYSTEM AH = 00h DL = drive (if bit 7 is set both hard disks and floppy disks reset) Return: AH = status (see #00234) CF clear if successful (returned AH=00h) CF set on error Note: forces controller to recalibrate drive heads (seek to track 0) for PS/2 35SX, 35LS, 40SX and L40SX, as well as many other systems, both the master drive and the slave drive respond to the Reset function that is issued to either drive SeeAlso: AH=0Dh,AH=11h,INT 21/AH=0Dh,INT 4D/AH=00h"TI Professional" SeeAlso: INT 56"Tandy 2000",MEM 0040h:003EhTop
INT 13 - DISK - GET STATUS OF LAST OPERATION AH = 01h DL = drive (bit 7 set for hard disk) Return: CF clear if successful (returned status 00h) CF set on error AH = status of previous operation (see #00234) Note: some BIOSes return the status in AL; the PS/2 Model 30/286 returns the status in both AH and AL SeeAlso: AH=00h,INT 4D/AH=01h,MEM 0040h:0041h,MEM 0040h:0074h (Table 00234) Values for disk operation status: 00h successful completion 01h invalid function in AH or invalid parameter 02h address mark not found 03h disk write-protected 04h sector not found/read error 05h reset failed (hard disk) 05h data did not verify correctly (TI Professional PC) 06h disk changed (floppy) 07h drive parameter activity failed (hard disk) 08h DMA overrun 09h data boundary error (attempted DMA across 64K boundary or >80h sectors) 0Ah bad sector detected (hard disk) 0Bh bad track detected (hard disk) 0Ch unsupported track or invalid media 0Dh invalid number of sectors on format (PS/2 hard disk) 0Eh control data address mark detected (hard disk) 0Fh DMA arbitration level out of range (hard disk) 10h uncorrectable CRC or ECC error on read 11h data ECC corrected (hard disk) 20h controller failure 31h no media in drive (IBM/MS INT 13 extensions) 32h incorrect drive type stored in CMOS (Compaq) 40h seek failed 80h timeout (not ready) AAh drive not ready (hard disk) B0h volume not locked in drive (INT 13 extensions) B1h volume locked in drive (INT 13 extensions) B2h volume not removable (INT 13 extensions) B3h volume in use (INT 13 extensions) B4h lock count exceeded (INT 13 extensions) B5h valid eject request failed (INT 13 extensions) B6h volume present but read protected (INT 13 extensions) BBh undefined error (hard disk) CCh write fault (hard disk) E0h status register error (hard disk) FFh sense operation failed (hard disk) SeeAlso: #M0022Top
INT 13 - DISK - READ SECTOR(S) INTO MEMORY AH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234) AL = number of sectors transferred (only valid if CF set for some BIOSes) Notes: errors on a floppy may be due to the motor failing to spin up quickly enough; the read should be retried at least three times, resetting the disk with AH=00h between attempts most BIOSes support "multitrack" reads, where the value in AL exceeds the number of sectors remaining on the track, in which case any additional sectors are read beginning at sector 1 on the following head in the same cylinder; the MSDOS CONFIG.SYS command MULTITRACK (or the Novell DOS DEBLOCK=) can be used to force DOS to split disk accesses which would wrap across a track boundary into two separate calls the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number) since the WD-1003 controller which is the standard AT controller (and the controller that IDE emulates) only supports 16 heads AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH under Windows95, a volume must be locked (see INT 21/AX=440Dh/CX=084Bh) in order to perform direct accesses such as INT 13h reads and writes all versions of MS-DOS (including MS-DOS 7 [Windows 95]) have a bug which prevents booting on hard disks with 256 heads (FFh), so many modern BIOSes provide mappings with at most 255 (FEh) heads some cache drivers flush their buffers when detecting that DOS is bypassed by directly issuing INT 13h from applications. A dummy read can be used as one of several methods to force cache flushing for unknown caches (e.g. before rebooting). BUGS: When reading from floppies, some AMI BIOSes (around 1990-1991) trash the byte following the data buffer, if it is not arranged to an even memory boundary. A workaround is to either make the buffer word aligned (which may also help to speed up things), or to add a dummy byte after the buffer. MS-DOS may leave interrupts disabled on return from this function. Apparently some BIOSes or intercepting resident software have bugs that may destroy DX on return or not properly set the Carry flag. At least some Microsoft software frames calls to this function with PUSH DX, STC, INT 13h, STI, POP DX. on the original IBM AT BIOS (1984/01/10) this function does not disable interrupts for harddisks (DL >= 80h). On these machines the MS-DOS/ PC DOS IO.SYS/IBMBIO.COM installs a special filter to bypass the buggy code in the ROM (see CALL F000h:211Eh) SeeAlso: AH=03h,AH=0Ah,AH=06h"V10DISK.SYS",AH=21h"PS/1",AH=42h"IBM" SeeAlso: INT 21/AX=440Dh/CX=084Bh,INT 4D/AH=02hTop
INT 13 - DISK - WRITE DISK SECTOR(S) AH = 03h AL = number of sectors to write (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error CF clear if successful AH = status (see #00234) AL = number of sectors transferred (only valid if CF set for some BIOSes) Notes: errors on a floppy may be due to the motor failing to spin up quickly enough; the write should be retried at least three times, resetting the disk with AH=00h between attempts most BIOSes support "multitrack" writes, where the value in AL exceeds the number of sectors remaining on the track, in which case any additional sectors are written beginning at sector 1 on the following head in the same cylinder; the CONFIG.SYS command MULTITRACK can be used to force DOS to split disk accesses which would wrap across a track boundary into two separate calls the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number) since the WD-1003 controller which is the standard AT controller (and the controller that IDE emulates) only supports 16 heads AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH under Windows95, an application must issue a physical volume lock on the drive via INT 21/AX=440Dh before it can successfully write to the disk with this function SeeAlso: AH=02h,AH=0Bh,AH=07h"V10DISK.SYS",AH=22h"PS/1",AH=43h"IBM" SeeAlso: INT 21/AX=440Dh"DOS 3.2+",INT 4D/AH=03hTop
INT 13 - DISK - VERIFY DISK SECTOR(S) AH = 04h AL = number of sectors to verify (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer (PC,XT,AT with BIOS prior to 1985/11/15) Return: CF set on error CF clear if successful AH = status (see #00234) AL = number of sectors verified Notes: errors on a floppy may be due to the motor failing to spin up quickly enough (timeout error 80h); the write should be retried at least three times, resetting the disk with AH=00h between attempts on floppys, the operation should also be retried on media change (06h) detection. this function does not compare the disk with memory, it merely checks whether the sector's stored CRC matches the data's actual CRC the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number) since the WD-1003 controller which is the standard AT controller (and the controller that IDE emulates) only supports 16 heads AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH BUG: some Epson ROM BIOSes sometimes have problems properly handling this function. The workaround is to reset the disk (INT 13/AH=00h) before the call. SeeAlso: AH=02h,AH=44h,INT 4D/AH=04h,INT 4D/AH=06hTop
INT 13 - FLOPPY - FORMAT TRACK AH = 05h AL = number of sectors to format CH = track number DH = head number DL = drive number ES:BX -> address field buffer (see #00235) Return: CF set on error CF clear if successful AH = status (see #00234) Notes: on AT or higher, call AH=17h first the number of sectors per track is read from the diskette parameter table pointed at by INT 1E BUG: some old Compaq BIOSes have a bug when attempting to call this function from Windows Standard Mode with EMM386 loaded. A possible workaround is to call this function from Real Mode e.g. through DPMI function "Call Real Mode function with FAR return" (see INT 31/AX=0301h). SeeAlso: AH=05h"FIXED",AH=17h,AH=18h,INT 1E Format of floppy format address field buffer entry (one per sector in track): Offset Size Description (Table 00235) 00h BYTE track number 01h BYTE head number (0-based) 02h BYTE sector number 03h BYTE sector size (00h=128 bytes, 01h=256 bytes, 02h=512, 03h=1024)Top
INT 13 - FIXED DISK - FORMAT TRACK AH = 05h AL = interleave value (XT-type controllers only) ES:BX -> 512-byte format buffer the first 2*(sectors/track) bytes contain F,N for each sector F = sector type 00h for good sector 20h to unassign from alternate location 40h to assign to alternate location 80h for bad sector N = sector number CH = cylinder number (bits 8,9 in high bits of CL) CL = high bits of cylinder number (bits 7,6) DH = head DL = drive Return: CF set on error CF clear if successful AH = status code (see #00234) Notes: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH for XT-type controllers on an AT or higher, AH=0Fh should be called first the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number) since the WD-1003 controller which is the standard AT controller (and the controller that IDE emulates) only supports 16 heads not all controller support sector types 20h and 40h under Windows95, an application must issue a physical volume lock on the drive via INT 21/AX=440Dh before it can successfully write to the disk with this function SeeAlso: AH=05h"FLOPPY",AH=06h"FIXED",AH=07h"FIXED",AH=0Fh,AH=18h,AH=1AhTop
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 #00234) Note: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=05h"FIXED",AH=07h"FIXED"Top
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=05h) CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see #00234) Note: AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH SeeAlso: AH=05h"FIXED",AH=06h"FIXED",AH=1AhTop
INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI) AH = 08h DL = drive (bit 7 set for hard disk) ES:DI = 0000h:0000h to guard against BIOS bugs Return: CF set on error AH = status (07h) (see #00234) CF clear if successful AH = 00h AL = 00h on at least some BIOSes BL = drive type (AT/PS2 floppies only) (see #00242) CH = low eight bits of maximum cylinder number CL = maximum sector number (bits 5-0) high two bits of maximum cylinder number (bits 7-6) DH = maximum head number DL = number of drives ES:DI -> drive parameter table (floppies only) Notes: may return successful even though specified drive is greater than the number of attached drives of that type (floppy/hard); check DL to ensure validity for systems predating the IBM AT, this call is only valid for hard disks, as it is implemented by the hard disk BIOS rather than the ROM BIOS the IBM ROM-BIOS returns the total number of hard disks attached to the system regardless of whether DL >= 80h on entry. Toshiba laptops with HardRAM return DL=02h when called with DL=80h, but fail on DL=81h. The BIOS data at 40h:75h correctly reports 01h. may indicate only two drives present even if more are attached; to ensure a correct count, one can use AH=15h to scan through possible drives Reportedly some Compaq BIOSes with more than one hard disk controller return only the number of drives DL attached to the corresponding controller as specified by the DL value on entry. However, on Compaq machines with "COMPAQ" signature at F000h:FFEAh, MS-DOS/PC DOS IO.SYS/IBMBIO.COM call INT 15/AX=E400h and INT 15/AX=E480h to enable Compaq "mode 2" before retrieving the count of hard disks installed in the system (DL) from this function. the maximum cylinder number reported in CX is usually two less than the total cylinder count reported in the fixed disk parameter table (see INT 41h,INT 46h) because early hard disks used the last cylinder for testing purposes; however, on some Zenith machines, the maximum cylinder number reportedly is three less than the count in the fixed disk parameter table. for BIOSes which reserve the last cylinder for testing purposes, the cylinder count is automatically decremented on PS/1s with IBM ROM DOS 4, nonexistent drives return CF clear, BX=CX=0000h, and ES:DI = 0000h:0000h machines with lost CMOS memory may return invalid data for floppy drives. In this situation CF is cleared, but AX,BX,CX,DX,DH,DI, and ES contain only 0. At least under some circumstances, MS-DOS/ PC DOS IO.SYS/IBMBIO.COM just assumes a 360 KB floppy if it sees CH to be zero for a floppy. the PC-Tools PCFORMAT program requires that AL=00h before it will proceed with the formatting if this function fails, an alternative way to retrieve the number of floppy drives installed in the system is to call INT 11h. In fact, the MS-DOS/PC-DOS IO.SYS/IBMBIO.COM attempts to get the number of floppy drives installed from INT 13/AH=08h, when INT 11h AX bit 0 indicates there are no floppy drives installed. In addition to testing the CF flag, it only trusts the result when the number of sectors (CL preset to zero) is non-zero after the call. BUGS: several different Compaq BIOSes incorrectly report high-numbered drives (such as 90h, B0h, D0h, and F0h) as present, giving them the same geometry as drive 80h; as a workaround, scan through disk numbers, stopping as soon as the number of valid drives encountered equals the value in 0040h:0075h a bug in Leading Edge 8088 BIOS 3.10 causes the DI,SI,BP,DS, and ES registers to be destroyed some Toshiba BIOSes (at least before 1995, maybe some laptops??? with 1.44 MB floppies) have a bug where they do not set the ES:DI vector even for floppy drives. Hence these registers should be preset with zero before the call and checked to be non-zero on return before using them. Also it seems these BIOSes can return wrong info in BL and CX, as S/DOS 1.0 can be configured to preset these registers as for an 1.44 MB floppy. the PS/2 Model 30 fails to reset the bus after INT 13/AH=08h and INT 13/AH=15h. A workaround is to monitor for these functions and perform a transparent INT 13/AH=01h status read afterwards. This will reset the bus. The MS-DOS 6.0 IO.SYS takes care of this by installing a special INT 13h interceptor for this purpose. AD-DOS may leave interrupts disabled on return from this function. Some Microsoft software explicitly sets STI after return. SeeAlso: AH=06h"Adaptec",AH=13h"SyQuest",AH=48h,AH=15h,INT 1E SeeAlso: INT 41"HARD DISK 0" (Table 00242) Values for diskette drive type: 01h 360K 02h 1.2M 03h 720K 04h 1.44M 05h ??? (reportedly an obscure drive type shipped on some IBM machines) 2.88M on some machines (at least AMI 486 BIOS) 06h 2.88M 10h ATAPI Removable Media DeviceTop
INT 13 - HARD DISK - INITIALIZE CONTROLLER WITH DRIVE PARAMETERS (AT,PS) AH = 09h DL = drive (80h for first, 81h for second) Return: CF clear if successful CF set on error AH = status (see #00234) Notes: on the PC and XT, this function uses the parameter table pointed at by INT 41 on the AT and later, this function uses the parameter table pointed at by INT 41 if DL=80h, and the parameter table pointed at by INT 46 if DL=81h SeeAlso: INT 41"HARD DISK 0",INT 46"HARD DISK 1"Top
INT 13 - HARD DISK - READ LONG SECTOR(S) (AT and later) AH = 0Ah AL = number of sectors (01h may be only value supported) CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second) ES:BX -> data buffer Return: CF clear if successful CF set on error AH = status (see #00234) AL = number of sectors transferred Notes: this function reads in four to seven bytes of error-correcting code along with each sector's worth of information data errors are not automatically corrected, and the read is aborted after the first sector with an ECC error used for diagnostics only on PS/2 systems; IBM officially classifies this function as optional BUG: on the original IBM AT BIOS (1984/01/10) this function does not disable interrupts for harddisks (DL >= 80h). On these machines the MS-DOS/ PC DOS IO.SYS/IBMBIO.COM installs a special filter to bypass the buggy code in the ROM (see CALL F000h:211Eh) SeeAlso: AH=02h,AH=0Bh,MEM 0040h:0074hTop
INT 13 - HARD DISK - WRITE LONG SECTOR(S) (AT and later) AH = 0Bh AL = number of sectors (01h may be only value supported) CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second) ES:BX -> data buffer Return: CF clear if successful CF set on error AH = status (see #00234) AL = number of sectors transferred Notes: each sector's worth of data must be followed by four to seven bytes of error-correction information used for diagnostics only on PS/2 systems; IBM officially classifies this function as optional SeeAlso: AH=03h,AH=0Ah,MEM 0040h:0074hTop
INT 13 - HARD DISK - SEEK TO CYLINDER AH = 0Ch CH = low eight bits of cylinder number CL = sector number (bits 5-0) high two bits of cylinder number (bits 7-6) DH = head number DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see #00234) SeeAlso: AH=00h,AH=02h,AH=0Ah,AH=47hTop
INT 13 - HARD DISK - RESET HARD DISKS AH = 0Dh DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see #00234) Notes: reinitializes the hard disk controller, resets the specified drive's parameters, and recalibrates the drive's heads (seek to track 0) for PS/2 35SX, 35LS, 40SX and L40SX, as well as many other systems, both the master drive and the slave drive respond to the Reset function that is issued to either drive not for PS/2 ESDI drives SeeAlso: AH=00h,INT 21/AH=0DhTop
INT 13 - HARD DISK - READ SECTOR BUFFER (XT only) AH = 0Eh DL = drive number (80h = first, 81h = second hard disk) ES:BX -> buffer Return: CF set on error CF clear if successful AH = status code (see #00234) Notes: transfers controller's sector buffer. No data is read from the drive used for diagnostics only on PS/2 systems SeeAlso: AH=0AhTop
INT 13 - HARD DISK - WRITE SECTOR BUFFER (XT only) AH = 0Fh DL = drive number (80h = first, 81h = second hard disk) ES:BX -> buffer Return: CF set on error CF clear if successful AH = status code (see #00234) Notes: does not write data to the drive should be called before formatting to initialize an XT-type controller's sector buffer used for diagnostics only on PS/2 systems SeeAlso: AH=0BhTop
INT 13 - HARD DISK - CHECK IF DRIVE READY AH = 10h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see #00234 at AH=01h) SeeAlso: AH=11hTop
INT 13 - HARD DISK - RECALIBRATE DRIVE AH = 11h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status (see #00234 at AH=01h) Note: causes hard disk controller to seek the specified drive to cylinder 0 SeeAlso: AH=00h,AH=0Ch,AH=10h,AH=19h"FIXED DISK",MEM 0040h:003EhTop
INT 13 - HARD DISK - CONTROLLER RAM DIAGNOSTIC (XT,PS) AH = 12h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status code (see #00234 at AH=01h) AL = 00h SeeAlso: AH=13h,AH=14hTop
INT 13 - HARD DISK - DRIVE DIAGNOSTIC (XT,PS) AH = 13h DL = drive number (80h = first, 81h = second hard disk) Return: CF set on error CF clear if successful AH = status code (see #00234 at AH=01h) AL = 00h SeeAlso: AH=12h"HARD DISK",AH=14h"HARD DISK"Top
INT 13 - HARD DISK - CONTROLLER INTERNAL DIAGNOSTIC AH = 14h Return: CF set on error CF clear if successful AH = status code (see #00234 at AH=01h) AL = 00h SeeAlso: AH=12h,AH=13hTop
INT 13 - DISK - GET DISK TYPE (XT 1986/1/10 or later,XT286,AT,PS) AH = 15h DL = drive number (bit 7 set for hard disk) (AL = FFh, CX = FFFFh, see Note) Return: CF clear if successful AH = type code 00h no such drive (SpeedStor) AL = 03h hard disk CX:DX = number of 512-byte sectors 01h floppy without change-line support 02h floppy (or other removable drive) with change-line support 03h hard disk CX:DX = number of 512-byte sectors CF set on error AH = status (see #00234 at AH=01h) Note: SyQuest can report type 01h or 02h for 'hard disks', since its media is removable BUGS: many versions of the Award 486 BIOS do not return the sector count because the BIOS exit code restores CX and DX to their original values after the function had already set them to correct values Some releases of PC Tools REBUILD preset CX=FFFFh and only trust the results if CH <= 2 on return (which would cut off drives > 16 Gb). several different Compaq BIOSes incorrectly report high-numbered drives (such as 90h, B0h, D0h, and F0h) as present, giving them the same geometry as drive 80h; as a workaround, scan through disk numbers, stopping as soon as the number of valid drives encountered equals the value in 0040h:0075h the PS/2 Model 30 fails to reset the bus after INT 13/AH=08h and INT 13/AH=15h. A workaround is to monitor for these functions and perform a transparent INT 13/AH=01h status read afterwards. This will reset the bus. The MS-DOS 6.0 IO.SYS takes care of this by installing a special INT 13h interceptor for this purpose. Some releases of SpeedStor have a bug where it reports AX=0003h instead of correctly reporting AH=03h for hard disks. A possible workaround when testing for hard disks is to check for AH=03h and AX=0003h. In this case this function should be invoked with a bogus fixed value in AL, e.g. AL=FFh. SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI",MEM 0040h:0075hTop
INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1986/1/10 or later,XT286,AT,PS) AH = 16h DL = drive number (00h-7Fh) SI = 0000h (to avoid crash on AT&T 6300) Return: CF clear if change line inactive AH = 00h (disk not changed) CF set if change line active AH = status 01h invalid command (SyQuest) 06h change line active or not supported 80h drive not ready or not present Notes: call AH=15h first to determine whether the drive supports a change line this call also clears the media-change status, so that a disk change is only reported once BUGS: some versions of Award 386 Modular BIOS and AMI BIOS fail to clear the media-change status AT&T 6300 WGS systems crash if SI <> 0 on entry. some pre 1986/08/04 Compaq ROM BIOS have a serious bug where this function may re-configure a hard disk depending on what is located at ES:[BX] and data indexed to by it. MS-DOS/PC DOS IO.SYS/IBMBIO.COM install a special filter when they detect Compaq ROM BIOSes with earlier dates. some Compaq 286 systems have a bug in all INT 13h functions >= 16h, which causes the byte at DS:0074h to be destroyed when called for hard disks (DL >= 80h). MS-DOS/PC DOS IO.SYS/IBMBIO.COM performs a test on this bug using this sub-function, and if found installs a special filter which points DS into ROM, so that it cannot cause any harm. some drives (or controllers???) forget the change line status if another drive is accessed afterwards. The DOS BIOS takes care of this by not relying on the reported change line status when the change line is not active and a different drive is accessed, instead it reports "don't know" to the DOS kernel. SeeAlso: AH=15h,AH=49hTop
INT 13 - FLOPPY DISK - SET DISK TYPE FOR FORMAT (AT,PS) AH = 17h AL = format type 01h = 320/360K disk in 360K drive 02h = 320/360K disk in 1.2M drive 03h = 1.2M disk in 1.2M drive 04h = 720K disk in 720K or 1.44M drive DL = drive number Return: CF set on error CF clear if successful AH = status (see #00234 at AH=01h) Note: this function does not handle 1.44M drives; use AH=18h instead SeeAlso: AH=15h,AH=18hTop
INT 13 - DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS) AH = 18h DL = drive number CH = lower 8 bits of highest cylinder number (number of cylinders - 1) CL = sectors per track (bits 0-5) top 2 bits of highest cylinder number (bits 6,7) Return: AH = status 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 (see #01264 at INT 1E) Note: this function does not set the INT 1E vector to point at the returned parameter table; it is the caller's responsibility to do so SeeAlso: AH=05h,AH=07h,AH=17h,INT 1ETop
INT 13 - FIXED DISK - PARK HEADS ON ESDI DRIVE (XT286,PS) AH = 19h DL = drive Return: CF set on error CF clear if successful AH = status (see #00234 at AH=01h) SeeAlso: AH=11hTop
INT 13 - IBM SurePath BIOS - Officially "Private" Function AH = FFhTop
INT 15 - CASSETTE - TURN ON TAPE DRIVE'S MOTOR (PC and PCjr only) AH = 00h Return: CF set on error AH = 86h no cassette present CF clear if successful SeeAlso: AH=01h"CASSETTE",MEM 0040h:0067h"PC"Top
INT 15 - CASSETTE - TURN OFF TAPE DRIVE'S MOTOR (PC and PCjr only) AH = 01h Return: CF set on error AH = 86h no cassette present CF clear if successful SeeAlso: AH=00h"CASSETTE"Top
INT 15 - CASSETTE - READ DATA (PC and PCjr only) AH = 02h CX = number of bytes to read ES:BX -> buffer Return: CF clear if successful DX = number of bytes read ES:BX -> byte following last byte read CF set on error AH = status (see #00409) SeeAlso: AH=00h"CASSETTE",AH=03h"CASSETTE",MEM 0040h:0069h,MEM 0040h:006Bh"PC" (Table 00409) Values for Cassette status: 00h successful 01h CRC error 02h bad tape signals 04h no data 80h invalid command 86h no cassette presentTop
INT 15 - CASSETTE - WRITE DATA (PC and PCjr only) AH = 03h CX = number of bytes to write ES:BX -> data buffer Return: CF clear if successful ES:BX -> byte following last byte written CF set on error AH = status (see #00409) CX = 0000h SeeAlso: AH=00h"CASSETTE",AH=02h"CASSETTE"Top
INT 15 - SYSTEM - BUILD ABIOS SYSTEM PARAMETER TABLE (PS) AH = 04h ES:DI -> 32-byte results buffer for System Parameter Table (see #00410) DS = segment containing ABIOS RAM extensions (zero if none) Return: CF clear if successful AH = 00h success ES:DI buffer filled AL destroyed CF set on failure AX destroyed AH = 80h/86h if not supported SeeAlso: AH=05h"ABIOS",AH=C1h Format of ABIOS System Parameter Table: Offset Size Description (Table 00410) 00h DWORD FAR address of ABIOS Common Start Routine 04h DWORD FAR address of ABIOS Interrupt Routine 08h DWORD FAR address of ABIOS Time-out Routine 0Ch WORD number of bytes of stack required by this ABIOS implementation 0Eh 16 BYTEs reserved 1Eh WORD number of entries in initialization tableTop
INT 15 - SYSTEM - BUILD ABIOS INITIALIZATION TABLE (PS) AH = 05h ES:DI -> results buffer of length 18h * Number_of_Entries (see #00411) DS = segment containing ABIOS RAM extensions (zero if none) Return: CF clear if successful AH = 00h success ES:DI buffer filled AL destroyed CF set on failure AX destroyed AH = 80h/86h if not supported SeeAlso: AH=04h"ABIOS",AH=C1h Format of one entry of ABIOS Initialization Table: Offset Size Description (Table 00411) 00h WORD device ID (see #00412) 02h WORD number of Logical IDs 04h WORD Device Block length (zero for ABIOS patch or extension) 06h DWORD -> init routine for Device Block and Function Transfer Table 0Ah WORD request block length 0Ch WORD Function Transfer Table length (zero for a patch) 0Eh WORD Data Pointers length (in Common Data Area) 10h BYTE secondary device ID (hardware level this ABIOS ver supports) 11h BYTE revision (device driver revision level this ABIOS supports) 12h 6 BYTEs reserved (Table 00412) Values for ABIOS device ID: 00h ABIOS internal calls 01h floppy disk 02h hard disk 03h video 04h keyboard 05h parallel port 06h serial port 07h system timer 08h real-time clock 09h system services 0Ah NMI 0Bh mouse 0Eh CMOS RAM 0Fh DMA 10h Programmable Option Select (POS) 16h keyboard passwordTop
INT 15 - IBM SurePath BIOS - WAIT REQUESTED TIME PERIOD AH = 08h AL = function 00h wait in increments of 15.025 microseconds CX = number of time increments to wait (0000h = maximum) 80h wait in increments of 840 ns ECX = number of time increments to wait 81h I/O event wait BH = bitmask of bits to check BL = expected pattern DX = I/O port address ECX = number of 840 ns microticks to wait Return: ECX = 00000000h if expected pattern did not occur 82h memory event wait BH = bitmask of bits to check BL = expected pattern ES:SI -> BYTE to check ECX = number of 840 ns microticks to wait Return: ECX = 00000000h if expected pattern did not occur other reserved Return: CF clear if successful CF set on error AH = status 00h successful 01h used 15.025 microsecond interval, time rounded up 08h reserved subfunction 86h function not supported Notes: IBM classifies this function as optional if the POST determines that the timer is nonfunctional, this function uses the 15.025 microsecond refresh timer instead of the full-resolution timer SeeAlso: AH=07h"IBM",AH=09h"IBM",AH=86hTop
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 clear if successful CF set on error AH = status 00h OK 01h list full 02h unsupported subfunction 80h invalid command 86h unsupported function if function 00h: BX = number of error codes stored ES:DI -> error log Notes: the log is a series of words, the first byte of which identifies the error code and the second the device. supported by AMI PCI BIOS IBM considers this a required BIOS function if the device ID is FFh, the "error code" is the actual device number minus 255 (thus these devices have no specific error codes) SeeAlso: AH=23h"SYSTEM",AH=24h"SYSTEM"Top
INT 15 - SYSTEM - later PS/2s - LOCATE ROM BASIC AH = 22h Return: CF set on error AH = status (86h if function not supported) CF clear on success AH = 00h ES:BX -> ROM BASIC Notes: if this function is not supported, ROM BASIC is at F600h:0000h IBM classifies this function as optional SeeAlso: INT 86"BASIC",INT F0"BASIC"Top
INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ??? CMOS DATA AX = 2300h Return: CF clear if successful CL = value of CMOS location 2Dh CH = value of CMOS location 2Eh CF set on error AH = error code (80h,86h) Note: IBM classifies this function as optional SeeAlso: AX=2301h,AX=2304h,AX=2305hTop
INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SET ??? CMOS DATA AX = 2301h CL = new value for CMOS location 2Dh CH = new value for CMOS location 2Eh Return: CF clear if successful CF set on error AH = error code (80h,86h) Notes: sets the contents of CMOS locations 2Dh and 2Eh IBM classifies this function as optional SeeAlso: AX=2300h,AX=2304h,AX=2305hTop
INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET ROM STARTUP VIDEO REG TABLES AX = 2302h BL = data index (00h-0Dh) (see #00459) Return: ES:BX -> table for register (see #00460,#00461) CX = size of table in bytes (may be 0000h) Note: IBM classifies this function as optional SeeAlso: AX=2300h,AX=2301h,AX=2303h (Table 00459) Values for PS/1 ROM startup video register tables: 00h DAC registers 01h ??? 02h Palette registers 03h-0Dh ??? Format of PS/1 ROM startup DAC register table: Offset Size Description (Table 00460) 00h WORD number of DAC registers in table 02h var array of 3-byte DAC register values, starting at register 00h SeeAlso: #00459 Format of PS/1 ROM startup Palette register table: Offset Size Description (Table 00461) 00h 16 BYTEs colors for palette registers 00h through 0Fh 10h BYTE border color SeeAlso: #00459,#00018Top
INT 15 U - IBM BIOS - SMART ENERGY SYSTEM - ??? AX = 2303h BX = ??? ('x') DX = 'y' and 'z' bits 15-7 = 'y' bits 6-3 unused bits 2-0 = 'z' DI = ??? (0352h) Return: ??? Notes: performs graphics functions, writes to segment A000h and VGA I/O ports IBM classifies this function as optionalTop
INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - SYSTEM SETUP AX = 2304h DX = segment of 32K buffer Return: CF clear if successful AX = 0003h (left over from setting video mode 3) BX,CX,DX,BP,DS,ES destroyed CF set on error AH = error code (80h,86h) Desc: run system setup utility, and optionally save any changed settings to CMOS RAM Note: IBM classifies this function as optional SeeAlso: AX=2301h,AX=2305hTop
INT 15 u - IBM BIOS - SMART ENERGY SYSTEM - GET PROCESSOR SPEED AX = 2305h Return: CF clear if successful AL = processor speed in MHz CF set on error AL = FFh (speed unknown or >80 MHz) AL = error code (80h,86h = unsupported function) Note: IBM classifies this function as optional SeeAlso: AX=2301h,AX=2304h,AH=BChTop
INT 15 - SYSTEM - READ/MODIFY PROFILES (CONVERTIBLE) AH = 40h AL = subfunction 00h get system profile in CX and BX 01h set system profile from CX and BX 02h get internal modem profile in BX 03h set internal modem profile from BX Return: CF clear if successful AH = 00h CF set on error AH = status (80h = profile execution failed)Top
INT 15 - SYSTEM - WAIT ON EXTERNAL EVENT (CONVERTIBLE and some others) AH = 41h AL = condition type (see #00463) BH = condition compare or mask value BL = timeout value times 55 milliseconds 00h means no timeout DX = I/O port address if AL bit 4 set ES:DI -> user byte if AL bit 4 clear Return: after event or timeout occurs Note: call AH=C0h and examine bit 3 of feature byte 1 to determine whether this function is supported SeeAlso: AH=83h,AH=86h,AH=C0h Bitfields for external event wait condition type: Bit(s) Description (Table 00463) 0-2 condition to wait for 0 any external event 1 compare and return if equal 2 compare and return if not equal 3 test and return if not zero 4 test and return if zero 3 reserved 4 1=port address, 0=user byte 5-7 reservedTop
INT 15 - SYSTEM - REQUEST POWER OFF (CONVERTIBLE,HP 95LX) AH = 42h AL = suspend type 00h to use system profile 01h to force suspend regardless of system profile Return: nothing Note: the HP 95LX apparently suspends regardless of the value in AL; on power-up, execution will resume following the instruction calling this function SeeAlso: AH=44hTop
INT 15 - SYSTEM - READ SYSTEM STATUS (CONVERTIBLE) AH = 43h Return: AL = status bits (see #00464) Bitfields for Convertible system status: Bit(s) Description (Table 00464) 7 power low 6 external power in use 5 standby power lost 4 power activated by alarm 3 internal modem powered on 2 RS232/parallel adapter powered on 1 reserved 0 LCD detachedTop
INT 15 - SYSTEM - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE) AH = 44h AL = new modem power state (00h power off, 01h power on) Return: nothing SeeAlso: AH=42hTop
INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK AX = 44F1h DS:DX -> byte with 00h ??? Return: ??? Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish between USER and SUPERVISOR security level SeeAlso: AX=44F2h,AX=44F3hTop
INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK AX = 44F2h BX = 0604h ??? Return: CF = ??? AH = ??? DX = ??? Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish between USER and SUPERVISOR security level SeeAlso: AX=44F1h,AX=44F3hTop
INT 15 U - Toshiba laptops - SECURITY LEVEL CHECK AX = 44F3h DS:DX -> byte with 00h or 01h ??? Return: DS:DX -> changed ??? Note: used by Toshiba BIOS setup utility TSETUP.EXE to distinguish between USER and SUPERVISOR security level SeeAlso: AX=44F1h,AX=44F2hTop
INT 15 C - KEYBOARD - KEYBOARD INTERCEPT (AT model 3x9,XT2,XT286,CONV,PS) AH = 4Fh AL = hardware scan code (see #00006) CF set Return: CF set to continue processing scan code AL = possibly-altered hardware scan code (see #00006) CF clear scan code should be ignored Notes: called by INT 09 handler to translate scan codes; the INT 09 code does not examine the scan code it reads from the keyboard until after this function returns. This permits software to rearrange the keyboard; for example, swapping the CapsLock and Control keys, or turning the right Shift key into Enter. DOS 6 KEYB.COM will not pass through this function if Ctrl-Alt-Del is pressed and a SmartDrive v4-compatible cache is installed which has dirty cache buffers; some other disk caches such as HyperDisk operate similarly in order to prevent loss of cached data which has not yet been written to disk IBM classifies this function as required SeeAlso: INT 09,INT 15/AH=C0hTop
INT 15 - SYSTEM - later PS/2s - EXPANSION UNIT, RETURN CONFIGURATION NUMBER AX = 5101h Return: CF set if successful AH = 00h AL = current configuration number 00h system unit only FFh configuration not recognized BX = status flag bits 0-14: reserved bit 15: additional data is available (location TBD) CF clear on error AH = status 01h expansion unit is not present 86h function not supported Note: CF convention is the reverse of the standard convention for this interrupt. (Perhaps a typo in the IBM BIOS Tech Ref?)Top
INT 15 C - OS HOOK - DEVICE OPEN (AT,XT286,PS) AH = 80h BX = device ID CX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see #00496) Note: this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=81h,AH=82h (Table 00496) Values for status: 80h invalid command (PC,PCjr) 86h function not supported (XT)Top
INT 15 C - OS HOOK - DEVICE CLOSE AH = 81h BX = device ID CX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see #00496) Note: this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=80h,AH=82hTop
INT 15 C - OS HOOK - PROGRAM TERMINATION AH = 82h BX = process ID CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see #00496) Notes: closes all devices opened by the given process ID with function 80h this function should be hooked by a multitasker which wishes to keep track of device ownership; the default BIOS handler merely returns successfully SeeAlso: AH=80h,AH=81hTop
INT 15 - BIOS - SET EVENT WAIT INTERVAL (AT,PS50+) AH = 83h AL = subfunction 00h set interval CX:DX = microseconds to delay ES:BX -> byte whose high bit is to be set at end of interval 01h cancel wait interval Return: CF set on error or function already busy AH = status 80h invalid command (PC,PCjr) 86h function not supported (XT and later) CF clear if successful Notes: the resolution of the wait period is 977 microseconds on many systems because many BIOSes use the 1/1024 second fast interrupt from the AT real-time clock chip which is available on INT 70 IBM AT 1984/1/10 BIOS ignores AL and always performs subfunction 00h SeeAlso: AH=41h,AH=86h,INT 70,MEM 0040h:0098h,MEM 0040h:009ChTop
INT 15 - BIOS - JOYSTICK SUPPORT (XT after 1982/11/8,AT,XT286,PS) AH = 84h DX = subfunction 0000h read joystick switches Return: AL bits 7-4 = switch settings 0001h read positions of joysticks Return: AX = X position of joystick A BX = Y position of joystick A CX = X position of joystick B DX = Y position of joystick B Return: CF set on error AH = status (see #00496) CF clear if successful Notes: if no game port is installed, subfunction 0000h returns AL=00h (all switches open) and subfunction 0001h returns AX=BX=CX=DX=0000h a 250kOhm joystick typically returns 0000h-01A0h SeeAlso: AH=84h"V20-XT-BIOS"Top
INT 15 C - OS HOOK - SysReq KEY ACTIVITY (AT,PS) AH = 85h AL = SysReq key action (00h pressed, 01h released) CF clear Return: CF clear if successful AH = 00h CF set on error AH = status (see #00496) Notes: called by keyboard decode routine the default handler simply returns successfully; programs which wish to monitor the SysReq key must hook this call the SysReq key is often labeled SysRq SeeAlso: INT 09Top
INT 15 - BIOS - WAIT (AT,PS) AH = 86h CX:DX = interval in microseconds Return: CF clear if successful (wait interval elapsed) CF set on error or AH=83h wait already in progress AH = status (see #00496) Note: the resolution of the wait period is 977 microseconds on many systems because many BIOSes use the 1/1024 second fast interrupt from the AT real-time clock chip which is available on INT 70; because newer BIOSes may have much more precise timers available, it is not possible to use this function accurately for very short delays unless the precise behavior of the BIOS is known (or found through testing) SeeAlso: AH=41h,AH=83h,INT 1A/AX=FF01h,INT 70Top
INT 15 - SYSTEM - COPY EXTENDED MEMORY AH = 87h CX = number of words to copy (max 8000h) ES:SI -> global descriptor table (see #00499) Return: CF set on error CF clear if successful AH = status (see #00498) Notes: copy is done in protected mode with interrupts disabled by the default BIOS handler; many 386 memory managers perform the copy with interrupts enabled on the PS/2 30-286 & "Tortuga" this function does not use the port 92h for A20 control, but instead uses the keyboard controller (8042). Reportedly this may cause the system to crash when access to the 8042 is disabled in password server mode (see also PORT 0064h,#P0398) this function is incompatible with the OS/2 compatibility box SeeAlso: AH=88h,AH=89h,INT 1F/AH=90h (Table 00498) Values for extended-memory copy status: 00h source copied into destination 01h parity error 02h interrupt error 03h address line 20 gating failed 80h invalid command (PC,PCjr) 86h unsupported function (XT,PS30) Format of global descriptor table: Offset Size Description (Table 00499) 00h 16 BYTEs zeros (used by BIOS) 10h WORD source segment length in bytes (2*CX-1 or greater) 12h 3 BYTEs 24-bit linear source address, low byte first 15h BYTE source segment access rights (93h) 16h WORD (286) zero (386+) extended access rights and high byte of source address 18h WORD destination segment length in bytes (2*CX-1 or greater) 1Ah 3 BYTEs 24-bit linear destination address, low byte first 1Dh BYTE destination segment access rights (93h) 1Eh WORD (286) zero (386+) extended access rights and high byte of destin. address 20h 16 BYTEs zeros (used by BIOS to build CS and SS descriptors)Top
INT 15 - SYSTEM - GET EXTENDED MEMORY SIZE (286+) AH = 88h Return: CF clear if successful AX = number of contiguous KB starting at absolute address 100000h CF set on error AH = status 80h invalid command (PC,PCjr) 86h unsupported function (XT,PS30) Notes: TSRs which wish to allocate extended memory to themselves often hook this call, and return a reduced memory size. They are then free to use the memory between the new and old sizes at will. the standard BIOS only returns memory between 1MB and 16MB; use AH=C7h for memory beyond 16MB not all BIOSes correctly return the carry flag, making this call unreliable unless one first checks whether it is supported through a mechanism other than calling the function and testing CF Due to applications not dealing with more than 24-bit descriptors (286), Windows 3.0 has problems when this function reports more than 15 MB. Some releases of HIMEM.SYS are therefore limited to use only 15 MB, even when this function reports more. SeeAlso: AH=87h,AH=8Ah"Phoenix",AH=C7h,AX=DA88h,AX=E801h,AX=E820hTop
INT 15 - SYSTEM - SWITCH TO PROTECTED MODE AH = 89h BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts) BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts) ES:SI -> GDT for protected mode (see #00500) Return: CF set on error AH = FFh error enabling address line 20 CF clear if successful AH = 00h in protected mode at specified address BP may be destroyed; all segment registers change Notes: BL and BH must be multiples of 8 the protected-mode CS must reference the same memory as the CS this function is called from because execution continues with the address following the interrupt call SeeAlso: AH=87h,AH=88h,INT 67/AX=DE0Ch Format of BIOS switch-to-protected-mode Global Descriptor Table: Offset Size Description (Table 00500) 00h 8 BYTEs null descriptor (initialize to zeros) 08h 8 BYTEs GDT descriptor (see #00501) 10h 8 BYTEs IDT descriptor 18h 8 BYTEs DS descriptor 20h 8 BYTEs ES 28h 8 BYTEs SS 30h 8 BYTEs CS 38h 8 BYTEs uninitialized, used to build descriptor for BIOS CS Format of segment descriptor table entry: Offset Size Description (Table 00501) 00h WORD segment limit, low word 02h 3 BYTEs segment base address, low 24 bits 05h BYTE access mode (see #00502) 06h BYTE 386+ extended access mode (see #00505) 07h BYTE 386+ segment base address, high 8 bits SeeAlso: #00500,INT 2C/AX=0002h,INT 31/AX=0009h Bitfields for segment descriptor table access mode field: Bit(s) Description (Table 00502) 3-0 segment type (see #00503,#00504) 4 descriptor type (1 = application, 0 = system) 6-5 descriptor privilege level 7 segment is present in RAM SeeAlso: #00501,#00505 (Table 00503) Values for system segment descriptor type: 0 reserved 1 available 16-bit TSS 2 LDT 3 busy 16-bit TSS 4 16-bit call gate 5 task gate 6 16-bit interrupt gate 7 16-bit trap gate 8 reserved 9 available 32-bit TSS 10 reserved 11 busy 32-bit TSS 12 32-bit call gate 13 reserved 14 32-bit interrupt gate 15 32-bit trap gate SeeAlso: #00502,#00504 Bitfields for application segment descriptor type: Bit(s) Description (Table 00504) 3 code/data 0 date 1 code ---data segments--- 2 expand down 1 writeable ---code segments--- 2 conforming 1 readable ------ 0 accessed SeeAlso: #00502,#00503 Bitfields for 386+ segment descriptor table extended access mode field: Bit(s) Description (Table 00505) 3-0 high 4 bits of segment limit 4 available 5 reserved (0) 6 default operation size (1 = 32 bits, 0 = 16 bits) 7 granularity (1 = 4K, 0 = byte) SeeAlso: #00501,#00502,#02557Top
INT 15 - OS HOOK - DEVICE BUSY (AT,PS) AH = 90h AL = device type (see #00507) ES:BX -> request block for type codes 80h through BFh CF clear Return: CF set if wait time satisfied CF clear if driver must perform wait AH = 00h Notes: 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 floppy and hard disk BIOS code uses this call to implement a timeout; for device types 00h and 01h, a return of CF set means that the timeout expired before the disk responded. this function should be hooked by a multitasker to allow other tasks to execute while the BIOS is waiting for I/O completion; the default handler merely returns with AH=00h and CF clear SeeAlso: AH=91h,INT 13/AH=00h,INT 17/AH=00h,INT 1A/AH=83h (Table 00507) Values for device type: 00h disk 01h diskette 02h keyboard 03h PS/2 pointing device 21h waiting for keyboard input (Phoenix BIOS) 80h network FBh digital sound (Tandy) FCh disk reset (PS) FDh diskette motor start FEh printerTop
INT 15 - OS HOOK - DEVICE POST (AT,PS) AH = 91h AL = device type (see #00507) ES:BX -> request block for type codes 80h through BFh CF clear Return: AH = 00h Note: this function should be hooked by a multitasker to allow other tasks to execute while the BIOS is waiting for I/O completion; the default handler merely returns with AH=00h and CF clear SeeAlso: AH=90hTop
INT 15 - IBM SurePath BIOS - Officially "Private" Function AH = 92h SeeAlso: AH=07h"IBM",AH=3Eh"IBM"Top
INT 15 - IBM SurePath BIOS - ACCESS LOADABLE-ABIOS SIGNATURE AH = A0h AL = function 00h get loadable-ABIOS signature Return: BL = signature value 00h loadable-ABIOS prompting not required A1h loadable-ABIOS prompting is required 01h write loadable-ABIOS signature BL = new signature value 00h loadable-ABIOS prompting not required A1h loadable-ABIOS prompting is required Return: CF clear if successful CF set on error AH = status 00h successful 01h invalid subfunction 02h unable to read/write signature 86h function not supported Note: IBM classifies this function as optional SeeAlso: AH=08h"IBM"Top
INT 15 - IBM SurePath BIOS - Officially "Private" Function AH = ABh SeeAlso: AH=07h"IBM",AH=3Eh"IBM"Top
INT 15 - SYSTEM - GET CONFIGURATION (XT >1986/1/10,AT mdl 3x9,CONV,XT286,PS) AH = C0h Return: CF set if BIOS doesn't support call CF clear on success ES:BX -> ROM table (see #00509) AH = status 00h successful The PC XT (since 1986/01/10), PC AT (since 1985/06/10), the PC XT Model 286, the PC Convertible and most PS/2 machines will clear the CF flag and return the table in ES:BX. 80h unsupported function The PC and PCjr return AH=80h/CF set 86h unsupported function The PC XT (1982/11/08), PC Portable, PC AT (1984/01/10), or PS/2 prior to Model 30 return AH=86h/CF set Notes: the 1986/1/10 XT BIOS returns an incorrect value for the feature byte the configuration table is at F000h:E6F5h in 100% compatible BIOSes Dell machines contain the signature "DELL" or "Dell" at absolute FE076h and a model byte at absolute address FE845h (see #00516) Hewlett-Packard machines contain the signature "HP" at F000h:00F8h and a product identifier at F000h:00FAh (see #00519) Compaq machines can be identified by the signature string "COMPAQ" at F000h:FFEAh, and is preceded by additional information (see #00517) Tandy 1000 machines contain 21h in the byte at F000h:C000h and FFh in the byte at FFFFh:000Eh; Tandy 1000SL/TL machines only provide the first three data bytes (model/submodel/revision) in the returned table the ID at F000h:C000h is used by some Microsoft software before trusting the floppy flags bits 1 and 0 at 0040h:00B5h. the Wang PC contains the signature "WANG" at FC00h:0000h. This is used by Peter Reilley's portable binary editor and viewer BEAV to detect a Wang PC. Toshiba laptops contain the signature "TOSHIBA" at FE010h as part of a laptop information record at F000h:E000h (see #00520) some AST machines contain the string "COPYRIGHT AST RESEARCH" one byte past the end of the configuration table the Phoenix 386 BIOS contains a second version and date string (presumably the last modification for that OEM version) beginning at F000h:FFD8h, with each byte doubled (so that both ROM chips contain the complete information) SeeAlso: AH=C7h,AH=C9h,AX=D100h,AX=D103h Format of ROM configuration table: Offset Size Description (Table 00509) 00h WORD number of bytes following 02h BYTE model (see #00515) 03h BYTE submodel (see #00515) 04h BYTE BIOS revision: 0 for first release, 1 for 2nd, etc. 05h BYTE feature byte 1 (see #00510) 06h BYTE feature byte 2 (see #00511) 07h BYTE feature byte 3 (see #00512) 08h BYTE feature byte 4 (see #00513) 09h BYTE feature byte 5 (see #00514) ??? (08h) (Phoenix 386 v1.10) ??? (0Fh) (Phoenix 486 v1.03 PCI) ---AWARD BIOS--- 0Ah N BYTEs AWARD copyright notice ---Phoenix BIOS--- 0Ah BYTE ??? (00h) 0Bh BYTE major version 0Ch BYTE minor version (BCD) 0Dh 4 BYTEs ASCIZ string "PTL" (Phoenix Technologies Ltd) also on Phoenix Cascade BIOS ---Quadram Quad386--- 0Ah 17 BYTEs ASCII signature string "Quadram Quad386XT" ---Toshiba (Satellite Pro 435CDS at least)--- 0Ah 7 BYTEs signature "TOSHIBA" 11h BYTE ??? (8h) 12h BYTE ??? (E7h) product ID??? (guess) 13h 3 BYTEs "JPN" Bitfields for feature byte 1: Bit(s) Description (Table 00510) 7 DMA channel 3 used by hard disk BIOS 6 2nd interrupt controller (8259) installed 5 Real-Time Clock installed 4 INT 15/AH=4Fh called upon INT 09h 3 wait for external event (INT 15/AH=41h) supported 2 extended BIOS area allocated (usually at top of RAM) 1 bus is Micro Channel instead of ISA 0 system has dual bus (Micro Channel + ISA) SeeAlso: #00509,#00511 Bitfields for feature byte 2: Bit(s) Description (Table 00511) 7 32-bit DMA supported 6 INT 16/AH=09h (keyboard functionality) supported (see #00585) 5 INT 15/AH=C6h (get POS data) supported 4 INT 15/AH=C7h (return memory map info) supported 3 INT 15/AH=C8h (en/disable CPU functions) supported 2 non-8042 keyboard controller 1 data streaming supported 0 reserved SeeAlso: #00509,#00512,AH=C6h,AH=C7h,AH=C8h,INT 16/AH=09h Bitfields for feature byte 3: Bit(s) Description (Table 00512) 7 not used 6-5 reserved 4 POST supports ROM-to-RAM enable/disable 3 SCSI subsystem supported on system board 2 information panel installed 1 IML (Initial Machine Load) system (BIOS loaded from disk) 0 SCSI supported in IML SeeAlso: #00509,#00511,#00512 Bitfields for feature byte 4: Bit(s) Description (Table 00513) 7 IBM "private" (set on N51SX, CL57SX) 6 system has EEPROM 5-3 ABIOS presence 001 not supported 010 supported in ROM 011 supported in RAM (must be loaded) 2 "private" 1 system supports memory split at/above 16M 0 POSTEXT directly supported by POST SeeAlso: #00509,#00512,#00514 Bitfields for feature byte 5 (IBM): Bit(s) Description (Table 00514) 7-5 IBM "private" 4-2 reserved 1 system has enhanced mouse mode 0 flash EPROM SeeAlso: #00509,#00513 (Table 00515) Values for model/submodel/revision: Model Submdl Rev BIOS date System FFh * * 04/24/81 PC (original) FFh * * 10/19/81 PC (some bugfixes) FFh * * 10/27/82 PC (HD, 640K, EGA support) FFh 00h rev ??? Tandy 1000SL FFh 01h rev ??? Tandy 1000TL FFh 46h *** ??? Olivetti M15 FEh * * 08/16/82 PC XT FEh * * 11/08/82 PC XT and Portable FEh * * ../..x.. Toshiba laptops up to ~1987 ("x"=product ID) (see #00521) FEh 00h *** * ??? Olivetti M19 FEh 43h *** ??? Olivetti M240 FEh A6h ??? ??? Quadram Quad386 FDh * * 06/01/83 PCjr FCh * * 01/10/84 AT models 068,099 6 MHz 20MB FCh * * 02/25/93 Linux DOSEMU (all versions) FCh 00h 00h ??? PC3270/AT FCh 00h 01h 06/10/85 AT model 239 6 MHz 30MB FCh 00h > 01h ??? 7531/2 Industrial AT FCh 01h 00h 11/15/85 AT models 319,339 8 MHz, Enh Keyb, 3.5" FCh 01h 00h 09/17/87 Tandy 3000 FCh 01h 00h ../..x.. Toshiba laptops since ~1988 ("x"=product ID) (see #00521) FCh 01h 00h 03/08/93 Compaq DESKPRO/i FCh 01h 00h various Compaq DESKPRO, SystemPro, ProSignia FCh 01h 00h 07/20/93 Zenith Z-Lite 425L FCh 01h 00h 04/09/90 AMI BIOS FCh 01h 20h 06/10/92 AST FCh 01h 30h ??? Tandy 3000NL FCh 01h ??? ??? Compaq 286/386 FCh 02h 00h 04/21/86 PC XT-286 FCh 02h 00h various Compaq LTE Lite FCh 02h 00h 08/05/93 Compaq Contura 486/486c/486cx FCh 02h 00h 08/11/88 SoftWindows 1.0.1 (Power Macintosh) FCh 04h 00h 02/13/87 ** PS/2 Model 50 (10 MHz/1 ws 286) FCh 04h 01h 05/09/87 PS/2 Model 50 (10 Mhz 286, LW-type 32) FCh 04h 02h ??? PS/2 Model 50 FCh 04h 02h 01/28/88 PS/2 Model 50Z (10 Mhz 286, LW-type 33) FCh 04h 03h 04/18/88 PS/2 Model 50Z (10 MHz/0 ws 286) FCh 04h 04h ??? PS/2 Model 50Z FCh 05h 00h 02/13/87 ** PS/2 Model 60 (10 MHz 286) FCh 06h 00h ??? IBM 7552-140 "Gearbox" FCh 06h 01h ??? IBM 7552-540 "Gearbox" FCh 08h *** ??? Epson, unknown model FCh 08h 00h ??? PS/2 Model 25/286 FCh 09h 00h ??? PS/2 Model 25 (10 MHz 286) FCh 09h 00h 08/25/88 PS/2 Model 30 286 (10 Mhz, LW-type 37) FCh 09h 02h 06/28/89 PS/2 Model 30-286 FCh 09h 02h 06/28/89 PS/2 Model 25 286 (10 Mhz, LW-type 37) FCh 0Bh 00h 12/01/89 PS/1 (LW-Type 44) FCh 0Bh 00h 02/16/90 PS/1 Model 2011 (10 MHz 286) FCh 20h 00h 02/18/93 Compaq ProLinea FCh 25h 09h 12/07/91 PS/2 Model 56 SLC (20 MHz 386SLC) FCh 30h *** ??? Epson, unknown model FCh 31h *** ??? Epson, unknown model FCh 33h *** ??? Epson, unknown model FCh 42h *** ??? Olivetti M280 FCh 45h *** ??? Olivetti M380 (XP 1, XP3, XP 5) FCh 48h *** ??? Olivetti M290 FCh 4Fh *** ??? Olivetti M250 FCh 50h *** ??? Olivetti M380 (XP 7) FCh 51h *** ??? Olivetti PCS286 FCh 52h *** ??? Olivetti M300 FCh 81h 00h 01/15/88 Phoenix 386 BIOS v1.10 10a FCh 81h 01h ??? "OEM machine" FCh 82h 01h ??? "OEM machine" FCh 94h 00h ??? Zenith 386 FBh 00h 01h 01/10/86 PC XT-089, Enh Keyb, 3.5" support FBh 00h 01h 05/13/94 HP 200LX 2MB BIOS 1.01 A D german FBh 00h 02h 05/09/86 PC XT FBh 00h 04h 08/19/93 HP 100LX 1MB BIOS 1.04 A FBh 4Ch *** ??? Olivetti M200 FAh 00h 00h 09/02/86 PS/2 Model 30 (8 MHz 8086) FAh 00h 01h 12/12/86 PS/2 Model 30 FAh 00h 02h 02/05/87 PS/2 Model 30 FAh 01h 00h 06/26/87 PS/2 Model 25/25L (8 MHz 8086) FAh 30h 00h ??? IBM Restaurant Terminal FAh 4Eh *** ??? Olivetti M111 FAh FEh 00h ??? IBM PCradio 9075 F9h 00h 00h 09/13/85 PC Convertible F9h FFh 00h ??? PC Convertible F8h 00h 00h 03/30/87 ** PS/2 Model 80 (16MHz 386) F8h 00h 00h ??? PS/2 Model 75 486 (33Mhz 486) F8h 01h 00h 10/07/87 PS/2 Model 80 (20MHz 386) F8h 02h 00h ??? PS/2 Model 55-5571 F8h 04h 00h 01/29/88 PS/2 Model 70 (20 Mhz 386DX,LW-type 33) F8h 04h 02h 04/11/88 PS/2 Model 70 20MHz, type 2 system brd F8h 04h 03h 03/17/89 PS/2 Model 70 20MHz, type 2 system brd F8h 05h 00h ??? IBM PC 7568 F8h 06h 00h ??? PS/2 Model 55-5571 F8h 07h 00h ??? IBM PC 7561/2 F8h 07h 01h ??? PS/2 Model 55-5551 F8h 07h 02h ??? IBM PC 7561/2 F8h 07h 03h ??? PS/2 Model 55-5551 F8h 09h 00h 01/29/88 PS/2 Model 70 16MHz 386DX, type 1 sysbd F8h 09h 02h 04/11/88 PS/2 Model 70 some models F8h 09h 03h 03/17/89 PS/2 Model 70 some models F8h 09h 04h 12/15/89 PS/2 Model 70 (16 Mhz 386, LW-type 33) F8h 0Bh 00h 01/18/89 PS/2 Model P70 (8573-121) typ 2 sys brd F8h 0Bh 02h 12/16/89 PS/2 Model P70 ?? F8h 0Ch 00h 11/02/88 PS/2 Model 55SX (16 MHz 386SX) F8h 0Dh 00h ??? PS/2 Model 70 25MHz, type 3 system brd F8h 0Dh 00h 06/08/88 PS/2 Model 70 386 25MHz, type 3 sys brd F8h 0Dh 01h 02/20/89 PS/2 Model 70 386 25MHz, type 3 sys brd F8h 0Dh ??? 12/01/89 PS/2 Model 70 486 25Mhz, type 3 sys brd F8h 0Eh 00h ??? PS/1 486SX F8h 0Fh 00h ??? PS/1 486DX F8h 10h 00h ??? PS/2 Model 55-5551 F8h 11h 00h 10/01/90 PS/2 Model 90 XP (25 MHz 486) F8h 12h 00h ??? PS/2 Model 95 XP F8h 13h 00h 10/01/90 PS/2 Model 90 XP (33 MHz 486) F8h 14h 00h 10/01/90 PS/2 Model 90-AK9 (25 MHz 486), 95 XP F8h 15h 00h ??? PS/2 Model 90 XP F8h 16h 00h 10/01/90 PS/2 Model 90-AKD / 95XP486 (33MHz 486) F8h 17h 00h ??? PS/2 Model 90 XP F8h 19h 05h ??? PS/2 Model 35/35LS or 40 (20 MHz 386SX) F8h 19h 05h 03/15/91 PS/2 Model 35 SX / 40 SX (LW-type 37) F8h 19h 06h 04/04/91 PS/2 Model 35 SX / 40 SX (LW-type 37) F8h 1Ah 00h ??? PS/2 Model 95 XP F8h 1Bh 00h 09/29/89 PS/2 Model 70 486 (25 Mhz 386DX) F8h 1Bh 00h 10/02/89 PS/2 Model 70-486 (25 MHz 486) F8h 1Ch 00h 02/08/90 PS/2 Model 65-121 / 65 SX (16MHz 386SX) F8h 1Eh 00h 02/08/90 PS/2 Model 55LS (16 MHz 386SX) F8h 23h 00h ??? PS/2 Model L40 SX F8h 23h 01h ??? PS/2 Model L40 SX (20 MHz 386SX) F8h 23h 02h 02/27/91 PS/2 Model L40 SX (20Mhz386SX,LW-typ37) F8h 25h 00h ??? PS/2 Model 57 SLC F8h 25h 06h ??? PS/2 Model M57 (20 MHz 386SLC) F8h 26h 00h ??? PS/2 Model 57 SX F8h 26h 01h ??? PS/2 Model 57 (20 MHz 386SX) F8h 26h 02h 07/03/91 PS/2 Model 57 SX (20Mhz 386SX, SCSI) F8h 28h 00h ??? PS/2 Model 95 XP F8h 29h 00h ??? PS/2 Model 90 XP F8h 2Ah 00h ??? PS/2 Model 95 XP (50 MHz 486) F8h 2Bh 00h ??? PS/2 Model 90 / 90XP486 (50 MHz 486) F8h 2Ch 00h ??? PS/2 Model 95 XP F8h 2Ch 01h ??? PS/2 Model 95 (20 MHz 486SX) F8h 2Dh 00h ??? PS/2 Model 90 XP (20 MHz 486SX) F8h 2Eh 00h ??? PS/2 Model 95 XP F8h 2Eh 00h ??? PS/2 Model 95 XP486 (20 Mhz 486SX) F8h 2Eh 01h ??? PS/2 Model 95 (20 MHz 486SX + 487SX) F8h 2Fh 00h ??? PS/2 Model 90 XP (20 MHz 486SX + 487SX) F8h 30h 00h ??? PS/1 Model 2121 (16 MHz 386SX) F8h 33h 00h ??? PS/2 Model 30-386 F8h 34h 00h ??? PS/2 Model 25-386 F8h 36h 00h ??? PS/2 Model 95 XP F8h 37h 00h ??? PS/2 Model 90 XP F8h 38h 00h ??? PS/2 Model 57 F8h 39h 00h ??? PS/2 Model 95 XP F8h 3Fh 00h ??? PS/2 Model 90 XP F8h 40h 00h ??? PS/2 Model 95 XP F8h 41h 00h ??? PS/2 Model 77 F8h 45h 00h ??? PS/2 Model 90 XP (Pentium) F8h 46h 00h ??? PS/2 Model 95 XP (Pentium) F8h 47h 00h ??? PS/2 Model 90/95 E (Pentium) F8h 48h 00h ??? PS/2 Model 85 F8h 49h 00h ??? PS/ValuePoint 325T F8h 4Ah 00h ??? PS/ValuePoint 425SX F8h 4Bh 00h ??? PS/ValuePoint 433DX F8h 4Eh 00h ??? PS/2 Model 295 F8h 50h 00h ??? PS/2 Model P70 (8573) (16 MHz 386) F8h 50h 01h 12/16/89 PS/2 Model P70 (8570-031) F8h 52h 00h ??? PS/2 Model P75 (33 MHz 486) F8h 56h 00h ??? PS/2 Model CL57 SX F8h 57h 00h ??? PS/2 Model 90 XP F8h 58h 00h ??? PS/2 Model 95 XP F8h 59h 00h ??? PS/2 Model 90 XP F8h 5Ah 00h ??? PS/2 Model 95 XP F8h 5Bh 00h ??? PS/2 Model 90 XP F8h 5Ch 00h ??? PS/2 Model 95 XP F8h 5Dh 00h ??? PS/2 Model N51 SLC F8h 5Eh 00h ??? IBM ThinkPad 700 F8h 61h *** ??? Olivetti P500 F8h 62h *** ??? Olivetti P800 F8h 80h 00h ??? PS/2 Model 80 (25 MHz 386) F8h 80h 01h 11/21/89 PS/2 Model 80-A21 (25 Mhz 386) F8h 81h 00h ??? PS/2 Model 55-5502 F8h 87h 00h ??? PS/2 Model N33SX F8h 88h 00h ??? PS/2 Model 55-5530T F8h 97h 00h ??? PS/2 Model 55 Note N23SX F8h 99h 00h ??? PS/2 Model N51 SX F8h F2h 30h ??? Reply Model 32 F8h F6h 30h ??? Memorex Telex F8h FDh 00h ??? IBM Processor Complex (with VPD) F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX) F8h ??? ??? ??? PS/2 Model 90 (25 MHz 486SX + 487SX) F8h ??? ??? ??? PS/2 Model 95 (25 MHz 486SX + 487SX) E4h ??? ??? ??? Triumph Adler PC/XT E1h ??? ??? ??? ??? (checked for by DOS4GW.EXE) E1h 00h 00h ??? PS/2 Model 55-5530 Laptop D9h ??? ??? ??? Peacock XT 9Ah * * ??? Compaq XT/Compaq Plus 30h ??? ??? ??? Sperry PC 2Dh * * ??? Compaq PC/Compaq Deskpro ??? 56h ??? ??? Olivetti, unknown model ??? 74h ??? ??? Olivetti, unknown model Notes: BIOS dates may vary without changes to the revision code, especially for non-IBM machines * This BIOS call is not implemented in these early versions or under Linux's DOSEMU. Read the Model byte at F000h:FFFEh and BIOS date at F000h:FFF5h instead. ** These BIOS versions require the DASDDRVR.SYS patches. *** These Olivetti and Epson machines store the submodel in the byte at F000h:FFFDh. SeeAlso: #00509,#00516 (Table 00516) Values for Dell model byte: 02h Dell 200 03h Dell 300 05h Dell 220 06h Dell 310 07h Dell 325 09h Dell 310A 0Ah Dell 316 0Bh Dell 220E 0Ch Dell 210 0Dh Dell 316SX 0Eh Dell 316LT 0Fh Dell 320LX 11h Dell 425E SeeAlso: #00509,#00515 Format of Compaq product information: Address Size Description (Table 00517) F000h:FFE4h BYTE product family code (first byte) F000h:FFE5h BYTE Point release number F000h:FFE6h BYTE ROM version code F000h:FFE7h BYTE product family code (second byte) F000h:FFE8h WORD BIOS type code SeeAlso: #00518,#00520 Format of Hewlett-Packard ROM ID at F000h:00F8h: Offset Size Description (Table 00518) 00h 2 BYTEs signature "HP" (48h 50h) 02h 2 BYTEs 00h 00h 04h BYTE secondary code revision 05h BYTE primary code revision 06h BYTE date code, year-1960 (BCD) 07h BYTE date code, week of year (BCD) SeeAlso: #00517,#00519 Bitfields for Hewlett-Packard product identifier: Bit(s) Description (Table 00519) 4-0 machine code 0 original Vectra 1 ES/12 2 RS/20 3 Portable/CS 4 ES 5 CS 6 RS/16 other reserved 7-5 CPU type 0 = 80286 1 = 8088 2 = 8086 3 = 80386 other reserved SeeAlso: #00518 Format of Toshiba laptop information: Offset Size Description (Table 00520) 00h 8 BYTEs ASCII product number (e.g. "T2200SX ") 08h 8 BYTEs ASCII version number (e.g. "V1.20 ") 10h 8 BYTEs ASCII signature string "TOSHIBA " 18h 8 BYTEs always zero??? 20h DWORD -> built-in BIOS setup program entry point or 0000h:0000h Note: this record is located at F000h:E000h SeeAlso: #00517,#00518 (Table 00521) Values for Toshiba product ID: model prodID version date product number FEh 29h ../..).. Toshiba T1000LE FEh 2Ah ../..*.. Toshiba T1000XE FEh 2Bh ../..+.. Toshiba T1000SE FEh 2Ch ../..,.. Toshiba T1000 FEh 2Dh ../..-.. Toshiba T1200F FEh 2Dh V4.00 12/26-87 Toshiba T1200H FEh 2Eh ../..... Toshiba T1100+ FCh 22h ../..".. Toshiba T8500 FCh 26h 01/15&88 Toshiba T5200 FCh 27h ../..'.. Toshiba T5100 FCh 28h ../..(.. Toshiba T2000 FCh 2Ah 12/26*89 Toshiba T1200XE FCh 2Bh ../..+.. Toshiba T1600 FCh 2Ch ../..,.. Toshiba T3100e FCh 2Dh ../..-.. Toshiba T3200 FCh 2Fh ../../.. Toshiba T3100 FCh 34h V1.50 02/04494 Toshiba T100X FCh 38h ../..8.. Toshiba T2000SXe FCh 39h V1.20 09/16991 Toshiba T2200SX FCh 39h V1.40 10/01992 Toshiba T2200SX FCh 3Ch V1.50 01/28<91 Toshiba T2000SX FCh 3Dh ../..=.. Toshiba T3200SXC FCh 3Eh ../..>.. Toshiba T3100SX FCh 3Fh ../..?.. Toshiba T3200SX FCh 40h ../..@.. Toshiba T4500C FCh 41h V1.20 04/05A92 Toshiba T4500 ("T4500SXC" ???) FCh 45h V3.20 04/14E92 Toshiba T4400SX ("C" or "SXC" on cover) FCh 45h 01/13E93 Toshiba T4400SXC FCh 46h * ../..F.. Toshiba T6400 FCh 46h * ../..F.. Toshiba T6400C FCh 5Fh V1.40 01/18_94 Toshiba T3300SL FCh 69h ../..i.. Toshiba T1900C ("T1900CT" ???) FCh 6Ah V1.30 05/19j93 Toshiba T1900 ("T1900S" ???) FCh 6Dh V1.10 12/25m92 Toshiba T1850C FCh 6Eh V1.00 08/19n92 Toshiba T1850 FCh 6Eh V1.10 12/25n92 Toshiba T1850 FCh 6Fh V1.00 07/17o92 Toshiba T1800 FCh 6Fh V1.10 12/25o92 Toshiba T1800 FCh 7Eh V1.30 06/17~93 Toshiba T4600C FCh 7Fh V1.40 11/10x94 Toshiba T4600 FCh 8Ah V1.30 10/22x93 Toshiba T6600C FCh 91h V1.20 07/15x94 Toshiba T2400CT FCh 91h V5.00 07/28x95 Toshiba T2400CS/CT FCh 92h V5.00 07/28x95 Toshiba T3600CT FCh 96h * V1.40 12/08x94 Toshiba T200 FCh 96h * V1.50 12/08x94 Toshiba T200CS (T200) FCh 97h ../..x.. Toshiba T4800CT FCh 98h * V1.10 12/22x93 Toshiba T1910 FCh 98h * V2.40 07/12x94 Toshiba T1910/CS (T19XX) FCh 99h ../..x.. Toshiba T4700CS FCh 9Bh V2.30 01/31x94 Toshiba T4700CT FCh 9Bh V2.50 03/22x94 Toshiba T4700CT FCh 9Bh V5.00 07/28x95 Toshiba T4700CT FCh 9Ch V1.30 01/11x94 Toshiba T1950CT FCh 9Ch V2.50 07/22x94 Toshiba T1950CT (T19XX) FCh 9Dh * V2.40 07/12x94 Toshiba T1950/CS (T19XX) FCh 9Eh * V1.20 12/25x93 Toshiba T3400 FCh 9Eh * V1.30 03/22x94 Toshiba T3400/CT FCh B5h ** V5.10 08/25x95 Toshiba T2110/CS (T21XX) FCh B5h V5.10 08/25x95 Toshiba T2130CS/CT (T21XX) FCh BAh V1.30 02/16x95 Toshiba T2150CDS/CDT FCh BAh V5.00 07/27x95 Toshiba T2150CDS/CDT (T2150) FCh BBh ** V1.30 01/25x95 Toshiba T2100/CS/CT FCh BBh ** V5.00 07/27x95 Toshiba T2100/CS/CT FCh BCh V1.20 12/05x94 Toshiba T2450CT FCh BCh V5.00 07/28x95 Toshiba T2450CT FCh BEh V5.00 07/28x95 Toshiba T4850CT FCh C0h V5.20 05/30x96 Toshiba 420CDS/CDT FCh C1h V5.20 03/27x96 Toshiba 100CS FCh C3h V5.60 07/19x96 Toshiba 710CDT / 720CDT FCh C6h V5.30 11/30x95 Toshiba 410CS/CDT FCh CAh V5.10 08/18x95 Toshiba 400CS/CDT FCh CAh V5.40 12/18x95 Toshiba 400CS/CDT FCh CBh V5.10 09/01x95 Toshiba 610CT FCh CCh V5.50 06/13x96 Toshiba 700CS/CT FCh CFh V5.00 08/07x95 Toshiba T4900CT FCh DCh V5.10 06/17x96 Toshiba 650CT FCh DCh V5.10 05/10x96 Toshiba 110CS/CT FCh DDh V5.10 05/10x96 Toshiba 110CS/CT FCh DFh V5.20 05/27x96 Toshiba 500CS/CDT FCh ??? V5.??? ../..x.. Toshiba 620CT FCh ??? V5.??? ../..x.. Toshiba 660CDT FCh ??? V5.30 11/22/96 Toshiba 730CDT FCh ??? V6.00 09/20/96 Toshiba 200CDS/CDT FCh ??? V6.20 11/14/96 Toshiba 430CDS/CDT FCh ??? V6.40 12/05/96 Toshiba 510CS/CDT Notes: the 8-bit ASCII graphics character in the "date" column above has been substituted by "x" if larger than 80h BIOS version numbers and dates may vary, esp. due to harddisk and (flash) BIOS upgrades; all BIOS versions 5.xx are flash updates for Windows95, the product number may indicate the series only (T21XX) or does no longer contain the exact type suffix (CS/CT) the most recent versions of the BIOS have stopped including the product ID code in the BIOS date [*] These models have monochrome and color versions which can be distinguished with INT 42/AX=7503h (WD90C24 chipset) [**] These models have monochrome and color versions which can be distinguished with INT 10/AX=5F50h (CT655xx chipset) models not found here like T21x5 are variants differing only in bundled software SeeAlso: #00515Top
INT 15 - SYSTEM - RETURN EXTENDED-BIOS DATA-AREA SEGMENT ADDRESS (PS) AH = C1h Return: CF set on error CF clear if successful ES = segment of data area (see #M0001,#M0004,#M0005) SeeAlso: AH=04h"ABIOS",MEM 0040h:000Eh"DATA"Top
INT 15 - SYSTEM - ENABLE/DISABLE WATCHDOG TIMEOUT (PS50+) AH = C3h AL = function 00h disable PS/2 watchdog timer 01h enable PS/2 watchdog timer BX = timer counter (0001h-00FFh) 02h disable Gearbox system 03h enable Gearbox system Return: CF set on error CF clear if successful Note: the watchdog timer generates an NMI SeeAlso: INT 21/AH=2Bh/CX=6269h"WDTSR"Top
INT 15 - SYSTEM - PROGRAMMABLE OPTION SELECT (PS50+) AH = C4h AL = subfunction 00h return base POS register address 01h enable selected slot for setup BL = slot number (1 to 8) 02h disable setup for all slots (enable adapter) Return: CF set on error DX = base POS register address (if subfunction 00h) SeeAlso: AH=C6hTop
INT 15 UC - OS HOOK - ROM BIOS TRACING CALLOUT (PS30/286,PS50Z,PS95) AH = C5h AL = interrupt being invoked 01h INT 19 02h INT 14 03h INT 16 04h INT 40 (floppy INT 13) 05h INT 17 06h INT 10 07h INT 12 08h INT 11 09h INT 1A Return: all registers except AX must be preserved Notes: called as the very first action of the indicated ROM BIOS interrupt handlers on the PS/2 Models 30/286, 50Z, and 95 default handler does nothing and returns CF clear for the above subfunctions, CF set and AH=86h for all other subfunctions value of AX passed to the original interrupt handler is pushed on stack immediately prior to callTop
INT 15 U - later PS/2 models - GET POS DATA AH = C6h ??? Return: ??? Notes: this function is referenced by name and number in some IBM BIOS manuals IBM reports that "there are a number of problems with this call" and does not recommend its use. SeeAlso: AH=C4hTop
INT 15 - SYSTEM - later PS/2s - RETURN MEMORY-MAP INFORMATION AH = C7h DS:SI -> user supplied memory map table (see #00526) Return: CF set on error CF clear if successful Notes: call AH=C0h and examine bit 4 of feature byte 2 to check if this function is supported IBM classifies this function as optional Windows95 OSR2 reportedly does not support this function even though INT 15/AH=C0h indicates that it is available (observed on several different systems) SeeAlso: AH=C0h,AH=C9h,AH=D1h,AX=E820h Format of memory-map table structure: Offset Size Description (Table 00526) 00h WORD length of table (excluding this word) 02h DWORD local memory between 1M and 16M, in 1K blocks 06h DWORD local memory between 16M and 4G, in 1K blocks 0Ah DWORD system memory between 1M and 16M, in 1K blocks 0Eh DWORD system memory between 16M and 4G, in 1K blocks 12h DWORD cacheable memory between 1M and 16M, in 1K blocks 16h DWORD cacheable memory between 16M and 4G, in 1K blocks 1Ah DWORD 1K blocks before start of non-system memory between 1M and 16M 1Eh DWORD 1K blocks before start of non-system memory between 16M and 4G 22h WORD start segment of largest free block from C0000h-DFFFFh 24h WORD size of largest free block 26h DWORD reservedTop
INT 15 - SYSTEM - ENABLE/DISABLE PROCESSOR FUNCTIONS AH = C8h AL = function 00h disable L1 cache 01h enable L1 cache ---models 90 and 95 only--- 02h disable L2 cache 03h enable L2 cache 04h disable both caches 05h enable both caches 06h return status of both caches 07h-FFh Reserved Return: CF set on error CF clear if successful AH = status (see #00527) For subfunction 06h only: BL = status of L1 cache 00h enabled 01h disabled or not installed 02h disabled due to test error (can not be enabled) BH = status of L2 cache (same codes as BL) Notes: supported by at least PS/2 70, 70/486, 80-A21, 90, 95 call AH=C0h and examine bit 3 of feature byte 2 to check if this function is supported. on a 486 system, any external caches must be disabled when the on-chip cache (L1) is disabled. SeeAlso: AH=C0h (Table 00527) Values for status: 00h operation successful 01h function choice (in AL) is invalid 02h NVRAM data is invalid 03h cache test error 04h (90 and 95 only) cannot perform operation requested due to state of other cache (also see note above) 05h no L2 cache is present 07h invalid input values 09h CPU in protected modeTop
INT 15 - newer PS/2; various BIOSes - GET CPU TYPE AND MASK REVISION AH = C9h AL = 10h (may be required on some non-PS BIOSes) Return: CF clear if successful AH = 00h CH = CPU type (see #00528) CL = mask revision (stepping level) (see #00529) CF set on error AH = status (80h,86h = function not supported) Notes: the BIOS must save DX at startup in order to be able to support this call; PS/2 Models 56, 57, 90, and 95 are known to support it the PS/2 BIOS merely reads CMOS locations 190h (type) and 191h (rev) IBM classifies this function as optional SeeAlso: AX=D100h,AX=DA92h,MEM 0040h:00BCh (Table 00528) Values for CPU type: 03h 80386DX or clone 04h 80486 05h Pentium 23h 80386SX or clone 33h Intel i376 43h 80386SL or clone A3h IBM 386SLC A4h IBM 486SLC (Table 00529) Values for stepping level: ---i376 (type code 33h)--- 05h A0 08h B ---80386/80386DX (type code 03h)--- 03h Intel B1 to B10, Am386DX/DXL step A 05h Intel D0 08h Intel D1/D2/E1, Am386DX/DXL step B ---80386SL (type code 43h)--- 05h A 1xh B ---80386SX (type code 23h)--- 04h Intel A0 05h Intel B, Am386SX/SXL step A1 08h Intel C/D1, Am386SX/SXL step B 09h Intel 386CX/386EX/386SXstatic step A ---80486DX (type code 04h)--- 00h Intel A0/A1 01h Intel B2 to B6 02h Intel C0 03h Intel C1 04h Intel D0 10h Intel cA2/cA3, Cx486SLC step A 11h Intel cB0/cB1 ---486DX2 (type code 04h)--- 02h Am486DX2 (unknown stepping) 32h Intel DX2/Overdrive steps A0 to A2 33h Intel DX2/Overdrive step B1 ---486SX (type code 04h)--- 20h Intel A0 22h Intel B0 27h Intel cA0 28h Intel cB0 ---486SL (type code 04h)--- 40h Intel A ---IntelSX2 (type code 04h)--- 5xh Intel A ---IntelDX4 (type code 04h)--- 8xh Intel A ---487SX (type code 04h)--- 20h Intel A0 21h Intel B0 ---Pentium (type code 05h)--- 0xh Intel P5 steps Ax (1993) 1xh Intel P5 steps Bx (1994) 2xh Intel P54C step A ---RapidCAD (type code 03h)--- 40h ATop
INT 15 U - PS/2 Model 95 - READ/WRITE CMOS MEMORY AH = CAh AL = function 00h read CMOS Return: CL = value of CMOS location 01h write CMOS CL = new value for CMOS location BL = CMOS location (0Eh-3Fh) Return: CF clear if successful AH = 00h CF set on error AH = error code (see #00530) Note: writes do not update the CMOS checksum (Table 00530) Values for CMOS read/write error code: 01h CMOS lost power or has invalid checksum 03h specified location out of range (too high) 04h specified location out of range (too low) 80h unsupported function (PC) 86h unsupported function (XT)Top
INT 15 U - PS/2 Model 95 - RESERVED AH = CBh ??? Return: ???Top
INT 15 U - PS/2 Model 95 - RESERVED AH = CCh ??? Return: ???Top
INT 15 U - PS/2 Model 95 - RESERVED AH = CDh ??? Return: ???Top
INT 15 - later PS/2s - ALLOCATE DMA ARBITRATION LEVEL AH = CEh BL = 00h-0Eh arbitration level to be allocated 0Fh-FFh reserved AL = option byte bit 7-1: reserved (0) bit 0: 0 = need DMA channel for arbitration level requested 1 = no channel required for arbitration level Return: CF set on error AH = status (80h,86h = function not supported) CF clear on success AL = channel number 00h-07h channel number allocated for the arbiration level 08h-FEh reserved FFh no channel requested for arbitration level AH = status (see #00531) Notes: arbitration level 00h has the highest priority, 0Eh the lowest to perform a DMA transfer operation, be sure to call this function first, and call AH=CFh afterward. Failure to use this function can cause unpredictable results. SeeAlso: AH=CFh (Table 00531) Values for DMA arbitration status: 00h success 01h arbitration level not available 02h channel not available 03h invalid arbitration level passedTop
INT 15 - later PS/2s - DEALLOCATE DMA ARBITRATION LEVEL AH = CFh BL = arbitration level to be deallocated (see AH=CEh) Return: CF set on error AH = status (80h,86h = function not supported) CF clear on success AH = status 00h success 04h arbitration level not allocated SeeAlso: AH=CEhTop
INT 15 - later PS/2s - RESERVED AH = D0h ??? Return: ???Top
INT 15 - later PS/2s - GET NUMBER OF DEVICE DESCRIPTOR TABLE (DDT) ENTRIES AX = D100h DX = 0000h (reserved, must set to 0) Return: BL = size of one DDT entry, in bytes CX = number of DDT entries AH = return code (see #00534) CF set on error CF clear on success SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D101h,AX=D102h,AX=D103h,AX=D104h (Table 00534) Values for return code: 00h success 01h requested DDT entry not found 02h DDT data not valid 86h function not supportedTop
INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY NUMBER AX = D101h BX = number of requested entry (starting with 1) DX = 0000h (reserved, must be set to 0) ES:DI -> buffer to contain DDT entry (see #00535) Return: AH = return code (see #00534) CF set on error CF clear on success ES:DI buffer filled with DDT entry SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D102h,AX=D104h Format of Device Descriptor Table (DDT): Offset Size Description (Table 00535) 00h BYTE bits 7-4: reserved (set to 0) bits 3-0: slot of device (0 = system board) 01h BYTE bits 7-4: second interrupt for this device (0 = none) bits 3-0: first interrupt for this device (0 = none) 02h BYTE bits 7-4: second arbitration level for this device bits 3-0: first arbitration level for this device 03h WORD DDT indicators (see #00536) 05h BYTE reserved (0) 06h WORD device ID (0 = none) 08h WORD starting address of first I/O block (0 = none) 0Ah WORD starting address of second I/O block (0 = none) OCh WORD starting address of third I/O block (0 = none) OEh DWORD start of first non-system memory block (0 = none) 12h WORD size of first non-system memory block (in kilobytes) 14h DWORD start of second non-system memory block (0 = none) 18h WORD size of second non-system memory block (in kilobytes) 1Ah BYTE implementation identifier of the device 1Bh BYTE implementation revision level of the device Note: I/O block addresses and non-system memory addresses are listed in ascending order in each DDT entry. Bitfields for DDT indicators: Bit(s) Description (Table 00536) 15 reserved (0) 14 second arbitration level exists 13 first arbitration level exists 12 serial interface is RS-422 11 not address limited 10 DMA channel used 9 second arbitration level can be shared 8 first arbitration level can be shared 7-0 reserved (0)Top
INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY I/O ADDRSS AX = D102h BX = entry number at which to start searching CX = requested I/O port address DX = 0000h (reserved, must be set to 0) ES:DI -> buffer to contain DDT entry (see #00535) Return: AH = return code (see #00534) BX = DDT entry number where I/O port was found, or total entries plus 1 if port was not found. CF set on error CF clear on success ES:DI buffer filled with DDT entry Desc: the DDT is searched from the specified entry for the I/O port in CX, and the first entry in which it is found is returned SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103h,AX=D104hTop
INT 15 - later PS/2s - RETURN ENTIRE DDT AX = D103h DX = 0000h (reserved, must be set to 0) ES:DI -> buffer to contain DDT entry (see #00535) Return: AH = return code (see #00534) CF set on error CF clear on success ES:DI buffer filled with DDT entry SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D104hTop
INT 15 - later PS/2s - RETURN DEVICE DESCRIPTOR TABLE (DDT) ENTRY BY DEVICE ID AX = D104h BX = entry number at which to start searching CX = requested device ID DX = 0000h (reserved, must be set to 0) ES:DI -> buffer to contain DDT entry (see #00535) Return: AH = return code (see #00534) BX = DDT entry number where device ID was found, or total entries plus 1 if port was not found. CF set on error CF clear on success ES:DI buffer filled with DDT entry Desc: the DDT is searched from the specified entry for the device ID in CX, and the first entry in which it is found is returned. SeeAlso: AH=C0h,AH=C7h,AH=C9h,AX=D100h,AX=D101h,AX=D103hTop
INT 15 - later PS/2s - RESERVED AH = D2h ??? Return: ???Top
INT 15 - later PS/2s - RESERVED AH = D3h ??? Return: ???Top
INT 15 - later PS/2s - GET PHYSICAL FIXED DISK DRIVE NUMBER (SELECTABLE BOOT) AH = D4h DL = logical fixed disk drive number Return: AH = return code (see #00537) CF set on error CF clear on success AL = physical fixed disk drive number (Table 00537) Values for return code: 00h success 01h specified logical drive number is invalid 80h function not supported (on PCjr and PC) 86h function not supportedTop
INT 15 - later PS/2s - RESERVED AH = D5h ??? Return: ???Top
INT 15 - later PS/2s - READ BOOT DEVICE ID AX = D600h BL = 00h DX = device ID Return: CF clear if successful AH = 00h CF set on error AH = status (86h for function not supported) SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00h,AX=D602hTop
INT 15 - later PS/2s - WRITE BOOT DEVICE ID AX = D600h BL = 01h DX = device ID Return: CF clear on success AH = 00h CF set on error AH = status (86h for function not supported) SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01hTop
INT 15 - later PS/2s - READ BOOT DEVICE KEY AX = D601h BL = 00h DX = device ID Return: CF clear on success AH = 00h CF set on error AH = status (86h for function not supported) SeeAlso: AX=D600h/BL=00h,AX=D601h/BL=01h,AX=D602hTop
INT 15 - later PS/2s - WRITE BOOT DEVICE KEY AX = D601h BL = 01h DX = device ID Return: CF clear on success AH = 00h CF set on error AH = status (86h for function not supported) SeeAlso: AX=D600h/BL=01h,AX=D601h/BL=00hTop
INT 15 - later PS/2s - QUERY BOOT REFERENCE PARTITION AX = D602h Return: CF clear on success AH = 00h AL = status of reference-partition boot request 00h boot not requested 01h boot requested CF set on error AH = status (86h for function not supported) SeeAlso: AX=D601h/BL=00hTop
INT 16 - KEYBOARD - GET KEYSTROKE AH = 00h Return: AH = BIOS scan code AL = ASCII character Notes: on extended keyboards, this function discards any extended keystrokes, returning only when a non-extended keystroke is available the BIOS scan code is usually, but not always, the same as the hardware scan code processed by INT 09. It is the same for ASCII keystrokes and most unshifted special keys (F-keys, arrow keys, etc.), but differs for shifted special keys some (older) clone BIOSes do not discard extended keystrokes and manage function AH=00h and AH=10h the same the K3PLUS v6.00+ INT 16 BIOS replacement doesn't discard extended keystrokes (same as with functions 10h and 20h), but will always translate prefix E0h to 00h. This allows old programs to use extended keystrokes and should not cause compatibility problems SeeAlso: AH=01h,AH=05h,AH=10h,AH=20h,AX=AF4Dh"K3PLUS",INT 18/AH=00h SeeAlso: INT 09,INT 15/AH=4FhTop
INT 16 - KEYBOARD - CHECK FOR KEYSTROKE AH = 01h Return: ZF set if no keystroke available ZF clear if keystroke available AH = BIOS scan code AL = ASCII character Note: if a keystroke is present, it is not removed from the keyboard buffer; however, any extended keystrokes which are not compatible with 83/84- key keyboards are removed by IBM and most fully-compatible BIOSes in the process of checking whether a non-extended keystroke is available some (older) clone BIOSes do not discard extended keystrokes and manage function AH=00h and AH=10h the same the K3PLUS v6.00+ INT 16 BIOS replacement doesn't discard extended keystrokes (same as with functions 10h and 20h), but will always translate prefix E0h to 00h. This allows old programs to use extended keystrokes and should not cause compatibility problems SeeAlso: AH=00h,AH=11h,AH=21h,INT 18/AH=01h,INT 09,INT 15/AH=4FhTop
INT 16 - KEYBOARD - GET SHIFT FLAGS AH = 02h Return: AL = shift flags (see #00582) AH destroyed by many BIOSes SeeAlso: AH=12h,AH=22h,INT 17/AH=0Dh,INT 18/AH=02h,MEM 0040h:0017h Bitfields for keyboard shift flags: Bit(s) Description (Table 00582) 7 Insert active 6 CapsLock active 5 NumLock active 4 ScrollLock active 3 Alt key pressed (either Alt on 101/102-key keyboards) 2 Ctrl key pressed (either Ctrl on 101/102-key keyboards) 1 left shift key pressed 0 right shift key pressed SeeAlso: #00587,#03743,MEM 0040h:0017h,#M0010Top
INT 16 - KEYBOARD - SET TYPEMATIC RATE AND DELAY AH = 03h AL = subfunction 00h set default delay and rate (PCjr and some PS/2) 01h increase delay before repeat (PCjr) 02h decrease repeat rate by factor of 2 (PCjr) 03h increase delay and decrease repeat rate (PCjr) 04h turn off typematic repeat (PCjr and some PS/2) 05h set repeat rate and delay (AT,PS) BH = delay value (00h = 250ms to 03h = 1000ms) BL = repeat rate (00h=30/sec to 0Ch=10/sec [def] to 1Fh=2/sec) 06h get current typematic rate and delay (newer PS/2s) Return: BL = repeat rate (above) BH = delay (above) Return: AH destroyed by many BIOSes Note: use INT 16/AH=09h to determine whether some of the subfunctions are supported SeeAlso: INT 16/AH=09h,AH=29h"HUNTER",AH=2Ah"HUNTER"Top
INT 16 - KEYBOARD - SET KEYCLICK (PCjr only) AH = 04h AL = keyclick state 00h off 01h on Return: AH destroyed by many BIOSes SeeAlso: AH=03h,AH=04h"K3PLUS"Top
INT 16 - KEYBOARD - STORE KEYSTROKE IN KEYBOARD BUFFER (AT/PS w enh keybd only) AH = 05h CH = BIOS scan code CL = ASCII character Return: AL = status 00h if successful 01h if keyboard buffer full AH destroyed by many BIOSes Notes: under DESQview, a number of "keystrokes" invoke specific DESQview-related actions when they are read from the keyboard buffer (see #00583) similarly, some "keystrokes" invoke special functions on the HP 100LX and HP 200LX (see #00584) SeeAlso: AH=00h,AH=25h"K3",AH=71h,AX=AF4Dh,AH=FFh,INT 15/AX=DE10h SeeAlso: MEM 0040h:001Eh (Table 00583) Values for pseudo-keystrokes for DESQview: 38FBh or FB00h switch to next window (only if main menu already popped up) 38FCh or FC00h pop up DESQview main menu 38FEh or FE00h close the current window 38FFh or FF00h pop up DESQview learn menu (Table 00584) Values for pseudo-keystrokes for HP 100LX/200LX: EE00h pop up topcard display and set other system manager applications into sleep modeTop
INT 16 - KEYBOARD - SELECT KEYBOARD LAYOUT (PCjr only) AH = 05h AL = function 01h set keyboard layout to French 02h set keyboard layout to German 03h set keyboard layout to Italian 04h set keyboard layout to Spanish 05h set keyboard layout to UK 80h check if function supported Return: AL <> 80h if supported Return: ??? AH destroyed by many BIOSes Note: this function is called by the DOS 3.2 KEYBxx.COM SeeAlso: AH=92h,AH=A2h,AX=AF4DhTop
INT 16 - KEYBOARD - GET KEYBOARD FUNCTIONALITY AH = 09h Return: AL = supported keyboard functions (see #00585) AH destroyed by many BIOSes Note: this function is only available if bit 6 of the second feature byte returned by INT 15/AH=C0h is set (see #00509) SeeAlso: AH=03h,AH=0Ah,AH=10h,AH=11h,AH=12h,AH=20h,AH=21h,AH=22h,INT 15/AH=C0h Bitfields for supported keyboard functions: Bit(s) Description (Table 00585) 7 reserved 6 INT 16/AH=20h-22h supported (122-key keyboard support) 5 INT 16/AH=10h-12h supported (enhanced keyboard support) 4 INT 16/AH=0Ah supported 3 INT 16/AX=0306h supported 2 INT 16/AX=0305h supported 1 INT 16/AX=0304h supported 0 INT 16/AX=0300h supported SeeAlso: #00511Top
INT 16 - KEYBOARD - GET ENHANCED KEYSTROKE (enhanced kbd support only) AH = 10h Return: AH = BIOS scan code AL = ASCII character Notes: if no keystroke is available, this function waits until one is placed in the keyboard buffer the BIOS scan code is usually, but not always, the same as the hardware scan code processed by INT 09. It is the same for ASCII keystrokes and most unshifted special keys (F-keys, arrow keys, etc.), but differs for shifted special keys. unlike AH=00h, this function does not discard extended keystrokes INT 16/AH=09h can be used to determine whether this function is supported, but only on later model PS/2s SeeAlso: AH=00h,AH=09h,AH=11h,AH=20h,MEM 0040h:0019h,MEM 0040h:001EhTop
INT 16 - KEYBOARD - CHECK FOR ENHANCED KEYSTROKE (enh kbd support only) AH = 11h Return: ZF set if no keystroke available ZF clear if keystroke available AH = BIOS scan code AL = ASCII character Notes: if a keystroke is available, it is not removed from the keyboard buffer unlike AH=01h, this function does not discard extended keystrokes some versions of the IBM BIOS Technical Reference erroneously report that CF is returned instead of ZF INT 16/AH=09h can be used to determine whether this function is supported, but only on later model PS/2s SeeAlso: AH=01h,AH=09h,AH=10h,AH=21h,INT 09,INT 15/AH=4FhTop
INT 16 - KEYBOARD - GET EXTENDED SHIFT STATES (enh kbd support only) AH = 12h Return: AL = shift flags 1 (same as returned by AH=02h) (see #00587) AH = shift flags 2 (see #00588) Notes: AL bit 3 set only for left Alt key on many machines AH bits 7 through 4 always clear on a Compaq SLT/286 INT 16/AH=09h can be used to determine whether this function is supported, but only on later model PS/2s many BIOSes (including at least some versions of Phoenix and AMI) will destroy AH on return from functions higher than AH=12h, returning 12h less than was in AH on entry (due to a chain of DEC/JZ instructions) SeeAlso: AH=02h,AH=09h,AH=22h,AH=51h,INT 17/AH=0Dh,MEM 0040h:0017h Bitfields for keyboard shift flags 1: Bit(s) Description (Table 00587) 7 Insert active 6 CapsLock active 5 NumLock active 4 ScrollLock active 3 Alt key pressed (either Alt on 101/102-key keyboards) 2 Ctrl key pressed (either Ctrl on 101/102-key keyboards) 1 left shift key pressed 0 right shift key pressed SeeAlso: #00582,#00588,MEM 0040h:0017h,#M0010 Bitfields for keyboard shift flags 2: Bit(s) Description (Table 00588) 7 SysReq key pressed (SysReq is often labeled SysRq) 6 CapsLock pressed 5 NumLock pressed 4 ScrollLock pressed 3 right Alt key pressed 2 right Ctrl key pressed 1 left Alt key pressed 0 left Ctrl key pressed SeeAlso: #00587,MEM 0040h:0018h,#M0011Top
INT 16 - KEYBOARD - GET 122-KEY KEYSTROKE (122-key kbd support only) AH = 20h Return: AH = BIOS scan code (see AH=10h) AL = ASCII character Note: use AH=09h to determine whether this function is supported SeeAlso: AH=00h,AH=09h,AH=10h,AH=21h,AH=22hTop
INT 16 - KEYBOARD - CHECK FOR 122-KEY KEYSTROKE (122-key kbd support only) AH = 21h Return: ZF set if no keystroke available ZF clear if keystroke available AH = BIOS scan code AL = ASCII character Notes: use AH=09h to determine whether this function is supported some versions of the IBM BIOS Technical Reference erroneously report that CF is returned instead of ZF K3PLUS v6.00+ supports this function as an alias of AH=11h SeeAlso: AH=01h,AH=09h,AH=11h,AH=20h,AH=21hTop
INT 16 - KEYBOARD - GET 122-KEY SHIFT STATUS (122-key kbd support only) AH = 22h Return: AL = shift flags 1 (see #00587) AH = shift flags 2 (see #00588) Notes: use AH=09h to determine whether this function is supported K3PLUS v6.00+ supports this function as an alias of AH=12h SeeAlso: AH=02h,AH=09h,AH=12h,AH=20h,AH=21hTop
INT 17 - PRINTER - WRITE CHARACTER AH = 00h AL = character to write DX = printer number (00h-02h) Return: AH = printer status (see #00631) Note: Under PhysTechSoft's PTS ROM-DOS the parallel port can also be accessed as COM5. BUGS: Some print spoolers trash the BX register on return. Some original IBM BIOSes set more than one printer status bits at a time, while only one of them is correct. SeeAlso: AH=02h,AH=84h"AX",AX=6F02h,AH=F1h,INT 16/AX=FFE3h,INT 1A/AH=11h"NEC" SeeAlso: INT 4B/AH=00h,PORT 0278h"PRINTER",MEM 0040h:0008h,MEM 0040h:0078h Bitfields for printer status: Bit(s) Description (Table 00631) 7 not busy 6 acknowledge 5 out of paper 4 selected 3 I/O error 2-1 unused 0 timeout Notes: If both, bit 5 "out of paper" and 4 "selected" are set, the MS-DOS/ PC DOS kernel assumes that no printer is attached. for Tandy 2000, bit 7 indicates printer-busy when set rather than clearTop
INT 17 - PRINTER - INITIALIZE PORT AH = 01h DX = printer number (00h-02h) Return: AH = printer status (see #00631) Note: some printers report that they are ready immediately after initialization when they actually are not; a more reliable result may be obtained by calling AH=02h after a brief delay SeeAlso: AH=02h,AH=FFh"PC-MOS",INT 1A/AH=10h"NEC",INT 4B/AH=01hTop
INT 17 - PRINTER - GET STATUS AH = 02h DX = printer number (00h-02h) Return: AH = printer status (see #00631) Note: PRINTFIX from MS-DOS 5.0 hooks this function and always returns AH=90h SeeAlso: AH=01h,AH=F2h,INT 1A/AH=12h"NEC",INT 4B/AH=02hTop
INT 18 - DISKLESS BOOT HOOK (START CASSETTE BASIC) Desc: called when there is no bootable disk available to the system Notes: very few PCs other than those produced by IBM contain BASIC in ROM, so the action is unpredictable on compatibles; this interrupt often reboots the system, and often has no effect at all some PC and XT clones had an optional IBM CASSETTE BASIC stored in the ROM, too. most BIOSes will display an error message similar to "NO BASIC", and either reboot or return to the caller. PS/2 machines usually pop up a graphical box to the effect that the user should enter a floppy and press F1. Some clones display the message "No boot device available, strike F1 to retry, F2 for setup utility" network cards with their own BIOS can hook this interrupt to allow a diskless boot off the network (even when a hard disk is present if none of the partitions is marked as the boot partition) SeeAlso: INT 2F/AX=4A06h,INT 86"NetBIOS",INT 2F/AX=4A06h,INT 2F/AX=4A07hTop
INT 19 - SYSTEM - BOOTSTRAP LOADER Desc: This interrupt reboots the system without clearing memory or restoring interrupt vectors. Because interrupt vectors are preserved, this interrupt usually causes a system hang if any TSRs have hooked vectors from 00h through 1Ch, particularly INT 08. Notes: Usually, the BIOS will try to read sector 1, head 0, track 0 from drive A: to 0000h:7C00h. If this fails, and a hard disk is installed, the BIOS will read sector 1, head 0, track 0 of the first hard disk. This sector should contain a master bootstrap loader and a partition table (see #00650). After loading the master boot sector at 0000h:7C00h, the master bootstrap loader is given control (see #00653). It will scan the partition table for an active partition, and will then load the operating system's bootstrap loader (contained in the first sector of the active partition) and give it control. true IBM PCs and most clones issue an INT 18 if neither floppy nor hard disk have a valid boot sector to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in 0040h:0072h and jump to FFFFh:0000h. For a cold boot equivalent to a reset, store 0000h at 0040h:0072h before jumping. VDISK.SYS hooks this interrupt to allow applications to find out how much extended memory has been used by VDISKs (see #00649). DOS 3.3+ PRINT hooks INT 19 but does not set up a correct VDISK header block at the beginning of its INT 19 handler segment, thus causing some programs to overwrite extended memory which is already in use. the default handler is at F000h:E6F2h for 100% compatible BIOSes MS-DOS 3.2+ hangs on booting (even from floppy) if the hard disk contains extended partitions which point at each other in a loop, since it will never find the end of the linked list of extended partitions under Windows Real and Enhanced modes, calling INT 19 will hang the system in the same was as under bare DOS; under Windows Standard mode, INT 19 will successfully perform a cold reboot as it appears to have been redirected to a MOV AL,0FEh/OUT 64h,AL sequence BUG: when loading the remainder of the DOS system files fails, various versions of IBMBIO.COM/IO.SYS incorrectly restore INT 1E before calling INT 19, assuming that the boot sector had stored the contents of INT 1E at DS:SI instead of on the stack as it actually does SeeAlso: INT 14/AH=17h,INT 18"BOOT HOOK",INT 49"Tandy 2000",INT 5B"PC Cluster" SeeAlso: MEM 0040h:0067h,MEM F000h:FFF0h,CMOS 0Fh Format of VDISK header block (at beginning of INT 19 handler's segment): Offset Size Description (Table 00649) 00h 18 BYTEs n/a (for VDISK.SYS, the device driver header) 12h 11 BYTEs signature string "VDISK Vn.m" for VDISK.SYS version n.m 1Dh 15 BYTEs n/a 2Ch 3 BYTEs linear address of first byte of available extended memory Format of hard disk master boot sector: Offset Size Description (Table 00650) 00h 446 BYTEs Master bootstrap loader code 1BEh 16 BYTEs partition record for partition 1 (see #00651) 1CEh 16 BYTEs partition record for partition 2 1DEh 16 BYTEs partition record for partition 3 1EEh 16 BYTEs partition record for partition 4 1FEh WORD signature, AA55h indicates valid boot block Format of partition record: Offset Size Description (Table 00651) 00h BYTE boot indicator (80h = active partition) 01h BYTE partition start head 02h BYTE partition start sector (bits 0-5) 03h BYTE partition start track (bits 8,9 in bits 6,7 of sector) 04h BYTE operating system indicator (see #00652) 05h BYTE partition end head 06h BYTE partition end sector (bits 0-5) 07h BYTE partition end track (bits 8,9 in bits 6,7 of sector) 08h DWORD sectors preceding partition 0Ch DWORD length of partition in sectors SeeAlso: #00650 (Table 00652) Values for operating system indicator: 00h empty partition-table entry 01h DOS 12-bit FAT 02h XENIX root file system 03h XENIX /usr file system (obsolete) 04h DOS 16-bit FAT (up to 32M) 05h DOS 3.3+ extended partition 06h DOS 3.31+ Large File System (16-bit FAT, over 32M) 07h QNX 07h OS/2 HPFS 07h Windows NT NTFS 07h Advanced Unix 07h see partition boot record; could be any of the above or others 08h OS/2 (v1.0-1.3 only) 08h AIX bootable partition, SplitDrive 08h Commodore DOS 08h DELL partition spanning multiple drives 09h AIX data partition 09h Coherent filesystem 0Ah OS/2 Boot Manager 0Ah OPUS 0Ah Coherent swap partition 0Bh Windows95 with 32-bit FAT 0Ch Windows95 with 32-bit FAT (using LBA-mode INT 13 extensions) 0Eh logical-block-addressable VFAT (same as 06h but using LBA-mode INT 13) 0Fh logical-block-addressable VFAT (same as 05h but using LBA-mode INT 13) 10h OPUS 11h OS/2 Boot Manager hidden 12-bit FAT partition 12h Compaq Diagnostics partition 14h (resulted from using Novell DOS 7.0 FDISK to delete Linux Native part) 14h OS/2 Boot Manager hidden sub-32M 16-bit FAT partition 16h OS/2 Boot Manager hidden over-32M 16-bit FAT partition 17h OS/2 Boot Manager hidden HPFS partition 17h hidden NTFS partition 18h AST special Windows swap file ("Zero-Volt Suspend" partition) 19h Willowtech Photon coS 1Bh hidden Windows95 FAT32 partition 1Ch hidden Windows95 FAT32 partition (using LBA-mode INT 13 extensions) 1Eh hidden LBA VFAT partition 20h Willowsoft Overture File System (OFS1) 21h officially listed as reserved 21h FSo2 23h officially listed as reserved 24h NEC MS-DOS 3.x 26h officially listed as reserved 31h officially listed as reserved 33h officially listed as reserved 34h officially listed as reserved 36h officially listed as reserved 38h Theos 3Ch PowerQuest PartitionMagic recovery partition 40h VENIX 80286 41h Personal RISC Boot 41h PowerPC boot partition 42h SFS (Secure File System) by Peter Gutmann 45h EUMEL/Elan 46h EUMEL/Elan 47h EUMEL/Elan 48h EUMEL/Elan 4Fh Oberon boot/data partition 50h OnTrack Disk Manager, read-only partition 51h OnTrack Disk Manager, read/write partition 51h NOVELL 52h CP/M 52h Microport System V/386 53h OnTrack Disk Manager, write-only partition??? 54h OnTrack Disk Manager (DDO) 55h EZ-Drive (see also INT 13/AH=FFh"EZ-Drive") 56h GoldenBow VFeature 5Ch Priam EDISK 61h SpeedStor 63h Unix SysV/386, 386/ix 63h Mach, MtXinu BSD 4.3 on Mach 63h GNU HURD 64h Novell NetWare 286 64h SpeedStore 65h Novell NetWare (3.11) 67h Novell 68h Novell 69h Novell 70h DiskSecure Multi-Boot 71h officially listed as reserved 73h officially listed as reserved 74h officially listed as reserved 75h PC/IX 76h officially listed as reserved 7Eh F.I.X. 80h Minix v1.1 - 1.4a 81h Minix v1.4b+ 81h Linux 81h Mitac Advanced Disk Manager 82h Linux Swap partition 82h Prime 82h Solaris (Unix) 83h Linux native file system (ext2fs/xiafs) 84h OS/2-renumbered type 04h partition (related to hiding DOS C: drive) 85h Linux EXT 86h FAT16 volume/stripe set (Windows NT) 87h HPFS Fault-Tolerant mirrored partition 87h NTFS volume/stripe set 93h Amoeba file system 94h Amoeba bad block table 98h Datalight ROM-DOS SuperBoot 99h Mylex EISA SCSI A0h Phoenix NoteBIOS Power Management "Save-to-Disk" partition A1h officially listed as reserved A3h officially listed as reserved A4h officially listed as reserved A5h FreeBSD, BSD/386 A6h OpenBSD A9h NetBSD (http://www.netbsd.org/) B1h officially listed as reserved B3h officially listed as reserved B4h officially listed as reserved B6h officially listed as reserved B6h Windows NT mirror set (master), FAT16 file system B7h BSDI file system (secondarily swap) B7h Windows NT mirror set (master), NTFS file system B8h BSDI swap partition (secondarily file system) BEh Solaris boot partition C0h DR DOS/DR-DOS/Novell DOS secured partition C0h CTOS C1h DR DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition C4h DR DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition C6h DR DOS 6.0 LOGIN.EXE-secured Huge partition C6h corrupted FAT16 volume/stripe set (Windows NT) C6h Windows NT mirror set (slave), FAT16 file system C7h Syrinx Boot C7h corrupted NTFS volume/stripe set C7h Windows NT mirror set (slave), NTFS file system CBh Reserved for DR DOS/DR-DOS/OpenDOS secured FAT32 CCh Reserved for DR DOS/DR-DOS secured FAT32 (LBA) CEh Reserved for DR DOS/DR-DOS secured FAT16 (LBA) D0h Multiuser DOS secured FAT12 D1h Old Multiuser DOS secured FAT12 D4h Old Multiuser DOS secured FAT16 (<= 32M) D5h Old Multiuser DOS secured extended partition D6h Old Multiuser DOS secured FAT16 (> 32M) D8h CP/M-86 DBh CP/M, Concurrent CP/M, Concurrent DOS DBh CTOS (Convergent Technologies OS) E1h SpeedStor 12-bit FAT extended partition E2h DOS read-only (Florian Painke's XFDISK 1.0.4) E3h DOS read-only E3h Storage Dimensions E4h SpeedStor 16-bit FAT extended partition E5h officially listed as reserved E6h officially listed as reserved EBh BeOS BFS (BFS1) F1h Storage Dimensions F2h DOS 3.3+ secondary partition F3h officially listed as reserved F4h SpeedStor F4h Storage Dimensions F5h Prologue F6h officially listed as reserved FEh LANstep FEh IBM PS/2 IML (Initial Microcode Load) partition FFh Xenix bad block table Note: for partition type 07h, one should inspect the partition boot record for the actual file system type SeeAlso: #00651 (Table 00653) Values Bootstrap loader is called with (IBM BIOS): CS:IP = 0000h:7C00h DH = access bits 7-6,4-0: don't care bit 5: =0 device supported by INT 13 DL = boot drive 00h first floppy 80h first hard diskTop
INT 1A - TIME - GET SYSTEM TIME AH = 00h Return: CX:DX = number of clock ticks since midnight AL = midnight flag, nonzero if midnight passed since time last read Notes: there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs (except on Tandy 2000, where the clock runs at 20 ticks per second) IBM and many clone BIOSes set the flag for AL rather than incrementing it, leading to loss of a day if two consecutive midnights pass without a request for the time (e.g. if the system is on but idle) since the midnight flag is cleared, if an application calls this function after midnight before DOS does, DOS will not receive the midnight flag and will fail to advance the date Modern releases of MS-DOS/PC DOS (5.0+???) assume that AL is a day rollover counter rather than a flag, as expected by older releases. DOS 5 - 7.10 (Windows 98 SE) provide an undocumented CONFIG.SYS SWITCHES=/T option to force the old behaviour of the day advancing code, that is using a flag instead of a counter. DR DOS 3.31 - DR-DOS 7.03 handle AL as a flag. SeeAlso: AH=01h,AH=02h,INT 21/AH=2Ch,INT 55"Tandy 2000",INT 4E/AH=02h"TI" SeeAlso: INT 62/AX=0099h,MEM 0040h:006Ch,MEM 0040h:0070hTop
INT 1A - TIME - SET SYSTEM TIME AH = 01h CX:DX = number of clock ticks since midnight Return: nothing Notes: there are approximately 18.2 clock ticks per second, 1800B0h per 24 hrs (except on Tandy 2000, where the clock runs at 20 ticks per second) this call resets the midnight-passed flag SeeAlso: AH=00h,AH=03h,INT 21/AH=2DhTop
INT 1A - TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS) AH = 02h CF clear to avoid bug (see below) Return: CF clear if successful CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) DL = daylight savings flag (00h standard time, 01h daylight time) CF set on error (i.e. clock not running or in middle of update) Notes: this function is also supported by the Sperry PC, which predates the IBM AT; the data is returned in binary rather than BCD on the Sperry, and DL is always 00h MS-DOS/PC DOS IO.SYS/IBMBIO.COM use this function to detect if a RTC is preset by checking if the returned values are non-zero. If they are, this function is called one more time, before it is assumed that no RTC is present. BUG: some BIOSes leave CF unchanged if successful, so CF should be cleared before calling this function SeeAlso: AH=00h,AH=03h,AH=04h,INT 21/AH=2ChTop
INT 1A - TIME - SET REAL-TIME CLOCK TIME (AT,XT286,PS) AH = 03h CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) DL = daylight savings flag (00h standard time, 01h daylight time) Return: nothing Note: this function is also supported by the Sperry PC, which predates the IBM AT; the data is specified in binary rather than BCD on the Sperry, and the value of DL is ignored SeeAlso: AH=01h,AH=03h,AH=05h,INT 21/AH=2Dh,INT 4B/AH=01hTop
INT 1A - TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS) AH = 04h CF clear to avoid bug (see below) Return: CF clear if successful CH = century (BCD) CL = year (BCD) DH = month (BCD) DL = day (BCD) CF set on error Notes: DR-DOS 7.02 (after 1998-06-06) and 7.03 hook this function and correct the century to 20xx if the reported year is 1900..1980 to auto-fix ROM-BIOSes which are not Year 2000 compliant. On a running system, it would also correct the rollover bug from 1999/12/31 to 2000/01/01. The latter can be turned off using the new CONFIG.SYS YEAR2000=ON|OFF command, as hooking INT 1Ah can sometimes cause compatibility problems with 3rd party software, e.g. NCR/Symbios/LSI Logic-based SDMS PCI SCSI drivers (including all OEM drivers like from Asus, Noma, etc.), some Flash-BIOS software like Asus PFLASH, Quarterdeck's QEMM Stealth and Quick-Boot features. Using EXCLUDESTEALTHINT=1A, though, will allow QEMM's Stealth features to coexist with the DR-DOS Year 2000 rollover support. Actually, the Y2K-fix is provided since OpenDOS 7.02 BETA 2+ (1997-08-13), but although these older releases corrected the ROM-BIOS, they didn't pass all Y2K-test suites and had some obscure and inexplicable PCI problems due to the fact that the original INT 1Ah was called via indirect means. Newer releases, however, use a dynamically fixed-up direct jump to avoid these problems. PC DOS 7 plus Y2K fixes and PC DOS 2000 provide similar, though not identical means, which cannot be switched off. MS-DOS and older issues of PC DOS do not provide any such means, and thus requires extra Y2K-TSRs to be loaded when run on buggy BIOSes. BUG: some BIOSes, such as the 1998/07/25 system ROM in the Compaq Deskpro EP/SB, leave CF unchanged if successful, so CF should be cleared before calling this function SeeAlso: AH=02h,AH=04h"Sperry",AH=05h,INT 21/AH=2Ah,INT 4B/AH=02h"TI"Top
INT 1A - TIME - SET REAL-TIME CLOCK DATE (AT,XT286,PS) AH = 05h CH = century (BCD) CL = year (BCD) DH = month (BCD) DL = day (BCD) Return: nothing SeeAlso: AH=04h,INT 21/AH=2Bh"DATE",INT 4B/AH=00h"TI"Top
INT 1A - TIME - SET ALARM (AT,XT286,PS) AH = 06h CH = hour (BCD) CL = minutes (BCD) DH = seconds (BCD) Return: CF set on error (alarm already set or clock stopped for update) CF clear if successful Notes: the alarm occurs every 24 hours until turned off, invoking INT 4A each time the BIOS does not check for invalid values for the time, so the CMOS clock chip's "don't care" setting (any values between C0h and FFh) may be used for any or all three parts. For example, to create an alarm once a minute, every minute, call with CH=FFh, CL=FFh, and DH=00h. SeeAlso: AH=07h,AH=0Ch,INT 4A"SYSTEM"Top
INT 1A - TIME - CANCEL ALARM (AT,XT286,PS) AH = 07h Return: alarm disabled Note: does not disable the real-time clock's IRQ SeeAlso: AH=06h,AH=0Dh,INT 70Top
INT 1A - TIME - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE) AH = 08h CH = hours in BCD CL = minutes in BCD DH = seconds in BCD SeeAlso: AH=09hTop
INT 1A - TIME - 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 00h alarm not enabled 01h alarm enabled but will not power up system 02h alarm will power up system SeeAlso: AH=08hTop
INT 1A - TIME - READ SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Ah Return: CF set on error CF clear if successful CX = count of days since Jan 1,1980 SeeAlso: AH=04h,AH=0BhTop
INT 1A - TIME - SET SYSTEM-TIMER DAY COUNTER (XT2,PS) AH = 0Bh CX = count of days since Jan 1,1980 Return: CF set on error CF clear if successful SeeAlso: AH=05h,AH=0AhTop
INT 1A - TIME - SET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM) AH = 0Ch CH = hours (BCD) CL = minutes (BCD) DH = seconds (BCD) DL = day of month (BCD) Return: CF clear if successful CF set on error (alarm already set or clock nonfunctional) Desc: set an automatic power-on for a given time in the future Note: IBM classifies this function as optional SeeAlso: AH=06h,AH=0Dh,AH=0Eh,INT 4ATop
INT 1A - TIME - RESET RTC DATE/TIME ACTIVATED POWER-ON MODE (IBM) AH = 0Dh Return: CF clear if successful CF set on error Desc: cancel a previously-set power-on alarm Note: IBM classifies this function as optional SeeAlso: AH=07h,AH=0Ch,AH=0EhTop
INT 1A - TIME - GET RTC DATE/TIME ALARM AND STATUS (IBM) AH = 0Eh Return: CF clear if successful BH = alarm status 00h disabled 01h enabled but will not power-up system 02h enabled, system will power-up on activation CH = alarm time, hours (BCD) CL = alarm time, minutes (BCD) DH = seconds (BCD) DL = day of month (BCD) CF set on error SeeAlso: AH=0Ch,AH=0Dh,AH=0FhTop
INT 1A - TIME - INITIALIZE REAL-TIME CLOCK AH = 0Fh AL = reserved (0) Return: CF clear if successful CF set on error SeeAlso: AH=0Ch,AH=0Dh,AH=0EhTop
INT 1B C - KEYBOARD - CONTROL-BREAK HANDLER Desc: this interrupt is automatically called when INT 09 determines that Control-Break has been pressed Note: 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. SeeAlso: INT 23,MEM 0040h:0071hTop
INT 1C - TIME - SYSTEM TIMER TICK Desc: this interrupt is automatically called on each clock tick by the INT 08 handler Notes: this is the preferred interrupt to chain when a program needs to be invoked regularly not available on NEC 9800-series PCs SeeAlso: INT 08,INT E2"PC Cluster"Top
INT 1D - SYSTEM DATA - VIDEO PARAMETER TABLES Notes: the default parameter table (see #01263) is located at F000h:F0A4h for 100% compatible BIOSes Under PhysTechSoft's PTS ROM-DOS this table is fictitious. SeeAlso: INT 10/AH=00h Format of video parameters: Offset Size Description (Table 01263) 00h 16 BYTEs 6845 register values for modes 00h and 01h 10h 16 BYTEs 6845 register values for modes 02h and 03h 20h 16 BYTEs 6845 register values for modes 04h and 05h 30h 16 BYTEs 6845 register values for modes 06h and 07h 40h WORD bytes in video buffer for modes 00h and 01h (0800h) 42h WORD bytes in video buffer for modes 02h and 03h (1000h) 44h WORD bytes in video buffer for modes 04h and 05h (4000h) 46h WORD bytes in video buffer for mode 06h (4000h) 48h 8 BYTEs columns on screen for each of modes 00h through 07h 50h 8 BYTEs CRT controller mode bytes for each of modes 00h through 07h Note: QEMM v7.5 Stealth appears to copy only the first 40h bytes of this table into always-accessible memoryTop
INT 1E - SYSTEM DATA - DISKETTE PARAMETERS Notes: the default parameter table (see #01264) is located at F000h:EFC7h for 100% compatible BIOSes if the table is changed, INT 13/AH=00h should be called to ensure that the floppy-disk controller is appropriately reprogrammed before rebooting the machine, this pointer should be restored to point to the original position of the floppy parameters in the ROM BIOS. The DOS boot sector takes care of this and in the case of a bootstrap error, resets the vector. It also passes the original pointer to the IO.SYS/IBMDOS.COM file for possible later restoration. under PhysTechSoft's PTS ROM-DOS this table is fictitious. the DR-DOS multi-OS LOADER (at least 1.04 up to including DR-DOS 7.03) does not alter the INT 1Eh vector when launching IBMBIO.COM files via its boot methods "S" or "D". Although this allows booting (uncompressed) IBMBIO.COM files bigger than 29 KB, it may occasionally cause the floppy parameters to get trashed due to a bug in the DR-DOS 7.03 IBMBIO.COM startup code. BUG: The 2nd level decompressor of the DR-DOS 7.03 IBMBIO.COM (1998/08/11 to 1999/07) start-up code erroneously assumes that the floppy parameters reside at 0000h:7C00h (normally set up there by the boot sector) instead of relying on the INT 1Eh vector to point at their location. Since the "assumed" floppy parameters get moved around and INT 1Eh gets updated to point to their new location, this may cause the contents of the floppy params to get trashed, if they weren't actually copied to 0000h:7C00h by the bootstrap loader (that is the boot sector or the LOADER utility). SeeAlso: INT 13/AH=0Fh,INT 41"HARD DISK 0",INT 4D/AH=0Ah Format of diskette parameter table: Offset Size Description (Table 01264) 00h BYTE first specify byte bits 7-4: step rate (Fh=2ms,Eh=4ms,Dh=6ms,etc.) bits 3-0: head unload time (0Fh = 240 ms) 01h BYTE second specify byte bits 7-1: head load time (01h = 4 ms) bit 0: non-DMA mode (always 0) Note: The DOS boot sector sets the head load time to 15ms, however, one should retry the operation on failure 02h BYTE delay until motor turned off (in clock ticks) 03h BYTE bytes per sector (00h = 128, 01h = 256, 02h = 512, 03h = 1024) 04h BYTE sectors per track (maximum if different for different tracks) 05h BYTE length of gap between sectors (2Ah for 5.25", 1Bh for 3.5") 06h BYTE data length (ignored if bytes-per-sector field nonzero) 07h BYTE gap length when formatting (50h for 5.25", 6Ch for 3.5") 08h BYTE format filler byte (default F6h) 09h BYTE head settle time in milliseconds 0Ah BYTE motor start time in 1/8 seconds ---IBM SurePath BIOS--- 0Bh BYTE maximum track number 0Ch BYTE data transfer rate 0Dh BYTE drive type in CMOS SeeAlso: #03226 at INT 4D/AH=09hTop
INT 1F - SYSTEM DATA - 8x8 GRAPHICS FONT Desc: this vector points at 1024 bytes of graphics data, 8 bytes for each character 80h-FFh Notes: graphics data for characters 00h-7Fh stored at F000h:FA6Eh in 100% compatible BIOSes Under PhysTechSoft's PTS ROM-DOS this table is fictitious. SeeAlso: INT 10/AX=5000h,INT 43Top
INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS SeeAlso: INT 13/AH=00h,INT 13/AH=02h,INT 47"SuperBIOS",INT 63"Adaptec"Top
INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE ADDRESS [NOT A VECTOR!] Notes: the default parameter table array is located at F000h:E401h in 100% compatible BIOSes; the pointer may be overridden by the hard disk controller's BIOS to support drive formats unknown to the ROM BIOS not used by some PS/2 models BIOSes which support four hard drives may store the parameter tables for drives 81h-83h immediately following the parameter table pointed at by INT 41, with a separate copy of the drive 81h table for INT 46. The check for such an arrangement is to test whether INT 46 points somewhere other than exactly 16 bytes past INT 41, and the sixteen bytes starting at offset 10h from INT 41 are identical to the sixteen bytes pointed at by INT 46 another arrangement for BIOSes which support four IDE drives is to have four tables pointed at by INT 41 in the order primary master, primary slave, secondary master, and secondary slave, in which case (for example) a system with only primary master and secondary master will have valid tables at offsets 00h and 20h, with garbage (but sectors-per-track = 00h) at offsets 10h and 30h SeeAlso: #03196,INT 13/AH=09h,INT 1E,INT 46"HARD DISK 1",INT 60"Adaptec" SeeAlso: INT C0"AMI" Format of fixed disk parameters: Offset Size Description (Table 03196) 00h WORD number of cylinders 02h BYTE number of heads 03h WORD starting reduced write current cylinder (XT only, 0 for others) 05h WORD starting write precompensation cylinder number 07h BYTE maximum ECC burst length (XT only) 08h BYTE control byte (see #03197,#03198) 09h BYTE standard timeout (XT only, 0 for others) 0Ah BYTE formatting timeout (XT and WD1002 only, 0 for others) 0Bh BYTE timeout for checking drive (XT and WD1002 only, 0 for others) 0Ch WORD cylinder number of landing zone (AT and later only) 0Eh BYTE number of sectors per track (AT and later only) 0Fh BYTE reserved SeeAlso: #00273,#00277 Bitfields for XT fixed disk control byte: Bit(s) Description (Table 03197) 2-0 drive step speed 000 3ms 100 200ms 101 70ms (default) 110 3ms 111 3ms 5-3 unused 6 disable ECC retries 7 disable access retries Bitfields for AT fixed disk control byte: Bit(s) Description (Table 03198) 0 unused 1 reserved (0) (disable IRQ) 2 reserved (0) (no reset) 3 set if more than 8 heads 4 always 0 5 set if manufacturer's defect map on max cylinder+1 (AT and later only) 6 disable ECC retries 7 disable access retriesTop
INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE ADDRESS [NOT A VECTOR!] Note: not used by some PS/2 models SeeAlso: INT 13/AH=09h,INT 41"HARD DISK 0",INT 60"Adaptec",INT C0"AMI"Top
INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr) AL = scan code??? Note: This interrupt may be un-initialized (0000h:0000h) on old machines. This should be checked before calling or hooking this vector. MS-DOS/PC DOS 3.3x-4.x KEYB hooked the INT 48h handler. For AL <= 80h it checked that either ALT and neither CTRL key was pressed, and in that case, it cleared the CTRL flag in the BIOS variable at 0040:0017h and stored its contents in an internal variable, before continuing with the previous (non-zero) INT 48h handler. SeeAlso: INT 49"PCjr"Top
INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr) SeeAlso: #03208,INT 48"PCjr" Format of PCjr scan-code translation table: Offset Size Description (Table 03208) 00h BYTE number of non-keyboard scancodes in the table 01h N WORDs high byte 00h (NUL) byte scancode with low order byte representing the scancode mapped values relative to their input values within the range of 56h through 7EhTop
INT 4A C - SYSTEM - USER ALARM HANDLER Desc: This interrupt is invoked by the BIOS when a real-time clock alarm occurs; an application may use it to perform an action at a predetermined time. Note: this interrupt is called from within a hardware interrupt handler, so all usual precautions against reentering DOS must be taken SeeAlso: INT 1A/AH=06hTop
INT 4D - TI Professional PC - DISK - RESET DISK SYSTEM AH = 00h DL = drive (if bit 7 is set both hard disks and floppy disks reset) Return: AH = status (see #00234 at INT 13/AH=01h) CF clear if successful (returned AH=00h) CF set on error Note: this function is the same as INT 13/AH=00h on a standard PC BIOS SeeAlso: AH=01h,AH=02h,AH=08h,AH=0Bh,INT 13/AH=00h,INT 46"TI Professional" SeeAlso: INT 48/AH=00h"TI Professional",INT 4A/AH=00h"TI"Top
INT 4D - TI Professional PC - DISK - GET STATUS OF LAST OPERATION AH = 01h DL = drive (bit 7 set for hard disk) Return: CF clear if status unchanged CF set if status changed since last call AH = 00h AL = status of previous operation (see #00234 at INT 13/AH=01h) Notes: this function is nearly the same as INT 13/AH=01h on a standard PC BIOS the TI's BIOS tranparently performs a number of retries, and an error status is only reported if all of the retries fail. To get the error status if the operation succeeded on a retry, use AH=07h instead SeeAlso: AH=00h,AH=07h,INT 13/AH=01hTop
INT 4D - TI Professional PC - DISK - READ SECTOR(S) INTO MEMORY AH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234 at INT 13/AH=01h) AL = number of sectors transferred ES:BX -> buffer for last sector processed (including one with errors) SeeAlso: AH=00h,AH=01h,AH=03h,AH=04h,INT 13/AH=02hTop
INT 4D - TI Professional PC - DISK - WRITE SECTOR(S) FROM MEMORY AH = 03h AL = number of sectors to write (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> buffer containing data Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234 at INT 13/AH=01h) AL = number of sectors transferred ES:BX -> buffer for last sector processed (including one with errors) SeeAlso: AH=00h,AH=01h,AH=02h,AH=04h,INT 13/AH=03hTop
INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR CRC(S) AH = 04h AL = number of sectors to verify (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234 at INT 13/AH=01h) AL = number of sectors transferred ES:BX -> buffer for last sector processed (including one with errors) Note: even though no data is transferred, ES:BX must still be valid SeeAlso: AH=00h,AH=01h,AH=02h,AH=06h,INT 13/AH=04hTop
INT 4D - TI Professional PC - DISK - NOP AH = 05h Note: on the TI Pro, FORMAT.COM contains direct port I/O commands to perform disk formatting, rather than using the BIOSTop
INT 4D - TI Professional PC - DISK - VERIFY DISK SECTOR(S) AH = 06h AL = number of sectors to verify (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234 at INT 13/AH=01h) AL = number of sectors transferred ES:BX -> buffer for last sector processed (including one with errors) Note: even though no data is transferred, ES:BX must still be valid because an actual comparison with disk data is performed, not just the CRC check of the standard PC BIOS or INT 4D/AH=04h SeeAlso: AH=00h,AH=01h,AH=02h,AH=04h,INT 13/AH=04hTop
INT 4D - TI Professional PC - DISK - GET RETRY STATUS OF LAST OPERATION AH = 07h DL = drive (bit 7 set for hard disk) Return: CF clear if status unchanged CF set if status changed since last call AH = 00h AL = status of previous operation (see #00234 at INT 13/AH=01h) Notes: this function is nearly the same as INT 13/AH=01h on a standard PC BIOS the TI's BIOS tranparently performs a number of retries; this function returns the error status of a failed operation even if the operation succeeded on a retry SeeAlso: AH=00h,AH=01h,INT 13/AH=01hTop
INT 4D - TI Professional PC - DISK - SET STANDARD DEVICE INTERFACE TABLE AH = 08h DL = drive number (00h-03h) AL = drive type 00h single-sided 48 tpi (40-track, 8 sectors, 512 bytes/sector) 01h double-sided 48 tpi (40-track, 8 sectors, 512 bytes/sector) 02h single-sided 96 tpi (80-track, 8 sectors, 512 bytes/sector) 03h double-sided 96 tpi (80-track, 8 sectors, 512 bytes/sector) Return: nothing??? SeeAlso: AH=00h,AH=09hTop
INT 4D - TI Professional PC - DISK - SET DEVICE INTERFACE TABLE ADDRESS AH = 09h DL = drive number (00h-07h) ES:BX -> Device Interface Table (see #03226) Return: nothing??? SeeAlso: AH=00h,AH=08h,AH=0Ah,INT 1E Format of TI Professional PC Device Interface Table: Offset Size Description (Table 03226) 00h DWORD -> entry point for disk routine 04h WORD bytes per sector 06h BYTE sectors per track 07h BYTE number of heads 08h BYTE number of cylinders 09h BYTE retry count 0Ah BYTE precompensation start SeeAlso: #01264 at INT 1ETop
INT 4D - TI Professional PC - DISK - GET DEVICE INTERFACE TABLE ADDRESS AH = 0Ah DL = drive number (00h-07h) Return: AH = status ES:BX -> Device Interface Table (see #03226) SeeAlso: AH=00h,AH=08h,AH=09h,INT 1ETop
INT 4D - TI Professional PC - DISK - TURN OFF ALL DRIVES AH = 0Bh Return: AH = 00h Note: used for diagnostics or to conserve power SeeAlso: AH=00hTop
INT FE - AT/XT286/PS50+ - destroyed by return from protected mode Note: the ROM BIOS uses 0030h:0100h as the initial stack on startup, which is the last fourth of the interrupt vector table. If the processor is returned to real mode via a hardware reset (the only possibility on an 80286, though there are a number of ways of generating one), then the BIOS startup code stacks three words on its scratch stack before determining that a return to real mode has been requested. As a result, INT FE and INT FF are corrupted. SeeAlso: INT FF"XT286"Top
INT FF - AT/XT286/PS50+ - destroyed by return from protected mode Note: (see INT FE"XT286") SeeAlso: INT FE"XT286"Top