+
+# Process one instruction
+# Usage: instruction line
+sub instruction {
+ my ($line) = @_;
+ print ";$line";
+
+ $instruction = substr($line,5,2);
+
+ if (defined $transtable{$instruction}) {
+ print "\t$transtable{$instruction}";
+ $line =~ /$transtable{$instruction}(.*)$/i;
+ print "$1\n";
+ return;
+ }
+
+ if (defined $twobytefirst{$instruction}) {
+ $thing = substr($line,5,5);
+ if (defined $twobytesecond{$thing}) {
+ print "\t" . $twobytesecond{$thing};
+ $line =~ /$twobytesecond{$thing}(.*)$/i;
+ print "$1\n";
+ return;
+ }
+ }
+
+ if (defined $onewitharg{$instruction}) {
+ $thing = substr($line,8,2);
+
+ printf "\t$onewitharg{$instruction}", $thing;
+ $line =~ /$onewitharg{$instruction} [0-9A-F][0-9A-F](.*)$/i;
+ print "\t;$1\n";
+ return;
+ }
+
+ if (defined $onewithword{$instruction}) {
+ $thing = substr($line,8,2);
+ $thing2 = substr($line,11,2);
+ if (!($thing2 =~ /\s+/)) {
+ $curraddr = substr($line,0,4);
+ printf "FOO%s\tEQU\t\$%s%s\n", $curraddr,$thing,$thing2;
+ printf "\t$onewithword{$instruction}", ">FOO$curraddr";
+ $line =~ /$onewithword{$instruction} [0-9A-F][0-9A-F][0-9A-F][0-9A-F](.*)$/i;
+ print "\t;$1\n";
+ return;
+ }
+ }
+
+ if ($line =~ /^([A-F0-9]{4}) ((([A-F0-9]{2}) )*[A-F0-9]{2})/) {
+ @_=split(' ',$2);
+ print "\tFCB\t\$".join(', $',@_)."\n";
+ }
+}