Original Source: http://www.firmware.com/support/bios/over4gb.htm
 (Content from a "no longer on the Internet" Webpage.)


Issues With Hard Drives Over 4GB


Filename: OVER4GB.TXT
WWW URL: http://www.firmware.com/support/bios/over4gb.htm
FTP URL: ftp://ftp.firmware.com/text/over4gb.txt
Revision: 08/07/98 TLS Micro Firmware Technical Support
Summary: Many BIOSes, including older versions of Micro Firmware upgrades based on Phoenix 4.03 code, do not support large drives over 2GB. This file indicates which versions of our upgrades do and don't support drives over 2GB.

 Note: The above link is to a copy at web.archive.org  

Until around 1994, the BIOSes on most PCs were limited to 504MB hard drives. Newer BIOSes correct this limitation and theoretically work with hard drives up to 8.4GB. In early 1996 the first IDE drives larger than 2GB became available. At this time it was discovered that many BIOSes were unable to handle hard drives over 2GB. Many systems with relatively modern BIOSes still have this limitation. This has to do with not enough space being allocated in CMOS RAM to store the value for cylinders over a certain size. Our text file OVER2GB.TXT discusses this issue. All of our BIOS upgrades have been revised to correct this problem. This file is available on our web site at this URL: http://www.firmware.com/support/bios/over2gb.htm

The first IDE drives larger than 4.2GB appeared on the market in early 1997. These drives seem to work OK in some systems and not in others. This problem is not due to a bug in the BIOS but is actually an operating system issue, pertaining to all versions of MS-DOS through 6.22. Windows 95 seems to have the same problem. The problem is that DOS cannot handle a translated drive geometry with 256 heads. Although this is an operating system limitation, it appears that the appropriate way to deal with this problem is to account for it in the system BIOS. We became aware of this problem in February of 1997 and immediately began to take steps to revise our BIOS upgrades. All of our upgrades have now been revised to correct this problem. The following chart indicates the minimum revision level of each of our upgrades needed to correct this problem. The flash updates are available to our customers by just downloading the current revision from our website. These updates will only flash in on top of the same upgrade, purchased from us. Parts not listed here were not affected by this problem as they were first released after this had been fixed.

Part No.   4.2GB Drive Update
--------   ---------------------------------
I4HS10     4.05.03         Released 02/17/97
M3GS20       Released 02/21/97
M3GS30       Released 02/21/97
M4GS30       Released 02/26/97
M4GS20       Released 02/24/97
M4GS25       Released 02/17/97
M4HS45     4.05.13         Released 02/18/97
M4HS45G    4.05.11         Released 02/18/97
M4HS45GP   4.05.11         Released 02/18/97
M4HS45GC   4.05.08         Released 02/27/97
M4HS50     4.05.08         Released 02/19/97
P4HS00     4.05.04         Released 03/21/97
P4HS10     4.05.17         Released 03/21/97

A Temporary Workaround

Until our updated BIOSes are available, there is a simple way to work around this problem. Note that you should first verify that you have a new enough revision to handle drives over 2GB correctly. (See OVER2GB.TXT). Also this workaround may be useful in other BIOSes that do not account for drives over 4GB. Although none of our BIOS upgrades dated prior to 02/97 have been corrected for drives over 4.2GB, these drives will autotype correctly to their factory parameters in CMOS setup. The problem will show up when trying to partition the drive. The first partition may appear to be created successfully but the system will probably hang in POST upon rebooting. Also - keep in mind that DOS is limited to 2GB partitions or logical drives. Any drive over 2GB must be split into more than one partition. This limitation applies to all versions of MS-DOS and WIN95 (except WIN95 OSR2 only if using FAT32).

To setup a drive over 4.2GB (under an older BIOS):

1. Autotype the drive in CMOS setup.
2. Manually adjust the number of heads from 16 to 15.
3. Multiply the number of cylinders by 16/15 (rounded down to whole
   number). Since 16/15 is 1.06667, the simplest way to multiply
   by 16/15 would be to multiply by 1.06667 (and then round down to
   whole number).
