import struct import sys chunk_lengths = [0,0,0,6,2,5,12,5,3,1,2,5,5,5,1,13,13] bytewises = [] bytewise_results = [] wordwises = [] wordwise_results = [] crcs = [] crc_results = [] data = "" with open(sys.argv[1], 'rb') as f: data = f.read() f.closed base_address = struct.unpack(' 0x10: print "Unknown chunk {0:X}".format(chunk_type) raise TypeError i += chunk_lengths[chunk_type] # calculate and insert all wordwise checksums for wordwise in wordwises: sum = 0 for i in range(wordwise[1], wordwise[2], 4): sum = (sum + struct.unpack('> 1) ^ 0x8408 else: sum >>= 1 sum = ~sum & 0xFFFF crc_results.append(sum) i = 0 for crc in crcs: data = data[0:crc[0]] + struct.pack('