Part three - SST49LF020A BIOS chip Memory Map
Now I will present the BIOS chip
memory map. The hex values represent the offset address in the chip. All ROM
images are compressed with "CALG1 Compression Library" and all have a
header of 32 bytes where is described the location where every ROM needs to be
extracted, the size of the ROM before was compressed, the size after
compression + some checksum that is not used.
The data in this table is for the original BIOS. Patched ones are different.
Header + Padding - all zeroes |
0 |
ROM header |
9CC0 |
Compressed
VSA Init ROM |
9CE0 |
ROM header |
1:D170 |
Compressed
JVGA BIOS |
1:D190 |
ROM header |
2:1110 |
Compressed
PXE ROM |
2:1130 |
ROM header |
2:6F50 |
Compressed
UHCI ROM |
2:6F70 |
ROM header |
2:70D0 |
Compressed
GUI ROM |
2:70F0 |
ROM header |
2:A410 |
Compressed Bitmap image |
2:A430 |
ROM header |
2:B570 |
Compressed Xpress ROM |
2:B590 |
ROM header |
2:C250 |
Compressed HID ROM |
2:C270 |
ROM header |
2:CE40 |
Compressed Disk ROM |
2:CE60 |
ROM header |
2:E540 |
Compressed XPACPI ROM |
2:E560 |
ROM header |
2:EA20 |
Compressed some text ROM |
2:EA40 |
ROM header |
2:FBE0 |
$PAL image video palettes |
2:FC00 |
ROM header |
3:0000 |
Boot Block |
3:0020 |
End of memory chip |
3:FFFF |
In the Boot Block there is a function for searching all of this ROMs and expanding them into the RAM. This function is using the ROMs headers to compute the next ROM address. The way the original function it was made was hard to trace.
So I have patched the code for the ‘ROM searching function’ in the Boot block and all the ROMs headers because the BIOS procedure to find the ROMs was obfuscated and it was hard to swap ROMs in this way. Some strange computations have been used just to get the compressed ROM size + header. I just patched the ROMs headers with exact data and this function with a lot of NOPs for me to easily swap ROMs like the GUI ROM.
Patched bytes in BIOS Boot Block |
More info about the BIOS structure can be found in the “Info.xlsx”.
I have written there the most important BIOS steps from the moment of the
system power up to the moment of MS-DOS boot.
All of this reverse took me about 4 months and now when I’m
writing this I might forgot to mention some things, but many details can be
found in the IDA disassemble files. Just browse the folders. I have also made
some small “info.txt” files to keep track of all the progress.
Comments
Post a Comment