| |
Interrupt 26h Absolute Disk Write
These transfer control directly to the device driver. On return,
the original flags are still on the stack (put there by the 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.
The request is as follows:
INT 25 for Absolute Disk Read, INT 26 for Absolute Disk Write
Input |
DOS1 |
Y |
DOS2 |
Y |
DOS3 |
Y |
DOS5 |
Y |
Output |
AX |
|
Drive
Number |
Result
Code |
Int
24 Error Code |
AX |
|
|
|
|
|
BX |
CX |
Number
of Sectors |
|
|
CX |
DX |
First
Sector |
|
|
DX |
DS:BX |
Disk
Transfer Address (Buffer) |
Set
on Error |
CF |
Drive Number: 0=A:, 1=B:, etc.
For DOS 4.xx extended read / write:
Input |
DOS1 |
Y |
DOS2 |
Y |
DOS3 |
Y |
DOS5 |
Y |
Output |
AX |
|
Drive
Number |
Result
Code |
Int
24 Error Code |
AX |
|
|
|
|
|
BX |
CX |
FFFFh |
|
|
CX |
DX |
First
Sector |
|
|
DX |
DS:BX |
Parameter
Block |
Set
on Error |
CF |
Parameter Block:
00h DWORD Logical Sector Number
04h WORD Number of Sectors
06h DWORD Pointer to Data Buffer
Result Code:
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
Notes:
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
See Also INT/25h INT/13h/03h |