posts - 23,  comments - 1,  trackbacks - 0
BIOS Types, CHS Translation, LBA and Other Good Stuff

 

                            Version 4

                           2 March 95

 

             by Hale Landis (landis@sugs.tware.com)

 

This is very technical.  Please read carefully.  There is lots of

information here that can sound confusing the first time you read

it.

 

Introduction (READ THIS!)

-------------------------

 

Why is an understanding of how a BIOS works so important?  The

basic reason is that the information returned by INT 13H AH=08H

is used by FDISK, it is used in the partition table entries

within a partition record (like the Master Boot Record) that are

created by FDISK, and it is used by the small boot program that

FDISK places into the Master Boot Record.  The information

returned by INT 13H AH=08H is in cylinder/head/sector (CHS)

format -- it is not in LBA format.  The boot processing done by

your computer's BIOS (INT 19H and INT 13H) is all CHS based.

 

Read this so that you are not confused by all the false

information going around that says "LBA solves the >528MB

problem".

 

Read this so that you understand the possible data integrity

problem that a WD EIDE type BIOS creates.  Any BIOS that has a

"LBA mode" in the BIOS setup could be a WD EIDE BIOS.  Be very

careful and NEVER chage the "LBA mode" setting after you have

partitioned and installed your software.

 

History

-------

 

Changes between this version and the preceeding version are

marked by "!" at left margin of the first line of a changed

or new paragraph.

 

Version 4 --  BIOS Types 8 and 10 updated.

 

Version 3 -- New BIOS types found and added to this list.  More

   detailed information is listed for each BIOS type.  A section

   describing CHS translation was added.

 

Version 2 -- A rewrite of version 1 adding BIOS types not

   included in version 1.

 

Version 1 -- First attempt to classify the BIOS types and

   describe what each does or does not do.

 

Definitions

-----------

 

* 528MB - The maximun drive capacity that is supported by 1024

   cylinders, 16 heads and 63 sectors (1024x16x63x512).  This

   is the limit for CHS addressing in the original IBM PC/XT

   and IBM PC/AT INT 13H BIOS.

 

* 8GB - The maximum drive capacity that can be supported by 1024

   cylinders, 256 heads and 63 sectors (1024x256x63x512).  This

   is the limit for the BIOS INT 13H AH=0xH calls.

 

* ATA - AT Attachment -- The real name of what is widely known

   as IDE.

 

* CE Cylinder - Customer Engineering cylinder.  This is the

   last cylinder in P-CHS mode.  IBM has always reserved this

   cylinder for use of disk diagnostic programs.  Many BIOS do

   not account for it correctly.  It is of questionable value

   these days and probably should be considered obsolete.

   However, since there is no industry wide agreement, beware.

   There is no CE Cylinder reserved in the L-CHS address.  Also

   beware of diagnostic programs that don't realize they are

   operating in L-CHS mode and think that the last L-CHS cylinder

   is the CE Cylinder.

 

* CHS - Cylinder/Head/Sector.  This is the traditional way to

   address sectors on a disk.  There are at least two types

   of CHS addressing:  the CHS that is used at the INT 13H

   interface and the CHS that is used at the ATA device

   interface.  In the MFM/RLL/ESDI and early ATA days the CHS

   used at the INT 13H interface was the same as the CHS used at

   the device interface.

 

   Today we have CHS translating BIOS types that can use one CHS

   at the INT 13H interface and a different CHS at the device

   interface.  These two types of CHS will be called the logical

   CHS or L-CHS and the physical CHS or P-CHS in this document.

   L-CHS is the CHS used at the INT 13H interface and P-CHS is

   the CHS used at the device interface.

 

   The L-CHS used at the INT 13 interface allows up to 256 heads,

   up to 1024 cylinders and up to 63 sectors.  This allows

   support of up to 8GB drives.  This scheme started with either

   ESDI or SCSI adapters many years ago.

 

   The P-CHS used at the device interface allows up to 16 heads

   up to 65535 cylinders, and up to 63 sectors.  This allows

   access to 2^28 sectors (136GB) on an ATA device.  When a P-CHS

   is used at the INT 13H interface it is limited to 1024

   cylinders, 16 heads and 63 sectors.  This is where the old

   528MB limit originated.

 

   ATA devices may also support LBA at the device interface.  LBA

   allows access to approximately 2^28 sectors (137GB) on an ATA

   device.

 

   A SCSI host adapter can convert a L-CHS directly to an LBA

   used in the SCSI read/write commands.  On a PC today, SCSI is

   also limited to 8GB when CHS addressing is used at the INT 13H

   interface.

 

