BIOS modification

The following text describes what has to be done in order to allow the BIOS to recognise a different card. I've deliberately left this vague - replacing the BIOS is likely to void your warranty, make things go wrong and leave you generally miserable. It may well leave your hardware unbootable. IBM won't just reflash the BIOS, so you'll have to replace the system board. Don't expect this to be covered under warranty.

Oh, and DON'T EMAIL ME TO ASK HOW TO DO THIS. I'll ignore you. I don't have time to teach people how to do these modifications, and if you don't feel happy doing it without my assistance then you shouldn't be thinking about doing it at all.

Things that have to be done:

  1. You need an uncompressed copy of the BIOS. The easiest way to obtain this is probably to use phlash16 under DOS with the /BU option. This will write out an uncompressed copy as BIOS.BAK.
  2. Find out the PCI vendor, device and subsystem IDs of your card. In Linux, doing lspci -v will tell you this.
  3. Open the BIOS file in a hex editor. Find the BCPUSB header (there's an index near the start of the file that contains references to lots of BCP stuff. Ignore the one that appears here). Shortly after this is a set of PCI IDs, split up with 0s. The file is in little endian format, so the first byte in the file is the second byte of the ID. For instance, an IBM Pro/Wireless 2100 is 8086:1043 with a subsystem id of 8086:2551. This will appear as 8680431086805125. Make the modifications to suit your card.
  4. Find the string EXTD. The 4 bytes after that are an additive checksum. When all the 4 byte blocks in the file are added up, they must equal 0. Change the checksum as appropriate. At some point I'll probably get round to writing a tool to do this.
  5. Reflash your BIOS. Make sure that you use the /CS option to phlash16 in order to check the checksum.
  6. If it's worked, your card should now work. If it hasn't, your laptop is probably dead.

Many thanks to Paul Sladen who helped out immensely. His page has a set of dumps of chunks of BIOS and further information.

Matthew Garrett
Last modified: Thu Apr 29 15:05:32 BST 2004