Award BIOS Modifications



This utility can:
- modify BIOS message
- modify BIOS defaults
- modify Security Default Password
- recalculate checksums
Various versions are suitable for various BIOSes, for me and 4.51PG BIOSes works good MODBIN V4.50.63A

User's guide for MODBIN 4.50.58


This utility is intended for combining (add/release/extract) ROMs inside of packed binary BIOS.
Versions are 1 for 4.5x BIOS, 6 for 6.00 BIOS and 2 for new (all?) BIOSes. For me works CBROM 1.32.

User's guide for CBROM 1.11

AWDhack v1.3

AWDHACK is intended for editing main (128 KB) ROM contained in BIOS binary file. It needs specific versions of tools, above mentioned MODBIN and I verified that works with hexa editor HIEW 5.13
I does not work in all environments, for me works in Windows 98 DOS safe mode. In DOS mode (either 6.22 or 7.1) it stops inside MODBIN and HIEW is not started, under Windows 98 HIEW is in Read-Only mode. I made no other experiments.

What to modify

I will list only few, but low-level patches. All of them are described in detail on my pages:

Here you can see detail description of all changes in GA-586HX 2.9 BIOS
Here you can see detail description of all changes in GA-586T2 2.2 BIOS

1. 34 GB bug
It is caused by divide overflow if the disk size exceedes 65535 * 16 * 63 * 512 = 33822351360 bytes = 34 GB. The solution is to change default number of heads from 16 to 255.

2. 65 GB bug
It is caused by divide overflow in routines counting and displaying total capacity of the HDD, the size is word = 65535 MB maximum. The solution is to introduce new variable indicating whether the variable contains capacity in megabytes or gigabytes and modify several routines. This patch is not trivial. Other (not so nice) solution is to display capacity not in MB, but 10 times lower. This solution is trivial and I won't describe it in detail.

3. UDMA mode limitation
In the older Award BIOSes was the HDD set to highest supported mode, it was not problem when only UDMA33 HDDs were produced, but later problem arised: HDD was programmed to e.g. 66 MHz and chipset maximum was 33 MHz, the result was unreliable operation. There are some solutions, switch off UDMA in BIOS setup at all, or use special program supplied by HDD manufacturer and switch off ATA/66 support. Better way is to implement this directly into the BIOS code. FYI:
UDMA mode 2 = ATA/33
UDMA mode 4 = ATA/66
UDMA mode 5 = ATA/100
UDMA mode 6 = ATA/133

4. Processor speed display
There are tables containg 3 bytes for each speed, the first byte is displayed frequency, the second is minimum frequency measured by the BIOS, and the third value corresponds to external CPU bus frequency. Details are inside a.m. documents.

5. Add support for other (newer) processor It may be easy or not. There are several tables and routines, it depends on the difference of new and currently supported processor. My patch for K6-2+ and K6-III+ is the easier one. To achive the right string to display is not so hard. But there may be some other settings that should be done. Luckily if BIOS supports Write Allocation for K6-2 CXT (058C, sometimes called Sharptooth as K6-III), the same support can be used for K6-III, K6-2+ and K6-III+. This is different to K6 3D (0580, Chomper)!!

Some hints

Free space for additional code is just after the useful code and data, in segment E000 (first half of ROM with POST code) it is below address EFFFF (0FFFF in ROM) and this space usualy contains FFh, in F000 segment (main BIOS) the space is below FE000 (10000 in ROM) and is usualy filled by zeroes. Routines in XGROUP segment are stored in awardext.rom separate file inside compressed image and the size can be increased.

For calling procedures from other segment, there are special interface routines
Post_call_proc is used for calling procedures in POST - E000 segment from main BIOS and XGROUP segment
F000_call_proc is used for calling procedures in main BIOS - F000 segment from POST and XGROUP segment

Very inspirative is to look into original Award sources - thre were (are?) available samples of complete source code of 4.51PG BIOS dd. 1997 and 1998 and 6.00PG BIOS dd. 1999 - somewhere on the Internet.

For calculating the right relative offsets in jmp and call instructions, the easiest is to write these instructions to the same offset in DEBUG program (part of DOS and Windows).

Searching for the right place in ROM where the routine is located (e.g. porting my patches to other BIOS). The easiest is to search for sequence of bytes, that are not affected by the location (i.e. with no offsets). You can use any hexa editor, or even Windows Commander can search hexadecimal.

Other resources:

AWARD BIOS CMOS Setup Utility V4.51PG User's Guide
AWARD BIOS CMOS Setup Utility V4.51PG User's Guide for Intel 82430HX PCIset
AWARD BIOS CMOS Setup Utility V4.51PG User's Guide for Intel 82430TX PCIset

AMD Processor Recognition
AMD BIOS Development Guide
AMD-K6 Processor BIOS Design
Embedded AMD-K6 Processors BIOS Design Guide

Wim's BIOS page
Award BIOSes - 32GB and 64GB bugs patched!
Getting the AMD K6-2+ / K6-III+ to work on your Super Socket 7 board
AWDhack v1.3
Various BIOS tools
Binary's BIOS Mods
Award BIOS Editor
CBROM Repository
AwardMod Project
PC Bios Security & Password Recovery
BIOS Modding Guide
Bios Central
The BIOS Companion book