Micro Firmware Tech Support

Some Technical Info on Hard Drives


Filename: HDTECH.TXT
WWW URL:  http://www.firmware.com/support/bios/hdtech.htm
FTP URL:  ftp://ftp.firmware.com/text/hdtech.txt
Author:   Terry Slade, Micro Firmware Technical Support
Revision: 07/27/98
Summary:  Discusses some technical aspects of hard drives such as CHS
          addressing scheme, boot sectors, partition tables, FAT, etc.

This file is not really in a finished state, but hopefully is still of some use. TLS


Hard drives are the primary storage devices used in most computers. Hard drives are also called hard disks, hard disk drives, fixed disks, fixed disk drives, and (very rarely) Winchester drives. Programs and data are stored on the drive in the form of binary 1's and 0's, represented by magnetic flux patterns. This is accomplished by read/write heads using electromagnetism, the same basic type of technology used in audio tape and video tape (like in cassette tape decks and VCRs). The media that data is stored on consists of one or more rigid platters coated with magnetic material. The platters and the head assembly are in a sealed compartment called the HDA (Head Disk Assembly). The platters spin at a rate of 3600RPM on older IDE drives up to 5400RPM and faster on newer drives. Modern IDE drives also include the controlling electronics.

Note that everything in this file applies to hard drives as used in PCs. Things may be completely different in the worlds of Macintoshes, or RISC systems, or mainframes or other types of computers. One thing that defines a PC is the standards that the ROM BIOS is written to. Another factor defining a PC is the CPU. PCs use x86 CPUs - this is the family of CPUs including Intel (and compatible) 8086, 286, 386, 486, and Pentium CPUs.


Cylinders, Heads, and Sectors

Data is written to and read from the drive in units called sectors. A sector is 512 bytes. Sectors are organized on a drive in a matrix of cylinders, heads, and sectors. The cylinder/head/sector (CHS) values used by a drive are also referred to as the drive's geometry. At one time this addressing system corresponded directly to the actual physical makeup of the drive. This is no longer true, but the same system is still used, so it is useful to understand the theory behind it.

A hard drive consists of several round platters stacked on top of each other with tracks defined as concentric circles on both sides of each platter. The read/write heads are part of an assembly that moves all of the heads together, with one head for each side of each platter. In the cylinder/head/sector system, cylinder refers to the set of tracks (concentric circles) that line up on top of each other, head refers to a side of a platter, and a sector is the portion of a track that holds 512 bytes of data.

To illustrate this more clearly we can draw a picture of a hypothetical drive with CHS values of 3 x 2 x 8. Draw a circle and draw two smaller concentric circles inside it. Then draw four lines to divide the picture into eight sections just like slicing a pie. Then draw another picture just like it to represent the other side of the platter. The three circles are tracks. Each track is divided into eight sectors. The first picture represents one head (or platter), the other picture is the other head. The outer track on each picture is one cylinder, the middle tracks are another cylinder, and the inner tracks are another cylinder. Cylinders and heads are numbered beginning with 0, sectors are numbered beginning with 1. So on this imaginary tiny drive we have 3 cylinders (numbered 0, 1, and 2), 2 heads (numbered 0 and 1), and 8 sectors (numbered 1 - 8).

We can apply this scheme to an older MFM drive with CHS values of 306 x 4 x 17. If we multiply the CHS values together, we get the number of sectors. If we multiply this number by 512 (the number of bytes in a sector), we see that this is a 10MB drive. This drive would have 2 platters (4 heads) with 306 tracks on each one and each track would be divided into 17 sectors.

Although newer drives still have to use the CHS system, since BIOSes and operating systems require it, these values no longer correspond to the physical makeup of the drive. Modern drives may have only one or two platters but will usually report that they have 15 or 16 heads. Also, modern drives will have different numbers of sectors on each track, since the outer tracks can hold more. The drive will internally and automatically handle the translation from the CHS values to the actual layout of sectors on its platters.

When sectors are numbered sequentially, they are ordered in a particular way. First count all sectors on the first cylinder and head, then count the sectors on the next head until all heads in the cylinder are counted, then move to the next cylinder and start over at the first head and sector. This would normally be the order in which an operating system would write files to a disk, since there is less head movement required if all sectors in a cylinder are used before moving to the next cylinder. Also, the first cylinder is normally at the outer edge of the platters and the first head is normally the one on top.


