#!/usr/bin/perl

sub board
{
  my $b=$_[0];
  my $txt=$_[1];
  for(my $i=39; $i>=0; $i--)
  {
    $bits[$i] = ($b&1)?"X":".";
    $b = $b>>1;
  }
  my $b=$_[0];
  print "+-------------+$b     $txt\n";
  print "|    $bits[28]   $bits[29]    |\n\n";
  print "|  $bits[39]   $bits[30]   $bits[35]  |\n\n";
  print "|$bits[33]   $bits[34]   $bits[38]   $bits[36]|\n\n";
  print "|  $bits[32]   $bits[31]   $bits[37]  |\n";
  print "+-------------+\n";
}

for($i=0;$i<1024;$i++)
{
  $trace[$i]=0;
  $cell[$i]=-1;
}

$trace[102]=1;
$trace[103]=1;
$trace[104]=1;
$trace[116]=1;

$MQ=0;
$AC=0;
$lastExec="";

while($l = <>)
{
  chomp($l);
  if($l =~ /^Writing (\d+): (\d+) =/)
  {
    $addr = $1;
    $val = $2;
    if($trace[$addr])
    {
      $cell[$addr]=$val;
      printf "%4d: %16.16X at $lastExec\n",$addr,$val;
    }
  }
  elsif($l =~ /^   AC: \d \d{10} \d{10} \d{10} \d{10} \d{2} +(-{0,1}\d+) /)
  {
    $AC=$1;
  }
  elsif($l =~ /^   MQ: \d \d{10} \d{10} \d{10} \d{10} \d{2} +(-{0,1}\d+) /)
  {
    $MQ=$1;
  }
  elsif($l =~ /^Execute\[212\]/)
  {
    print "Execute 212: AC=$AC\n";
    $lastExec = "212";
#   board($AC,"212");
  }
  elsif($l =~ /^Execute\[193h\]/)
  {
    print "Execute 193h: AC=$AC\n";
    $lastExec = "193h";
    board($AC,"193h efter menneske");
  }
  elsif($l =~ /^Execute\[262\]/)
  {
    print "Execute 262: AC=$AC\n";
    $lastExec = "262";
    board($AC,"262 efter maskine");
  }
  elsif($l =~ /^Execute\[228\]/)
  {
#   print "Execute 228: AC=$AC\n";
#   board($AC,"228");
    $lastExec = "228";
  }
  elsif($l =~ /^Execute\[172\]/)
  {
    print "Execute 172: ?\n";
    $lastExec = "172";
  }
  elsif($l =~ /^Execute\[223\]/)
  {
    print "Execute 223: VUNDET\n";
    $lastExec = "223";
  }
  elsif($l =~ /^Execute\[234\]/)
  {
    if($AC==0)
    {
      print "Execute 234: Tabt da AC($AC)=0\n";
    }
    $lastExec = "234";
  }
  elsif($l =~ /^Execute\[116\]/)
  {
    $rel = $cell[116]>>30;
    $reltxt = "?";
    if($rel==0)
    {
      $reltxt="tabt";
    }
    elsif($rel==4)
    {
      $reltxt="vundet";
    }
    elsif($rel==50)
    {
      $reltxt="undgå udskrift";
    }
    print "Execute 116: hop r$rel ($reltxt)\n";
    $lastExec = "116";
  }
  elsif($l =~ /^Execute\[(\d+h{0,1})\]/)
  {
    $lastExec=$1;
  }
}

