--------B-1300------------------------------- 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:003Eh --------B-1301------------------------------- 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) BBh undefined error (hard disk) CCh write fault (hard disk) E0h status register error (hard disk) FFh sense operation failed (hard disk) SeeAlso: #M0022 --------B-1302------------------------------- 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 v7 [Win95]) have a bug which prevents booting on hard disks with 256 heads, so many modern BIOSes provide mappings with at most 255 heads 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=02h --------B-1303------------------------------- 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=03h --------B-1304------------------------------- 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 11/15/85) 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; the write should be retried at least three times, resetting the disk with AH=00h between attempts 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 SeeAlso: AH=02h,AH=44h,INT 4D/AH=04h,INT 4D/AH=06h --------B-1305------------------------------- 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 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) --------B-1305------------------------------- 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=1Ah --------d-1305------------------------------- INT 13 - Future Domain SCSI BIOS - SEND SCSI MODE SELECT COMMAND AH = 05h DL = hard drive ID ES:BX -> mode select data (see #00236) Return: CF set on error CF clear if successful AH = status code (see #00234) Notes: this function can be called before AH=07h"SCSI" or AH=06h"SCSI" to format a SCSI disk with the desired parameters the mode select data below is from the SCSI-1 specification the TMC-950 does not support any Future Domain BIOS calls; instead, it provides a full CAM implementation (see INT 4F/AX=8100h) SeeAlso: AH=06h"SCSI",AH=07h"SCSI",INT 4F/AX=8100h Format of Future Domain SCSI mode select data: Offset Size Description (Table 00236) 00h BYTE number of bytes of remaining data (12 + vendor unique length) 01h BYTE reserved (0) 02h BYTE medium type (0 for hard disk) 03h BYTE reserved (0) 04h BYTE block descriptor length (8) 05h BYTE density code (0 for hard disk) 06h 3 BYTEs (big-endian) number of blocks (000000h for entire disk) 09h BYTE reserved (0) 0Ah 3 BYTEs (big-endian) block length (512 standard, or 256) 0Dh ??? vendor-specific parameter bytes (optional) --------d-13057FSI324D----------------------- INT 13 - 2M - FORMAT TRACK AX = 057Fh SI = 324Dh ("2M") CH = track number DH = head number DL = drive number ES:BX -> boot sector of future 2M diskette Return: CF set on error CF clear if successful AH = status (see #00234) Program: 2M is a TSR developed by Ciriaco Garcia de Celis to support non standard diskettes with 820-902/1476-1558K (5.25 DD/HD) and 984-1066/1804-1886K/3608-3772K (3.5 DD/HD/ED) InstallCheck: must search for a "CiriSOFT:2M:1.3" or "CiriSOFT:2MX:3.0" or similar (recomended ":2M:", ":2MX:", or ":2MB:" substrings) in the CiriSOFT TSR interface Notes: it is not necessary to call AH=17h or AH=18h first (will be ignored) the diskette format must always begin on cylinder 0 head 0 the boot sector can be obtained from an already-formatted 2M diskette (by calling AH=02h with head number 00h in 2M v1.x and with head number 80h for 2M v2+) since 2M v2.0, the BOOT sector is emulated using the first physical sector of FAT2; the second-sixth physical sectors of FAT2 in HD or ED diskettes store the SuperBOOT code. To skip the FAT2 emulation (using FAT1) of 2M, in order to read the SuperBOOT code, head number must be 80h-81h instead 0-1 (bit 7 active) in standard read/write functions. This lets diskcopy programs format 2M target diskettes copying SuperBOOT code. If the target diskette is already 2MF formatted (containing boot code) this trick it is not necessary. when using STV technology (offset 65 of boot sector equal to 1) it is necessary to write the full track before formatting (except track 0 side 0) to complete the format and skip future CRC errors on read; in track 0 side 1 the head used must be 81h instead 1. Diskcopy programs may do a format-write-verify sequential phases to improve performance SeeAlso: AH=05h"FLOPPY",AH=18h/CX=5055h,INT 2F"CiriSOFT" --------B-1306------------------------------- 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" --------d-1306------------------------------- INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE WITH BAD SECTOR MAPPING AH = 06h AL = interleave (0 = default, 1 = consecutive sectors, 2 - 255 = vendor unique) DL = hard drive ID DH = defect list info (see #00237) ES:BX -> defect table A, B or C (see #00238,#00239,#00240) Return: CF set on error CF clear if successful AH = status code (see #00234) Notes: block addresses must be in ascending order (for table B, cylinder is most significant, byte from index least significant; for table C, cylinder is most significant, sector number least significant) table B defect bytes from index of FFFFFFFFh indicates that the entire track shall be reassigned table C defect sector number of FFFFFFFFh indicates that the entire track shall be reassigned the TMC-950 does not support any Future Domain BIOS calls; instead, it provides a full CAM implementation (see INT 4F/AX=8100h) SeeAlso: AH=05h"SCSI",AH=06h"FIXED",AH=07h"SCSI" Bitfields for Future Domain SCSI defect list info: Bit(s) Description (Table 00237) 7-5 drive LUN 4 defect list is available 3 defect list is complete (erase drive's defect list) 2-0 defect table format (000=use defect table A, 100=use defect table B, 101=use defect table C) Format of Future Domain SCSI defect table A: Offset Size Description (Table 00238) 00h WORD number of bytes remaining in table 02h BYTE reserved (0) 03h BYTE reserved (0) 04h WORD (big-endian) defect list length (4*number of defects) 06h 4 DWORDs (big-endian) defect block addresses Format of Future Domain SCSI defect table B: Offset Size Description (Table 00239) 00h WORD number of bytes remaining in table 02h BYTE reserved (0) 03h BYTE reserved (0) 04h WORD (big-endian) defect list length (8*number of defects) 06h 8N BYTEs defect list [array] (see #00241) Format of Future Domain SCSI defect table C: Offset Size Description (Table 00240) 00h WORD number of bytes remaining in table 02h BYTE reserved (0) 03h BYTE reserved (0) 04h WORD (big-endian) defect list length (8*number of defects) 06h 8N BYTEs defect list [array] (see #00241) Format of Future Domain SCSI defect list entry: Offset Size Description (Table 00241) 00h 3 BYTEs (big-endian) cylinder number of defect 03h BYTE head number of defect 04h DWORD (big-endian) defect bytes from index --------d-1306------------------------------- INT 13 - Adaptec AHA-154xA/Bustek BT-542 BIOS - IDENTIFY SCSI DEVICES AH = 06h Return: AH = status code (see #00234) CF clear if successful AL = first drive supported (80h nonconcurrent operation, 81h concurrent operation) CF set on error Desc: determine the number of the first supported SCSI drive Note: the return value is 80h when two SCSI drives are supported, 81h if only one SCSI drive is installed SeeAlso: AH=08h"PC",#00732 at INT 1A/AX=B102h --------d-1306------------------------------- INT 13 - V10DISK.SYS - READ DELETED SECTORS AH = 06h AL = number of sectors CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive ES:BX -> buffer Return: AH = status code (see #00234) Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies SeeAlso: AH=02h,AH=07h"V10DISK.SYS" --------B-1307------------------------------- 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=1Ah --------d-1307------------------------------- INT 13 - Future Domain SCSI BIOS - FORMAT DRIVE AH = 07h AL = interleave (0 = default, 1 = consecutive sectors, 2 - 255 = vendor unique) DL = hard drive ID Return: CF set on error CF clear if successful AH = status code (see #00234) SeeAlso: AH=05h"SCSI",AH=06h"SCSI",AH=07h"FIXED" --------d-1307------------------------------- INT 13 - V10DISK.SYS - WRITE DELETED SECTORS AH = 07h AL = number of sectors CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive ES:BX -> buffer Return: AH = status code (see #00234) Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies SeeAlso: AH=03h,AH=06h"V10DISK.SYS" --------B-1308------------------------------- INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI) AH = 08h DL = drive (bit 7 set for hard disk) 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 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 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 the PC-Tools PCFORMAT program requires that AL=00h before it will proceed with the formatting BUG: 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 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 Device --------d-1308------------------------------- INT 13 - V10DISK.SYS - SET FORMAT AH = 08h AL = number of sectors CH = cylinder number (bits 8,9 in high bits of CL) CL = sector number DH = head DL = drive Return: AH = status code (see #00234) Program: V10DISK.SYS is a driver for the Flagstaff Engineering 8" floppies Note: details not available SeeAlso: AH=03h,AH=06h"V10DISK.SYS" --------y-130800DLF0------------------------- INT 13 - SecureDrive - INSTALLATION CHECK AX = 08000h DL = F0h Return: AX = EDCBh for version 1.0-1.2 AX = EDCCh for version 1.3 CX = code segment DX = data address within code segment Program: SecureDrive by Mike Ingle allows you to create an encrypted partition on your harddisk. --------B-1309------------------------------- 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" --------B-130A------------------------------- 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 SeeAlso: AH=02h,AH=0Bh,MEM 0040h:0074h --------B-130B------------------------------- 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:0074h --------B-130C------------------------------- 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=47h --------B-130D------------------------------- 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=0Dh --------B-130E------------------------------- 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=0Ah --------B-130F------------------------------- 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=0Bh --------B-1310------------------------------- 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=11h --------B-1311------------------------------- 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:003Eh --------B-1312------------------------------- 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=14h --------d-1312------------------------------- INT 13 - Future Domain SCSI CONTROLLER - STOP SCSI DISK AH = 12h DL = hard drive ID Return: CF set on error CF clear if successful AH = status code (see #00234 at AH=01h) Notes: available at least on the TMC-870 8-bit SCSI controller BIOS v6.0A if the given drive is a SCSI device, the SCSI Stop Unit command is sent and either "Disk prepared for shipping" or "Disk Stop command failed" is displayed the TMC-950 does not support any Future Domain BIOS calls; instead, it provides a full CAM implementation (see INT 4F/AX=8100h) --------d-1312------------------------------- INT 13 - SyQuest - START/STOP SCSI DISK AH = 12h AL = subfunction 00h start disk 01h stop disk CX = wait flag 00h wait for ready 01h don't wait for ready DL = hard drive ID (bit 7 for hard disks must be set) Return: CF set on error CF clear if successful AH = status 00h successful 01h invalid function request 80h timeout SeeAlso: AH=12h"Future Domain",AH=13h"SyQuest" --------B-1313------------------------------- 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" --------d-1313------------------------------- INT 13 - SyQuest - READ DRIVE PARAMATERS (for DOS 5+) AH = 13h DL = drive ID (bit 7 set for hard disks) Return: CF set on error AH = status (07h) (see #00234 at AH=01h) CF clear if successful AH = 00h 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: the return values are identical to the standard INT 13/AH=08h, but the number of drives is not limited to 2, so scanning all possible drive numbers with the Read DASD Type call (AH=15h) should generally be preferred to determine the number of drives attached to the system. SeeAlso: AH=08h"PC",AH=12h"SyQuest",AH=15h,AH=59h"SyQuest" --------B-1314------------------------------- 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=13h --------B-1315------------------------------- INT 13 - DISK - GET DISK TYPE (XT 1/10/86 or later,XT286,AT,PS) AH = 15h DL = drive number (bit 7 set for hard disk) Return: CF clear if successful AH = type code 00h no such drive 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 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 SeeAlso: AH=08h,AH=16h,AH=17h,AH=19h"SCSI",MEM 0040h:0075h --------B-1316------------------------------- INT 13 - FLOPPY DISK - DETECT DISK CHANGE (XT 1/10/86 or later,XT286,AT,PS) AH = 16h DL = drive number (00h-7Fh) 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 BUG: some versions of Award 386 Modular BIOS and AMI BIOS fail to clear the media-change status SeeAlso: AH=15h,AH=49h --------B-1317------------------------------- 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=18h --------d-131700----------------------------- INT 13 - Future Domain SCSI CONTROLLER - GET INQUIRY INFO FROM SCSI DEVICE AX = 1700h CL = length of buffer DL = hard drive ID ES:BX -> buffer for info (see #00243) Return: CF clear if successful CH = number of bytes returned in buffer??? CF set on error AH = status code (see #00234 at AH=01h) Notes: this function is not available with 8-bit controller ROM versions < 7.0 information block bytes 5-n are vendor-specific in older SCSI devices the TMC-950 does not support any Future Domain BIOS calls; instead, it provides a full CAM implementation (see INT 4F/AX=8100h) SeeAlso: AH=18h"SCSI",AH=1Bh"SCSI" Format of Future Domain SCSI inquiry information block: Offset Size Description (Table 00243) 00h BYTE device type bits 0-4: peripheral device type (see #00244) bits 5-7: peripheral qualifier (see #00245) 01h BYTE device type modifier bits 0-6: device type modifier bit 7: removable medium 02h BYTE SCSI version (see #00246) 03h BYTE data format/capabilities (see #00247) 04h BYTE additional data length (total remaining bytes) 05h 2 BYTEs reserved 07h BYTE device capabilities (see #00248) 08h 8 BYTEs vendor identification (space-padded ASCII) 10h 8 BYTEs product identification (space-padded ASCII) 20h 4 BYTEs product revision level (space-padded ASCII) 24h 20 BYTEs vendor specific 38h 40 BYTEs reserved 60h var vendor specific parameters (Table 00244) Values for Future Domain SCSI peripheral device type: 00h direct-access device (e.g., magnetic disk) 01h sequential-access device (e.g., magnetic tape) 02h printer device 03h processor device 04h write-once device (e.g., some optical disks) 05h CD-ROM device 06h scanner device 07h optical memory device (e.g., some optical disks) 08h medium changer device (e.g., jukeboxes) 09h communications device 0Ah (defined by ASC IT8) 0Bh (defined by ASC IT8) 0Ch-1Eh reserved 1Fh unknown or no device type (Table 00245) Values for Future Domain SCSI peripheral qualifier: 000b device is currently connected to this logical unit and available 001b target is capable of supporting the specified peripheral, but the physical device is not currently connected to this logical unit 010b reserved 011b target can't support a physical device on this logical unit 1xxb vendor specific Bitfields for Future Domain SCSI version: Bit(s) Description (Table 00246) 0-2 ANSI-approved version 000 device might or might not comply to ANSI standard 001 device complies to ANSI SCSI-1 010 device complies to ANSI SCSI-2 other reserved 3-5 ECMA version 6-7 ISO version Bitfields for Future Domain SCSI data format/capabilities: Bit(s) Description (Table 00247) 0-2 response data format 000 information block is as specified in SCSI-1 001 information block is as specified in CCS 010 information block is as specified in SCSI-2 other reserved 4-5 reserved 6 terminate I/O process supported 7 asynchronous event notification supported Bitfields for Future Domain SCSI device capabilities: Bit(s) Description (Table 00248) 0 device responds to RESET with a hard RESET 1 tagged command queuing supported 2 reserved 3 linked commands supported 4 synchronous data transfer supported 5 16-transfers supported 6 32-transfers supported 7 relative addressing supported --------B-1318------------------------------- 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 1E --------d-1318------------------------------- INT 13 - Future Domain SCSI BIOS - GET SCSI CONTROLLER INFORMATION AH = 18h DL = hard drive ID Return: CF set on error AH = status code (see #00234 at AH=01h) CF clear if successful AX = 4321h (magic number) CX = controller family code (see #00249) ---if family code=0200h DH = number of exclusively ROM-controlled SCSI devices DL = canonical SCSI device number for specified drive ---if family code <> 0200h BH = number of exclusively ROM-controlled SCSI devices BL = canonical SCSI device number for specified drive Notes: also sets an internal flag (non-resettable) which prevents some controller messages from being displayed, allows writes to removable devices (use caution!), and enables the INT 13 interface for more than one drive (i.e. DL >= 81h) in at least some ROM versions the TMC-950 does not support any Future Domain BIOS calls; instead, it provides a full CAM implementation (see INT 4F/AX=8100h) SeeAlso: AH=05h"SCSI",AX=1700h"SCSI",AH=1Bh"SCSI",INT 4F/AX=8100h (Table 00249) Values for Future Domain SCSI controller family code: 0200h TMC-1680/? (ROM 3.0) 0203h TMC-1650/1660/1670/1680 (ROM 2.0) 040Ah TMC-820/830/840/850/860/870/875/880/885 (ROM <= 6.0A) 050Dh TMC-840/841/880/881 (ROM 5.2D) 0700h TMC-830/850/860/875/885 (ROM 7.0)