Hi Jakethompson1,
I have been following your postings with interest, especially about the AMI BIOS.
As my main interest is the Award BIOS, it is great to learn about details from “the other BIOS”. 😉
Many years ago, I did examine two AMI Color BIOSes in greater detail. These were for the Addtech 4GLX3 (011094) and the MSI MS-4134 (080893) boards.
This was in an attempt to improve CPU support (DX4/Am5x86), but I couldn’t finish these BIOS patches due to lack of AMI checksum knowledge. But now I know!
I didn’t look for AMI’s approach to the LBA-assisted translation support then. Also when I started the BIOS patching hobby back 1994, most BIOSes already had translation support up to 8GB and I only had to take care of the occasional 2GB limit bugs.
When I later shifted my attention from 486 to Socket 7 BIOSes, again the main concern was fixing CPU support and that nasty Award 32GB HDD limit bug. So, adding translation to fix the 504MB limit, or adding the Int13h extensions to break the 8GB barrier was never something I got serious about. In addition, adding the Int 13h extensions is a huge change that is difficult to implement in an already assembled BIOS. But perhaps adding the LBA-assisted translation is doable. When I have some time, I will look into these EFA 4DMU BIOSes the get a feeling about what’s involved.
As apple_rom’s BIOS Patcher tool demonstrates, the later BIOSes from Award and AMI are structured enough to allow adding CPU support and bugfixes by a program.
Most bugs like the 32GB HDD limit and UDMA bugs, can be recognized by a unique bytes pattern. In the episodes of my DIY BIOS Modding guide in this thread, I indicate these offending string of bytes whenever possible. Adding CPU support can be a bit more challenging because of the many BIOS changes made over the years.
However, occasionally a rare or new bug requires to do a custom assembly patch. I once found a rare 300MHz CPU speed limit in only 2 Asus socket 7 BIOSes. And patches for jumperless socket 7 boards are particularly challenging due to the unique solutions used by each motherboard manufacturer.
I have been toying with the idea of writing a patcher tool myself but haven’t yet found a solution of how to handle the compressed BIOS.
In recent episodes I explained how to decompress and re-compress the Award BIOSes manually, but doing that from within a patching tool is a programming challenge I’ve yet to solve.
In apple_rom’s tool, he solved this by using external tools like CBROM and LHA to compress his patches. He also avoids patching the main BIOS component (that’s what I do with my manual patching method) by putting the patch code and data in separate modules and patching the BIOS in RAM during each boot-up.
So he only needed to decompress the modules where bugs may be hiding to scan for them.
I know the old UNAWARD tool uses the decompression engine of the BIOS itself, so this may be an option to solve the decompress hurdle. However it would be more elegant and user friendly to let the patching tool do both decompress and compress on its own.
Finding sufficient space in the E000h or F000h segment for the added code and data is usually not a problem. But after compression, all modules still have to fit in the available space. This is the limiting factor, especially on an 128KB BIOS.
Cheers, Jan