mirror of
https://github.com/sanni/cartreader.git
synced 2024-12-25 12:31:54 +01:00
V30D: Fixed dumping error with all japanese rom names and no game code either
Example cartridge: Super Family Tennis
This commit is contained in:
parent
012ce3626c
commit
8613f79382
@ -2,8 +2,8 @@
|
||||
Cartridge Reader for Arduino Mega2560
|
||||
|
||||
Author: sanni
|
||||
Date: 2017-11-19
|
||||
Version: V30C
|
||||
Date: 2017-11-21
|
||||
Version: V30D
|
||||
|
||||
SD lib: https://github.com/greiman/SdFat
|
||||
LCD lib: https://github.com/adafruit/Adafruit_SSD1306
|
||||
@ -35,20 +35,20 @@
|
||||
infinest - help with GB Memory cart
|
||||
|
||||
**********************************************************************************/
|
||||
char ver[5] = "V30C";
|
||||
char ver[5] = "V30D";
|
||||
|
||||
/******************************************
|
||||
Define Starting Point
|
||||
******************************************/
|
||||
// mainMenu, n64Menu, snsMenu, npMenu, gbxMenu, segaMenu, flashMenu
|
||||
// mainMenu, n64Menu, snsMenu, gbxMenu, segaMenu, flashMenu
|
||||
#define startMenu mainMenu
|
||||
|
||||
/******************************************
|
||||
Define Output
|
||||
******************************************/
|
||||
// enable_OLED to 0 and enable_Serial to 1
|
||||
#define enable_OLED 1
|
||||
#define enable_Serial 0
|
||||
#define enable_OLED 0
|
||||
#define enable_Serial 1
|
||||
|
||||
/******************************************
|
||||
Define Input
|
||||
@ -508,22 +508,28 @@ void print_Error(const __FlashStringHelper *errorMessage, boolean forceReset) {
|
||||
display_Update();
|
||||
|
||||
if (forceReset) {
|
||||
println_Msg(F(""));
|
||||
println_Msg(F("Press Button..."));
|
||||
display_Update();
|
||||
wait();
|
||||
if (ignoreError == 0) {
|
||||
asm volatile (" jmp 0");
|
||||
if (enable_Serial) {
|
||||
println_Msg(F("Fatal Error, please reset"));
|
||||
while (1);
|
||||
}
|
||||
else {
|
||||
ignoreError = 0;
|
||||
display_Clear();
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(" Error Overwrite"));
|
||||
println_Msg(F("Press Button..."));
|
||||
display_Update();
|
||||
delay(2000);
|
||||
wait();
|
||||
if (ignoreError == 0) {
|
||||
asm volatile (" jmp 0");
|
||||
}
|
||||
else {
|
||||
ignoreError = 0;
|
||||
display_Clear();
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(""));
|
||||
println_Msg(F(" Error Overwrite"));
|
||||
display_Update();
|
||||
delay(2000);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -635,11 +641,41 @@ void wait_serial() {
|
||||
while (Serial.available() == 0) {
|
||||
}
|
||||
incomingByte = Serial.read() - 48;
|
||||
|
||||
if (incomingByte == 53) {
|
||||
// Open file on sd card
|
||||
sd.chdir(folder);
|
||||
if (myFile.open(fileName, O_READ)) {
|
||||
// Get rom size from file
|
||||
fileSize = myFile.fileSize();
|
||||
|
||||
// Send file
|
||||
for (unsigned long currByte = 0; currByte < fileSize; currByte += 512) {
|
||||
myFile.read(sdBuffer, 512);
|
||||
// Blink led
|
||||
if (currByte % 2048 == 0)
|
||||
PORTB ^= (1 << 4);
|
||||
|
||||
for (int c = 0; c < 512; c++) {
|
||||
Serial.write(sdBuffer[c]);
|
||||
}
|
||||
}
|
||||
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
}
|
||||
else {
|
||||
print_Error(F("Can't open file"), true);
|
||||
}
|
||||
}
|
||||
Serial.println("");
|
||||
}
|
||||
|
||||
byte questionBox_Serial(const char* question, char answers[7][20], int num_answers, int default_choice) {
|
||||
// Print menu to serial monitor
|
||||
if (enable_Serial && filebrowse) {
|
||||
Serial.print("Filebrowser: ");
|
||||
}
|
||||
Serial.print(question);
|
||||
Serial.println(F(" Menu"));
|
||||
for (byte i = 0; i < num_answers; i++) {
|
||||
@ -657,6 +693,44 @@ byte questionBox_Serial(const char* question, char answers[7][20], int num_answe
|
||||
// Read the incoming byte:
|
||||
incomingByte = Serial.read() - 48;
|
||||
|
||||
// Import file (i)
|
||||
if (incomingByte == 57) {
|
||||
if (filebrowse == 1) {
|
||||
// Make sure we have an import directory
|
||||
sd.mkdir("IMPORT", true);
|
||||
|
||||
// Create and open file on sd card
|
||||
EEPROM_readAnything(10, foldern);
|
||||
sprintf(fileName, "IMPORT/%d.bin", foldern);
|
||||
if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
|
||||
print_Error(F("Can't create file on SD"), true);
|
||||
}
|
||||
|
||||
// Read file from serial
|
||||
fileSize = 0;
|
||||
while (Serial.available() > 0) {
|
||||
myFile.write(Serial.read());
|
||||
fileSize++;
|
||||
// Blink led
|
||||
PORTB ^= (1 << 4);
|
||||
}
|
||||
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
|
||||
// Write new folder number back to eeprom
|
||||
foldern = foldern + 1;
|
||||
EEPROM_writeAnything(10, foldern);
|
||||
|
||||
print_Msg("Imported ");
|
||||
print_Msg(fileSize);
|
||||
print_Msg(" bytes to file ");
|
||||
println_Msg(fileName);
|
||||
return 7;
|
||||
}
|
||||
}
|
||||
|
||||
// Page up (u)
|
||||
if (incomingByte == 69) {
|
||||
if (filebrowse == 1) {
|
||||
if (currPage > 1) {
|
||||
@ -667,8 +741,9 @@ byte questionBox_Serial(const char* question, char answers[7][20], int num_answe
|
||||
root = 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Page down (d)
|
||||
else if (incomingByte == 52) {
|
||||
if ((numPages > currPage) && (filebrowse == 1)) {
|
||||
lastPage = currPage;
|
||||
@ -1156,6 +1231,10 @@ page:
|
||||
case 6:
|
||||
strcpy(fileName, fileNames[6 + ((currPage - 1) * 7)]);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
// File import
|
||||
break;
|
||||
}
|
||||
|
||||
// Add directory to our filepath if we just entered a new directory
|
||||
|
@ -649,7 +649,21 @@ boolean checkcart_SNES() {
|
||||
romName[3] = 'C';
|
||||
romName[4] = '-';
|
||||
for (unsigned int i = 0; i < 4; i++) {
|
||||
romName[i + 5] = readBank_SNES(0, 0xFFB2 + i);
|
||||
myByte = readBank_SNES(0, 0xFFB2 + i);
|
||||
if (((char(myByte) >= 48 && char(myByte) <= 57) || (char(myByte) >= 65 && char(myByte) <= 122)) && myLength < 4) {
|
||||
romName[myLength + 5] = char(myByte);
|
||||
myLength++;
|
||||
}
|
||||
}
|
||||
if (myLength == 0) {
|
||||
// Rom code unknown
|
||||
romName[0] = 'U';
|
||||
romName[1] = 'N';
|
||||
romName[2] = 'K';
|
||||
romName[3] = 'N';
|
||||
romName[4] = 'O';
|
||||
romName[5] = 'W';
|
||||
romName[6] = 'N';
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user