#! /usr/bin/perl -w use strict; my $input; my $header; my $comment; my $len; @ARGV == 1 or @ARGV == 2 or die "Usage: $0 \n"; $input = $ARGV[0]; $header = $ARGV[1]; open(IF, "$input") or die "Failed to open '$input': $!\n"; if($header) { open(HF, ">$header") or die "Failed to write '$header': $!\n"; select HF; } while() { chomp; undef $comment; s/\r//; # CRLF -> LF if(s/\s*[;#]\s*(.*?)$//) { # Comments $comment = $1; } if(/^\s*$/) { # Empty lines next; } my ($slic0, $slic1, $slic2, $slic3, $op, @data) = split; my $slic = "$slic3$slic2$slic1$slic0"; die "Bad slic address '$slic'" if length($slic) != 8; die "Bad op (op=%op)\n" if $op !~ /^[WR][DI]$/; if($op =~ /D$/) { # Direct die "Bad input at line $.: @data=(@data)\n" if @data != 2; # len reg data printf "S_(0x$slic,\t0x02,\t0x%02s, 0x%02s),\t", $data[0], $data[1]; } else { # Indirect die "Bad input at line $.: @data=(@data)\n" if @data != 3; # len data1 data2 reg printf "S_(0x$slic,\t0x06,\t0x1C, 0x%02s, 0x1D, 0x%02s, 0x1E, 0x%2s),\t", $data[2], $data[1], $data[0]; } } continue { if(defined($comment)) { print "// $comment"; } print "\n"; }