home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / doom / ldhe-src.0 / ldhe-src / dehacked / source / utils / diffregs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-05  |  1.8 KB  |  80 lines

  1.  
  2. #include <stdio.h>
  3.  
  4. /* Register indices into mode state array. */
  5.  
  6. #define VGA_CRTC_OFFSET        0    /* 24 registers */
  7. #define VGA_ATC_OFFSET        24    /* 21 registers */
  8. #define VGA_GRAPHICS_OFFSET    45    /* 9 registers. */
  9. #define VGA_SEQUENCER_OFFSET    54    /* 5 registers. */
  10. #define VGA_MISCOUTPUT        59    /* (single register) */
  11. #define VGA_TOTAL_REGS        60
  12.  
  13. struct {
  14.     int offset;
  15.     char *label;
  16.     } labels[] = {
  17.         { VGA_CRTC_OFFSET, "CRTC" },
  18.         { VGA_ATC_OFFSET, "ATC" },
  19.         { VGA_GRAPHICS_OFFSET, "GRAPHICS" },
  20.         { VGA_SEQUENCER_OFFSET, "SEQUENCER" },
  21.         { VGA_MISCOUTPUT, "MISCOUTPUT" },
  22.         { 0, NULL }
  23.     };
  24.  
  25.  
  26. char *printbits(unsigned char value)
  27. {
  28.     static char bits[9];
  29.     int i;
  30.  
  31.     for ( i=0; i<8; ++i )
  32.         bits[i] = ( (value & 0x80>>i) ? '1' : '0' );
  33.     bits[i] = '\0';
  34.     return(bits);
  35. }
  36.  
  37. main(int argc, char *argv[])
  38. {
  39.     int i, k, l;
  40.     FILE *f1, *f2;
  41.     unsigned char regs1[VGA_TOTAL_REGS], regs2[VGA_TOTAL_REGS];
  42.  
  43.     if ( argc != 3 ) {
  44.         fprintf(stderr, "Usage: %s <regs1> <regs2>\n", argv[0]);
  45.         exit(1);
  46.     }
  47.  
  48.     if ( !(f1=fopen(argv[1], "r")) || !(f2=fopen(argv[2], "r")) ) {
  49.         perror("Can't open arguments for reading");
  50.         exit(3);
  51.     }
  52.     if ( !fread(regs1, VGA_TOTAL_REGS, 1, f1) ||
  53.          !fread(regs2, VGA_TOTAL_REGS, 1, f2) ) {
  54.         perror("Can't read registers from input files");
  55.         exit(3);
  56.     }
  57.     fclose(f1); fclose(f2);
  58.  
  59.     printf("Register Name            %s        %s\n",
  60.                             argv[1], argv[2]);
  61.     for ( i=0; i<VGA_TOTAL_REGS; ++i ) {
  62.         if ( regs1[i] != regs2[i] ) {
  63.             printf("Reg data offset: %d\n", i);
  64.             for ( k=0; k<VGA_TOTAL_REGS; ++k ) {
  65.                 for ( l=0; labels[l].label; ++l ) {
  66.                     if ( k <= labels[l].offset )
  67.                         goto print_diff;
  68.                 }
  69.             }
  70.         print_diff:
  71.             printf(
  72. "VGA bank %s (index 0x%X):    %s (0x%.2X)    ",
  73.                 labels[l].label, (char)(i-labels[l].offset), 
  74.                         printbits(regs1[i]), regs1[i]);
  75.             printf("%s (0x%.2X)\n", printbits(regs2[i]), regs2[i]);
  76.         }
  77.     }
  78.     exit(0);
  79. }
  80.