From b578b4c47e359f776a69480d12c4a0280a4fe4ac Mon Sep 17 00:00:00 2001 From: sanni Date: Tue, 8 Mar 2022 20:44:14 +0100 Subject: [PATCH] Change NES menus --- Cart_Reader/Cart_Reader.ino | 14 ++- Cart_Reader/NES.ino | 173 ++++++++++++++++++++---------------- 2 files changed, 108 insertions(+), 79 deletions(-) diff --git a/Cart_Reader/Cart_Reader.ino b/Cart_Reader/Cart_Reader.ino index 67f26a5..28465e4 100644 --- a/Cart_Reader/Cart_Reader.ino +++ b/Cart_Reader/Cart_Reader.ino @@ -5,7 +5,7 @@ an easy to build and easy to modify cartridge dumper. Date: 08.03.2022 - Version: 7.9 + Version: 8.0 SD lib: https://github.com/greiman/SdFat OLED lib: https://github.com/adafruit/Adafruit_SSD1306 @@ -45,7 +45,7 @@ **********************************************************************************/ -char ver[5] = "7.9"; +char ver[5] = "8.0"; /****************************************** Libraries @@ -417,7 +417,12 @@ void mainMenu() { #ifdef enable_NES case 4: + display_Clear(); + display_Update(); + setup_NES(); + checkStatus_NES(); nesMenu(); + mode = mode_NES; break; #endif @@ -549,7 +554,12 @@ void addonsMenu() { { #ifdef enable_NES case 0: + display_Clear(); + display_Update(); + setup_NES(); + checkStatus_NES(); nesMenu(); + mode = mode_NES; break; #endif diff --git a/Cart_Reader/NES.ino b/Cart_Reader/NES.ino index 7875a66..2fbf414 100644 --- a/Cart_Reader/NES.ino +++ b/Cart_Reader/NES.ino @@ -13,17 +13,17 @@ //28 Supported Mappers //103 Defines //133 Variables -//194 Menu -//313 Setup -//342 Low Level Functions -//589 CRC Functions -//649 File Functions -//844 NES 2.0 Header Functions -//1125 Config Functions -//1721 ROM Functions -//2819 RAM Functions -//3248 Eeprom Functions -//3444 NESmaker Flash Cart Functions +//194 Menus +//333 Setup +//362 Low Level Functions +//609 CRC Functions +//669 File Functions +//864 NES 2.0 Header Functions +//1145 Config Functions +//1946 ROM Functions +//3044 RAM Functions +//3477 Eeprom Functions +//3667 NESmaker Flash Cart Functions /****************************************** Supported Mappers @@ -194,32 +194,26 @@ int b = 0; /****************************************** Menu *****************************************/ -static const char menuItem1[] PROGMEM = "Select Mapper"; -static const char menuItem2[] PROGMEM = "Read Complete Cart"; -static const char menuItem3[] PROGMEM = "Read PRG"; -static const char menuItem4[] PROGMEM = "Read CHR"; -static const char menuItem5[] PROGMEM = "Read RAM"; -static const char menuItem6[] PROGMEM = "Write Options"; -static const char* const baseMenu[] PROGMEM = {menuItem1, menuItem2, menuItem3, menuItem4, menuItem5, menuItem6}; +// NES start menu +static const char nesMenuItem1[] PROGMEM = "Select Mapper"; +static const char nesMenuItem2[] PROGMEM = "Read complete Cart"; +static const char nesMenuItem3[] PROGMEM = "Read single chip"; +static const char nesMenuItem4[] PROGMEM = "Write RAM"; +static const char nesMenuItem5[] PROGMEM = "Write FLASH"; +static const char nesMenuItem6[] PROGMEM = "Reset"; +static const char* const menuOptionsNES[] PROGMEM = {nesMenuItem1, nesMenuItem2, nesMenuItem3, nesMenuItem4, nesMenuItem5, nesMenuItem6}; -static const char writeItem1[] PROGMEM = "Write RAM"; -static const char writeItem2[] PROGMEM = "Write FLASH"; -static const char writeItem3[] PROGMEM = "Return to Main Menu"; -static const char* const writeMenu[] PROGMEM = {writeItem1, writeItem2, writeItem3}; +// NES chips menu +static const char nesChipsMenuItem1[] PROGMEM = "Read PRG"; +static const char nesChipsMenuItem2[] PROGMEM = "Read CHR"; +static const char nesChipsMenuItem3[] PROGMEM = "Read RAM"; +static const char nesChipsMenuItem4[] PROGMEM = "Back"; +static const char* const menuOptionsNESChips[] PROGMEM = {nesChipsMenuItem1, nesChipsMenuItem2, nesChipsMenuItem3, nesChipsMenuItem4}; // NES start menu void nesMenu() { - display_Clear(); - display_Update(); - setup_NES(); - checkStatus_NES(); - nesCartMenu(); - mode = mode_NES; -} - -void nesCartMenu() { // create menu with title "NES CART READER" and 6 options to choose from - convertPgm(baseMenu, 6); + convertPgm(menuOptionsNES, 6); unsigned char answer = question_box(F("NES CART READER"), menuOptions, 6, 0); // wait for user choice to come back from the question box menu @@ -231,6 +225,7 @@ void nesCartMenu() { setPRGSize(); setCHRSize(); setRAMSize(); + checkStatus_NES(); break; // Read Complete Cart @@ -248,63 +243,88 @@ void nesCartMenu() { CartFinish(); break; - // Read PRG + // Read single chip case 2: - CreateROMFolderInSD(); - readPRG(); - resetROM(); - wait(); + nesChipMenu(); break; - // Read CHR - case 3: - CreateROMFolderInSD(); - readCHR(); - resetROM(); - wait(); - break; - - // Read RAM - case 4: - CreateROMFolderInSD(); - readRAM(); - resetROM(); - wait(); - break; - - // Write Options - case 5: - nesCartWriteMenu(); - wait(); - break; - } -} - -void nesCartWriteMenu() { - // create menu with title "WRITE OPTIONS MENU" and 3 options to choose from - convertPgm(writeMenu, 3); - unsigned char answer = question_box(F("WRITE OPTIONS MENU"), menuOptions, 3, 0); - - // wait for user choice to come back from the question box menu - switch (answer) { // Write RAM - case 0: + case 3: writeRAM(); resetROM(); + println_Msg(F("")); + println_Msg(F("Press button")); + display_Update(); wait(); break; // Write FLASH - case 1: - if (mapper == 30) + case 4: + if (mapper == 30) { writeFLASH(); + resetROM(); + } + else { + display_Clear(); + println_Msg(F("Error:")); + println_Msg(F("Can't write to this cartridge")); + println_Msg(F("")); + println_Msg(F("Press button")); + display_Update(); + } + wait(); + break; + + // Reset + case 5: + resetArduino(); + break; + } +} + +void nesChipMenu() { + // create menu with title "Select NES Chip" and 4 options to choose from + convertPgm(menuOptionsNESChips, 4); + unsigned char answer = question_box(F("Select NES Chip"), menuOptions, 4, 0); + + // wait for user choice to come back from the question box menu + switch (answer) { + // Read PRG + case 0: + CreateROMFolderInSD(); + readPRG(); resetROM(); + println_Msg(F("")); + println_Msg(F("Press button")); + display_Update(); + wait(); + break; + + // Read CHR + case 1: + CreateROMFolderInSD(); + readCHR(); + resetROM(); + println_Msg(F("")); + println_Msg(F("Press button")); + display_Update(); + wait(); + break; + + // Read RAM + case 2: + CreateROMFolderInSD(); + readRAM(); + resetROM(); + println_Msg(F("")); + println_Msg(F("Press button")); + display_Update(); wait(); break; // Return to Main Menu - case 2: - nesCartMenu(); + case 3: + nesMenu(); wait(); break; } @@ -598,7 +618,7 @@ inline uint32_t updateCRC32(uint8_t ch, uint32_t crc) { return tab_value ^ ((crc) >> 8); } -uint32_t crc32(FsFile &file, uint32_t &charcnt) { +uint32_t crc32(FsFile & file, uint32_t &charcnt) { uint32_t oldcrc32 = 0xFFFFFFFF; charcnt = 0; while (file.available()) { @@ -612,7 +632,7 @@ uint32_t crc32(FsFile &file, uint32_t &charcnt) { return ~oldcrc32; } -uint32_t crc32EEP(FsFile &file, uint32_t &charcnt) { +uint32_t crc32EEP(FsFile & file, uint32_t &charcnt) { uint32_t oldcrc32 = 0xFFFFFFFF; charcnt = 0; while (file.available()) { @@ -1884,6 +1904,7 @@ void checkStatus_NES() { display_Clear(); println_Msg(F("NES CART READER")); + println_Msg(F("")); println_Msg(F("CURRENT SETTINGS")); println_Msg(F("")); print_Msg(F("MAPPER: ")); @@ -3447,8 +3468,6 @@ void writeRAM() { } } - display_Clear(); - LED_RED_OFF; LED_GREEN_OFF; sd.chdir(); // root