* EDPT - Enhanced fixed Disk Parameter Table -- This table

   returns additional information for BIOS drive numbers 80H and

   81H.  The EDPT for BIOS drive 80H is pointed to by INT 41H.

   The EDPT for BIOS drive 81H is pointed to by INT 46H.  The

   EDPT is a fixed disk parameter table with an AxH signature

   byte.  This table format returns two sets of CHS information.

   One set is the L-CHS and is probably the same as returned by

   INT 13H AH=08H.  The other set is the P-CHS used at the drive

   interface.  This type of table allows drives with >1024

   cylinders or drives >528MB to be supported.  The translated

   CHS will have <=1024 cylinders and (probably) >16 heads.  The

   CHS used at the drive interface will have >1024 cylinders and

   <=16 heads.  It is unclear how the IBM defined CE cylinder is

   accounted for in such a table.  Compaq probably gets the

   credit for the original definition of this type of table.

 

* FDPT - Fixed Disk Parameter Table - This table returns

   additional information for BIOS drive numbers 80H and 81H.

   The FDPT for BIOS drive 80H is pointed to by INT 41H.  The

   FDPT for BIOS drive 81H is pointed to by INT 46H.  A FDPT does

   not have a AxH signature byte.  This table format returns a

   single set of CHS information.  The L-CHS information returned

   by this table is probably the same as the P-CHS and is also

   probably the same as the L-CHS returned by INT 13H AH=08H.

   However, not all BIOS properly account for the IBM defined CE

   cylinder and this can cause a one or two cylinder difference

   between the number of cylinders returned in the AH=08H data

   and the FDPT data.  IBM gets the credit for the original

   definition of this type of table.

 

* LBA - Logical Block Address.  Another way of addressing

   sectors that uses a simple numbering scheme starting with zero

   as the address of the first sector on a device.  The ATA

   standard requires that cylinder 0, head 0, sector 1 address

   the same sector as addressed by LBA 0. LBA addressing can be

   used at the ATA interface if the ATA device supports it.  LBA

   addressing is also used at the INT 13H interface by the AH=4xH

   read/write calls.

 

* L-CHS -- Logical CHS.  The CHS used at the INT 13H interface by

     the AH=0xH calls.  See CHS above.

 

* MBR - Master Boot Record (also known as a partition table) -

   The sector located at cylinder 0 head 0 sector 1 (or LBA 0).

   This sector is created by an "FDISK" utility program.  The MBR

   may be the only partition table sector or the MBR can be the

   first of multiple partition table sectors that form a linked

   list.  A partition table entry can describe the starting and

   ending sector addresses of a partition (also known as a

   logical volume or a logical drive) in both L-CHS and LBA form.

   Partition table entries use the L-CHS returned by INT 13H

   AH=08H.  Older FDISK programs may not compute valid LBA

   values.

 

* OS - Operating System.

 

* P-CHS -- Physical CHS.  The CHS used at the ATA device

   interface.  This CHS is also used at the INT 13H interface by

   older BIOS's that do not support >1024 cylinders or >528MB.

   See CHS above.

 

Background and Assumptions

--------------------------

 

First, please note that this is written with the OS implementor

in mind and that I am talking about the possible BIOS types as

seen by an OS during its hardware configuration search.

 

It is very important that you not be confused by all the

misinformation going around these days.  All OS's that want to be

co-resident with another OS (and that is all of the PC based OS's

that I know of) MUST use INT 13H to determine the capacity of a

hard disk.  And that capacity information MUST be determined in

L-CHS mode.  Why is this?  Because:  1) FDISK and the partition

tables are really L-CHS based, and 2) MS/PC DOS uses INT 13H

AH=02H and AH=03H to read and write the disk and these BIOS calls

are L-CHS based.  The boot processing done by the BIOS is all

L-CHS based.  During the boot processing, all of the disk read

accesses are done in L-CHS mode via INT 13H and this includes

loading the first of the OS's kernel code or boot manager's code.

 

Second, because there can be multiple BIOS types in any one

system, each drive may be under the control of a different type

of BIOS.  For example, drive 80H (the first hard drive) could be

controlled by the original system BIOS, drive 81H (the second

drive) could be controlled by a option ROM BIOS and drive 82H

(the third drive) could be controlled by a software driver.

Also, be aware that each drive could be a different type, for

example, drive 80H could be an MFM drive, drive 81H could be an

ATA drive, drive 82H could be a SCSI drive.

 

Third, not all OS's understand or use BIOS drive numbers greater

than 81H.  Even if there is INT 13H support for drives 82H or

greater, the OS may not use that support.

 

Fourth, the BIOS INT 13H configuration calls are:

 