Booting Process, Boot Sectors, Partition Tables

The Booting Process

When a PC is powered on, the CPU immediately executes some code in the ROM BIOS at FFFF:0000. This contains a jump instruction to go to another location where the BIOS actually starts. The BIOS then performs several jobs including the POST (Power On Self Test), copying itself into RAM (shadowing), executing the video BIOS and looking for ROM BIOS extensions in upper memory. The last thing the BIOS does is look for a boot sector on a disk in drive A:, if not found, it looks for a master boot record on drive C:. If a boot sector is found on drive A:, the system boots from that disk, otherwise the system is booted from the first hard drive (drive C:). (Some BIOSes allow a different boot sequence to be set). There is a very detailed breakdown of the booting process in the book Upgrading and Repairing PCs by Scott Mueller. Some additional details follow.


Boot Sectors and Master Boot Records

Modern drives (IDE and SCSI) are always physically formatted at the factory. This physical format (also called or low-level format or LLF) defines the tracks and sectors which are the basic structure in which data is stored.

Operating systems must define one or more partitions on a drive, which are then given a logical (or high-level) format to define a file system. The partitioning utility used by DOS is called FDISK and the logical format is performed by the FORMAT command. The names of these programs may vary with other operating systems.

There is no written "industry standard" as to how FDISK programs must work, but for the most part they all work about the same, so that various different operating systems are able to coexist on the same drive (in different partitions).

The FDISK program (of any operating system) will create a one-sector (512 bytes) master boot record (MBR) on the first sector (cylinder 0, head 0, sector 1) of any blank hard drive that it partitions. This may also be called the master boot sector (MBS) or the partition sector or the master partition sector. The FDISK program could also be used to define additional partitions on a drive that already has an MBR defined by the same or another operating system (OS).

The MBR contains a program that finds all of the partitions listed in its partition table and in any extended partition tables. It then looks for a partition in the MBR partition table that is marked active and then loads the boot sector from the active partition. The boot sector in the active partition contains code that loads the system files on that partition. Once the system files are loaded, they may in turn load other files, this process varies with different operating systems. With MS-DOS, IO.SYS loads first and in turn loads MSDOS.SYS, which then processes CONFIG.SYS and then loads COMMAND.COM, which in turn processes AUTOEXEC.BAT.

Every partition or volume on the drive contains a boot sector with bootable code, but only the boot sector on the active partition will be executed. Since the BIOS looks for the MBR on only the first hard drive, the system can only be booted from an active partition on the first drive, even though there may be several other hard drives, which may all contain MBRs and boot sectors.

In addition to the boot code that loads the system files, a boot sector contains a table called the Disk Parameter Block (DPB) or Media Descriptor Table (MDT), which has details on the size of the partition. The layout of this area may vary from OS to OS.


Partition Tables

The MBR in the first physical sector of a hard drive always contains a partition table. This partition table (like all partition tables) is 64 bytes long and is followed by a two-byte signature (55AAh), which indicates the end of the MBR. So the 64-byte partition table and the 2-byte signature occupies the last 66 bytes of the 512-byte sector. The 2-byte signature is checked by various programs (such as the boot code, the BIOS, and FDISK programs) to verify that this is a valid partition sector.

A partition table consists of four 16-byte partition table entries. It may not matter which of the 4 locations is used by an entry, since the program in the MBR that searches for partitions on bootup will check all entries in all partition tables.

There is a standard structure to the partition table entry, which is followed by most or all operating systems.

The 16 bytes are defined follows:

Byte 1 = boot indicator (80h - active, 00h - not active)
Byte 2 = starting head of partition
Bytes 3,4 = starting cylinder and sector of partition

(10 bits for cylinder, 6 bits for sector) Byte 5 = partition type (also called system flag or system indicator) Byte 6 = ending head of partition Bytes 7,8 = ending cylinder and sector of partition
(10 bits for cylinder, 6 bits for sector) Bytes 9,10,11,12 = relative sector offset of partition Bytes 13,14,15,16 = total number of sectors in partition
The above fields for starting and ending CHS values yield a limit of 1024 cylinders, 256 heads, and 64 sectors. This works out to a drive size of about 8.4GB. Since DOS uses these CHS values, it is limited to 8.4GB hard drives. Windows 95 can access larger drives, since it uses the last 2 4-byte fields. This also requires a recent BIOS (one that supports Int 13 Extensions and also correctly reports the size of drives over 8.4GB).

