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