| # Postprocessor for dsp56k bootstrap code. |
| # |
| # Copyright Ben Hutchings 2011. |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| |
| use strict; |
| use warnings; |
| |
| my @memory; |
| my %symbol; |
| |
| # Reconstruct memory image and symbol table |
| while (<>) { |
| if (/^P ([0-9A-F]{4}) ([0-9A-F]{6})\n/) { |
| $memory[hex($1)] = hex($2); |
| } elsif (/^I ([0-9A-F]{6}) (\w+)\n/) { |
| $symbol{$2} = hex($1); |
| } else { |
| print STDERR "W: did not recognise line $.\n"; |
| } |
| } |
| |
| # Concatenate first and second stage. Second stage is assembled |
| # between 'upload' and 'upload_end', but initially loaded at |
| # 'real' (end of the first stage). |
| for (0 .. ($symbol{real} - 1), $symbol{upload} .. ($symbol{upload_end} - 1)) { |
| my $word = $memory[$_] || 0; |
| print pack('CCC', $word / 65536, ($word / 256) % 256, $word % 256); |
| } |