The first byte in the partition table is the indicator for an active partition. If no partition is set active, the drive will not boot. If more than one partition in the master partition table is set active, the drive may not boot and probably an error message such as "Invalid partition table" will be given. It should not matter if partitions on other drives are set to active since only the first drive can be booted from.

The fifth byte in the partition table indicates the partition type. Most operating systems have their own partition type codes to identify their partitions. Some operating systems use several different types. There are also various programs that create partitions which they may mark with their own partition type indicators.

Here is a list of some of the more common partition type codes:

00 - unused partition table entry
01 - DOS - 12-bit FAT - Primary partition (less than 16MB)
04 - DOS - 16-bit FAT - Primary partition (16MB - 32MB)
05 - DOS - Extended partition (12-bit or 16-bit FAT)
06 - DOS - 16-bit FAT - Primary partition (larger than 32MB) (BIGDOS)
07 - HPFS, NTFS, Unix, others - see partition boot record
0A - OS/2 boot manager
0B - FAT32 - Windows 95 OSR2 (WIN95B)
0C - FAT 32 LBA (requires Extended Int13 support in BIOS) WIN95B
0E - FAT 16 LBA (requires Extended Int13 support in BIOS) WIN95
0F - FAT 16 LBA Extended (requires Ext Int13 support in BIOS) WIN95
83 - Linux EXT2
A5 - FreeBSD, NetBSD, 386BSD
A very complete list of partition types appears in a document by Hale Landis - Part 2 of the Partition Tables document in the How It Works Series - see end of this file for more info on locating this document.

Normally the operating system used to boot a PC, whether from floppy or hard drive, can see only partitions created by that operating system. When more than one OS is used a system, the system must be rebooted for each OS.

One way that different operating systems can be used on the same drive (or system) is to use a "boot manager". Some operating systems, such as OS/2, include such a program. System Commander is an example of a commercially available boot manager program. These programs can work in various different ways. Some will occupy the MBR, others will be located in their own partition. It is also possible to just manually change the active partition in the master partition table. This can be done using FDISK or by editing the table with DEBUG or some other utility.

Following is a chart to illustrate some of what has been discussed. This shows a drive that has been partitioned with DOS FDISK into a primary partition and an extended partition containing 3 logical drives. Also another partition has been created with a different operating system. Not all operating systems support extended partitions and each operating system may handle some of these details differently. The way that DOS handles extended partitions can be confusing. The terminology used in the DOS FDISK program does not really match what is actually happening. You can see here that what DOS FDISK calls logical drives are actually primary partitions and that they are contained within extended partition "wrappers" which nest inside each other. The extended partition on this drive contains an extended partition which contains an extended partition. Each extended partition contains a primary partition.


Master Partition Table | Master Boot Sector (MBS) |
1. PRI DOS | (also called Master Boot Record or MBR)|
2. EXT DOS | Cylinder 0, Head 0, Sector 1 |
3. NON-DOS | |
4. 55AA| |

Volume Boot Sector | Primary DOS Partition |
DPB 55AA| (contains no partition sector) |

FAT1 | FAT2 | Root DIR | |

Data Area | |

Extended Partition Table | Extended Partition | Extended |
1. EXT DOS | Sector (or EPBR) | Partition |
2. PRI DOS | (usually blank except| |
3. | for partition table)| |
4. 55AA| | |
Volume Boot Sector | 1st logical drive in | |
DPB 55AA| DOS EXT partition | |

FAT1 | FAT2 | Root DIR | partition) | |

Data Area | | |
Extended Partition Table | Extended Partition | Extended | |
1. EXT DOS | Sector | Partition | |
2. PRI DOS | | | |
3. | | | |
4. 55AA| | | |
Volume Boot Sector | 2nd logical drive in | | |
DPB 55AA| DOS EXT partition | | |

FAT1 | FAT2 | Root DIR | partition) | | |

Data Area | | | |
Extended Partition Table | Extended Partition | EXT | | |
1. PRI DOS | Sector | Partn| | |
2. | | | | |
3. | | | | |
4. 55AA| | | | |
Volume Boot Sector | 3rd logical drive in | | | |
DPB 55AA| DOS EXT partition | | | |