* AH=08H, Get Drive Parameters -- This call is restricted to

   drives up to 528MB without CHS translation and to drives up to

   8GB with CHS translation.  For older BIOS with no support for

   >1024 cylinders or >528MB, this call returns the same CHS as

   is used at the ATA interface (the P-CHS).  For newer BIOS's

   that do support >1024 cylinders or >528MB, this call returns a

   translated CHS (the L-CHS).  The CHS returned by this call is

   used by FDISK to build partition records.

 

* AH=41H, Get BIOS Extensions Support -- This call is used to

   determine if the IBM/Microsoft Extensions or if the Phoenix

   Enhanced INT 13H calls are supported for the BIOS drive

   number.

 

* AH=48H, Extended Get Drive Parameters -- This call is used to

   determine the CHS geometries, LBA information and other data

   about the BIOS drive number.

 

* the FDPT or EDPT -- While not actually a call, but instead a

   data area, the FDPT or EDPT can return additional information

   about a drive.

 

* other tables -- The IBM/Microsoft extensions provide a pointer

   to a drive parameter table via INT 13H AH=48H.  The Phoenix

   enhancement provides a pointer to a drive parameter table

   extension via INT 13H AH=48H.  These tables are NOT the same

   as the FDPT or EDPT.

 

Note:  The INT 13H AH=4xH calls duplicate the older AH=0xH calls

but use a different parameter passing structure.  This new

structure allows support of drives with up to 2^64 sectors

(really BIG drives).  While at the INT 13H interface the AH=4xH

calls are LBA based, these calls do NOT require that the drive

support LBA addressing.

 

CHS Translation Algorithms

--------------------------

 

NOTE:  Before you send me email about this, read this entire

  section.  Thanks!

 

As you read this, don't forget that all of the boot processing

done by the system BIOS via INT 19H and INT 13H use only the INT

13H AH=0xH calls and that all of this processing is done in CHS

mode.

 

First, lets review all the different ways a BIOS can be called

to perform read/write operations and the conversions that a BIOS

must support.

 

! * An old BIOS (like BIOS type 1 below) does no CHS translation

   and does not use LBA.  It only supports the AH=0xH calls:

 

      INT 13H      (L-CHS == P-CHS)             ATA

      AH=0xH  --------------------------------> device

      (L-CHS)                                   (P-CHS)

 

* A newer BIOS may support CHS translation and it may support

   LBA at the ATA interface:

 

      INT 13H        L-CHS                      ATA

      AH=0xH  --+--> to    --+----------------> device

      (L-CHS)   |    P-CHS   |                  (P-CHS)

                |            |

                |            |    P-CHS

                |            +--> to    --+

                |                 LBA     |

                |                         |

                |    L-CHS                |     ATA

                +--> to  -----------------+---> device

                     LBA                        (LBA)

 

* A really new BIOS may also support the AH=4xH in addtion to

   the older AH\0xH calls.  This BIOS must support all possible

   combinations of CHS and LBA at both the INT 13H and ATA

   interfaces:

 

      INT 13H                                   ATA

      AH=4xH  --+-----------------------------> device

      (LBA)     |                               (LBA)

                |

                |    LBA

                +--> to    ---------------+

                     P-CHS                |

                                          |

      INT 13H        L-CHS                |     ATA

      AH=0xH  --+--> to    --+------------+---> device

      (L-CHS)   |    P-CHS   |                  (P-CHS)

                |            |

                |            |    P-CHS

                |            +--> to    --+

                |                 LBA     |

                |                         |

                |    L-CHS                |     ATA

                +--> to  -----------------+---> device

                     LBA                        (LBA)

 

You would think there is only one L-CHS to P-CHS translation

algorithm, only one L-CHS to LBA translation algorithm and only

one P-CHS to LBA translation algorithm.  But this is not so.

Why?  Because there is no document that standardizes such an

algorithm.  You can not rely on all BIOS's and OS's to do these

translations the same way.

 

The following explains what is widely accepted as the

"correct" algorithms.

 

An ATA disk must implement both CHS and LBA addressing and

must at any given time support only one P-CHS at the device

interface.  And, the drive must maintain a strick relationship

between the sector addressing in CHS mode and LBA mode.  Quoting

the ATA-2 document:

 

     LBA = ( (cylinder * heads_per_cylinder + heads )

             * sectors_per_track ) + sector - 1

 

     where heads_per_cylinder and sectors_per_track are the current

     translation mode values.

 

This algorithm can also be used by a BIOS or an OS to convert

a L-CHS to an LBA as we'll see below.

 

This algorithm can be reversed such that an LBA can be

converted to a CHS:

 

    cylinder = LBA / (heads_per_cylinder * sectors_per_track)

        temp = LBA % (heads_per_cylinder * sectors_per_track)

        head = temp / sectors_per_track

      sector = temp % sectors_per_track + 1

 

