diff --git a/Cart_Reader/Cart_Reader.ino b/Cart_Reader/Cart_Reader.ino index c307509..b1e37f3 100644 --- a/Cart_Reader/Cart_Reader.ino +++ b/Cart_Reader/Cart_Reader.ino @@ -4,7 +4,7 @@ This project represents a community-driven effort to provide an easy to build and easy to modify cartridge dumper. - Date: 20.06.2022 + Date: 21.06.2022 Version: 8.5 BETA SD lib: https://github.com/greiman/SdFat @@ -370,6 +370,9 @@ inline uint32_t updateCRC(uint8_t ch, uint32_t crc) { // Calculate rom's CRC32 from SD uint32_t calculateCRC(char* fileName, char* folder) { + // Open folder + sd.chdir(folder); + // Open file if (myFile.open(fileName, O_READ)) { uint32_t oldcrc32 = 0xFFFFFFFF; @@ -384,7 +387,12 @@ uint32_t calculateCRC(char* fileName, char* folder) { return ~oldcrc32; } else { - print_Error(F("File not found"), true); + display_Clear(); + print_Msg(F("File ")); + //print_Msg(folder); + //print_Msg(F("/")); + //print_Msg(fileName); + print_Error(F(" not found"), true); } } @@ -444,7 +452,11 @@ boolean compareCRC(char* database, char* crcString) { #ifdef no-intro char crcStr[9]; if (crcString == 0) { + //go to root + sd.chdir(); // Calculate CRC32 + print_Msg(F("CRC32... ")); + display_Update(); sprintf(crcStr, "%08lX", calculateCRC(fileName, folder)); } else { @@ -452,7 +464,6 @@ boolean compareCRC(char* database, char* crcString) { strcpy(crcStr, crcString); } // Print checksum - print_Msg(F("CRC32: ")); print_Msg(crcStr); display_Update(); diff --git a/Cart_Reader/GB.ino b/Cart_Reader/GB.ino index e32ba67..bfdf472 100644 --- a/Cart_Reader/GB.ino +++ b/Cart_Reader/GB.ino @@ -925,9 +925,6 @@ unsigned int calc_checksum_GB (char* fileName, char* folder) { // Compare checksum void compare_checksums_GB() { - println_Msg(F("Calculating Checksum...")); - display_Update(); - strcpy(fileName, romName); strcat(fileName, ".GB"); diff --git a/Cart_Reader/GBA.ino b/Cart_Reader/GBA.ino index d7c9fdd..c99f622 100644 --- a/Cart_Reader/GBA.ino +++ b/Cart_Reader/GBA.ino @@ -130,8 +130,6 @@ void gbaMenu() { // Internal Checksum compare_checksum_GBA(); // CRC32 - println_Msg(F("Calculating CRC checksum...")); - display_Update(); compareCRC("gba.txt", 0); #ifdef global_log save_log(); @@ -501,7 +499,7 @@ void setup_GBA() { // Get cart info display_Clear(); - println_Msg(F("Seaching database...")); + println_Msg(F("Searching database...")); display_Update(); getCartInfo_GBA(); display_Clear(); diff --git a/Cart_Reader/MD.ino b/Cart_Reader/MD.ino index 89b9274..5c555a1 100644 --- a/Cart_Reader/MD.ino +++ b/Cart_Reader/MD.ino @@ -1293,9 +1293,6 @@ void readROM_MD() { //println_Msg(F("s")); //display_Update(); - println_Msg(F("Calculating checksum...")); - display_Update(); - // Calculate and compare CRC32 with no-intro compareCRC("md.txt", 0); diff --git a/Cart_Reader/N64.ino b/Cart_Reader/N64.ino index e3575a5..350efb1 100644 --- a/Cart_Reader/N64.ino +++ b/Cart_Reader/N64.ino @@ -3434,9 +3434,6 @@ redumpsamefolder: // Close the file: myFile.close(); - // Calculate Checksum and convert to string - println_Msg(F("Calculating CRC..")); - display_Update(); if (compareCRC("n64.txt", 0)) { #else // dumping rom fast diff --git a/Cart_Reader/SNES.ino b/Cart_Reader/SNES.ino index 19e3a27..c4de6a0 100644 --- a/Cart_Reader/SNES.ino +++ b/Cart_Reader/SNES.ino @@ -215,12 +215,10 @@ void snesMenu() { unsigned long startTime = millis(); // start reading from cart readROM_SNES(); + // Internal Checksum compare_checksum(); - - // print elapsed time - print_Msg(F("Time elapsed: ")); - print_Msg((millis() - startTime) / 1000); - println_Msg(F("s")); + // CRC32 + compareCRC("snes.txt", 0); #ifdef global_log save_log(); #endif @@ -337,7 +335,7 @@ void snesMenu() { resetArduino(); break; } - println_Msg(F("")); + //println_Msg(F("")); println_Msg(F("Press Button...")); display_Update(); wait(); @@ -818,7 +816,18 @@ void checkAltConf() { altconf = 0; if (myFile.open("snes.txt", O_READ)) { + // Get cart info + display_Clear(); + println_Msg(F("Searching database...")); + display_Update(); + while (myFile.available()) { + // Skip first line with name + skip_line(&myFile); + + // Skip over the CRC checksum + myFile.seekSet(myFile.curPosition() + 9); + // Read 4 bytes into String, do it one at a time so byte order doesn't get mixed up sprintf(tempStr1, "%c", myFile.read()); strcpy(tempStr2, tempStr1); @@ -836,24 +845,31 @@ void checkAltConf() { myFile.seekSet(myFile.curPosition() + 1); // Read file size - romSize = (myFile.read() - 48) * 10 + (myFile.read() - 48); + byte romSize2 = (myFile.read() - 48) * 10 + (myFile.read() - 48); // Skip the , in the file myFile.seekSet(myFile.curPosition() + 1); // Read number of banks - numBanks = (myFile.read() - 48) * 100 + (myFile.read() - 48) * 10 + (myFile.read() - 48); + byte numBanks2 = (myFile.read() - 48) * 100 + (myFile.read() - 48) * 10 + (myFile.read() - 48); - altconf = 1; + if ((romSize != romSize2) || (numBanks != numBanks2)) { + romSize = romSize2; + numBanks = numBanks2; + altconf = 1; + } } // If no match empty string advance by 9 and try again else { - myFile.seekSet(myFile.curPosition() + 9); + // skip rest of line + myFile.seekSet(myFile.curPosition() + 7); + // skip third empty line + skip_line(&myFile); } } + // Close the file: + myFile.close(); } - // Close the file: - myFile.close(); } // Read header @@ -1163,8 +1179,7 @@ unsigned int calc_checksum (char* fileName, char* folder) { } boolean compare_checksum() { - - println_Msg(F("Calculating Checksum")); + print_Msg(F("Internal Checksum...")); display_Update(); strcpy(fileName, romName); @@ -1178,8 +1193,8 @@ boolean compare_checksum() { sprintf(calcsumStr, "%04X", calc_checksum(fileName, folder)); if (strcmp(calcsumStr, checksumStr) == 0) { - print_Msg(F("Checksum OK: ")); - println_Msg(calcsumStr); + println_Msg(F("OK")); + //println_Msg(calcsumStr); display_Update(); return 1; }