#!/usr/bin/perl

sub get42
{
  $b = $_[0];
  $reg=0;

  for($i=0;$i<length($b); $i++)
  {
    $c = substr($b,$i,1);
    if($c eq "0")
    {
      $reg*=2;
    }
    elsif($c eq "1")
    {
      $reg = $reg*2+1;
    }
  }
# print "$b $reg\n";
  return $reg;
}

open CDEBUG,$ARGV[0];
for($i=0;$i<10;$i++)
{
  $lc=<CDEBUG>;
}
open JDEBUG,$ARGV[1];

$finish=0;
$donec = 0;
$donej = 0;


while(!$finish)
{
  if(!$donec)
  {
    if($lc = <CDEBUG>)
    {
      chomp($lc);
      if($lc =~ /^Mode(\d): MA=(\d\d)  BUS: (\d \d{10} \d{10} \d{10} \d{10} \d\d)   clock: (\d+) /)
      {
	$modec = $1;
	$mac = $2;
	$busc = get42($3);
	$clockc=$4;
	$donec = 0;
#	print "kilroyc $lc\n";
      }
      elsif($lc =~ /AC: (\d \d{10} \d{10} \d{10} \d{10} \d\d) /)
      {
	$acc = get42($1);
      }
      elsif($lc =~ /MQ: (\d \d{10} \d{10} \d{10} \d{10} \d\d) /)
      {
	$mqc = get42($1);
	$donec = 1;
      }
    }
    else
    {
      $finish=1;
      last;
    }
  }
  if(!$donej)
  {
    if($lj = <JDEBUG>)
    {
      chomp($lj);
      if($lj =~ /^.{13}mode: (\d) OT: (\d+) op ([0-9-]+) MA (\d+) /)
      {
	$modej = $1;
	$otj = $2;
	$opj = $3;
	$maj = $4;
	$donej = 0;
#	print "kilroyj $lj\n";
      }
      elsif($lj =~ /^.{13}Execute\[(\d+)] clock: (\d+) /)
      {
	$clockj=$2;
      }
      elsif($lj =~ /^.{13}  BUS: (\d \d{10} \d{10} \d{10} \d{10} \d\d) /)
      {
	$busj = get42($1);
      }
#             AC: 0 0000000000 0000000000 0000000000 0000000000 00  0 0/0/0/0 simulator.js:1484:13
#
      elsif($lj =~ /^.{13}   AC: (\d \d{10} \d{10} \d{10} \d{10} \d\d) /)
      {
	$acj = get42($1);
#	print "acj $1 $acj\n";
      }
      elsif($lj =~ /^.{13}   MQ: (\d \d{10} \d{10} \d{10} \d{10} \d\d) /)
      {
	$mqj = get42($1);
      }
      elsif($lj =~ /^.{13}TD: (\d+) /)
      {
	$tdj = $1;
	$donej=1;
      }
    }
    else
    {
      $finish=1;
      last;
    }
  }
  if($donec && $donej)
  {
    print "c: mode $modec MA $mac BUS $busc AC $acc MQ $mqc clock $clockc\n";
    print "j: mode $modej MA $maj BUS $busj AC $acj MQ $mqj clock $clockj";
    if($busc!=$busj || $acc != $acj || $mqc != $mqj)
    {
      print "    BAD\n";
    }
    else
    {
      print "\n";
    }
    $donec=0;
    $donej=0;
  }
}

