#!/usr/bin/ruby a = [ 0x00, 0x40, 0xC4, 0x10, 0x97, 0x01, 0x00, 0x00, # 0x08 0xA0, 0x2D, 0x08, 0x00, 0x00, 0x00, 0x98, 0x0E, # 0x10 0xA6, 0x12, 0xB8, 0x10, 0x23, 0x10, 0x05, 0x00, # 0x18 0x0E, 0x03, 0x66, 0x00, 0x65, 0x00, 0x6E, 0x00, # 0x20 0x72, 0x00, 0x69, 0x00, 0x72, 0x00, 0x12, 0x03, # 0x28 0x53, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x70, 0x00, # 0x30 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65, 0x00, # 0x38 0x10, 0x03, 0x41, 0x00, 0x36, 0x00, 0x52, 0x00, # 0x40 0x48, 0x00, 0x47, 0x00, 0x37, 0x00, 0x53, 0x00, # 0x48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x91, # 0x80 ] b = [ 0x00, 0x40, 0xC4, 0x10, 0x97, 0x01, 0x00, 0x00, # 0x08 0xA0, 0x2D, 0x08, 0x00, 0x00, 0x00, 0x98, 0x0E, # 0x10 0xA6, 0x12, 0xB8, 0x10, 0x23, 0x10, 0x05, 0x00, # 0x18 0x0E, 0x03, 0x66, 0x00, 0x65, 0x00, 0x6E, 0x00, # 0x20 0x72, 0x00, 0x69, 0x00, 0x72, 0x00, 0x12, 0x03, # 0x28 0x53, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x70, 0x00, # 0x30 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65, 0x00, # 0x38 0x10, 0x03, 0x41, 0x00, 0x36, 0x00, 0x52, 0x00, # 0x40 0x48, 0x00, 0x47, 0x00, 0x37, 0x00, 0x53, 0x00, # 0x48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x50 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x60 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # 0x78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x11, # 0x80 ] c = [ 0x00, 0x40, 0x03, 0x04, 0x01, 0x60, 0x00, 0x00, 0xA0, 0x2D, 0x08, 0x00, 0x00, 0x00, 0x98, 0x0E, 0xA6, 0x12, 0xB8, 0x12, 0x23, 0x50, 0x01, 0x00, 0x0E, 0x03, 0x66, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x72, 0x00, 0x69, 0x00, 0x72, 0x00, 0x12, 0x03, 0x53, 0x00, 0x79, 0x00, 0x6C, 0x00, 0x70, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65, 0x00, 0x12, 0x03, 0x41, 0x00, 0x33, 0x00, 0x54, 0x00, 0x31, 0x00, 0x56, 0x00, 0x4B, 0x00, 0x57, 0x00, 0x35, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xB2, #0x23, 0x04, 0xDC, 0xFB, 0x00, 0x00, 0xD8, 0x07, #0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #0x33, 0x41, 0x37, 0x4F, 0x46, 0x30, 0x55, 0x36, ] def calc(target, opt = {}) opt.merge({:verbose => false}) checksum = 0xAAAA eeprom_size = target.size ((eeprom_size/2)-1).times{|i| value = target[i*2] value += target[(i*2)+1] << 8 checksum = value ^ checksum checksum = ((checksum << 1) | (checksum >> 15)) & 0xFFFF puts "#{i}: #{checksum.to_s(16)}" if opt[:verbose] } return checksum end p calc(a).to_s(16) p calc(b).to_s(16) p calc(c).to_s(16)