From a67d157bc1def44a602907dbd9d0b6c7e00aa0e8 Mon Sep 17 00:00:00 2001 From: Pk11 Date: Sat, 30 Dec 2023 18:45:36 -0600 Subject: [PATCH] Make GBA RTC dumping optional (#218) --- arm9/source/dumpOperations.cpp | 43 +++++++++++++++++++------ arm9/source/language.inl | 2 ++ nitrofiles/languages/en-US/language.ini | 2 ++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/arm9/source/dumpOperations.cpp b/arm9/source/dumpOperations.cpp index 4948bd8..46359a1 100644 --- a/arm9/source/dumpOperations.cpp +++ b/arm9/source/dumpOperations.cpp @@ -34,8 +34,10 @@ enum DumpOption { save = 4, metadata = 8, ndsSave = 16, + saveNoRtc = 32, all = rom | save | metadata, - allTrimmed = romTrimmed | save | metadata + allTrimmed = romTrimmed | save | metadata, + allNoRtc = rom | saveNoRtc | metadata }; DumpOption dumpMenu(std::vector allowedOptions, const char *dumpName) { @@ -65,6 +67,9 @@ DumpOption dumpMenu(std::vector allowedOptions, const char *dumpName case DumpOption::allTrimmed: font->print(optionsCol, row++, false, STR_DUMP_ALL_TRIMMED, alignStart); break; + case DumpOption::allNoRtc: + font->print(optionsCol, row++, false, STR_DUMP_ALL_NO_RTC, alignStart); + break; case DumpOption::rom: font->print(optionsCol, row++, false, STR_DUMP_ROM, alignStart); break; @@ -77,6 +82,9 @@ DumpOption dumpMenu(std::vector allowedOptions, const char *dumpName case DumpOption::ndsSave: font->print(optionsCol, row++, false, STR_DUMP_DS_SAVE, alignStart); break; + case DumpOption::saveNoRtc: + font->print(optionsCol, row++, false, STR_DUMP_SAVE_NO_RTC, alignStart); + break; case DumpOption::metadata: font->print(optionsCol, row++, false, STR_DUMP_METADATA, alignStart); break; @@ -961,7 +969,7 @@ void ndsCardDump(void) { screenSwapped ? lcdMainOnBottom() : lcdMainOnTop(); } -void gbaCartSaveDump(const char *filename) { +void gbaCartSaveDump(const char *filename, bool includeRtc) { font->clear(false); font->print(firstCol, 0, false, STR_DUMPING_SAVE, alignStart); font->print(firstCol, 1, false, STR_DO_NOT_REMOVE_CART, alignStart); @@ -978,11 +986,13 @@ void gbaCartSaveDump(const char *filename) { FILE *destinationFile = fopen(filename, "wb"); fwrite(buffer, 1, size, destinationFile); - u8 cartRtc[RTC_SIZE]; - if (gbaGetRtc(cartRtc)) { - fwrite(cartRtc, 1, RTC_SIZE, destinationFile); - u64 systime = time(nullptr); - fwrite(&systime, 1, 8, destinationFile); + if(includeRtc) { + u8 cartRtc[RTC_SIZE]; + if (gbaGetRtc(cartRtc)) { + fwrite(cartRtc, 1, RTC_SIZE, destinationFile); + u64 systime = time(nullptr); + fwrite(&systime, 1, 8, destinationFile); + } } fclose(destinationFile); @@ -1068,16 +1078,26 @@ void gbaCartDump(void) { font->print(firstCol, 0, false, STR_LOADING, alignStart); font->update(false); - std::vector allowedOptions = {DumpOption::all, DumpOption::rom}; + std::vector allowedOptions = {DumpOption::all}; u8 allowedBitfield = DumpOption::rom | DumpOption::metadata; char gameTitle[13] = {0}; char gameCode[7] = {0}; char fileName[32] = {0}; saveTypeGBA saveType = gbaGetSaveType(); + u8 cartRtc[RTC_SIZE]; + bool hasRtc = gbaGetRtc(cartRtc); + if(saveType != saveTypeGBA::SAVE_GBA_NONE) { + if(hasRtc) + allowedOptions.push_back(DumpOption::allNoRtc); + allowedOptions.push_back(DumpOption::rom); allowedOptions.push_back(DumpOption::save); allowedBitfield |= DumpOption::save; + if(hasRtc) { + allowedOptions.push_back(DumpOption::saveNoRtc); + allowedBitfield |= DumpOption::saveNoRtc; + } u32 size = gbaGetSaveSize(saveType); u8 *buffer = new u8[size]; @@ -1087,7 +1107,10 @@ void gbaCartDump(void) { allowedBitfield |= DumpOption::ndsSave; } delete[] buffer; + } else { + allowedOptions.push_back(DumpOption::rom); } + allowedOptions.push_back(DumpOption::metadata); // Get name @@ -1235,10 +1258,10 @@ void gbaCartDump(void) { } // Dump save - if((dumpOption & allowedBitfield) & DumpOption::save) { + if((dumpOption & allowedBitfield) & (DumpOption::save | DumpOption::saveNoRtc)) { char destPath[256]; sprintf(destPath, "fat:/gm9i/out/%s.sav", fileName); - gbaCartSaveDump(destPath); + gbaCartSaveDump(destPath, (dumpOption & allowedBitfield) & DumpOption::save); } // Dump NDS save previously saved to this cart diff --git a/arm9/source/language.inl b/arm9/source/language.inl index 37d4afe..c0e05ea 100644 --- a/arm9/source/language.inl +++ b/arm9/source/language.inl @@ -139,10 +139,12 @@ STRING(DUMP_TO, "Dump \"%s\" to\n\"%s:/gm9i/out\"?") STRING(DUMP_TO_GBA, "Dump \"%s\" to GBA cart?") STRING(DUMP_ALL, "All") STRING(DUMP_ALL_TRIMMED, "All (Trimmed ROM)") +STRING(DUMP_ALL_NO_RTC, "All (No RTC)") STRING(DUMP_ROM, "ROM") STRING(DUMP_ROM_TRIMMED, "ROM (Trimmed)") STRING(DUMP_SAVE, "Save") STRING(DUMP_DS_SAVE, "DS save") +STRING(DUMP_SAVE_NO_RTC, "Save (No RTC)") STRING(DUMP_PUBLIC_SAVE, "Public save") STRING(DUMP_PRIVATE_SAVE, "Private save") STRING(DUMP_BANNER_SAVE, "Banner save") diff --git a/nitrofiles/languages/en-US/language.ini b/nitrofiles/languages/en-US/language.ini index ccbba0e..7b73968 100644 --- a/nitrofiles/languages/en-US/language.ini +++ b/nitrofiles/languages/en-US/language.ini @@ -134,10 +134,12 @@ DUMP_TO=Dump "%s" to\n"%s:/gm9i/out"? DUMP_TO_GBA=Dump "%s" to GBA cart? DUMP_ALL=All DUMP_ALL_TRIMMED=All (Trimmed ROM) +DUMP_ALL_NO_RTC=All (No RTC) DUMP_ROM=ROM DUMP_ROM_TRIMMED=ROM (Trimmed) DUMP_SAVE=Save DUMP_DS_SAVE=DS save +DUMP_SAVE_NO_RTC=Save (No RTC) DUMP_PUBLIC_SAVE=Public save DUMP_PRIVATE_SAVE=Private save DUMP_BANNER_SAVE=Banner save