V24: Changed folder structure on SD card

All modules now write their roms/saves to a separate subfolder.
This commit is contained in:
sanni 2017-05-08 20:42:47 +02:00 committed by GitHub
parent ed5dc3f573
commit dddf21fc3e
7 changed files with 778 additions and 300 deletions

View File

@ -2,8 +2,8 @@
Cartridge Reader for Arduino Mega2560 Cartridge Reader for Arduino Mega2560
Author: sanni Author: sanni
Date: 2017-05-03 Date: 2017-05-08
Version: V23A Version: V24
SD lib: https://github.com/greiman/SdFat SD lib: https://github.com/greiman/SdFat
LCD lib: https://github.com/adafruit/Adafruit_SSD1306 LCD lib: https://github.com/adafruit/Adafruit_SSD1306
@ -34,7 +34,7 @@
YamaArashi - GBA flashrom bank switch command YamaArashi - GBA flashrom bank switch command
**********************************************************************************/ **********************************************************************************/
char ver[5] = "V23A"; char ver[5] = "V24";
/****************************************** /******************************************
Define Output Define Output
@ -117,13 +117,14 @@ SdFile myFile;
#define mode_N64_Cart 0 #define mode_N64_Cart 0
#define mode_N64_Controller 1 #define mode_N64_Controller 1
#define mode_SNES 2 #define mode_SNES 2
#define mode_NP 3 #define mode_SFM 3
#define mode_NPFlash 4 #define mode_SFM_Flash 4
#define mode_NPGame 5 #define mode_SFM_Game 5
#define mode_GB 6 #define mode_GB 6
#define mode_FLASH8 7 #define mode_FLASH8 7
#define mode_FLASH16 8 #define mode_FLASH16 8
#define mode_GBA 9 #define mode_GBA 9
#define mode_GBM 10
/****************************************** /******************************************
Variables Variables
@ -178,7 +179,7 @@ boolean filebrowse = 0;
char fileOptions[30][20]; char fileOptions[30][20];
// Common // Common
char romName[10]; char romName[17];
int sramSize = 0; int sramSize = 0;
int romType = 0; int romType = 0;
byte saveType; byte saveType;
@ -199,7 +200,7 @@ byte mode;
//remember folder number to create a new folder for every save //remember folder number to create a new folder for every save
int foldern; int foldern;
char folder[24]; char folder[36];
// Array that holds the data // Array that holds the data
byte sdBuffer[512]; byte sdBuffer[512];
@ -333,6 +334,11 @@ static const char n64MenuItem2[] PROGMEM = "Controller";
static const char n64MenuItem3[] PROGMEM = "Flash Repro"; static const char n64MenuItem3[] PROGMEM = "Flash Repro";
static const char* const menuOptionsN64[] PROGMEM = {n64MenuItem1, n64MenuItem2, n64MenuItem3}; static const char* const menuOptionsN64[] PROGMEM = {n64MenuItem1, n64MenuItem2, n64MenuItem3};
// Nintendo Power Submenu
static const char npMenuItem1[] PROGMEM = "SF Memory";
static const char npMenuItem2[] PROGMEM = "GB Memory";
static const char* const menuOptionsNP[] PROGMEM = {npMenuItem1, npMenuItem2};
// Flash Submenu // Flash Submenu
static const char flashMenuItem1[] PROGMEM = "8bit slot"; static const char flashMenuItem1[] PROGMEM = "8bit slot";
static const char flashMenuItem2[] PROGMEM = "16bit slot"; static const char flashMenuItem2[] PROGMEM = "16bit slot";
@ -354,7 +360,7 @@ void mainMenu() {
switch (modeMenu) switch (modeMenu)
{ {
case 0: case 0:
// create menu with title and 2 options to choose from // create menu with title and 3 options to choose from
unsigned char n64Dev; unsigned char n64Dev;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuOptionsN64, 3); convertPgm(menuOptionsN64, 3);
@ -398,10 +404,29 @@ void mainMenu() {
break; break;
case 2: case 2:
display_Clear(); // create menu with title and 2 options to choose from
display_Update(); unsigned char npCart;
setup_NP(); // Copy menuOptions out of progmem
mode = mode_NP; convertPgm(menuOptionsNP, 1);
npCart = question_box("Select NP Cart", menuOptions, 1, 0);
// wait for user choice to come back from the question box menu
switch (npCart)
{
case 0:
display_Clear();
display_Update();
setup_SFM();
mode = mode_SFM;
break;
case 1:
display_Clear();
display_Update();
setup_GBM();
mode = mode_GBM;
break;
}
break; break;
case 3: case 3:
@ -493,7 +518,7 @@ void mainMenu() {
display_Update(); display_Update();
delay(2000); delay(2000);
foldern = 0; foldern = 0;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
asm volatile (" jmp 0"); asm volatile (" jmp 0");
} }
} }
@ -522,7 +547,7 @@ void setup() {
rgb.setColor(0, 0, 0); rgb.setColor(0, 0, 0);
// Read current folder number out of eeprom // Read current folder number out of eeprom
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
if (enable_OLED) { if (enable_OLED) {
// GLCD // GLCD
@ -1269,8 +1294,8 @@ void loop() {
else if (mode == mode_FLASH16) { else if (mode == mode_FLASH16) {
flashromMenu16(); flashromMenu16();
} }
else if (mode == mode_NP) { else if (mode == mode_SFM) {
npMenu(); sfmMenu();
} }
else if (mode == mode_GB) { else if (mode == mode_GB) {
gbMenu(); gbMenu();
@ -1278,11 +1303,14 @@ void loop() {
else if (mode == mode_GBA) { else if (mode == mode_GBA) {
gbaMenu(); gbaMenu();
} }
else if (mode == mode_NPFlash) { else if (mode == mode_SFM_Flash) {
NPFlashMenu(); sfmFlashMenu();
} }
else if (mode == mode_NPGame) { else if (mode == mode_SFM_Game) {
NPGameOptions(); sfmGameOptions();
}
else if (mode == mode_GBM) {
gbmMenu();
} }
else { else {
display_Clear(); display_Clear();

View File

@ -824,14 +824,14 @@ void readFlash() {
sd.chdir("/"); sd.chdir("/");
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sd.mkdir("FLASH", true); sd.mkdir("FLASH", true);
sd.chdir("FLASH"); sd.chdir("FLASH");
sprintf(fileName, "FL%d", foldern); sprintf(fileName, "FL%d", foldern);
strcat(fileName, ".bin"); strcat(fileName, ".bin");
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
display_Clear(); display_Clear();
print_Msg(F("Saving as ")); print_Msg(F("Saving as "));
@ -1060,14 +1060,14 @@ void readFlash16() {
sd.chdir("/"); sd.chdir("/");
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sd.mkdir("FLASH", true); sd.mkdir("FLASH", true);
sd.chdir("FLASH"); sd.chdir("FLASH");
sprintf(fileName, "FL%d", foldern); sprintf(fileName, "FL%d", foldern);
strcat(fileName, ".bin"); strcat(fileName, ".bin");
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
display_Clear(); display_Clear();
print_Msg(F("Saving as ")); print_Msg(F("Saving as "));

View File

@ -128,7 +128,7 @@ void setup_GB() {
display_Clear(); display_Clear();
if (strcmp(checksumStr, "00") != 0) { if (strcmp(checksumStr, "00") != 0) {
println_Msg(F("GB Cart Info")); println_Msg(F("GB Cart Info"));
print_Msg(F("Rom Name: ")); print_Msg(F("Name: "));
println_Msg(romName); println_Msg(romName);
print_Msg(F("Rom Type: ")); print_Msg(F("Rom Type: "));
switch (romType) { switch (romType) {
@ -329,13 +329,13 @@ void getCartInfo_GB() {
// Get Checksum as string // Get Checksum as string
sprintf(checksumStr, "%02X%02X", readByte_GB(0x014E), readByte_GB(0x014F)); sprintf(checksumStr, "%02X%02X", readByte_GB(0x014E), readByte_GB(0x014F));
// Dump name into 8.3 compatible format // Get name
byte myByte = 0; byte myByte = 0;
byte myLength = 0; byte myLength = 0;
for (int addr = 0x0134; addr <= 0x13C; addr++) { for (int addr = 0x0134; addr <= 0x13C; addr++) {
myByte = readByte_GB(addr); myByte = readByte_GB(addr);
if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 8) { if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 16) {
romName[myLength] = char(myByte); romName[myLength] = char(myByte);
myLength++; myLength++;
} }
@ -345,25 +345,24 @@ void getCartInfo_GB() {
// Dump ROM // Dump ROM
void readROM_GB() { void readROM_GB() {
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
char fileName[26];
strcpy(fileName, romName); strcpy(fileName, romName);
strcat(fileName, ".GB"); strcat(fileName, ".GB");
// create a new folder for the rom file // create a new folder for the rom file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern); sprintf(folder, "GB/ROM/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
//clear the screen
display_Clear(); display_Clear();
println_Msg(F("Creating folder: ")); print_Msg(F("Saving to "));
println_Msg(folder); print_Msg(folder);
println_Msg(F("/..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -406,10 +405,6 @@ void readROM_GB() {
// Close the file: // Close the file:
myFile.close(); myFile.close();
// Signal end of process
print_Msg(F("Saved as "));
println_Msg(fileName);
} }
unsigned int calc_checksum_GB (char* fileName, char* folder) { unsigned int calc_checksum_GB (char* fileName, char* folder) {
@ -451,13 +446,12 @@ boolean compare_checksum_GB() {
println_Msg(F("Calculating Checksum")); println_Msg(F("Calculating Checksum"));
display_Update(); display_Update();
char fileName[26];
strcpy(fileName, romName); strcpy(fileName, romName);
strcat(fileName, ".GB"); strcat(fileName, ".GB");
// last used rom folder // last used rom folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern - 1); sprintf(folder, "GB/ROM/%s/%d", romName, foldern - 1);
char calcsumStr[5]; char calcsumStr[5];
sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName, folder)); sprintf(calcsumStr, "%04X", calc_checksum_GB(fileName, folder));
@ -483,19 +477,18 @@ void readSRAM_GB() {
if (sramEndAddress > 0) { if (sramEndAddress > 0) {
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
char fileName[26];
strcpy(fileName, romName); strcpy(fileName, romName);
strcat(fileName, ".sav"); strcat(fileName, ".sav");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "GB/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -540,12 +533,9 @@ void readSRAM_GB() {
myFile.close(); myFile.close();
// Signal end of process // Signal end of process
print_Msg(F("Saved to SAVE/")); print_Msg(F("Saved to "));
print_Msg(romName); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/"));
print_Msg(foldern - 1);
print_Msg(F("/"));
println_Msg(fileName);
display_Update(); display_Update();
} }
else { else {

View File

@ -453,8 +453,7 @@ void setup_GBA() {
getCartInfo_GBA(); getCartInfo_GBA();
display_Clear(); display_Clear();
println_Msg(F("GBA Cart Info")); print_Msg(F("Name: "));
print_Msg(F("Rom Name: "));
println_Msg(romName); println_Msg(romName);
print_Msg(F("Cart ID: ")); print_Msg(F("Cart ID: "));
println_Msg(cartID); println_Msg(cartID);
@ -733,12 +732,12 @@ void getCartInfo_GBA() {
print_Error(F("GBA.txt missing"), true); print_Error(F("GBA.txt missing"), true);
} }
// Dump name into 8.3 compatible format // Get name
byte myByte = 0; byte myByte = 0;
byte myLength = 0; byte myLength = 0;
for (int addr = 0xA0; addr <= 0xAB; addr++) { for (int addr = 0xA0; addr <= 0xAB; addr++) {
myByte = sdBuffer[addr]; myByte = sdBuffer[addr];
if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 8) { if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 16) {
romName[myLength] = char(myByte); romName[myLength] = char(myByte);
myLength++; myLength++;
} }
@ -775,25 +774,25 @@ void getCartInfo_GBA() {
// Dump ROM // Dump ROM
void readROM_GBA() { void readROM_GBA() {
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
char fileName[26];
strcpy(fileName, romName); strcpy(fileName, romName);
strcat(fileName, ".gba"); strcat(fileName, ".gba");
// create a new folder for the rom file // create a new folder for the rom file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern); sprintf(folder, "GBA/ROM/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
//clear the screen //clear the screen
display_Clear(); display_Clear();
println_Msg(F("Reading to: ")); print_Msg(F("Saving to "));
println_Msg(folder); print_Msg(folder);
println_Msg(F("/..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -821,10 +820,6 @@ void readROM_GBA() {
// Close the file: // Close the file:
myFile.close(); myFile.close();
// Signal end of process
print_Msg(F("Saved as "));
println_Msg(fileName);
} }
// Calculate the checksum of the dumped rom // Calculate the checksum of the dumped rom
@ -832,13 +827,12 @@ boolean compare_checksum_GBA () {
println_Msg(F("Calculating Checksum")); println_Msg(F("Calculating Checksum"));
display_Update(); display_Update();
char fileName[26];
strcpy(fileName, romName); strcpy(fileName, romName);
strcat(fileName, ".gba"); strcat(fileName, ".gba");
// last used rom folder // last used rom folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern - 1); sprintf(folder, "GBA/ROM/%s/%d", romName, foldern - 1);
sd.chdir(folder); sd.chdir(folder);
// If file exists // If file exists
@ -901,24 +895,19 @@ void readFRAM_GBA (unsigned long framSize) {
strcat(fileName, ".srm"); strcat(fileName, ".srm");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "GBA/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// Signal end of process // Save location
print_Msg(F("Reading to SAVE/")); print_Msg(F("Saving to "));
print_Msg(romName); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/..."));
print_Msg(foldern);
print_Msg(F("/"));
print_Msg(fileName);
print_Msg(F("..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -1315,25 +1304,21 @@ void readFLASH_GBA (boolean browseFile, unsigned long flashSize, uint32_t pos) {
strcat(fileName, ".fla"); strcat(fileName, ".fla");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "GBA/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// Signal end of process // Save location
print_Msg(F("Reading to SAVE/")); print_Msg(F("Saving to "));
print_Msg(romName); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/..."));
print_Msg(foldern);
print_Msg(F("/"));
print_Msg(fileName);
print_Msg(F("..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
} }
//open file on sd card //open file on sd card
@ -1548,25 +1533,21 @@ void readEeprom_GBA(word eepSize) {
strcat(fileName, ".eep"); strcat(fileName, ".eep");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "GBA/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// Signal end of process // Save location
print_Msg(F("Reading to SAVE/")); print_Msg(F("Saving to "));
print_Msg(romName); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/..."));
print_Msg(foldern);
print_Msg(F("/"));
print_Msg(fileName);
print_Msg(F("..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {

View File

@ -132,10 +132,6 @@ void n64CartMenu() {
{ {
case 0: case 0:
sd.chdir("/"); sd.chdir("/");
display_Clear();
println_Msg(F("Reading Rom..."));
display_Update();
readRom_N64(); readRom_N64();
break; break;
@ -805,17 +801,19 @@ void readBlock(word myAddress) {
void readMPK() { void readMPK() {
// Change to root // Change to root
sd.chdir("/"); sd.chdir("/");
// Make MPK directory
sd.mkdir("N64/MPK", true);
// Change to MPK directory // Change to MPK directory
sd.chdir("MPK"); sd.chdir("N64/MPK");
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(fileName, "%d", foldern); sprintf(fileName, "%d", foldern);
strcat(fileName, ".mpk"); strcat(fileName, ".mpk");
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -836,7 +834,7 @@ void readMPK() {
} }
// Close the file: // Close the file:
myFile.close(); myFile.close();
print_Msg(F("Saved as /MPK/")); print_Msg(F("Saved as N64/MPK/"));
println_Msg(fileName); println_Msg(fileName);
display_Update(); display_Update();
} }
@ -1202,10 +1200,10 @@ void idCart() {
// Get rom version // Get rom version
romVersion = sdBuffer[0x3F]; romVersion = sdBuffer[0x3F];
// Get name in 8.3 compatible format // Get name
byte myLength = 0; byte myLength = 0;
for (unsigned int i = 0; i < 20; i++) { for (unsigned int i = 0; i < 20; i++) {
if (((char(sdBuffer[0x20 + i]) >= 48 && char(sdBuffer[0x20 + i]) <= 57) || (char(sdBuffer[0x20 + i]) >= 65 && char(sdBuffer[0x20 + i]) <= 122)) && myLength < 8) { if (((char(sdBuffer[0x20 + i]) >= 48 && char(sdBuffer[0x20 + i]) <= 57) || (char(sdBuffer[0x20 + i]) >= 65 && char(sdBuffer[0x20 + i]) <= 122)) && myLength < 16) {
romName[myLength] = char(sdBuffer[0x20 + i]); romName[myLength] = char(sdBuffer[0x20 + i]);
myLength++; myLength++;
} }
@ -1341,14 +1339,14 @@ void readEeprom() {
strcat(fileName, ".eep"); strcat(fileName, ".eep");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "N64/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
// Open file on sd card // Open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -1386,12 +1384,11 @@ void readEeprom() {
} }
// Close the file: // Close the file:
myFile.close(); myFile.close();
print_Msg(F("Saved to SAVE/")); //clear the screen
print_Msg(romName); display_Clear();
print_Msg(F("/")); print_Msg(F("Saved to "));
print_Msg(foldern - 1); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/"));
println_Msg(fileName);
display_Update(); display_Update();
} }
else { else {
@ -1531,14 +1528,14 @@ void readSram(unsigned long sramSize, byte flashramType) {
} }
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "N64/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
// Open file on sd card // Open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -1563,12 +1560,9 @@ void readSram(unsigned long sramSize, byte flashramType) {
} }
// Close the file: // Close the file:
myFile.close(); myFile.close();
print_Msg(F("Saved to SAVE/")); print_Msg(F("Saved to "));
print_Msg(romName); print_Msg(folder);
print_Msg(F("/")); println_Msg(F("/"));
print_Msg(foldern - 1);
print_Msg(F("/"));
println_Msg(fileName);
display_Update(); display_Update();
} }
@ -1932,14 +1926,20 @@ void readRom_N64() {
strcat(fileName, ".Z64"); strcat(fileName, ".Z64");
// create a new folder // create a new folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern); sprintf(folder, "N64/ROM/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
display_Clear();
print_Msg(F("Saving to "));
print_Msg(folder);
println_Msg(F("/..."));
display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
readn64rom: readn64rom:
// Open file on sd card // Open file on sd card
@ -1969,13 +1969,6 @@ readn64rom:
} }
// Close the file: // Close the file:
myFile.close(); myFile.close();
print_Msg(F("Saved to ROM/"));
print_Msg(romName);
print_Msg(F("/"));
print_Msg(foldern - 1);
print_Msg(F("/"));
println_Msg(fileName);
display_Update();
calcn64crc: calcn64crc:
// Calculate Checksum and convert to string // Calculate Checksum and convert to string

File diff suppressed because it is too large Load Diff

View File

@ -375,7 +375,7 @@ void getCartInfo_SNES() {
} }
display_Clear(); display_Clear();
print_Msg(F("Rom Name: ")); print_Msg(F("Name: "));
println_Msg(romName); println_Msg(romName);
print_Msg(F("Type: ")); print_Msg(F("Type: "));
@ -560,12 +560,12 @@ boolean checkcart_SNES() {
//Check SD card for alt config //Check SD card for alt config
checkAltConf(); checkAltConf();
// Dump name into 8.3 compatible format // Get name
byte myByte = 0; byte myByte = 0;
byte myLength = 0; byte myLength = 0;
for (unsigned int i = 65472; i < 65492; i++) { for (unsigned int i = 65472; i < 65492; i++) {
myByte = readBank_SNES(0, i); myByte = readBank_SNES(0, i);
if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 8) { if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 16) {
romName[myLength] = char(myByte); romName[myLength] = char(myByte);
myLength++; myLength++;
} }
@ -777,8 +777,8 @@ boolean compare_checksum() {
strcat(fileName, ".sfc"); strcat(fileName, ".sfc");
// last used rom folder // last used rom folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern - 1); sprintf(folder, "SNES/ROM/%s/%d", romName, foldern - 1);
char calcsumStr[5]; char calcsumStr[5];
sprintf(calcsumStr, "%04X", calc_checksum(fileName, folder)); sprintf(calcsumStr, "%04X", calc_checksum(fileName, folder));
@ -810,20 +810,21 @@ void readROM_SNES() {
strcat(fileName, ".sfc"); strcat(fileName, ".sfc");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "ROM/%s/%d", romName, foldern); sprintf(folder, "SNES/ROM/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
//clear the screen //clear the screen
display_Clear(); display_Clear();
println_Msg(F("Creating folder: ")); print_Msg(F("Saving to "));
println_Msg(folder); print_Msg(folder);
println_Msg(F("/..."));
display_Update(); display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -832,9 +833,6 @@ void readROM_SNES() {
// Check if LoROM or HiROM... // Check if LoROM or HiROM...
if (romType == LO) { if (romType == LO) {
println_Msg(F("Dumping LoRom..."));
display_Update();
// Read up to 96 banks starting at bank 0×00. // Read up to 96 banks starting at bank 0×00.
for (int currBank = 0; currBank < numBanks; currBank++) { for (int currBank = 0; currBank < numBanks; currBank++) {
// Dump the bytes to SD 512B at a time // Dump the bytes to SD 512B at a time
@ -848,9 +846,6 @@ void readROM_SNES() {
} }
// Dump High-type ROM // Dump High-type ROM
else if (((romType == HI) || (romType == SA) || (romType == EX)) && (romChips != 69)) { else if (((romType == HI) || (romType == SA) || (romType == EX)) && (romChips != 69)) {
println_Msg(F("Dumping HiRom..."));
display_Update();
for (int currBank = 192; currBank < (numBanks + 192); currBank++) { for (int currBank = 192; currBank < (numBanks + 192); currBank++) {
for (long currByte = 0; currByte < 65536; currByte += 512) { for (long currByte = 0; currByte < 65536; currByte += 512) {
for (int c = 0; c < 512; c++) { for (int c = 0; c < 512; c++) {
@ -862,9 +857,6 @@ void readROM_SNES() {
} }
// Dump SDD1 High-type ROM // Dump SDD1 High-type ROM
else if ((romType == HI) && (romChips == 69)) { else if ((romType == HI) && (romChips == 69)) {
println_Msg(F("Dumping SDD1 HiRom..."));
display_Update();
controlIn_SNES(); controlIn_SNES();
byte initialSOMap = readBank_SNES(0, 18439); byte initialSOMap = readBank_SNES(0, 18439);
@ -898,10 +890,6 @@ void readROM_SNES() {
} }
// Close the file: // Close the file:
myFile.close(); myFile.close();
// Signal end of process
print_Msg(F("Saved as "));
println_Msg(fileName);
} }
/****************************************** /******************************************
@ -1044,24 +1032,14 @@ void readSRAM () {
strcat(fileName, ".srm"); strcat(fileName, ".srm");
// create a new folder for the save file // create a new folder for the save file
EEPROM_readAnything(0, foldern); EEPROM_readAnything(10, foldern);
sprintf(folder, "SAVE/%s/%d", romName, foldern); sprintf(folder, "SNES/SAVE/%s/%d", romName, foldern);
sd.mkdir(folder, true); sd.mkdir(folder, true);
sd.chdir(folder); sd.chdir(folder);
// Signal end of process
print_Msg(F("Reading to SAVE/"));
print_Msg(romName);
print_Msg(F("/"));
print_Msg(foldern);
print_Msg(F("/"));
print_Msg(fileName);
print_Msg(F("..."));
display_Update();
// write new folder number back to eeprom // write new folder number back to eeprom
foldern = foldern + 1; foldern = foldern + 1;
EEPROM_writeAnything(0, foldern); EEPROM_writeAnything(10, foldern);
//open file on sd card //open file on sd card
if (!myFile.open(fileName, O_RDWR | O_CREAT)) { if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
@ -1106,7 +1084,10 @@ void readSRAM () {
myFile.close(); myFile.close();
// Signal end of process // Signal end of process
println_Msg(F("Done")); display_Clear();
print_Msg(F("Saved to "));
print_Msg(folder);
println_Msg(F("/..."));
display_Update(); display_Update();
} }