DISK 504_516_528MB SIZE LIMIT

4/12/2003

Disk Size Limit 504Mb: When IBM designed the PC BIOS in the early 1980s, they provided disk access capabilities via INT13. They designed INT13 to support disks up to 256 heads, 63 sectors per track and 1024 cylinders. A few years thereafter, IBM and the disk manufacturers designed the AT Attachment interface for disks (also known as Integrated Drive Electronics -- IDE). Reflecting the capabilities of disk design at the time, they designed the ATA interface to support 16 heads, 65536 cylinders and a maximum of 255 sectors per track. The INT13 limit is 24 bits -- about 8.4GB. The ATA limit is 28 bits -- about 137GB. There are slight (unintentional) ambiguities because some software/firmware treats cylinder/sector as a number counting from 0 whereas other code views them as numbers counting from 1. If both logics are applied to the same value, its effective range may be reduced by 1 -- e.g. from 256 to 255.

As it turned out, it would possibly have been better for ATA to have used the INT13 conventions that were already in place, but the incompatible conventions caused little trouble until the mid-1990s. The first problem that surfaced was that disks in the several hundred megabyte class with more than 1024 cylinders could not be properly accessed via INT13. That was overcome by lying about the disk format by telling the BIOS that the disk had fewer than 1024 cylinders with heads and/or sectors per track adjusted as needed. The drives didn't care as long as the layout used for accessing was the same as that used for formatting. Many installed drives from the mid 1990s will be found to have the Cylinder-Head-Sector (CHS) values used to format the drive handwritten on them because it is necessary to know these in order to read the drive in a different PC.

The second problem was that settings for each of the three values could not exceed the smaller of the maxima in the two setups. The maximum for INT13 and ATA used together (like there's another option) is 16 heads. 1024 cylinders, 63 sectors per track. That works out to about 528,480,000 bytes = 504, 516, or 528 Megabytes depending on whether you think a megabyte has 1,000,000; 1,024,000, or 1,048,576 bytes. (Formally, a megabyte is 1,048,576 bytes, but that knowledge is of little use when dealing with marketing which almost invariably uses 1,000,000 bytes/megabyte in order to make the drive look bigger).

Solving this problem required BIOS changes that were deployed in the late 1994/early 1995 timeframe. BIOSes generally were changed to support either of two extended addressing modes using Cylinder-Head-Sector translation. Phoenix' translation method (known to users as "LARGE") juggles parameter values to allow the full INT13 range of values and convert them to ATA values. This allows disks of up to 8.4557 GB. The second option is Logical Block Addressing (LBA) -- a different CHS algorithm. LBA (in this context the term is 'LBA Assist') is presumably more compatible with true Logical Block Addressing (LBA). True LBA is a hard drive addressing mode that addresses disk blocks by a single 28 bit numeric sector address. "LBA (assist) mode" is a 24bit addressing mode that is limited to 8.4GB when INT13 is used (for example during boot). LBA-assist CHS uses 28 bit LBA rather than 24 bit CHS to address the disk. But unless an LBA aware OS is used, only the low order 24 bits of the "LBA" are actually useful because only 24 bits can be derived from the CHS addresses being used by the OS.

Another solution used with old or obtuse BIOSes is a software entity called a Disk Drive Overlay that traps all disk accesses and makes the disk look as if the BIOS actually supported large drives.

Some operating systems -- notably Linux -- only use INT13 during boot and can sometimes be configured to start up using INT13 to access the software needed to boot. They switch to their own drivers once running and can access even very large disks using BIOSes that do not appear on the surface to provide the necessary support. That requires that the portion of the disk used for boot must be seen identically by INT13 and the large disk drivers since configuration files and basic software may be accessed by either.

last update 051014

Return To Index Copyright 1994-2008 by Donald Kenney.