{{page>en:templates:biosint}} ====== Int 13H, AH=03H ====== ===== Version ===== IBM 5150 and higher ===== Brief ===== Write sector ===== Family API ===== [[en:docs:fapi:DosWrite]] ===== Input ===== * AH = 03h * AL = number of sectors to write (must be nonzero) * CH = low eight bits of cylinder number * CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) * DH = head number * DL = drive number (bit 7 set for hard disk) * ES:BX -> data buffer ===== Return ===== * CF set on error * CF clear if successful * AH = status (see [[00234|status]]) * AL = number of sectors transferred (only valid if CF set for some BIOSes) ===== Macro ===== INCLUDE BIOS.INC @DskWrite 0, 0, 0, 1, 1, offset buf ===== Notes ===== * errors on a floppy may be due to the motor failing to spin up quickly enough; the write should be retried at least three times, resetting the disk with AH=00h between attempts * most BIOSes support "multitrack" writes, where the value in AL exceeds the number of sectors remaining on the track, in which case any additional sectors are written beginning at sector 1 on the following head in the same cylinder; the CONFIG.SYS command MULTITRACK can be used to force DOS to split disk accesses which would wrap across a track boundary into two separate calls * the IBM AT BIOS and many other BIOSes use only the low four bits of DH (head number) since the WD-1003 controller which is the standard AT controller (and the controller that IDE emulates) only supports 16 heads * AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more than 1024 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of DH * under Windows95, an application must issue a physical volume lock on the drive via INT 21/AX=440Dh before it can successfully write to the disk with this function ===== Note ===== Text based on [[http://www.cs.cmu.edu/~ralf/files.html|Ralf Brown Interrupt List Release 61]] {{page>en:templates:biosapi}} {{page>en:templates:fapi}}