www.pudn.com > virtual_gameboy-0.8.8.zip > GBLIST.C
/** GameBoy Cartridge Lister/Tester **************************/ /** **/ /** gblist.c **/ /** **/ /** This program will list and [optionally] test a group of **/ /** cartridges finding those which fail CRC or complement **/ /** check, or have invalid size. **/ /** **/ /** Copyright (C) Marat Fayzullin 1996 **/ /** You are not allowed to distribute this software **/ /** commercially. Please, notify me, if you make any **/ /** changes to this file. **/ /*************************************************************/ #include#include typedef unsigned char byte; typedef unsigned short word; int CheckCRC=0,UseANSI=0,FixCRC=0; void Error(char *File,char *Text) { printf ( "|%-20s|%s %-48s %s|\n", File,UseANSI? "\033[31m":"",Text,UseANSI? "\033[0m":"" ); } int main(int argc,char *argv[]) { static char *Types[] = { "R...","R..1","RW.1","RWB1","????","R..2","R.B2" }; static char *RAMSizes[] = { " 0kB"," 2kB"," 8kB","32kB"," " }; static byte Buf[0x4000]; char S[15]; FILE *F; int J,I,K; char Name[50],*Type,Comment[1024]; word Checksum,Producer,RealCRC; byte Version,Complement,RealComp; int RAMSize,ROMBanks; if(argc<2) { fprintf(stderr,"GBLIST .GB File Processor by Marat Fayzullin\n"); fprintf(stderr,"Usage: %s [-caf] files...\n", argv[0]); fprintf(stderr," -a - Use ANSI escape sequences for colors\n"); fprintf(stderr," -c - Check CRC\n"); fprintf(stderr," -f - Fix CRC\n"); return(1); } CheckCRC=UseANSI=FixCRC=0; for(I=1;I ' ')? Buf[I]:' '; Name[I-0x134]='\0'; if((Buf[0x0147]<=7)&&(Buf[0x0147]!=4)) { Type=Types[Buf[0x0147]]; ROMBanks=2< 0;I--) if(fread(Buf,1,0x4000,F)!=0x4000) break; else for(K=0;K<0x4000;K++) RealCRC+=Buf[K]; if(I) strcat(Comment,"[File Too Short]"); else if(fgetc(F)!=EOF) strcat(Comment,"File is too long. "); else if(Checksum!=RealCRC) sprintf ( Comment+strlen(Comment), "Wrong CRC: %04X!=%04X.", RealCRC,Checksum ); } /*** Printing out the information line ***/ if(*Comment) printf ( "|%-20s|%s %-48s %s|\n", argv[J],UseANSI? "\033[35m":"",Comment,UseANSI? "\033[0m":"" ); else printf ( "|%-20s| %-16s |%s|%3dkB|%4s|%04X|%2d|%04X-%02X|\n", argv[J],Name,Type,ROMBanks*16,S,Producer,Version, Checksum,Complement ); } fclose(F); } puts("+--------------------+------------------+----+-----+----+----+--+-------+"); }