MS-DOS Drive Size Limits
I seem to recall the original limit was 32MB.
Due to file system limits (the number of bits available to track where files were on a hard drive), a drive couldn't have more than 1024 cylinders (that is the number of steps the heads could make), 16 heads, and 63 sectors per track. Since a sector was 512 bytes, multiplying all this out made the maximum drive size 504MB. Manufacturers claim 528MB by incorrectly using 10^6 instead of 2^20 bytes as a MB, which is about as accurate as the sizes of TV screens.
Bios Changes to Drive Sizes
Around the time 486 based PCs appeared, BIOS changes (Interrupt 13 extensions that allowed 255 heads and 1024 cylinders) and Logical Block Addressing (LBA) started to support up to around 8GB, by allowing 16384 cylinders, 16 heads, 63 sectors. Since the LBA could lie about the number of cylinders and heads, and the Interupt 13 extentions could use the modified figures, this allowed 8GB.
Windows 95 allowed only 2^16 or 65525 clusters, which gave a 2GB partition limit, and a drive limit of 8GB.
Windows 95B introduced FAT32 file systems, which could use Logical Block Address (LBA) drives, where the drive basically lied about their internal geometry. This woulkd support 2 terabyte in theory, but actually the FAT32 limit is 128GB. I think LBA drives support up to 2^28 power blocks of 512 byte sectors, which is about 128GB.
IDE (or ATA) Drives
Integrated Design Electronics (IDE, also known as ATA) drives tell the BIOS how many cylinders they have, plus the number of tracks and sectors per cylinder. Their limits are 255 sectors, 16 heads, 65536 cylinders, or 136.8GB. The number of sectors is actually larger on outer cylinders than on inner cylinders.
Which BIOS supports which size
AMI was mostly limited to 8GB until around the end of 1997.
Award supported 504MB until 1994, 8GB until 1997, 32GB until the end of 1999.
Phoenix has about the same limits
Bios upgrades, where available, sometimes increase drive capabilities.
Some operating systems are not limited to the size of drive the BIOS supports, and only use the BIOS for boot purposes. Examples include BSD, FreeSD, Linux, Un*x, Windows NT4, 2000, XP.