FAT1 | FAT2 | Root DIR | partition) | | | |

Data Area | | | | |

Volume Boot Sector 55AA| Non-DOS partition |

| |
Notice that all of the partition sectors and boot sectors end with the 55AAh 2-byte signature. This same signature is also used to mark the beginning of ROM BIOS extensions in upper memory. The reason for using this particular value has something to do with the fact that, in binary terms, it forms a checkerboard pattern - 55 would be 10101010 and AA is 01010101.

The DPB in the DOS boot sectors refers to the Disk Parameter Block. The Non-DOS boot sector may or may not have a DPB.

The Master Boot Record (MBR) is always on the first sector on the drive. The boot sectors or partition sectors at the beginning of each partition are normally located in the first sector on a cylinder/head. So there may some "slack space" following the MBR. On a drive with 63 sectors per track, there may be 62 empty sectors following the MBR. This is how MS-DOS does things, other OSes may differ.


File Systems

Although most operating systems will follow the same rules for creating MBRs and partition tables, they can do whatever they want to within the partitions that they own. This is in fact the reason that this whole system of partitions was developed.

As discussed above, the partition type code shown in the 5th byte of a partition table entry identifies the operating system and/or file system used by a partition. An operating system must have a way to keep track of the files on its volumes (partitions). This is called a file system and will vary greatly from one operating system to another. Some OSes are capable of reading file systems created by other OSes and some OSes can install more than one type of file system.

These are a few of the more common file systems:

FAT  - MS-DOS, WIN95, Windows NT, OS/2
VFAT - variant of FAT16 used by Windows 95
FAT32 - Windows 95B (OSR2)
NTFS - Windows NT
HPFS - OS/2 (High Performance File System)
FFS - Free BSD Unix
EXT2 - Linux

FAT

FAT is the file system used by DOS. Windows NT and OS/2 can also use the FAT system. FAT is an acronym for File Allocation Table. The FAT table is like a map used to keep track of the location of all of the files in a partition. Although the sector is the smallest unit that a BIOS or operating system can work with on a drive (as far as reading and writing data), DOS stores files in units called allocation units (or clusters, an older and interchangeable term), which are defined as 2, 4, 8, 16, or 32 sectors, depending on the size of the partition.

The cluster size is based on the partition size as follows:


Volume Size (MB) Allocation Unit Size FAT Type

0 - 16 4096 (4KB) 8 sectors 12-bit


16 - 128 2048 (2KB) 4 sectors 16-bit
128 - 256 4096 (4KB) 8 sectors 16-bit
256 - 512 8192 (8KB) 16 sectors 16-bit
512 - 1024 16384 (16KB) 32 sectors 16-bit
1024 - 2048 32768 (32KB) 64 sectors 16-bit

The volume sizes above are in binary megabytes as used by FDISK.

When the DOS FORMAT command is used to perform a high-level format on a partition of a hard drive, it creates a boot sector, a FAT table, a second copy of the FAT table, and a root directory. The remainder of the drive is the data area used for storing files. DOS will use either a 12-bit FAT (FAT12) system or a 16-bit FAT (FAT16) system, depending on the size of the partition. Partitions less than 16MB are automatically formatted using FAT12. Partitions 16MB or larger are formatted with FAT16.

FAT12 uses 12-bit entries to point to file locations. This means that it can handle only 4096 clusters (each having a unique 12-bit ID number). FAT16 uses 16-bit entries, so it can handle 65,536 clusters.

Actually, the total numbers are 4078 and 65,518, due to some values being reserved. The values FFF0-FFFF are reserved. (FFF-FF0 with FAT12). FFF7 (or FF7) indicates a bad sector. FFFF (or FFF) indicates end of cluster chain. Values from FFF8-FFFF (or FF8-FFF) may also be used to indicate end of cluster chain. Also, the value 0000 (or 000) indicates an unused cluster. The value 0001 (or 001) is never used.

The first two entries in the FAT table are reserved. These entries contain the media descriptor byte and 3 FF bytes (two FF bytes with FAT12, since each entry is one and a half bytes). This is the reason that the value 0001 (or 001) is not used.

The design of the FAT file system is responsible for the 2GB limit on partition sizes under DOS.

