#!/usr/bin/perl open (INPUT,$ARGV[0]); $out_mask = "0056FFFF"; while ($line = ) { if (substr($line,0,5) eq "Break") { ($d,$d,$d,$d,$address,$d) = split(" ",$line); $subaddr = substr($address,-3,4); $line = ; $line = ; $line = ; ($value,$d,$d) = split(" ",$line); if ($value eq "MSR") { $line = ; ($value,$d) = split(" ",$line); } if ($subaddr eq "118") { $out_mask = $value; printf("118: $out_mask\n"); next; } if ($subaddr eq "200") { $line = ; ($esi,$d) = split(" ",$line); $line = ; ($eip,$d) = split(" ",$line); } $offset = hex($eip) - hex($aud_address); $offstr = sprintf("%04X",$offset); if ($offstr eq "2AAD" || $offstr eq "2AEC" || $offstr eq "2C14") { $masked_write = hex($value) & hex($out_mask); printf("200: $value $esi WRITE %06X\n",$masked_write); } elsif ($offstr eq "2A1C" || $offstr eq "2C7C" || $offstr eq "2B8C" || $offstr eq "2B19") { $masked_read = hex($value) & ~hex($out_mask); printf("200: $value $esi READ %06X\n",$masked_read); } else { printf("unknown offset: $offstr\n"); } } if (substr($line,0,8) eq "BTPCIVID") { ($d,$vid_address,$d) = split(" ",$line); printf("Found BTPCIVID address: %s\n",$vid_address); $line = ; $line = ; } if (substr($line,0,8) eq "BTPCIAUD") { ($d,$aud_address,$d) = split(" ",$line); printf("Found BTPCIAUD address: %s\n",$aud_address); $line = ; $line = ; } };