Hello!
I’m using HP HDX9000 with legacy BIOS. Basically there are several things among the others that I want to do: add quad core CPU support and unhide BIOS settings.
Here’s a link to all the needed stuff http://www.mediafire.com/file/jazk5pu92u…0_BIOS.zip/file
Here’s some basic information about HPUnpack, but I’m not sure if it’s useful since I’m already providing the unpacked BIOS.
The tool is called HPUnpack which was originally created for HP 8710W. I’ve modded it for working with HDX9000.
Unpack BIOS file
HPUnpack bios.rom
Replace a certain BIOS module (e.g. POST module)
HPUnpack bios.rom replace 20100 POST 20100_POST_new.bin
20100 is the RAM address of the module.
Here's the BIOS structure:
First part ends at 0x1FFF0
The next part consists of compressed modules which start from 0x20000 and end with HPLO module at 0xB3E55 in the BIOS file.
The modules are
POST (0x20000) - (No idea)
POST (0x20100) - POST initialization
SETU (0x31000) - (No idea)
KBC (0x40000) - Keyboard controller
MESS (0x60000) - Text string messages
OSBI (0x9D000) - Startup Intel logo
NVID (0x9F000) - Startup Nvidia logo
VIDE (0xC0000) - Video BIOS
ROME (0xE0000) - Expansion ROMs
F000 (0xF0000) - Start of BIOS execution
MEBX (0x40000) - Intel Management Engine BIOS Extension
DSDT (0x65000) - Differentiated System Description Table for ACPI
SMM2 (0xA0000) - SMM (System Management Mode) setup to perform low-level system management operations while an OS is running using SMI (System Management Interrupts).
MBA (0xD0000) - Boot Agent PXE Base Code. Responsible for network boot
UNDI (0xD1000) - Universal Network Driver Interface. An application programming interface (API) for network interface cards (NIC) used by the Preboot Execution Environment (PXE) protocol. Used for network boot.
P16X (0x10000) - 16-bit PXE (Preboot Execution Environment), PXE Specification v2.1 or earlier. It is a network boot program that is run in DOS mode.
TPM (0x10000) - Trusted Platform Module. A dedicated microcontroller designed to secure hardware through integrated cryptographic keys. Used along with the fingerprint scanner
SEC3 (0x200000) - Responsible for chosing a bootable device
G8E_ (0xC0000) - Video BIOS (useless module, duplicated VIDE module, can be removed)
HPLO (0x90000) - Startup HP Logo (this is the last module)
The padding following after this module can be used for adjusting BIOS rom length after modding the modules.
Then CPU microcodes start at 0xC5BDC and end where the computrace stuff is starting at 0xCEBE0h.
All the other parts are unknown to me except for SLIC and TPM that can be found on the way down to the end.
The BIOS modules are all compressed, so the tool can compress/decompress any module and insert it back producing a new bios file called newBIOS.rom.
After opening the BIOS file in the tool, it will produce a set of files. Those are starting with 9D000 through F0000 are modules where .bin are compressed and .dec.bin are decompressed modules.
The header of compressed modules in the BIOS file consists of 16 bytes. Here's an example of one for the POST module starting at 0x20074h
01 00 14 01 40 E6 00 00 E4 A0 00 00 00 01 02 00
It has the following structure:
01 00 - module identifier?
14 - header length
01 - unknown (can be either 00 or 01)
70 00 00 00 - size after decompression 0x00000070
60 00 00 00 - compressed size 0x00000060. The compressed body of a module starts after its name which takes 4 bytes after the header
00 00 02 00 - destination address (0x00020000) in RAM after decompression
This is a basic information.
My question is about the APIC table which is located in the second POST module. You can easily find it in the decompressed module. I want to modify it for quad core CPU support, so I need to add some code to it, but it will result in a bigger size which won't then let the laptop start as the other offsets of the module will change. I can easily swap all the other ACPI tables inside that area, but if it comes to making the section bigger, it bricks the BIOS.
Can anybody find the way how I could increase the size of that section? It seems like relative addresses are used there, so it makes it difficult to do this.
I've tried to remove some useless ACPI tables, but the laptop froze during POST.
If you need more information about anything else, please let me know.