While most OS's compute disk addresses in an LBA scheme, an OS

like DOS must convert that LBA to a CHS in order to call INT 13H.

 

Technically an INT 13H should follow this process when

converting an L-CHS to a P-CHS:

 

     1) convert the L-CHS to an LBA,

     2) convert the LBA to a P-CHS,

 

If an LBA is required at the ATA interface, then this third

step is needed:

 

     3) convert the P-CHS to an LBA.

 

All of these conversions are done by normal arithmetic.

 

However, while this is the technically correct way to do

things, certain short cuts can be taken.  It is possible to

convert an L-CHS directly to a P-CHS using bit a bit shifting

algorithm.  This combines steps 1 and 2. And, if the ATA device

being used supports LBA, steps 2 and 3 are not needed.  The LBA

value produced in step 1 is the same as the LBA value produced in

step 3.

 

AN EXAMPLE

 

Lets look at an example.  Lets say that the L-CHS is 1000

cylinders 10 heads and 50 sectors, the P-CHS is 2000 cylinders, 5

heads and 50 sectors.  Lets say we want to access the sector at

L-CHS 2,4,3.

 

* step 1 converts the L-CHS to an LBA,

 

     lba = 1202 = ( ( 2 * 10 + 4 ) * 50 ) + 3 - 1

 

* step 2 converts the LBA to the P-CHS,

 

     cylinder =   4 = ( 1202 / ( 5 * 50 )

         temp = 202 = ( 1202 % ( 5 * 50 ) )

         head =   4 = ( 202 / 50 )

       sector =   3 = ( 202 % 50 ) + 1

 

* step 3 converts the P-CHS to an LBA,

 

     lba = 1202 = ( ( 4 * 5 + 4 ) * 50 ) + 3 - 1

 

Most BIOS (or OS) software is not going to do all of this to

convert an address.  Most will use some other algorithm.  There

are many such algorithms.

 

BIT SHIFTING INSTEAD

 

If the L-CHS is produced from the P-CHS by 1) dividing the

P-CHS cylinders by N, and 2) multiplying the P-CHS heads by N,

where N is 2, 4, 8, ..., then this bit shifting algorithm can be

used and N becomes a bit shift value.  This is the most common

way to make the P-CHS geometry of a >528MB drive fit the INT 13H

L-CHS rules.  Plus this algorithm maintains the same sector

ordering as the more complex algorithm above.  Note the

following:

 

     Lcylinder = L-CHS cylinder being accessed

         Lhead = L-CHS head being accessed

       Lsector = L-CHS sector being accessed

 

     Pcylinder = the P-CHS cylinder being accessed

         Phead = the P-CHS head being accessed

       Psector = P-CHS sector being accessed

 

           NPH = is the number of heads in the P-CHS

             N = 2, 4, 8, ..., the bit shift value

 

The algorithm, which can be implemented using bit shifting

instead of multiply and divide operations is:

 

     Pcylinder = ( Lcylinder * N ) + ( Lhead / NPH );

         Phead = ( Lhead % NPH );

       Psector = Lsector;

 

 

A BIT SHIFTING EXAMPLE

 

Lets apply this to our example above (L-CHS = 1000,10,50 and

P-CHS = 2000, 5, 50) and access the same sector at at L-CHS

2,4,3.

 

     Pcylinder = 4 = ( 2 * 2 ) + ( 4 / 5 )

         Phead = 4 = ( 4 % 5 )

       Psector = 3 = 3

 

As you can see, this produces the same P-CHS as the more

complex method above.

 

SO WHAT IS THE PROBLEM?

 

The basic problem is that there is no requirement that a CHS

translating BIOS followed these rules.  There are many other

algorithms that can be implemented to perform a similar function.

Today, there are at least two popular implementions:  the Phoenix

implementation (described above) and the non-Phoenix

implementations.

 

SO WHY IS THIS A PROBLEM IF IT IS HIDDEN INSIDE THE BIOS?

 

Because a protected mode OS that does not want to use INT 13H

must implement the same CHS translation algorithm.  If it

doesn't, your data gets scrambled.

 

WHY USE CHS AT ALL?

 

In the perfect world of tomorrow, maybe only LBA will be used.

But today we are faced with the following problems:

 

* Some drives >528MB don't implement LBA.

 

* Some drives are optimized for CHS and may have lower

   performance when given commands in LBA mode.  Don't forget

   that LBA is something new for the ATA disk designers who have

   worked very hard for many years to optimize CHS address

   handling.  And not all drive designs require the use of LBA

   internally.

 

