Specifications
MICROPROCESSADORES
INTERRUPÇÕES
5
Luís Miguel Charrua Figueiredo 5 - 6 E.N.I.D.H.
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
: #M0022
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 and 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=02h
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
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=06h
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)










