diff --git a/disassem.pl b/disassem.pl index 3766c9d..525dca1 100755 --- a/disassem.pl +++ b/disassem.pl @@ -56,6 +56,21 @@ $baseaddr = 0xff0000; %labels = {}; $labelnum = 0; +if (open LABELS, ") { + chomp; + if (($name, $addr) = /(.*): (.*)/) { + $addr = hex $addr; + $labels{$addr} = $name; + if ($name =~ /^L(\d+)$/) { + $labelnum = $1 + 1 if ($labelnum >= $1); + } + } + } +} + +close LABELS; + $output = 0; %io = ( @@ -192,6 +207,15 @@ for my $pass (0..1) { } } +open LABELS, ">input.labels" or die $!; + +foreach my $addr (sort keys %labels) { + printf LABELS "%s: %.6x\n", $labels{$addr}, $addr + if defined($labels{$addr}); +} + +close LABELS; + sub disassemble { my ($start) = @_;