A file's directory entry indicates what cluster it begins in. That location in the FAT table shows either that the file also ends there or that it also uses another cluster, which it points to. The location pointed to for the cluster used by the file will also indicate either that the file ends in that location or that it continues in the cluster indicated, and so on. So the FAT will show a chain of all of the clusters occupied by a file. This system allows a file to be fragmented, that is occupying non-contiguous clusters. As files of various sizes are deleted from and copied to the volume, file fragmentation can get out of control. Tools such as DEFRAG are used to move parts of files around so that they occupy contiguous clusters. This improves the efficiency with which a drive can read files from its platters.


VFAT

VFAT stands for Virtual File Allocation Table. This is a variant on FAT16, which is used by Windows 95. VFAT is actually what is called an Installable File System (IFS).

The main noticeable difference between FAT16 and VFAT is the ability to use long filenames.


FAT32

FAT32 is introduced with the OSR2 version of Windows 95, also called Windows 95B. The FDISK program provided with WIN95B will ask if you want support for large drives. What it really means is do you want to use FAT32. At this time (OCT97) FAT32 partitions can not be read by any OS besides Windows 95.



BIOS

This section discusses briefly some aspects of the PC BIOS that pertain to hard drives, just to give an idea as to what all is involved.

BIOS is an acronym for Basic Input Output System. The BIOS on a PC resides in a ROM chip on the motherboard. Newer motherboards will use a flash ROM chip for the BIOS so that it can be updated easily.

A PC can be looked at as a series of layers. The hardware is the lowest layer. The BIOS layer provides an interface between the hardware and the operating system, which is the next layer. The highest layer is the application programs run by the user.

The BIOS on every PC is based largely on the BIOS that IBM developed for the first PC, the IBM PC, in 1981.

