The attached picture is the map of all the blocks (and their Checksum positions) of the EEPROM dump. This should allow (one day) a more precise understanding of the initial blocks.
I used the 34401a_11-05-02-EEPROM.bin (posted above).
This was done based on the info collected by Hydron yesterday.
In order to verify and calculate the checksums of all the blocks in a dump, I leave here a C# code that does that (should be self-explanatory):
byte[] block_sizes = { 0x02, 0x02, 0x2A, 0x1A, 0x18, 0x12, 0x1A, 0x1C, 0x22 };
if (BitConverter.ToUInt16(buffer, 0x14) != 0) // to accommodate older FWs (below version 07-05-02)
{
block_sizes[2] = 4;
if (BitConverter.ToUInt16(buffer, 0x06) != 0x16)
block_sizes[3] = 0x18;
}
for (int j = 0, i = 0; j < block_sizes.Length; j++, i += 2)
{
ushort sum = 0;
for (int end = i + block_sizes[j] * 2; i < end; i += 2)
sum += (ushort)(BitConverter.ToUInt16(buffer, i) + 1);
Console.Write("Offset: {0:X4} Checksum_Calc: {1:X4} ", i, sum);
if (BitConverter.ToUInt16(buffer, i) - sum == 0)
Console.WriteLine("OK");
else
Console.WriteLine("ERROR!");
}
(This source code can be used to verify if your EEPROM dump is OK.)
The output for 34401a_11-05-02-EEPROM:
Offset: 0004 Checksum_Calc: 0002 OK
Offset: 000A Checksum_Calc: 0018 OK
Offset: 0060 Checksum_Calc: 9147 OK
Offset: 0096 Checksum_Calc: 9B7D OK
Offset: 00C8 Checksum_Calc: 7336 OK
Offset: 00EE Checksum_Calc: 1F61 OK
Offset: 0124 Checksum_Calc: 8093 OK
Offset: 015E Checksum_Calc: 1EB3 OK
Offset: 01A4 Checksum_Calc: 3B72 OK
The output for 34401a_hydrons_ebay_unit_with_save_temp_menus_enabled_by_bit_changes_EEPROM:
Offset: 0004 Checksum_Calc: 8663 OK
Offset: 000A Checksum_Calc: 0018 OK
Offset: 0060 Checksum_Calc: 215C OK
Offset: 0096 Checksum_Calc: 0101 OK
Offset: 00C8 Checksum_Calc: 99A5 OK
Offset: 00EE Checksum_Calc: 3ADC OK
Offset: 0124 Checksum_Calc: CE20 OK
Offset: 015E Checksum_Calc: DEC0 OK
Offset: 01A4 Checksum_Calc: EFE5 OK
The output for calrom_orig.bin (floating around in the web). This old dump contains checksum errors (in my opinion):
Offset: 0004 Checksum_Calc: 8663 OK
Offset: 000A Checksum_Calc: 000A OK
Offset: 0014 Checksum_Calc: 1A66 ERROR!
Offset: 0046 Checksum_Calc: 25D4 OK
Offset: 0078 Checksum_Calc: A3A5 ERROR!
Offset: 009E Checksum_Calc: B3D6 ERROR!
Offset: 00D4 Checksum_Calc: 4359 OK
Offset: 010E Checksum_Calc: 2C46 ERROR!
Offset: 0154 Checksum_Calc: 2B1B OK
The checksum calculation has a little twist: they also sum the number of Words that are used in the calculation.
Edit: The green area contains the additional bytes that were added with the introduction of FW 07-05-02.
The red area is where the option bits reside. As we can see, this area already existed in FW 07-05-02.