home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR4 / SNES_GEN.ZIP / READCART.C < prev    next >
C/C++ Source or Header  |  1994-01-24  |  2KB  |  118 lines

  1. #include <stdio.h>
  2. #include <dos.h>
  3.  
  4. /* size of file buffer */
  5. #define BUFSIZE 4096
  6.  
  7. /* display to user every UPDATE bytes */
  8. #define UPDATE  8192
  9.  
  10. /* 4 megabits default */
  11. #define NUMSEGS 8
  12.  
  13. /* port data */
  14.  
  15. /*  use CP=37A for lpt2: */
  16. #define CP      0x3be
  17.  
  18. /*  use DP=378 for lpt2: */
  19. #define DP      0x3bc
  20.  
  21. /*  use IP=379 for lpt2: */
  22. #define IP      0x3bd
  23.  
  24. #define LA      0xe1
  25. #define MA      0xe2
  26. #define HA      0xe3
  27. #define NOPA    0xe0
  28. #define HI_NYB  0xe0
  29. #define LO_NYB  0xe8
  30.  
  31. void main(argc, argv)
  32. int argc;
  33. char *argv[];
  34. {
  35.  
  36. unsigned char buffer[BUFSIZE], tmp, lo_nyb, hi_nyb;
  37. long int numsegs=NUMSEGS, segment, page, byte, total=0, index = 0;
  38. FILE *fp;
  39.  
  40. if (argc > 3) {
  41.     printf("usage: readcart [filename] [megabits]\n");
  42.     exit(1);
  43. }
  44.  
  45. if (argc==3) {
  46.    tmp=atoi(argv[2]);
  47.    if ((tmp <1) || (tmp > 16)) {
  48.     printf("usage: readcart [filename] [megabits]\n");
  49.     printf ("%s %d\n", argv[2], tmp);
  50.     exit(1);
  51.     }
  52.    numsegs=tmp * 2;
  53.    }
  54.  
  55. if ((argc == 3) || (argc == 2)) {
  56.     if ((fp = fopen(argv[1], "wb")) == NULL) {
  57.         printf("Error opening file.\n");
  58.         exit(1);
  59.     }
  60. }
  61. else {
  62.     if ((fp = fopen("game.dat", "wb")) == NULL) {
  63.         printf("Error opening file.\n");
  64.         exit(1);
  65.     }
  66. }
  67.  
  68.  
  69.  
  70. printf("\n\t\tGAME MEDIC\n");
  71. printf("\t\t\tby The Silicon Valley Swappe Shoppe \n\n");
  72.  
  73. /* start code */
  74. for (segment=0; segment < numsegs; segment++) {
  75.   outportb (DP, segment);
  76.   outportb (CP, HA);
  77.   outportb (CP, NOPA);
  78.  
  79.   for (page=0; page <= 255 ; page++) {
  80.     outportb (DP, page);
  81.     outportb (CP, MA);
  82.     outportb (CP, NOPA);
  83.  
  84. /* change the following line to 
  85.     for (byte=0; byte<=255; byte+=2) {
  86.  if using this with the Super Nintendo
  87. */
  88.     for (byte=0; byte <= 255 ; byte++) {
  89.       outportb(DP, byte);
  90.       outportb(CP, LA);
  91.  
  92.       outportb(CP, HI_NYB);
  93.       tmp = inportb(IP);
  94.       hi_nyb = (tmp ^ 0x80) & 0xf0;
  95.  
  96.       outportb(CP, LO_NYB);
  97.  
  98.       tmp= inport(IP);
  99.       lo_nyb = (tmp ^ 0x80) & 0xf0;
  100.       lo_nyb = lo_nyb >> 4;
  101.  
  102.       buffer[index++]=lo_nyb | hi_nyb;
  103.       total++;
  104.       }
  105.     if ((total % BUFSIZE) == 0)
  106.     {
  107.     fwrite(buffer, sizeof(unsigned char), BUFSIZE, fp);
  108.     index=0;
  109.     }
  110.     if ((total % UPDATE) ==0)
  111.     printf("Read %8ld bytes from cartridge\r", total);
  112.     }
  113.   }
  114.  
  115. fclose(fp);
  116. printf ("\007\007");
  117. }
  118.