Modding the AmberineM-GL6E/Asus A8AE-LE Bios
Background:
Looking at the current horsepower/dollar systems that are currently available, the Compaq Presario offerings seemed quite appealing. The SR16XX and SR17XX family of desktops provided an AMD socket 939 motherboard, connectors for dual channel memory, ide, sata, floppy, 4+usb ports, dual firewire, card reader based on the ATI RS482/SB400 chipset with Phoenix 6.X based bios. The configuration of things that attached to the ports, along with the 939 cpu that was installed, dictated how much you would pay.
I settled on the SR1750NX, an AMD x64 3500+, 1G (512x2) ram, 200G sata drive, Lightscribe DVD burner, XP MediaCenter.
Ok, now after doing some due diligence before purchase, I knew HP had severly crippled the bios, exposing no tweaking entries and did not provide the raid bios for the SB400 sata ports, but I bought it anyway.
The bios that came in the machine was v3.13. I see HP has no newer versions out there, in fact I do not see them offering 3.13 to other, older version of the AmbermineM family. I do see a version 3.10 available in sp26622.exe. I do not know if all of the following will work with this version of the bios.
How did I extract my bios from the mobo:
I took the hard way. Loaded up the sp26622.exe and as it was waiting for me to say the final ‘yes’ I went looking around temp directories for the XP acct I was logged in as. I found the relevant one and it had the 310.bin and flash utilities. I copied them all out and then said no to sp26622.
I now had ‘Flash.exe’ available (v1.73) so I used it to extract my current bios.
Note: In all the flashing done, I never allowed the flash utility to write the boot block, was too chicken for that. I had as a standby a w98 boot floppy with the dos flasher and the original bios, in case I could not get back up into windows (only happened once). One caveat with this method is the windows flash utility would hide its “proceed” question under the main flasher full screen window, to access it I merely hit a ‘tab’ key followed by enter then waited for the ‘Update Successful” message (which was not hidden).
PCI bus and SB400:
The first thing I went after was a PCI based Sil3112A dual sata controller with raid capabilites. I plugged it in, fired it up, set a stripe size for raid-0 and then benchmarked various stripe sizes under WinXP. Much to my chagrin, the PCI interface was being limited performance wise, the most I could get out of the raid-0 array was 63Mbytes/second. This was with an overclocked CPU/PCI bus using clockgen.
To validate whether it was the controller card or the motherboard, I plugged the card (and attached striped array) into a VIA based mobo. Lo-and-behold performance was up to where I had expected, roughly 100Mbytes/sec. This was achieved only by setting the PCI WS read/write to 0 in the bios. If these were not enabled, the perf dropped right back to the approx 60Mbytes/second I was seeing on the AmberineM.
I then asked around a few forums on the web about PCI wait states and the RS482/SB400 chipset. No answers were forthcoming. I queried ATI and got a wall of silence, even asking about datasheets for the chipsets.
Note that all these experiments were done with a raid-0 set running off the PCI Sata Raid as the main boot stripe set under WinXP.
Into the bios:
I did some digging and found the AmberineM bios was Phoenix based but no one had put out a modding guide for the bios. Next came a search for the tools to manipulate the bios. The ones I ended up using are modbin6 and cbrom606. I found that cbrom215, even though it understood the bios, put together a BIN file that could not be read by modbin6.
First tweaks:
After doing some more digging I found a few posts saying everything was already enabled, at least as what was visible via modbin6. Looking at the structure of the menu tree showed everything 'after' the 'MAIN' entry was visible and everything before it was not visible, so I took one entry from above and dropped it into a menu branch below, flashed and rebooted, the option was now visible.
Second/third/fourth, etc tweaks:
The next thing I learned quickly, the pages displayed as you navigate the bios screens can be overloaded, e.g. sticking too much on a page may corrupt the page display in that it wraps around and displays things at the 'end' of the page overlayed on things at the top of the page, so with only four pages visible in the original bios, I had to stick some things on one page and other things on another page, rather than all on the 'Advanced' page.
I also learned how to use modbin6. I could not take a full branch from 'above' and drop it drop it on a page, it would not get the visuals that made sense. This did not really matter to me, I was looking for functionality rather than aesthetics and one, or a group at a time from a branch could be dropped where I wanted it.
Using modbin6:
I found both modbin6 and cbrom606 lived happily in WinXP pro so all work was done from a 'cmd' window prompt.
Launch modbin6 and select the bios file to mod.
Navigate down to Menus in the left pane and press enter.
Navigate to the leaf node on the menu in a branch you want to move, press spacebar. You can continue and select more entries on this branch using spacebar. After you have all the ones selected you want, navigate down to one of the branches at or below the 'Main' menu branch and continue navigation to a leaf you want to insert the items selected above to appear before the current leaf. Press 'Ins'ert key.
Results:
You can flash the bios after any change above to check your progress.
Modbin6 Caveats:
I have found modbin6 to be a little picky. The reason I launch it from a 'cmd' prompt is to look at its final message after you 'save' your work. I have found cases where errors show up, 'cannot save/access fileX', in the save process. I found this could be made predictable by, before launching modbin6, delete all the temporary files it has created in the last execution.
Advanced AmberineM mods, integrating SataRaid:
Ok, so now I have hidden options now visible, there are not many but some are sure worthwhile.
The true test now comes when trying to add a sata raid bios into the AmberineM bios, and have it work :-)
There is one leaf menu item in the original bios, "Sata", on the Advanced page.
Navigate to the ' Sata' leaf and press enter. This brings up a window that shows choices are disabled and enabled, but then there are also two 'Not Selectable' entries that have no identifier field defined.
Navigate to the second entry and press <enter>, change the text to 'IDE' and press <enter> again.
Navigate to the third entry, first marked 'Not Selectable' and press the <enter> key.
Press and hold backspace till cursor is at the left side of the input box, now type 'Raid' and press enter.
This will close the text entry window, now move cursor to the 'Not Selectable' field and press the “+” key, this changes the item to 'Selectable'.
Save the bios.
Finding a raid bios for the SB400 sata:
The southbridge for the AmerineM mobo is the ATI SB400 which ATI integrated an SiI3112A controller into.
SiliconImage list various version of the 3112 raid bios on their website, 4.2.76, 4.2.66 and 4.2.50.
http://www.siliconimage.com/support/
These all contain a valid bios that can be modified by system integrators and inserted into the main system bios as a module. The catch here is the mods necessary to have it match the PCI ID of the ATI SB400.
SiI3112A: 1095:3112
SB400: 1002:4379
I have not taken the route of modding the SiI bios to change these fields but rather went looking for motherboard vendors that offer mobos based on the RS480(2)/SB400/SB450.
The ones I found were:
ECS RS480-M - issue is SiL bios version is 4.2.49 (more on this later)
MSI RS482M4-ILD - SiI version 4.2.50
DFI RS480 Infinity - Sil Version 4.2.61, SB450 based
Sata Raid Bios: First try
I then just dropped the ECS Raid bios (v4.2.49) into the AmberineM bios as an additional module.
Flashed the ram (not including the boot block) and reset.
Dropped into bios and set the 'Sata' selection to 'IDE' and continued.
I saw the tell-tale SiI display as it booted, but it offered no choices for 'Ctrl-S' or 'F4" to enter the SiI bios.
For giggles and grins I set the 'Sata' entry to 'Raid' and tried again, no joy, no choices to enter the SiI bios.
Why no selection for entering the Raid bios?
The next step was to examine the SiI bios to learn why it was not presenting the choice for entering the bios. It seems the SiI code checks a few things, the PCI Device ID=6112, nope on the SB400 (=4379). It then looks at the Base Class/Subclass Code for a 104h, nope on that (=101=IDE). So I changed the jump after the check for 6112 to nop's so it would force Raid mode. Everything I found said the mode was a software construct and would make no differences to the operation of the hardware.
Stuck the modded raid bios into the main bios image and fired it up.
Now the selection appeared to enter the raid bios (Ctrl-S or F4), first success, but both the main bios code and the raid code claimed the sata ports, not a good idea!
I had three drives installed in this system, the original XP stripe set now hanging off the mobo's sata ports and an ide drive loaded with XP.
I fired the system up anyway, booted to the IDE XP and it took windows about 5-10 minutes to boot as it tried to sort out the issue. It never did, instead I was left with a yellow exclamation mark next to the Raid disk.
So I re-booted and set the 'Sata' setting to Raid, this had the effect of neither the main bios nor the SiI raid bios recognized the sata ports, no joy :-)
Different version of the Sata Raid bios:
Hmmm, lets try a different version of the SiI raid bios, this time from the MSI-ILD mobo (v4.2.50). I changed the relevant 'jump' instruction to 'nop's and re-flashed.
Setting the 'Sata' bios selection to IDE gave me main bios access but not SiI bios access to the sata ports. Changing the selection to the 'Raid' now gave me no main bios access but did give me SiI raid bios, second success!
Windows drivers for SiI Sata Raid on the ATI SB400:
The drivers available from the SiI website expect to talk with a true 'SiI' bios, so the PCI ID's expected are:
1095:3112
and many others, but nothing that was close to what AmberineM had (2a26103c).
I went looking again at motherboard vendor sites for their version of the drivers for the SB400 chip and found the SouthBridge driver on the ECS website. It also did not have an exact match but did have entries containing the string:
2A20103C
I modified this to
2A26103C
everyplace in the file and loaded the driver, up it came, raid set available and accessible via windows.
Booting from the new AmberineM raid array:
Previously I had loaded the above ECS modified driver into the WinXP load on the stripe set so all I did was reboot and up the original WinXP image came, now running off the SiI raid bios embedded in the main bios.
Benckmarks:
Some simple benchmark tests show the raid-0 stripe array, hanging off the mobo's sata ports, now bench at 100Mbytes/second. Final success!
Tools used:
modbin6
cbrom606
check8.exe (checksum generator)
Use of 'Check8'
Load the SiI raid bios module with 'debug', change last byte of file to 0 and write it out (last byte is file checksum).
Run check8 and record the checksum it reports. In windows 'calc' in hex mode, enter '0' - Check8_number), record the last two digits of the result.
Reload the bios in 'debug', modify the last byte with the value calculated and write it out.
Re-run check8 on the module and verify checksum = 0, very important!. If it does not the module will not load into the main bios, or at least not be executed by the bios on boot. Modify the last byte of the file as necessary to fix the final output of check8 to have a checksum of 0.
Use of cbrom606:
Using cbrom606 to add a module to the main bios may goof the full bios checksum, which will cause the flash program to complain. What to do is to use cbrom606 to add the module, then run it through modbin6 and merely do a 'Save As' to get a file the flasher will like.
What works and what does not work in the bios mods:
I have not extensively tested all the options now visible, one thing I do know that does not seem to work is the ‘Numlock’ selection, whether I set it on or off makes no difference, it is always on.
I do know the memory timings work