4. Adjust the number of cylinders to this larger amount.
5. Write down these adjusted values for cylinders, heads and sectors.
6. Save changes to CMOS, partition and format the drive.

This can be considered a temporary workaround, but there should be no problem with continuing to use a hard drive set up this way. If an updated version of one of our BIOS upgrades is obtained at a later date, it should not be necessary to repartition and reformat the drive. This is explained in more detail below.

The important thing to keep in mind in using the above workaround is that you must keep a record of the CHS values used so that they can be reentered if the contents of CMOS RAM are lost or if the drive is moved to another system.

Here are the workaround parameters that can be used with particular models of hard drives over 4GB:

Model               Factory CHS Values   Workaround CHS Values
----------------    ------------------   ---------------------
Maxtor 85120A       9924 x 16 x 63       10585 x 15 x 63
Micropolis 4550A    9692 x 16 x 63       10338 x 15 x 63

Some Basic Background Information

All hard drives are divided into sectors of 512 bytes. The sectors on a hard drive are addressed using a matrix of cylinders, heads, and sectors (referred to as CHS). Back in the days of MFM and RLL drives, the CHS parameters actually matched the physical makeup of the drive. So a drive with CHS parameters of 820 x 6 x 17 would actually have 820 cylinders, 6 heads, and 17 sectors per track. With the advent of IDE drives, which replaced MFM/RLL drives in the early 1990's, the number of sectors varies on different tracks (or cylinders) since more sectors will fit on the outer tracks. This is called Zone Bit Recording (or ZBR). All IDE drives perform internal (or "universal") translation, since they cannot really be addressed with the standard CHS matrix. This means that all IDE drives can be set up in CMOS setup using any combination of cylinders, heads and sectors that does not exceed the maximum capacity of the drive. In the early days of IDE drives it was common to use various different CHS parameters for the same model of drive and in many cases the closest predefined CMOS drive type would be used since many BIOSes did not support user-definable drive types. Newer IDE drives will normally have the factory CHS values indicated on a label on top of the drive. These same values are also stored in firmware on the drive and are accessed by querying the drive with the Identify Device command (previously Identify Drive), which is part of the ATA specification. Most newer BIOSes will "autotype" any IDE drive by issuing the Identify Device command. All of our BIOS upgrades based on Phoenix 4.x code should autotype any IDE drive.

The 504MB limitation in older BIOSes has to do with the combined limitations of the ATA (IDE) specification and the INT 13 calls in the original IBM BIOS specification, as shown below.

             INT 13 BIOS       ATA Specification  Combined Limitation
             --------------    -----------------  -------------------
Cylinders:   1024 (10 bits)    65536 (16 bits)    1024

Heads:       256  (8 bits)     16    (4 bits)     16

Sectors:     63   (6 bits)     256   (8 bits)     63

Total Size:  8GB               128GB              504MB

Newer BIOSes ("translating BIOSes") overcome this limitation by reducing (by powers of 2) the number of cylinders and increasing (by powers of 2) the number of heads when passing CHS values from the drive to the OS. So a 540MB drive with CHS values of 1048 x 16 x 63 would be translated to 524 x 32 x 63. This is known as ECHS - Extended CHS translation (or sometimes CHS to CHS translation).

The problem with drives over 4.2GB shows up when cylinders exceed 8191, which causes the translated heads value to be 256. Due to a limitation in DOS, it can deal with heads up to 255 but can not handle 256 heads. This is probably due to allocating only 8 bits to store the number of heads. 8 bits can hold values up to 255. 256 "wraps around" to 0.

This may be dealt with in various ways as newer BIOSes address this problem. At the time of this writing (02/97) there is no actual "industry standard". It appears that there are two basic translation schemes being implemented to address this problem:

1. "Assisted LBA" (or LBA Assist) - This is the term used by Phoenix
   to describe one type of translation used to address this problem.
   This method appears to be used by the AMI/Intel BIOSes on newer
   Intel Pentium motherboards and is referred to as "LBA" in the
   Translation Type option in CMOS setup in those BIOSes. This also
   appears to be the translation method used on some EIDE adapter
   cards with enhanced BIOSes, such as the Promise EIDEMAX and the
   SIIG EIDE Master. This will be detailed below.
