158 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl
 | |
| my $aline;
 | |
| my $lineid;
 | |
| my $length;
 | |
| my $address;
 | |
| my @bytes;
 | |
| my $addstr;
 | |
| my $chsum=0;
 | |
| my $count=0;
 | |
| my $firstime=1;
 | |
| my $i;
 | |
| my $currentaddr;
 | |
| my $tmp;
 | |
| my $holder="";
 | |
| my $loadaddr;
 | |
| 
 | |
| if(@ARGV < 2){
 | |
| 	print "\n not enough arguments";
 | |
| 	print "\n Syntax: ./program_SDRAM input output\n";
 | |
| }
 | |
| 
 | |
| open(INFILE1, "<$ARGV[0]") || die("\ninput open fail\n");
 | |
| open(INFILE2, "<$ARGV[1]") || die("\ninput open fail\n");
 | |
| open(OUTFILE, ">$ARGV[2]") || die("\nOutput file open fail\n");
 | |
| 
 | |
| $i=0;
 | |
| while ($line = <INFILE1>){
 | |
|             if($line=~/\w/){
 | |
| 	     if($line!~/[;#\*]/){
 | |
|                   if($i eq 0){
 | |
| 		  printf OUTFILE ("33333333");
 | |
| 		  }
 | |
| 		  chomp($line);
 | |
| 		  $line=~s/\t//;
 | |
| 		  @array=split(/ +/,$line);
 | |
|                   $j=0;
 | |
| 		  while(@array[$j]!~/\w/)
 | |
| 		  {
 | |
|                     $j=$j+1;
 | |
| 
 | |
| 		  }
 | |
| 		  $addr=@array[$j];
 | |
| 	          $regval=@array[$j+1];
 | |
|                   $addr=~s/0x//;
 | |
|                   $regval=~s/0x//;
 | |
| 		  printf OUTFILE ("%08x%08x",hex($addr),hex($regval));
 | |
|                   $i=$i+1;
 | |
| 		  if($i eq 8)
 | |
| 		  {
 | |
|                       $i=0;
 | |
| 		      printf OUTFILE ("\n");
 | |
| 		  }
 | |
| 
 | |
|                }
 | |
|              }
 | |
| 
 | |
| 	    }
 | |
| 
 | |
|         while($i lt 8 && $i gt 0){
 | |
|                    printf OUTFILE "00"x8;
 | |
| 		   $i=$i+1;
 | |
| 		   }
 | |
|         if($i eq 8){
 | |
| 	printf OUTFILE ("\n");
 | |
|         }
 | |
| 
 | |
| while($aline=<INFILE2>){
 | |
| 	$aline=uc($aline);
 | |
| 	chomp($aline);
 | |
| 	next if(($aline=~/^S0/) || ($aline=~/^S7/));
 | |
| 	($lineid, $length, $address, @bytes) = unpack"A2A2A8"."A2"x300, $aline;
 | |
| 	$length = hex($length);
 | |
| 	$address = hex($address);
 | |
| 	$length -=5;
 | |
| 	$i=0;
 | |
| 
 | |
| 	while($length>0){
 | |
| 		if($firstime==1){
 | |
| 				$addstr = sprintf("%x", $address);
 | |
| 				$addstr = "0"x(8-length($addstr)).$addstr;
 | |
| 				print OUTFILE $addstr;
 | |
| 				addchsum($addstr);
 | |
| 				$firstime=0;
 | |
| 				$currentaddr=$address;
 | |
| 				$loadaddr = $addstr;
 | |
| 		}
 | |
| 		else{
 | |
| 			if($count==64){
 | |
| 				$addstr = sprintf("%x", $currentaddr);
 | |
| 				$addstr = "0"x(8-length($addstr)).$addstr;
 | |
| 				print OUTFILE $addstr;
 | |
| 				addchsum($addstr);
 | |
| 				$count=0;
 | |
| 			}
 | |
| 		}
 | |
| 		while($count<64){
 | |
| 		        $bytes[$i]=~tr/ABCDEF/abcdef/;
 | |
| 			print OUTFILE "$bytes[$i]";
 | |
| 			addchsum($bytes[$i]);
 | |
| 			$i++;
 | |
| 			$count++;
 | |
| 			$length--;
 | |
| 			last if($length==0);
 | |
| 		}
 | |
| 		if($count==64){
 | |
| 			print OUTFILE "\n";
 | |
| 			#print OUTFILE "\r";
 | |
| 			$currentaddr+=64;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| if($count != 64){
 | |
| 	$tmp = "00";
 | |
| 	for($i=0;$i<(64-$count);$i++){
 | |
| 		print OUTFILE "00";
 | |
| 		addchsum($tmp);
 | |
| 	}
 | |
| 	print OUTFILE "\n";
 | |
| 	#print OUTFILE "\r";
 | |
| }
 | |
| 
 | |
| 
 | |
| print OUTFILE "11"x4;
 | |
| use integer;
 | |
| $chsum=$chsum & 0xffffffff;
 | |
| $chsum = sprintf("%X", $chsum);
 | |
| $chsum = "0"x(8-length($chsum)).$chsum;
 | |
| $chsum =~tr/ABCDEF/abcdef/;
 | |
| print OUTFILE $chsum;
 | |
| print OUTFILE "00"x60;
 | |
| print OUTFILE "\n";
 | |
| #print OUTFILE "\r";
 | |
| 
 | |
| print OUTFILE "99"x4;
 | |
| print OUTFILE $loadaddr;
 | |
| print OUTFILE "00"x60;
 | |
| print OUTFILE "\n";
 | |
| #print OUTFILE "\r";
 | |
| 
 | |
| 
 | |
| close OUTFILE;
 | |
| #END of Program
 | |
| 
 | |
| 
 | |
| 
 | |
| sub addchsum{
 | |
| 	my $cc=$_[0];
 | |
| 	$holder=$holder.$cc;
 | |
| 	if(length($holder)==8){
 | |
| 		$holder = hex($holder);
 | |
| 		$chsum+=$holder;
 | |
| 		$holder="";
 | |
| 	}
 | |
| }
 | |
| #END
 | |
| 
 | |
| 
 |