* The L-CHS to LBA conversion is more complex and slower than

   the bit shifting L-CHS to P-CHS conversion.

 

* DOS, FDISK and the MBR are still CHS based -- they use the

   CHS returned by INT 13H AH=08H.  Any OS that can be installed

   on the same disk with DOS must understand CHS addressing.

 

* The BIOS boot processing and loading of the first OS kernel

   code is done in CHS mode -- the CHS returned by INT 13H AH=08H

   is used.

 

* Microsoft has said that their OS's will not use any disk

   capacity that can not also be accessed by INT 13H AH=0xH.

 

These are difficult problems to overcome in today's industry

environment.  The result:  chaos.

 

DANGER TO YOUR DATA!

 

See the description of BIOS Type 7 below to understand why a

WD EIDE BIOS is so dangerous to your data.

 

The BIOS Types

--------------

 

I assume the following:

 

a) All BIOS INT 13H support has been installed by the time the OS

   starts its boot processing.  I'm don't plan to cover what

   could happen to INT 13H once the OS starts loading its own

   device drivers.

 

b) Drives supported by INT 13H are numbered sequentially starting

   with drive number 80H (80H-FFH are hard drives, 00-7FH are

   floppy drives).

 

And remember, any time a P-CHS exists it may or may not account

  for the CE Cylinder properly.

 

I have identified the following types of BIOS INT 13H support as

seen by an OS during its boot time hardware configuration

determination:

 

BIOS Type 1

 

   Origin:  Original IBM PC/XT.

 

   BIOS call support:  INT 13H AH=0xH and FDPT for BIOS drives

   80H and 81H.  There is no CHS translation.  INT 13H AH=08H

   returns the P-CHS.  The FDPT should contain the same P-CHS.

 

   Description:  Supports up to 528MB from a table of drive

   descriptions in BIOS ROM.  No support for >1024 cylinders or

   drives >528MB or LBA.

 

   Support issues:  For >1024 cylinders or >528MB support, either

   an option ROM with an INT 13H replacement (see BIOS types 4-7)

   -or- a software driver (see BIOS type 8) must be added to the

   system.

 

BIOS Type 2

 

   Origin:  Unknown, but first appeared on systems having BIOS

   drive type table entries defining >1024 cylinders.  Rumored to

   have originated at the request of Novell or SCO.

 

   BIOS call support:  INT 13H AH=0xH and FDPT for BIOS drives

   80H and 81H.  INT 13H AH=08H should return a L-CHS with the

   cylinder value limited to 1024.  Beware, many BIOS perform

   a logical AND on the cylinder value.  A correct BIOS will

   limit the cylinder value as follows:

 

      cylinder = cylinder > 1024 ? 1024 : cylinder;

 

   An incorrect BIOS will limit the cylinder value as follows

   (this implementation turns a 540MB drive into a 12MB drive!):

 

      cylinder = cylinder & 0x03ff;

 

   The FDPT will return a P-CHS that has the full cylinder

   value.

 

   Description:  For BIOS drive numbers 80H and 81H, this BIOS

   type supports >1024 cylinders or >528MB without using a

   translated CHS in the FDPT.  INT 13H AH=08H truncates

   cylinders to 1024 (beware of buggy implementations).  The FDPT

   can show >1024 cylinders thereby allowing an OS to support

   drives >528MB.  May convert the L-CHS or P-CHS directly to an

   LBA if the ATA device supports LBA.

 

   Support issues:  Actual support of >1024 cylinders is OS

   specific -- some OS's may be able to place OS specific

   partitions spanning or beyond cylinder 1024.  Usually all OS

   boot code must be within first 1024 cylinders.  The FDISK

   program of an OS that supports such partitions uses an OS

   specific partition table entry format to identify these

   paritions.  There does not appear to be a standard (de facto

   or otherwise) for this unusual partition table entry.

   Apparently one method is to place -1 into the CHS fields and

   use the LBA fields to describe the location of the partition.

   This DOES NOT require the drive to support LBA addressing.

   Using an LBA in the partition table entry is just a trick to

   get around the CHS limits in the partition table entry.  It is

   unclear if such a partition table entry will be ignored by an

   OS that does not understand what it is.  For an OS that does

   not support such partitions, either an option ROM with an INT

   13H replacement (see BIOS types 4-7) -or- a software driver

   (see BIOS type 8) must be added to the system.

 

   Note:  OS/2 can place HPFS partitions and Linux can place

   Linux partitions beyond or spanning cylinder 1024.  (Anyone

   know of other systems that can do the same?)

 

