Note: This IBM PC BIOS API call is for DOS/Win16 personality only. Use Family API for portability.

Note: osFree Macro Library provides macros for most of functions

2022/03/13 05:41 · prokushev · 0 Comments

Int 13H, AH=03H


IBM 5150 and higher


Write sector

Family API


  • 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


  • CF set on error
  • CF clear if successful
  • AH = status (see status)
  • AL = number of sectors transferred (only valid if CF set for some BIOSes)


@DskWrite  0, 0, 0, 1, 1, offset buf


  • 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