Difference between revisions of "UVSGXOR"

From Prevue Guide Wiki
Jump to navigation Jump to search
Line 3: Line 3:
  
 
<code>
 
<code>
#import <stdio.h>
+
#import <stdio.h>
 
+
int main(int argc, char *argv[]) {
+
int main(int argc, char *argv[]) {
 
     int i=0, j, checksum;
 
     int i=0, j, checksum;
 
     char *buf = "<PUT AN EXAMPLE COMMAND HERE>";
 
     char *buf = "<PUT AN EXAMPLE COMMAND HERE>";
Line 26: Line 26:
 
      
 
      
 
     printf("\n%02x\n", checksum);
 
     printf("\n%02x\n", checksum);
}</code>
+
}
 +
</code>

Revision as of 01:52, 30 November 2010

This code simply returns the initial checksum of a UVSG command, provided you (1) give it a sample command that ends in $00 <checksum> and (2) strip off the 55 AA at the beginning. It's probably poorly written, but it works.


#import <stdio.h>

int main(int argc, char *argv[]) {
   int i=0, j, checksum;
   char *buf = "<PUT AN EXAMPLE COMMAND HERE>";
   char *hexPtr = buf;
   
   unsigned int *result = calloc(strlen(buf)/2 + 1, sizeof *result);
   while (sscanf(hexPtr, "%02x", &result[i++])) {
       hexPtr += 2;
       if (hexPtr >= buf + strlen(buf)) break;
   }
   
   for (j = i; j > -1; j--) {
       if (j == (i-1)) {
           checksum = (int)result[j];
       }
       if (j < (i-1)) {
           checksum = checksum ^ (int)result[j];            
       }
   }
   
   printf("\n%02x\n", checksum);
}