BIOS Type 3

 

   Origin:  Unknown, but first appeared on systems having BIOS

   drive type table entires defining >1024 cylinders.  Rumored to

   have originated at the request of Novell or SCO.

 

   BIOS call support:  INT 13H AH=0xH and FDPT for BIOS drives

   80H and 81H.  INT 13H AH=08H can return an L-CHS with more

   than 1024 cylinders.

 

   Description:  This BIOS is like type 2 above but it allows up

   to 4096 cylinders (12 cylinder bits).  It does this in the INT

   13H AH=0xH calls by placing two most significant cylinder bits

   (bits 11 and 10) into the upper two bits of the head number

   (bits 7 and 6).

 

   Support issues:  Identification of such a BIOS is difficult.

   As long as the drive(s) supported by this type of BIOS have

   <1024 cylinders this BIOS looks like a type 2 BIOS because INT

   13H AH=08H should return zero data in bits 7 and 6 of the head

   information.  If INT 13H AH=08H returns non zero data in bits

   7 and 6 of the head information, perhaps it can be assumed

   that this is a type 3 BIOS.  For more normal support of >1024

   cylinders or >528MB, either an option ROM with an INT 13H

   replacement (see BIOS types 4-7) -or- a software driver (see

   BIOS type 8) must be added to the system.

 

   Note:  Apparently this BIOS type is no longer produced by any

   BIOS vendor.

 

BIOS Type 4

 

   Origin:  Compaq.  Probably first appeared in systems with ESDI

   drives having >1024 cylinders.

 

   BIOS call support:  INT 13H AH=0xH and EDPT for BIOS drives

   80H and 81H.  If the drive has <1024 cylinders, INT 13H AH=08H

   returns the P-CHS and a FDPT is built.  If the drive has >1024

   cylinders, INT 13H AH=08H returns an L-CHS and an EDPT is

   built.

 

   Description:  Looks like a type 2 BIOS when an FDPT is built.

   Uses CHS translation when an EDPT is used.  May convert the

   L-CHS directly to an LBA if the ATA device supports LBA.

 

   Support issues:  This BIOS type may support up to four drives

   with a EDPT (or FDPT) for BIOS drive numbers 82H and 83H

   located in memory following the EDPT (or FDPT) for drive 80H.

   Different CHS translation algorithms may be used by the BIOS

   and an OS.

 

BIOS Type 5

 

   Origin:  The IBM/Microsoft BIOS Extensions document.  For many

   years this document was marked "confidential" so it did not

   get wide spread distribution.

 

   BIOS call support:  INT 13H AH=0xH, AH=4xH and EDPT for BIOS

   drives 80H and 81H.  INT 13H AH=08H returns an L-CHS.  INT 13H

   AH=41H and AH=48H should be used to get P-CHS configuration.

   The FDPT/EDPT should not be used.  In some implementations the

   FDPT/EDPT may not exist.

 

   Description:  A BIOS that supports very large drives (>1024

   cylinders, >528MB, actually >8GB), and supports the INT 13H

   AH=4xH read/write functions.  The AH=4xH calls use LBA

   addressing and support drives with up to 2^64 sectors.  These

   calls do NOT require that a drive support LBA at the drive

   interface.  INT 13H AH=48H describes the L-CHS used at the INT

   13 interface and the P-CHS or LBA used at the drive interface.

   This BIOS supports the INT 13 AH=0xH calls the same as a BIOS

   type 4.

 

   Support issues:  While the INT 13H AH=4xH calls are well

   defined, they are not implemented in many systems shipping

   today.  Currently undefined is how such a BIOS should respond

   to INT 13H AH=08H calls for a drive that is >8GB.  Different

   CHS translation algorithms may be used by the BIOS and an OS.

 

   Note:  Support of LBA at the drive interface may be automatic

   or may be under user control via a BIOS setup option.  Use of

   LBA at the drive interface does not change the operation of

   the INT 13 interface.

 

