diff options
author | sanni <[email protected]> | 2023-02-10 09:40:58 +0100 |
---|---|---|
committer | sanni <[email protected]> | 2023-02-10 09:40:58 +0100 |
commit | 2f71d0572ee923e969a9cda3aea58d6ec3eece40 (patch) | |
tree | edf064fcac128a6eb7fcbadf5bf566f6b5d07468 | |
parent | 03935a3af02520436e6ccb0ea19fc2a0ec5577ad (diff) | |
download | cartreader-2f71d0572ee923e969a9cda3aea58d6ec3eece40.tar.gz cartreader-2f71d0572ee923e969a9cda3aea58d6ec3eece40.zip |
Fix SRAM overflow in N64/MD, turn LED red if CRC not found
-rw-r--r-- | Cart_Reader/Cart_Reader.ino | 6 | ||||
-rw-r--r-- | Cart_Reader/MD.ino | 13 | ||||
-rw-r--r-- | Cart_Reader/N64.ino | 114 |
3 files changed, 36 insertions, 97 deletions
diff --git a/Cart_Reader/Cart_Reader.ino b/Cart_Reader/Cart_Reader.ino index 10359bd..8e751b4 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: 06.02.2023
+ Date: 10.02.2023
Version: 12.2
SD lib: https://github.com/greiman/SdFat
@@ -863,12 +863,12 @@ boolean compareCRC(const char* database, char* crcString, boolean renamerom, int }
}
if (strcmp(crc_search, crcStr) != 0) {
- println_Msg(F(" -> Not found"));
+ print_Error(F(" -> Not found"));
return 0;
}
} else {
println_Msg(F(" -> Error"));
- println_Msg(F("Database missing"));
+ print_Error(F("Database missing"));
return 0;
}
#else // nointro
diff --git a/Cart_Reader/MD.ino b/Cart_Reader/MD.ino index 051dcba..8b05abd 100644 --- a/Cart_Reader/MD.ino +++ b/Cart_Reader/MD.ino @@ -306,6 +306,12 @@ void mdCartMenu() { readRealtec_MD();
} else {
readROM_MD();
+ // Calculate and compare CRC32 with nointro
+ if (is32x)
+ //database, crcString, renamerom, offset
+ compareCRC("32x.txt", 0, 1, 0);
+ else
+ compareCRC("md.txt", 0, 1, 0);
}
} else {
print_Error(F("Cart has no ROM"));
@@ -1476,13 +1482,6 @@ void readROM_MD() { display_Update();
}
}
-
- // Calculate and compare CRC32 with nointro
- if (is32x)
- //database, crcString, renamerom, offset
- compareCRC("32x.txt", 0, 1, 0);
- else
- compareCRC("md.txt", 0, 1, 0);
}
/******************************************
diff --git a/Cart_Reader/N64.ino b/Cart_Reader/N64.ino index ca25723..8406bd8 100644 --- a/Cart_Reader/N64.ino +++ b/Cart_Reader/N64.ino @@ -237,8 +237,21 @@ void n64CartMenu() { // wait for user choice to come back from the question box menu switch (mainMenu) { case 0: + display_Clear(); sd.chdir("/"); readRom_N64(); +#ifndef fastcrc + sd.chdir("/"); + // CRC32 + compareCRC("n64.txt", 0, 1, 0); +#endif +#ifdef global_log + save_log(); +#endif + // Prints string out of the common strings array either with or without newline + print_STR(press_button_STR, 1); + display_Update(); + wait(); break; case 1: @@ -2772,14 +2785,14 @@ void readRom_N64() { strcpy(fileName, romName); strcat(fileName, ".Z64"); -redumpnewfolder: // create a new folder EEPROM_readAnything(0, foldern); sprintf(folder, "N64/ROM/%s/%d", romName, foldern); sd.mkdir(folder, true); sd.chdir(folder); - display_Clear(); + // clear the screen + // display_Clear(); print_STR(saving_to_STR, 0); print_Msg(folder); println_Msg(F("/...")); @@ -2789,17 +2802,19 @@ redumpnewfolder: foldern = foldern + 1; EEPROM_writeAnything(0, foldern); -redumpsamefolder: // Open file on sd card if (!myFile.open(fileName, O_RDWR | O_CREAT)) { - print_FatalError(sd_error_STR); + print_FatalError(create_file_STR); } - // get current time - unsigned long startTime = millis(); #ifndef fastcrc // dumping rom slow + //Initialize progress bar + uint32_t processedProgressBar = 0; + uint32_t totalProgressBar = (uint32_t)(cartSize)*1024 * 1024; + draw_progressbar(0, totalProgressBar); + for (unsigned long currByte = romBase; currByte < (romBase + (cartSize * 1024 * 1024)); currByte += 512) { // Blink led if ((currByte & 0x3FFF) == 0) @@ -2808,17 +2823,18 @@ redumpsamefolder: // Set the address for the next 512 bytes setAddress_N64(currByte); - for (word c = 0; c < sizeof(sdBuffer); c += 2) { + for (word c = 0; c < 512; c += 2) { word myWord = readWord_N64(); sdBuffer[c] = myWord >> 8; sdBuffer[c + 1] = myWord & 0xFF; } - myFile.write(sdBuffer, sizeof(sdBuffer)); + myFile.write(sdBuffer, 512); + + processedProgressBar += 512; + draw_progressbar(processedProgressBar, totalProgressBar); } // Close the file: myFile.close(); - - if (compareCRC("n64.txt", 0, 1, 0)) { #else // dumping rom fast byte buffer[1024]; @@ -2906,84 +2922,8 @@ redumpsamefolder: sprintf(crcStr, "%08lX", ~oldcrc32); // Search n64.txt for crc - if (compareCRC("n64.txt", crcStr, 1, 0)) { -#endif - unsigned long timeElapsed = (millis() - startTime) / 1000; // seconds - print_Msg(F("Done (")); - print_Msg(timeElapsed); // include elapsed time - println_Msg(F("s)")); - println_Msg(F("")); - // Prints string out of the common strings array either with or without newline - print_STR(press_button_STR, 1); - display_Update(); - // This saves a tt file with rom info next to the dumped rom -#ifdef savesummarytotxt - savesummary_N64(1, crcStr, timeElapsed); + compareCRC("n64.txt", crcStr, 1, 0); #endif -#ifdef global_log - save_log(); -#endif - wait(); - } else { - // Dump was bad or unknown - errorLvl = 1; - setColor_RGB(255, 0, 0); - println_Msg(F("")); - // Prints string out of the common strings array either with or without newline - print_STR(press_button_STR, 1); - display_Update(); - // This saves a tt file with rom info next to the dumped rom -#ifdef savesummarytotxt - savesummary_N64(0, crcStr, timeElapsed); -#endif - wait(); - - // N64 CRC32 error Menu - unsigned char CRCMenu; - // Copy menuOptions out of progmem - convertPgm(menuOptionsN64CRC, 4); - - CRCMenu = question_box(F("Redump cartridge?"), menuOptions, 4, 0); - - // wait for user choice to come back from the question box menu - switch (CRCMenu) { - case 0: - // Return to N64 menu - display_Clear(); - break; - - case 1: - // Dump again into new folder - display_Clear(); - setColor_RGB(0, 0, 0); - goto redumpnewfolder; - break; - - case 2: - // Dump again into same folder - // Change to last directory - sd.chdir(folder); - // Delete old file - if (!myFile.open(fileName, O_RDWR | O_CREAT)) { - print_FatalError(sd_error_STR); - } - if (!myFile.remove()) { - print_FatalError(F("Delete Error")); - } - // Dump again - display_Clear(); - println_Msg(F("Reading Rom...")); - display_Update(); - setColor_RGB(0, 0, 0); - goto redumpsamefolder; - break; - - case 3: - // Reset - resetArduino(); - break; - } - } } #ifdef savesummarytotxt |