Hard Drive Limits:

Some general comments:


Thanks to James Day who posted several of the larger numbers previously in the benchmark forum as well as to numerous others who have provided comments and corrections on prior postings used to build this.


INT 13 (Prior to 1997 Extensions)

 AH = Function 02=Read, 03=Write, 08=Disk Parameters
 AL = Number of Sectors 
 BX = Pointer to Buffer (actually CS:BX)
 CH = Cylinder Number (Low order 8 bits)
 CL = Sector Number (Low order 6 bits, Top two bits are High Order bits of Cylinder)
 DH = Heads
 DL = Drive ID (0=C:, 1=D:, etc)

INT 13 (Extensions) In AMI BIOSes Jan1, 1998 and later; Award BIOSes after Nov97 and Phoenix BIOSes Ver4 Rel6 and later.

 AH = Add 40 to the INT 13 Code
 DS:SI contains the address of a Disk Parameter table.  The table is lengthy and contains a variety of information.  The size values are
 Start+04 -- 32 bit -- Number of Cylinders
 Start+08 -- 32 bit -- Number of Heads
 Start+0C -- 32 bit -- Number of Sectors
 Start+10 -- 64 bit -- Total number of Sectors on Drive
 Start+18 -- 16 bit -- Sector Size

This would seem to allow 1.84*10^19 sectors of up to 65536 bytes = 1.2*10^24 bytes.


Hard Drive Partition Table located in Master Boot Record (the Partition Table is in bytes 256ff of cylinder0, track0, Head 0 on a hard drive). The MBR contains four 16 byte records defining up to four disk partitions:

MBR Partition Format:
 Byte 0 - Active Partition.  Non-zero for "Active Partition" -- the partition from which the disk will boot.
 Bytes 1-3 - Start Cylinder (10 bits), Heads(6 bits), Sectors (256 bits) -- allows 8.4GB.
 Byte 4 -- Partition Type FAT16, Unix, FAT32, etc. 
 Bytes 5-7 - End Cylinder (10 bits), Heads(6 bits), Sectors (256 bits) -- allows 8.4GB.  The following two fields were added in DOS4.0 and may not be present on very old disks:
 Bytes 8-11 - Start Sector (32 bits) -- allows 4.2TB (2.1 TB starting 2.1TB into the disk)
 Bytes 12-15 - Number of Sectors (32 bits) -- allows 2.1Tb


IDE (ATA) - Non-LBA Addressing
 Heads = 16
 Cylinders = 65536
 Sectors/Track = 255

Maximum size (using 512 Byte Sectors) = 137MB


SCSI -- LBA Addressing (No CHS mode)

 6Byte commands = 21 bits = 1GB (Not normally used for disks)
 10/12 Byte commands = 32bits = 2TB (with 512byte sectors)

Web Reference:

Return To Index Copyright 1994-2010 by Donald Kenney.