diff --git a/Cart_Reader/Cart_Reader.ino b/Cart_Reader/Cart_Reader.ino index cdaf260..8f95631 100644 --- a/Cart_Reader/Cart_Reader.ino +++ b/Cart_Reader/Cart_Reader.ino @@ -2,15 +2,15 @@ Cartridge Reader for Arduino Mega2560 Author: sanni - Date: 2017-06-03 - Version: V25B + Date: 2017-06-06 + Version: V25C SD lib: https://github.com/greiman/SdFat LCD lib: https://github.com/adafruit/Adafruit_SSD1306 Clockgen: https://github.com/etherkit/Si5351Arduino RGB Tools lib: https://github.com/joushx/Arduino-RGB-Tools - Compiled with Arduino 1.8.2 + Compiled with Arduino 1.8.3 Thanks to: MichlK - ROM-Reader for Super Nintendo @@ -34,7 +34,7 @@ YamaArashi - GBA flashrom bank switch command **********************************************************************************/ -char ver[5] = "V25B"; +char ver[5] = "V25C"; /****************************************** Define Output @@ -165,7 +165,7 @@ int incomingByte; int choice = 0; // Temporary array that holds the menu option read out of progmem char menuOptions[7][20]; -boolean ignoreError; +boolean ignoreError = 0; // File browser char fileName[26]; @@ -962,7 +962,8 @@ void wait_btn() { // if the cart readers input button is pressed long if (b == 3) { if (errorLvl) { - ignoreError = 1; + // Debug + //ignoreError = 1; errorLvl = 0; } break; diff --git a/Cart_Reader/N64.ino b/Cart_Reader/N64.ino index 87f099f..c16ccb5 100644 --- a/Cart_Reader/N64.ino +++ b/Cart_Reader/N64.ino @@ -2165,7 +2165,7 @@ void resetFlashrom_N64(unsigned long flashBase) { } void idFlashrom_N64() { - // Size of repro cartridge + // Size of repro cartridge if no ID is found cartSize = 0; // Send ID command to first flashrom @@ -2182,16 +2182,18 @@ void idFlashrom_N64() { // Read flashrom ID sprintf(flashid, "%04X", readWord_N64()); - // Reset flashrom to read mode - if (strcmp(flashid, "227E") == 0) - resetFlashrom_N64(romBase); - else if ((strcmp(flashid, "8813") == 0) || (strcmp(flashid, "8816") == 0)) - resetReadmode_N64(); - + // Check for known ID if ((strcmp(flashid, "227E") == 0) || (strcmp(flashid, "8816") == 0)) { + // Reset flashrom to read mode + if (strcmp(flashid, "227E") == 0) + resetFlashrom_N64(romBase); + else if ((strcmp(flashid, "8813") == 0) || (strcmp(flashid, "8816") == 0)) + resetReadmode_N64(); + + // Found first flashrom chip, set to 32MB cartSize = 32; - // Send ID command to second flashrom + // Send ID command to possible second flashrom setAddress_N64(romBase + 0x2000000 + (0x555 << 1)); writeWord_N64(0xAA); setAddress_N64(romBase + 0x2000000 + (0x2AA << 1)); @@ -2203,16 +2205,21 @@ void idFlashrom_N64() { setAddress_N64(romBase + 0x2000000); readWord_N64(); // Read flashrom ID - sprintf(flashid, "%04X", readWord_N64()); - if ((strcmp(flashid, "227E") == 0) || (strcmp(flashid, "8813") == 0)) { - cartSize = 64; - } + sprintf(cartID, "%04X", readWord_N64()); - // Reset flashrom to read mode - if (strcmp(flashid, "227E") == 0) - resetFlashrom_N64(romBase); - else if ((strcmp(flashid, "8813") == 0) || (strcmp(flashid, "8816") == 0)) - resetReadmode_N64(); + // Check if second flashrom chip is present + if ((strcmp(cartID, "227E") == 0) || (strcmp(cartID, "8813") == 0)) { + cartSize = 64; + strncpy(flashid , cartID, 5); + + // Reset flashrom to read mode + if (strcmp(flashid, "227E") == 0) + resetFlashrom_N64(romBase + 0x2000000); + else if ((strcmp(flashid, "8813") == 0) || (strcmp(flashid, "8816") == 0)) + resetReadmode_N64(); + } + // Empty cartID string + cartID[0] = '\0'; } }