#! /usr/bin/perl
#
# dr. shreds memory
#
push(@INC,"~/bin");
require 'bin2dec.pl';
@mem = ("0" x 64) x 256;
unless (open(MEM_PRG,"mem_prg.dsc")){
   print "Can't open file mem_prg.dsc\n";
}
unless (open(MEM_RW,"<mem_rw.ffo")){
   print "Can't open file mem_rw.ffo\n";
}
unless (open(MEM_AD,"<mem_ad.ffo")){
   print "Can't open file mem_ad.ffo\n";
}
unless (open(MEM_DA,"+<mem_da.ffo")){
   print "Can't open file mem_da.ffo\n";
}
$i = 0;
while (<MEM_PRG>) {
    if (/^\#/){
        print;
	next;
    }
    else {
        chop;
        $mem[$i] = $_;
        print "mem[\$i] $mem[\$i]\n";
        $i++;
    }
}
close(MEM_PRG);
while(1) {
$rw = <MEM_RW>;
print "here 0010 rw = $rw**\n";
#   while (!<MEM_RW>) {
#   $rw = $_;
#   if ($rw ne "") {
#       print "rw ne null\n";
#   }
#   else {
#       print "rw = null *$rw*\n";
#   }
#   }
#       $rw = $_;
       print;
#   }
   print "here 0025 rw $rw***\n";
   close MEM_RW;
   chop($rw);
   $ad = <MEM_AD>;
   chop($ad);
   close MEM_AD;
   print "here 0040 rw $rw***\n";
   if ($rw eq "1"){
      $ad_d = bin2dec($ad);
      $da = $mem[$ad_d];
      print "data read: ad $ad\nad_d $ad_d\nda $da\n";
      print MEM_DA "$da\n";
      close MEM_DA;
      print "here 0060 rw $rw***\n";
   }
   elsif ($rw eq "0"){
      $ad_d = bin2dec($ad);
      print "here 0045 rw $rw*** ad_d $ad_d\n";
      $da = "";
      while(1) {
	  print "here 0046 da **$da**\n";
          $da = <MEM_DA>;
          if ($da ne ""){
	     print "here 0050 da **$da**\n";
	     last;
          }
      }
      chop($da);
      $mem[$ad_d] = $da;
      print "data write: ad $ad\nad_d $ad_d\nda $da\n";
      close MEM_DA;
   }
   else {
      print "rw $rw** \$\#mem $#mem command exit detected\n";
      for ($i=0;$i<$#mem;$i++) {
	  print "$i $mem[$i]\n";
      }
      exit(0);
   }
   print "here 0065 rw $rw***\n";
   open(MEM_RW,"<mem_rw.ffo");
   print "here 0070 rw $rw***\n";
   open(MEM_AD,"<mem_ad.ffo");
   print "here 0080 rw $rw***\n";
   open(MEM_DA,"+<mem_da.ffo");
   print "here 0100 rw $rw***\n";
}
