Interrupt 26h Absolute Disk Write Interrupt 25h Absolute Disk Read(0:0094h, 0:0098h)
These transfer control directly to the device\drivers. On return, the
original flags are still on the stack (put there by the INTEL\80x86op -INT
instruction). This is necessary because return information is passed back in
the current flags.
The number of sectors specified is transferred between the given drive and
the transfer address. Logical sector numbers are obtained by numbering each
sector sequentially starting from track 0, head 0, sector 1 (logical sector 0)
and continuing along the same head, then to the next head until the last sector
on the last head of the track is counted. Thus, logical sector 1 is track 0,
head 0, sector 2; logical sector 2 is track 0, head 0, sector 3; and so on.
Numbering then continues wih sector 1 on head 0 of the next track. Note that
although the sectors are sequentially numbered (for example, sectors 2 and 3 on
track 0 in the example above), they may not be physically adjacent on disk, due
to interleaving. Note that the mapping is different from that used by DOS 1.10
for dual-sided diskettes.
Interrupt 26h Absolute Disk Write Interrupt 25h Absolute Disk Read
The request is as follows:
int 25 for Absolute Disk Read,
int 26 for Absolute Disk Write
entry AL drive number (0=A:, 1=B:, etc)
CX number of sectors to read
DS:BX disk transfer address (buffer)
DX first relative sector to read - beginning logical sector number
return CF set if error
AL error code issued to Int\24 in low half of DI
AH 01h bad command
02h bad address mark
03h write-protected disk
04h requested sector not found
08h DMA failure
10h data error (bad CRC)
20h controller failed
40h seek operation failed
80h attachment failed to respond
Interrupt 26h Absolute Disk Write Interrupt 25h Absolute Disk Read
note 1) Original flags on stack! Be sure to pop the stack to prevent
uncontrolled growth
2) Ints 25 and 26 will try rereading a disk if they get an error the first
time.
3) All registers except the segment registers are destroyed by these calls
Interrupt 26h ABSOLUTE DISK WRITE
(except DOS 4.0/Compaq DOS 3.31 32M partition)
entry AL drive number (0=A, 1=B, etc)
DS:BX pointer to Disk Transfer Address (buffer)
CX number of sectors to write
DX first relative sector to write
return CF 1 if error
AL error code issued to Int\24 in low half of DI
AH same error codes as for int 25h
note Original flags on stack!
Interrupt 26h DOS 4.0/Compaq DOS 3.31 - ABSOLUTE DISK WRITE
(32M hard disk partitions)
entry AL drive number (0=A, 1=B, etc)
CX 0FFFFh
DS:BX Packet address
DWORD sector number
WORD number of sectors to write
DWORD transfer address
return same as above?
note Partition is potentially 32M (and requires this form of the call) if
bit 1 of struct -device attribute code in device\drivers are set