INT 13 - Diskette BIOS Services

For more information see the following topics:

    INT 13,0  Reset disk system
    INT 13,1  Get disk status
    INT 13,2  Read disk sectors
    INT 13,3  Write disk sectors
    INT 13,4  Verify disk sectors
    INT 13,5  Format disk track
    INT 13,6  Format track and set bad sector flag (XT & portable)
    INT 13,7  Format the drive starting at track (XT & portable)
    INT 13,8  Get current drive parameters (XT & newer, see note ╪)
    INT 13,9  Initialize 2 fixed disk base tables (XT & newer, see note ╪)
    INT 13,A  Read long sector (XT & newer, see note ╪)
    INT 13,B  Write long sector (XT & newer, see note ╪)
    INT 13,C  Seek to cylinder (XT & newer, see note ╪)
    INT 13,D  Alternate disk reset (XT & newer, see note ╪)
    INT 13,E  Read sector buffer (XT & portable only)
    INT 13,F  Write sector buffer (XT & portable only)
   INT 13,10  Test for drive ready (XT & newer, see note ╪)
   INT 13,11  Recalibrate drive (XT & newer, see note ╪)
   INT 13,12  Controller ram diagnostic (XT & portable only)
   INT 13,13  Drive diagnostic (XT & portable only)
   INT 13,14  Controller internal diagnostic (XT & newer, see note ╪)
   INT 13,15  Read disk type/DASD type (XT BIOS from 1/10/86 & newer)
   INT 13,16  Disk change line status (XT BIOS from 1/10/86 & newer)
   INT 13,17  Set dasd type for format (XT BIOS from 1/10/86 & newer)
   INT 13,18  Set media type for format (BIOS date specific)
   INT 13,19  Park fixed disk heads (AT & newer)
   INT 13,1A  Format ESDI drive unit (PS/2 50+)

	╪  The 1983 version of the "IBM XT BIOS Technical Reference"
	   shows these functions are available for the XT but many other
	   programming references say they aren't available until the AT.
	   This is probably due to misunderstanding the design of the disk
	   BIOS.   Upon bootup the hard disk BIOS replaces the default
	   INT 13h diskette handler with the hard disk INT 13h handler.

	Most disk BIOS calls use the following parameter scheme:

	    AH = function request number
	    AL = number of sectors  (1-128 dec.)
	    CH = cylinder number  (0-1023 dec.)
	    CL = sector number	(1-17 dec.)
	    DH = head number  (0-15 dec.)
	    DL = drive number (0=A:, 1=2nd floppy, 80h=drive 0, 81h=drive 1)
	    DL = drive number (0=A:, 1=2nd floppy, 80h=C:, 81h=D:)
		 Note that some programming references use (0-3) as the
		 drive number which represents diskettes only.
	    ES:BX = address of user buffer

	and return with:
	CF = 0 if successful
	   = 1 if error
	AH = status of operation  (see INT 13,STATUS)

	- INT 13 diskette read functions should be retried at least 3
	  times to assure the disk motor has time to spin up to speed
	- 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)

	- registers DS, BX, CX and DX are preserved
	- see  INT 13,STATUS