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