repo2/atari_chips/pokeyv2/openocd_flash/extractbinfromsvf.pl
1128 | markw | #!/usr/bin/perl -w
|
|
use strict;
|
|||
my $section;
|
|||
my $program = 0;
|
|||
my %bytype;
|
|||
my $type;
|
|||
1129 | markw | my $pos = -1;
|
|
1128 | markw | while (<>)
|
|
{
|
|||
if (/Max 10 (.*)/)
|
|||
{
|
|||
$section = $1;
|
|||
$program = 0;
|
|||
if ($section=~/^Program (....)$/)
|
|||
{
|
|||
$program = 1;
|
|||
$type = $1;
|
|||
$bytype{$type} = "";
|
|||
1129 | markw | $pos = -1;
|
|
1128 | markw | }
|
|
}
|
|||
if ($program and /SDR 32 TDI \(([A-F0-9]+)\);/)
|
|||
{
|
|||
$bytype{$type} = $bytype{$type}.$1;
|
|||
1129 | markw | $pos = $pos + length($1)/2;
|
|
1128 | markw | }
|
|
1129 | markw | if ($program and /SDR 23 TDI \((.*?)\);/)
|
|
{
|
|||
my $count = $1;
|
|||
my $count2 = unpack "H*", pack 'B*', unpack 'b*', pack("H*",$count);
|
|||
$count2 =~ /(..)(..)(..)/;
|
|||
$count2 = "$3$2$1";
|
|||
my $count2dec = hex($count2)*2;
|
|||
if ($pos<1)
|
|||
{
|
|||
$pos = $count2dec;
|
|||
}
|
|||
else
|
|||
{
|
|||
print "Pos:$pos ";
|
|||
my $adj = $count2dec-$pos;
|
|||
$pos = $pos+$adj;
|
|||
my $skip = "F"x($adj*2);
|
|||
$bytype{$type} = $bytype{$type}.$skip;
|
|||
print " adj:$adj req:$count2dec\n";
|
|||
}
|
|||
print "$type seek to $count2($count2dec) -> $pos\n";
|
|||
}
|
|||
1128 | markw | }
|
|
foreach (keys %bytype)
|
|||
{
|
|||
print "$_:".length($bytype{$_})."\n";
|
|||
open OUT,">$_.bin";
|
|||
binmode(OUT);
|
|||
print OUT pack 'B*', unpack 'b*', pack("H*",$bytype{$_});
|
|||
#print OUT pack("H*",$bytype{$_});
|
|||
close(OUT);
|
|||
}
|