Thank you very much for solving this riddle!
And one more question for Rudolf: please tell, are you using atomDis utility to disassemble atombios into C code? Or there are some other special tools, which probably have more recent versions? (latest version of atomDis is already 4 years old...)

On 3 June 2015 at 20:27, Rudolf Marek <r.marek@assembler.cz> wrote:
Hi all,

First byte after IBM is usually a checksum. So in fact only two bytes differ.
Now you may ask what it is... and it is a IOBASE :)

typedef struct _ATOM_ROM_HEADER
{
  ATOM_COMMON_TABLE_HEADER sHeader;
  UCHAR> uaFirmWareSignature[4];    /*Signature to distinguish between Atombios
and non-atombios,atombios should init it as "ATOM", don't change the position */
  USHORT usBiosRuntimeSegmentAddress;
  USHORT usProtectedModeInfoOffset;
  USHORT usConfigFilenameOffset;
  USHORT usCRC_BlockOffset;
  USHORT usBIOS_BootupMessageOffset;
  USHORT usInt10Offset;
  USHORT usPciBusDevInitCode;
  USHORT usIoBaseAddress; <---------------this changes

I guess IOBASE of PCI device changes also...

  USHORT usSubsystemVendorID;
  USHORT usSubsystemID;
  USHORT usPCI_InfoOffset;.
  USHORT usMasterCommandTableOffset; /*Offset for SW to get all command table
offsets, Don't change the position */
  USHORT usMasterDataTableOffset;   /*Offset for SW to get all data table
offsets, Don't change the position */
  UCHAR  ucExtendedFunctionCode;
  UCHAR  ucReserved;
}ATOM_ROM_HEADER;

You can use atomDis to dump it I guess (Did not check if it dumps also the header.

Thanks
Rudolf