BIOS and OS  Limits
for PC Storage Capacities

Copyright©2004-2005, 2015 by Daniel B. Sedory
NOT to be reproduced in any form without Permission of the Author !



6 to 64-bit Hex Numbers and Limits
(Take this link for an explanation of the hex math involved in various Limits!)

The 528 MB/ 504 MiB "OS / Drive" Limit

    In the early 1980's, disk drives had capacities that were only in the Megabytes. In 1983, the first PC that could use a disk drive, the IBM PC XT came with a 10 MB ST-412 drive, and all early drives had separate controller boards plugged into the motherboard (see photo of ST-506 drive on this page). In 1985, the first IDE (Integrated Drive Electronics) drives were created with a controller board attached to the drive itself. But IBM/Microsoft's DOS 3.30 FDISK was still limited to creating only 32 MiB partitions

It wasn't until late in 1995, that the T13 Technical Committee was formed to develop standards for the ATA (IDE) I/O interface.

"From 1961 - 1996, INCITS was known as Accredited Standards Committee X3, Information Technology. It was established within a year of ISO TC 97 and ECMA as the U.S standards committee for information technology. X3 was accredited by ANSI and it was sponsored in 1961 by ITI, a trade association then known as the Computer and Business Equipment Association (CBEMA). CBEMA was a forum for companies to identify and discuss areas of common concern, and its sponsorship of X3 provided a place for the providers of information technology and systems to receive feedback from users, government agencies, academia and other interested parties."

was limited to a capacity of no more than about 30 Megabytes. Please note: The remainder of this paragraph is conjecture on our part (if you have any documentation concerning decisions made by these engineering groups, please contact us): Some time during the development of an IBM PC with disk drives and the BIOS code that would control their access (this was prior to the release of IBM PC™ DOS 2.00; which was the first IBM PC-DOS that would partition a disk drive with a Partition Table) in an MBR sector, it appears to us that either no one in the drive industry ever considered the consequences of designing and producing standards for their drives without consulting those who made the operating systems that would run on them, or they simply did not care about limiting the capacity of a PC (which some may have regarded as only a fad at that time). Nor, apparently, did anyone from the IBM® PC group (or Microsoft®) care enough about what the disk drive manufacturing groups were doing, before making their BIOS code that had to interface with disk drives!

After viewing the following facts, it will become very clear why we have industry standards committees. Here are the facts concerning what each of those two groups of engineers produced in regards to this limitation:

The Original IBM® BIOS Code
"Maximum" Specs
The IBM® / Western Digital® developed
(IDE/AT) HD Interface "Maximum" Specs
___1024   Cylinders (or 'Tracks') ___65,536   Cylinders (or 'Tracks') 1
____256   Heads (or 'Sides') 2 _____,_16   Heads (or 'Sides')
_____63   Sectors/Track _____,256   Sectors/Track
8,455,716,864 Bytes Maximum
137,438,953,462 Bytes Maximum
(Both Specs using 512 Bytes per Sector)

The problem that caused this limitation is the fact that both sets of Specs listed above had to interface with each other! So, the maximum number of bytes that could be accessed was limited to the MINIMUM value when COMPARING the two sets of Specs for each Cylinder, Head and Sector. That gives us the items highlighted in yellow.

Using those values, we can compute the maximum number of bytes accessible on a PC with such an IBM BIOS and the disk drives of that era:
1024 cylinders x 16 heads/cylinder x 63 sectors/head x 512 bytes/sector = 528,482,304 bytes (or about 528 MB; dividing by 10242 instead gives us the so-called binary MB, or MiB, of: Exactly 504 MiB).

Until this problem was addressed by PC-clone BIOS manufacturers (and eventually IBM), some clever programmers wrote what was called DDO (Dynamic Drive Overlay) software which provided additional code for the BIOS to access drives over 504 MiB. The DDO needed to be installed in at least the first sector of the drive before it could be partitioned and formatted. This code would hide itself from any OS and instead point to whatever sector the real MBR code was actually located at; quite often the 2nd sector on the drive, causing the OS to believe the MBR was on the first sector! At that time both Maxtor® and Western Digital® each had their own versions of DDO software: Maxtor used what they called Maxblast™ (it was created by Ontrack), and the one inlcuded with WD drives of that era was called EZ-Drive (distributed by Microhouse). EZ-Drive was more useful when BIOS code no longer required a DDO, because it was possible to uninstall the EZ-Drive code without having to re-partition and re-format the whole drive. (NOTE: This ability of some code to actually hide itself from an OS was later employed by virus authors and their malicious code infected and was carried by MANY floppy diskettes, and then the PCs they were boot-up from since the first thing such code often did was to infect either the MBR or Boot Sector of a PC and then the PC often spread that virus by infecting the boot sector of virus-free floppy diskettes inserted into it.)

1 Some time later, .

2 At some point during the development of the IBM PC/Microsoft DOS code (either prior to 2.00 or around that time), an error was made by some programmer(s) which ended up limiting the number of heads to only 255 instead of 256 (see our further comments here); which is why the 8.4 GB Partition Table Limit described below is only 8,422,686,720 bytes (1024 x 255 x 63 x 512; or 16,450,560 sectors) instead of the 8,455,716,864 bytes (16,515,072 sectors) listed in our table above.


