#!/usr/local/bin/perl -w # Fix checksums in an otherwise valid hex file. # # Usage: hexchksum < file.hex > fixedfile.hex while (<>) { chomp; $total = 0; $bytes = ((length) - 1) / 2; for ($i = 0; $i < $bytes-1; ++$i) { $hexval = substr ($_, 1+$i*2, 2); $total += hex ($hexval); } $chksum = hex(substr ($_, $bytes*2-1, 2)); $mychksum = (0 - $total) % 256; if ($chksum != $mychksum) { $old = sprintf ("%2.2X", $chksum); $new = sprintf ("%2.2X", $mychksum); s/$old$/$new/; print; } else { print; } print "\n"; }