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