The 2.1 GB "FAT16 Partition Size" Limit

This limit was essentially imposed by Microsoft DOS at a time long before the existence of USB drives. It wasn't related to any problem in a PC's BIOS, but rather depended solely on the IBM/Microsoft-DOS operating system; this limitation also exists under Microsoft Windows 95 and 98. NOTE: Although Windows 2000 and later may be able to access FAT16 partitions up to 4 GB, Microsoft still recommends to never create such a partition ("To maintain compatibility with MS-DOS, Windows 95, and Windows 98, a FAT16 volume should not be larger than 2 GB." We would also add that some 3rd party software and utility programs will not recognize FAT16 partitions larger than 2 GB). In 1996, Windows 95 could be upgraded to OSR2 which included the FAT32 file system, which far exceeded this 2.1 GB partition-size limit, so data could be migrated from FAT16 to FAT32 partitions if necessary.


The 8.4 GB "Partition Table" Limit



30 GB "Partition" Limit

Windows™ 2000 can not format a partition greater than 30 GB using FAT32, but it can use a larger FAT32 partition if it was created under Windows 98/Me. Microsoft claims that they designed it that way! No doubt many users will see that as a convenient explanation to cover up a 'bug' they never fixed. For more information, see: Knowledge Base articles KB 277546 and KB 184006. Even Windows™ XP has some FAT32 limitations, which are addressed in KB 314463 and KB 310525. These problems may be altered by SP updates; so check on those as well.

32/33.8 GB BIOS Limit

Some computer's BIOS can not recognize HDDs over about 32 GB; as a matter of fact, they may even lock-up or hang when you try connecting a larger drive to them! This was our experience with a 'PCChips' M577 Motherboard and a 40 GB drive! Most likely this is the same limit problem that Andries Brouwer discusses under Section 2.11 as the 33.8GB limit ( 65535 x 63 x 16 = 66,059,280 sectors, or 33,822,351,360 bytes ). Since our PC wouldn't even boot-up normally, we had two choices:

1) To jumper the drive as being only 32 GB and then install DDO software allowing the OS to see the full size of the drive, or

2) To FLASH the BIOS!  Fortunately, we were able to find a free BIOS source for our motherboard and carry out the procedure without experiencing a dreaded power failure. If there had been a power outage at that time, our M577 Motherboard would have become useless! And the BIOS chip on this particular Mobo cannot be easily replaced since it's soldered in place!!


Possible 64 GB Limit

If you are running Windows™ 98/98SE and want to use an HDD over 64 GB, you really should review all the Knowledge Base articles related to these conditions! You can start with this one: KB 263044 at the Microsoft Support site,


The 137 GB Limits (Win98, BIOS and even Win2000)

A long time ago now, I used to say: "You can not use Windows™ 98/Me with any drive over 137 GB (that's exactly 128 GiB)! Ever." Well, that is not really true!!! It was based upon some poor wording found in the following article! Quoting the applicable text from that Microsoft KB article :

What this means is: These OSs can be used on a drive larger than 137 GB, as long as the partition(s) they operate from and have access to (for reading or writing) do not span beyond the 137 GB boundary! Therefore, you could create and use a number of Windows 98/Me partitions anywhere on the drive below the point of 137 GB and have no problems. But that's not what some web sites seem to imply. Note: The now defunct site which first appeared to say this applies to the whole drive, not just the size of a single partition nor where it's located; quoting from their first page: "Some versions of Microsoft Windows do not support hard drives greater than 137 GB at all,..." But later on, in a rather confusing page about Windows 98, they gave examples of how it can be used with such drives! Apparently this confusion is because so many people create only one single partition, no matter how large a drive they have, which would indeed lead to data loss under Win 98/Me!

Many computer BIOS will be unable to recognize hard disks over 137 GB, since they are limited to using only 28 bits to keep track of the LBA sector count (28-bit binaries can hold a maximum value of FFFFFFF Hex, or 268,435,455 sectors; if you multiply that by 512, you get: 137,438,952,960 bytes; thus, the 137 GB size limit). NOTE: Since all Partition Table entries use 32 bits (a Hex "Double Word" 4 bytes long) for their Starting and Total Sectors counts, there weren't any problems with those MBR sectors until HDD sizes began to exceed about 2,048 GiB! For details on the Hex numbers here, see our page 6 to 64-bit Hex Numbers.

Even Windows™ 2000 (prior to SP3) was unable to use any space on an HDD beyond the 137-GB boundary; until we applied an SP3 (or later) update to it! This means that you will not be able to install an early Win 2000 OS on such drives using the original install CD; unless you create an initially smaller partition underneath that 137-GB boundary! That's a very good reason to purchase/use a Win 2000 install CD with SP4 already applied.

The 2.2 TB (or 32-bit) "Partition Table" Limit

Ever since IBM® started selling the first Disk Drive with PC-DOS 2.00, there has been a Master Boot Record (MBR) with a 64-byte Partition Table and its four 16-byte entries.

Some References:

Section 2.11 "Limits" of Andries Brouwer's, Partition Types pages:  [Read all of it!]

Updated: 10 NOV 2005 (10.11.2005).
Last Update: 29 July, 2015 (29.07.2015).

You can write to me using this: online reply form.
(It opens in a new window.)

The Starman's Realm Index Page