Besides handling the bootup process, the BIOS handles hardware and software interrupts. Computers based on Intel 80x86 CPUs are mainly controlled by interrupts, which can be issued by the CPU, by hardware, or by software. Hardware interrupts are invoked through IRQ lines, which are actual wires on the ISA bus. Software interrupts are issued by the INT instruction (part of the CPU's instruction set).

Each interrupt has a unique number between 00h and FFh. INTs 00-04 are reserved for the CPU. INTs 08-0F and 70-77 are reserved for hardware interrupts. The rest are for software interrupts. The BIOS sets up a table called the Interrupt Vector Table located between 0000:0000 and 0000:0400 - the very beginning of RAM. This table contains addresses for the BIOS routines associated with each interrupt. Interrupts issued by hardware devices are handled by Interrupt Service Routines (ISRs). Interupts issued by software are handled by Device Service Routines (DSRs). Most BIOS Device Service Routines include various functions, which are identified by a number stored in register AH.

INT 13 is the BIOS DSR for disk services, for both diskette drives and hard drives. Here is a list of the functions used by the INT13 Fixed Disk DSR: (some of these are obsolete or rarely used)

Parameter: Function:

AH = 00h    Reset System Fixed Disk 
AH = 01h    Read Disk Staus
AH = 02h    Read Disk Sectors
AH = 03h    Write Disk Sectors
AH = 04h    Verify Disk Sectors
AH = 05h    Format Disk Cylinder
AH = 06h    Format Bad Track
AH = 07h    Format Drive
AH = 08h    Read Drive Parameters
AH = 09h    Initialize Drive Parameters
AH = 0Ah    Read Long Sector
AH = 0Bh    Write Long Sector
AH = 0Ch    Seek to Cylinder
AH = 0Dh    Alternate Reset Fixed Disk
AH = 0Eh    Diagnostics 1: Read test Buffer
AH = 0Fh    Diagnostics 2: Write Test Buffer
AH = 10h    Test for Drive Ready
AH = 11h    Recalibrate Drive
AH = 12h    Controller RAM Diagnostic
AH = 13h    Controller Drive Diagnostic
AH = 14h    Controller Internal Diagnostic
AH = 15h    Read Disk Type
Drive Numbers

The BIOS assigns drive numbers to diskette drives and hard drives. 00h through 7Fh are reserved for floppy drives. 80h through FFh are reserved for hard drives. All of the functions used by INT13 reference the drive number in register DL. 00 is the first floppy drive, 01 is the second floppy drive, 80 is the first hard drive, 81 is the second hard drive. The BIOSes on the original IBM PC and XT systems supported 4 floppy drives numbered 00-03 and no hard drives. The AT BIOS added support for 2 hard drives and reduced the floppy drive support to 2 drives. Some newer BIOSes (such as Phoenix 4.x) support up to 4 hard drives numbered 80, 81, 82 and 83. BIOS extensions such as on an EIDE interface card may support additional drives.

CMOS RAM

The BIOS stores some values in an area called CMOS RAM. These are the values entered by the user in the BIOS setup program, often called CMOS setup. This includes CHS values and other information on installed hard drives. CMOS RAM is normally 64 bytes but may be larger.

FDPT, EDPT, INT41, INT 46

FDPT is an acronym for Fixed Disk Parameter Table. This is a table that a BIOS creates to store the CHS values for a hard drive. Newer BIOSes may create a newer type of FDPT which may be called an Enhanced FDPT (EDPT). An Enhanced FDPT will contain both the translated and untranslated CHS values for a hard drive. The EDPT will also contain other info on the hard drive, such as whether or not it supports LBA addressing.

The FDPT contains a list of parameters used by 47 different drive types, usually with 2 extra entries for user-defineable drive types. Although the drive types in this table are now obsolete, this structure is normally maintained for backwards compatibility.

INT41 and INT46 are unusual in that they do not represent Device Service Routines. INT41 points to the entry for drive 80 in its FDPT, INT46 points to the entry for drive 81 in its FDPT. Although a BIOS will create a FDPT for any drive, there is no standard way to access the FDPT for any drives beyond the first two.

INT 13 Extensions

Due to limitations in the BIOS INT13 services, a new standard has been developed to add new services. These new INT13 services are known as INT13 Extensions.


Some Sources for More Information
The Indispensible Hardware Book - Second Edition - Hans-Peter Messmer

Addison Wesley - 1995 (widely available paperback)

Upgrading and Repairing PCs - Sixth Edition - Scott Mueller
Que - 1996 (widely available paperback)

System BIOS for IBM PCs, Compatibles, and EISA Computers - Second
Edition - 1991 - Phoenix Technologies, Ltd. - published by
Addison Wesley (now out of date but full of basic info)

How It Works series of documents by Hale Landis - these are available
as a ZIP file from Western Digital's ftp site at this URL:
ftp://ftp.fission.dt.wdc.com/pub/otherdocs/pc_systems/how_it_works/ALLHIW.ZIP
Also the current collection can be obtained in a ZIP file by sending
an email message to hiw@sugs.tware.com - this is an automatic
system, the subject and body of message are ignored.

EIDE FAQ - authored by John Wehman and Peter den Haan
home page is http://thef-nym.sci.kun.nl/~pieterh/storage.html

Set of articles on booting at PC Lube and Tune on the web:
http://pclt.cis.yale.edu/pclt/BOOT

Document on using NT Boot Loader and multiple OSes:
http://www.windows-nt.com/multiboot/directboot.html

For more detailed information on how newer BIOSes handle large drives, see specification document available on WDC's ftp site:
Enhanced BIOS Services For Disk Drives - Working Draft - Revision 6
ftp://fission.dt.wdc.com/x3t13/incoming/project/d1226r6.pdf

Technical documents on Micro Firmware's web site and FTP site:


32GBBUG - discusses a bug in some BIOSes limiting HDs to 3.2GB
CLUSTER.TXT - discusses cluster size and slack space
HDMATH.TXT - lots of numbers
LBA.TXT - discusses LBA - Logical Block Addressing
MEGABYTE.TXT - discusses difference in binary and decimal megabytes
OVER2GB.TXT - discusses BIOS limitation of 2GB hard drives
OVER4GB.TXT - discusses BIOS/DOS 4.2GB drive size limitation
WIN95PARTN.TXT - discusses bug in WIN95 and new partition types

Utilities on Micro Firmware's FTP site:


PARTITN - This program shows the information contained in all of the
partition tables on all drives in the system.


ATAID - Shows info returned by ATA Identify Device command.


SALES - SUPPORT - CONTACT - LINKS - HOME


Micro Firmware, Inc.
330 W. Gray Street
Norman, Oklahoma 73069-7111
Toll-Free Sales (USA/Canada): 1-800-767-5465 or 1-888-4-PC-BIOS
Support & Sales: +1 405-321-8333
Sales Department FAX: +1 405-573-5535
Technical Support FAX: +1 405-321-8342
Email: sales@firmware.com support@firmware.com

© 1998 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.