BIOS Type 6

 

   Origin:  The Phoenix Enhanced Disk Drive Specification.

 

   BIOS call support:  INT 13H AH=0xH, AH=4xH and EDPT for BIOS

   drives 80H and 81H.  INT 13H AH=08H returns an L-CHS.  INT 13H

   AH=41H and AH=48H should be used to get P-CHS configuration.

   INT 13H AH=48H returns the address of the Phoenix defined

   "FDPT Extension" table.

 

   Description:  A BIOS that supports very large drives (>1024

   cylinders, >528MB, actually >8GB), and supports the INT 13H

   AH=4xH read/write functions.  The AH=4xH calls use LBA

   addressing and support drives with up to 2^64 sectors.  These

   calls do NOT require that a drive support LBA at the drive

   interface.  INT 13H AH=48H describes the L-CHS used at the INT

   13 interface and the P-CHS or LBA used at the drive interface.

   This BIOS supports the INT 13 AH=0xH calls the same as a BIOS

   type 4. The INT 13H AH=48H call returns additional information

   such as host adapter addresses, DMA support, LBA support, etc,

   in the Phoenix defined "FDPT Extension" table.

 

   Phoenix says this this BIOS need not support the INT 13H

   AH=4xH read/write calls but this BIOS is really an

   extension/enhancement of the original IBM/MS BIOS so most

   implementations will probably support the full set of INT 13H

   AH=4xH calls.

 

   Support issues:  Currently undefined is how such a BIOS should

   respond to INT 13H AH=08H calls for a drive that is >8GB.

   Different CHS translation algorithms may be used by the BIOS

   and an OS.

 

   Note:  Support of LBA at the drive interface may be automatic

   or may be under user control via a BIOS setup option.  Use of

   LBA at the drive interface does not change the operation of

   the INT 13 interface.

 

BIOS Type 7

 

   Origin:  Described in the Western Digital Enhanced IDE

   Implementation Guide.

 

   BIOS call support:  INT 13H AH=0xH and FDPT or EDPT for BIOS

   drives 80H and 81H.  An EDPT with a L-CHS of 16 heads and 63

   sectors is built when "LBA mode" is enabled.  An FDPT is built

   when "LBA mode" is disabled.

 

   Description:  Supports >1024 cylinders or >528MB using a EDPT

   with a translated CHS *** BUT ONLY IF *** the user requests

   "LBA mode" in the BIOS setup *** AND *** the drive supports

   LBA.  As long as "LBA mode" is enabled, CHS translation is

   enabled using a L-CHS with <=1024 cylinders, 16, 32, 64, ...,

   heads and 63 sectors.  Disk read/write commands are issued in

   LBA mode at the ATA interface but other commands are issued in

   P-CHS mode.  Because the L-CHS is determined by table lookup

   based on total drive capacity and not by a multiply/divide of

   the P-CHS cylinder and head values, it may not be possible to

   use the simple (and faster) bit shifting L-CHS to P-CHS

   algorithms.

 

   When "LBA mode" is disabled, this BIOS looks like a BIOS type

   2 with an FDPT.  The L-CHS used is taken either from the BIOS

   drive type table or from the device's Identify Device data.

   This L-CHS can be very different from the L-CHS returned when

   "LBA mode" is enabled.

 

   This BIOS may support FDPT/EDPT for up to four drives in the

   same manner as described in BIOS type 4.

 

   The basic problem with this BIOS is that the CHS returned by

   INT 13H AH=08H changes because of a change in the "LBA mode"

   setting in the BIOS setup.  This should not happen.  This use

   or non-use of LBA at the ATA interface should have no effect

   on the CHS returned by INT 13H AH=08H.  This is the only BIOS

   type know to have this problem.

 

   Support issues:  If the user changes the "LBA mode" setting in

   BIOS setup, INT 13H AH=08H and the FDPT/EDPT change

   which may cause *** DATA CORRUPTION ***.  The user should be

   warned to not change the "LBA mode" setting in BIOS setup once

   the drive has been partitioned and software installed.

   Different CHS translation algorithms may be used by the BIOS

   and an OS.

 

BIOS Type 8

 

   Origin:  Unknown.  Perhaps Ontrack's Disk Manager was the

   first of these software drivers.  Another example of such a

   driver is Micro House's EZ Drive.

 

   BIOS call support:  Unknown (anyone care to help out here?).

   Mostly likely only INT 13H AH=0xH are support.  Probably a

   FDPT or EDPT exists for drives 80H and 81H.

 

!  Description:  A software driver that "hides" in the MBR such

   that it is loaded into system memory before any OS boot

   processing starts.  These drivers can have up to three parts:

   a part that hides in the MBR, a part that hides in the

   remaining sectors of cylinder 0, head 0, and an OS device

   driver.  The part in the MBR loads the second part of the

   driver from cylinder 0 head 0. The second part provides a

   replacement for INT 13H that enables CHS translation for at

   least the boot drive.  Usually the boot drive is defined in

   CMOS setup as a type 1 or 2 (5MB or 10MB drive).  Once the

   second part of the driver is loaded, this definition is

   changed to describe the true capacity of the drive and INT 13H

   is replaced by the driver's version of INT 13H that does CHS

   translation.  In some cases the third part, an OS specific

   device driver, must be loaded to enable CHS translation for

   devices other than the boot device.

 