2. "Revised ECHS" - (This name was made up for lack of anything else
   just to use in this document). The translation method currently
   used in BIOSes that support drives over 504MB is referred to as
   ECHS (Extended Cylinder Head Sector) and employs "bit-shifting".
   This translation method can be revised so that it works just like
   the manual work-around described above.

How Micro Firmware is Handling This Issue in Our BIOS Upgrades

We have decided to implement both of the above new translation methods in our new BIOS upgrades and revisions. We have added a new setup option, Translation Type, to the hard drive setup submenu. In all of our current upgrades, this will default to ECHS (which indicates the newer revised ECHS translation). This way any drives set up using the 15-head 16/15-cylinder workaround method in our previous upgrades will continue to work in our new revisions without having to be repartitioned or reformatted. These drives will continue to work if the drive is autotyped to factory parameters in the new BIOS and will also continue to work if the workaround parameters used in the previous BIOS are manually entered. The Assisted LBA option will be implemented so that any drive that has been setup under a BIOS using this type of translation can be moved to the system without being repartitioned and reformatted.

More Detail on the Revised ECHS Translation Method

This method uses the standard ECHS translation that has been used by the Phoenix BIOS and others to handle drives over 504MB but first makes an adjustment if necessary. If a drive has 16 heads and more than 8191 cylinders, then the heads are adjusted to 15 and the cylinders are multiplied by 16/15 before performing the standard ECHS translation. This method has a couple of advantages - it requires less code to implement and may be slightly faster performance-wise. The bit-shifting used in the algorithm allows some mathematical operations to be performed in a single clock cycle.

More Detail on the Assisted LBA Method

This method basically just reduces 256 heads to 255 heads. There's a little more to it - the example below shows more detail. Depending on the CHS values used by a particular model of drive, there may or may not be a very small loss in the overall drive capacity due to rounding odd numbers down at any step in the translation algorithm. The loss of some capacity due to rounding is a factor in any type of BIOS translation and can be considered more of a design problem on the part of hard drive manufacturers, since it is possible to use CHS values that will translate with little or no loss of capacity, although this becomes more difficult as more translation methods appear.

Here is an example using the Maxtor 85120A 5GB IDE drive:

The drive should autotype in CMOS setup to its factory parameters of 9924 x 16 x 63. The BIOS will then multiply these 3 numbers together to get the total number of sectors, which would be 10,003,392. This total is then divided by 63 which would be 158,784. This number is then divided by 1024 to determine the value to use for heads, which must be 16, 32, 64, 128, or 255. The result here is 155, which is then adjusted up to 255. 158,784 is then divided by the number of heads, in this case 255, which gives us 622.682.. which would round down to 622. So we end up with a translated geometry of 622 x 255 x 63.

An important issue with this new translation algorithm is the fact that the value for sectors per track is always 63. This differs from the translation method previously used by many BIOSes, including our upgrades based on Phoenix 4.03 and 4.05 code. This is an important consideration because some drives may use a value other than 63 for sectors per track and if that drive was set up under a different BIOS it will now be subject to a different type of translation. This means that the drive will need to be repartitioned and reformatted. This will be an issue for customers upgrading from one of our current upgrades to a revised version if any existing drives have other than 63 sectors per track. Note that there is not an inherent problem with setting up a drive with less than 63 sectors per track, under either type of BIOS discussed here. The problem is just that different BIOSes may treat such a drive differently.


© 1998-2001 Micro Firmware, Inc. - All Rights Reserved
While every attempt is made to ensure the accuracy of our support documents, Micro Firmware provides these documents on an AS-IS basis for information purposes only.


 Original Source: http://www.firmware.com/support/bios/over4gb.htm
 (Content from a "no longer on the Internet" Webpage.)

[Supports Any Browser]*
E-mail the Webmaster
Page Content Updated: 4 June 2005