INT 26 - Absolute Disk Write
AL = logical drive number (0=A:, 1=B:, 2=C:, ...)
CX = number of sectors to write
= -1 if DOS 4.x (control block pointer is in DS:BX)
DX = starting logical sector number (see below for DOS 4.x+)
DS:BX = pointer to data buffer
= pointer to control block (DOS 4.x+, see below)
on return:
AH = error code if CF set:
01 bad command
02 bad address mark
03 write protect
04 sector not found
08 DMA failure
10 data error (bad CRC)
20 controller failed
40 seek failed
80 attachment failed to respond
AL = BIOS error code if CF set
00 write protect error
01 unknown unit
02 drive not ready
03 unknown command
04 data error (bad CRC)
05 bad request structure length
06 seek error
07 unknown media type
08 sector not found
0A write fault
0B read fault
0C general failure
Control Block Format (DOS 4.x):
Offset Size Description
00 dword starting sector
04 word number of sectors to write
06 dword pointer to buffer
- writes disk sectors from buffer at DS:BX or DS:[BX+6]
- after calling this interrupt the flags register remains on the
stack and must be popped manually
- sectors are logical sectors starting at the beginning of a
logical disk; each DOS partition on a drive unit is considered
one logical drive and has it's own logical sector numbers with
track 0 starting at the first track in the partition
- this function uses logical drives, and is susceptible to ASSIGN
- physical sector numbers can be converted to and from DOS sector
numbers with the following formulas:
dos_sector = (sector - 1) + (head * sectors_per_track) +
(track * sectors_per_track * num_heads)
physical_sector = 1 + (dos_sector MOD sectors_per_track)
physical_head = (dos_sector / sectors_per_track) MOD num_heads
physical_track = dos_sector / (sectors_per_track * num_heads)
- see INT 13,STATUS