!  I don't know the details of how these drivers respond to INT

   13H AH=08H or how they set up drive parameter tables (anyone

   care to help out here?).  Some of these drivers convert the

   L-CHS to an LBA, then they add a small number to the LBA and

   finally they convert the LBA to a P-CHS.  This in effect skips

   over some sectors at the front of the disk.

 

   Support issues:  Several identified -- Some OS installation

   programs will remove or overlay these drivers; some of these

   drivers do not perform CHS translation using the same

   algorithms used by the other BIOS types; special OS device

   drivers may be required in order to use these software drivers

   For example, under MS Windows the standard FastDisk driver

   (the 32-bit disk access driver) must be replaced by a driver

   that understands the Ontrack, Micro House, etc, version of INT

   13H.  Different CHS translation algorithms may be used by the

   driver and an OS.

 

!  The hard disk vendors have been shipping these drivers with

   their drives over 528MB during the last year and they have

   been ignoring the statements of Microsoft and IBM that these

   drivers would not be supported in future OS's.  Now it appears

   that both Microsoft and IBM are in a panic trying to figure

   out how to support some of these drivers in WinNT, Win95 and

   OS/2.  It is unclear what the outcome of this will be at this

   time.

 

!  NOTE:  THIS IS NOT A PRODUCT ENDORSEMENT!  An alternate

   solution for an older ISA system is one of the BIOS

   replacement cards.  This cards have a BIOS option ROM.  AMI

   makes such a card called the "Disk Extender".  This card

   replaces the motherboard's INT 13H BIOS with a INT 13H BIOS

   that does some form of CHS translation.  Another solution for

   older VL-Bus systems is an ATA-2 (EIDE) type host adapter card

   that provides a option ROM with an INT 13H replacement.

 

BIOS Type 9

 

   Origin:  SCSI host adapters.

 

   BIOS call support:  Probably INT 13H AH=0xH and FDPT for BIOS

   drives 80H and 81H, perhaps INT 13H AH=4xH.

 

   Description:  Most SCSI host adapters contain an option ROM

   that enables INT 13 support for the attached SCSI hard drives.

   It is possible to have more than one SCSI host adapter, each

   with its own option ROM.  The CHS used at the INT 13H

   interface is converted to the LBA that is used in the SCSI

   commands.  INT 13H AH=08H returns a CHS.  This CHS will have

   <=1024 cylinders, <=256 heads and <=63 sectors.  The FDPT

   probably will exist for SCSI drives with BIOS drive numbers of

   80H and 81H and probably indicates the same CHS as that

   returned by INT 13H AH=08H.  Even though the CHS used at the

   INT 13H interface looks like a translated CHS, there is no

   need to use a EDPT since there is no CHS-to-CHS translation

   used.  Other BIOS calls (most likely host adapter specific)

   must be used to determine other information about the host

   adapter or the drives.

 

   The INT 13H AH=4xH calls can be used to get beyond 8GB but

   since there is little support for these calls in today's OS's,

   there are probably few SCSI host adapters that support these

   newer INT 13H calls.

 

   Support issues:  Some SCSI host adapters will not install

   their option ROM if there are two INT 13H devices previously

   installed by another INT 13H BIOS (for example, two

   MFM/RLL/ESDI/ATA drives).  Other SCSI adapters will install

   their option ROM and use BIOS drive numbers greater than 81H.

   Some older OS's don't understand or use BIOS drive numbers

   greater than 81H.  SCSI adapters are currently faced with the

   >8GB drive problem.

 

BIOS Type 10

 

   Origin:  A european system vendor.

 

   BIOS call support:  INT 13H AH=0xH and FDPT for BIOS drives

   80H and 81H.

 

   Description:  This BIOS supports drives >528MB but it does not

   support CHS translation.  It supports only ATA drives with LBA

   capability.  INT 13H AH=08H returns an L-CHS.  The L-CHS is

   converted directly to an LBA.  The BIOS sets the ATA drive to

   a P-CHS of 16 heads and 63 sectors using the Initialize Drive

   Parameters command but it does not use this P-CHS at the ATA

   interface.

 

!  Support issues:  OS/2 will probably work with this BIOS as

   long as the drive's power on default P-CHS mode uses 16 heads

   and 63 sectors.  Because there is no EDPT, OS/2 uses the ATA

   Identify Device power on default P-CHS, described in

   Identify Device words 1, 3 and 6 as the current P-CHS for the

   drive.  However, this may not represent the correct P-CHS.  A

   newer drive will have the its current P-CHS information in

   Identify Device words 53-58 but for some reason OS/2 does not

   use this information.

posted on 2007-05-18 15:34 yongqing 阅读(786) 评论(0)  编辑 收藏 引用 所属分类: optimization
只有注册用户登录后才能发表评论。

<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

收藏夹

blog

linux

storage

windows

搜索

  •  

最新评论

阅读排行榜

评论排行榜