#!perl system('/build/m68k-elf/bin/m68k-elf-gcc -m5200 -c -o ramload.o ramload.c'); system('/build/m68k-elf/bin/m68k-elf-objcopy -O binary ramload.o ramload.bin'); $ramload = `cat ramload.bin`; $stub = pack("C*", 0x4E, 0x56, 0x00, 0x00, 0x70, 0x00, 0x4E, 0x5E, 0x4E, 0x75); $jsr = pack("C*", 0x4E, 0xB9, 0x31, 0x03, 0xb9, 0x30); my @patch_140 = ( 0x228a8, $jsr, 0x3b924, $stub, 0x3b930, $ramload ); system "./decode -d -i ihp_120.hex -o temp1.hex"; open (IN, "temp1.hex"); open (OUT, ">temp2.hex"); $hdr_offset = 0; $hdr_offset += 512 + 0x20; # Decode header + ESTFBINR header $hdr_offset += 0xe3099; # Location of SDRAM image in FLASH my $f_offset = 0; my $data; while ($#patch_140 > 0) { my $p_offset = shift(@patch_140) + $hdr_offset; my $p_data = shift(@patch_140); my $p_datalen = length($p_data); die "Whoops -- input overrun" unless ($f_offset <= $p_offset); while ($f_offset < $p_offset) { my $rsize = $p_offset - $f_offset; $rsize = 4096 if ($rsize > 4096); my $r = read(IN, $data, $rsize); die "Short read!" unless ($r == $rsize); print OUT $data; $f_offset += $rsize; } read(IN, $data, $p_datalen); print OUT $p_data; $f_offset += $p_datalen; } while (($r = read(IN, $data, 4096)) > 0) { print OUT $data; } close IN; close OUT; unlink("temp1.hex"); system "./decode -e -i temp2.hex -o mod_ihp_120.hex"; unlink("temp2.hex");