mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-27 15:04:15 +01:00
Merge pull request #599 from vpelletier/trim_globals
Free more global ram space
This commit is contained in:
commit
fc1935a3d4
@ -34,7 +34,7 @@
|
|||||||
// /C000(PH5) - CHIP 2 - SNES /WR
|
// /C000(PH5) - CHIP 2 - SNES /WR
|
||||||
// /E000(PH6) - CHIP 3 - SNES /RD
|
// /E000(PH6) - CHIP 3 - SNES /RD
|
||||||
|
|
||||||
byte COL[] = { 8, 12, 16, 20, 24, 32 };
|
const byte COL[] PROGMEM = { 8, 12, 16, 20, 24, 32 };
|
||||||
byte collo = 0; // Lowest Entry
|
byte collo = 0; // Lowest Entry
|
||||||
byte colhi = 5; // Highest Entry
|
byte colhi = 5; // Highest Entry
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ void setROMSize_COL() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(COL[i]);
|
println_Msg(pgm_read_byte(&(COL[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -259,7 +259,7 @@ void setROMSize_COL() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(COL[i]);
|
println_Msg(pgm_read_byte(&(COL[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -279,7 +279,7 @@ void setROMSize_COL() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(COL[i]);
|
println_Msg(pgm_read_byte(&(COL[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -298,7 +298,7 @@ void setROMSize_COL() {
|
|||||||
display.setCursor(0, 56); // Display selection at bottom
|
display.setCursor(0, 56); // Display selection at bottom
|
||||||
}
|
}
|
||||||
print_Msg(F("ROM SIZE "));
|
print_Msg(F("ROM SIZE "));
|
||||||
print_Msg(COL[newcolsize]);
|
print_Msg(pgm_read_byte(&(COL[newcolsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -312,7 +312,7 @@ setrom:
|
|||||||
Serial.print(F("Select ROM Size: "));
|
Serial.print(F("Select ROM Size: "));
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
Serial.print(COL[i + collo]);
|
Serial.print(pgm_read_byte(&(COL[i + collo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.print(F("Enter ROM Size: "));
|
Serial.print(F("Enter ROM Size: "));
|
||||||
@ -327,7 +327,7 @@ setrom:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print(F("ROM Size = "));
|
Serial.print(F("ROM Size = "));
|
||||||
Serial.print(COL[newcolsize]);
|
Serial.print(pgm_read_byte(&(COL[newcolsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(8, newcolsize);
|
EEPROM_writeAnything(8, newcolsize);
|
||||||
@ -347,7 +347,7 @@ void checkStatus_COL() {
|
|||||||
println_Msg(F("CURRENT SETTINGS"));
|
println_Msg(F("CURRENT SETTINGS"));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
print_Msg(F("ROM SIZE: "));
|
print_Msg(F("ROM SIZE: "));
|
||||||
print_Msg(COL[colsize]);
|
print_Msg(pgm_read_byte(&(COL[colsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
// Prints string out of the common strings array either with or without newline
|
// Prints string out of the common strings array either with or without newline
|
||||||
@ -356,7 +356,7 @@ void checkStatus_COL() {
|
|||||||
wait();
|
wait();
|
||||||
#else
|
#else
|
||||||
Serial.print(F("CURRENT ROM SIZE: "));
|
Serial.print(F("CURRENT ROM SIZE: "));
|
||||||
Serial.print(COL[colsize]);
|
Serial.print(pgm_read_byte(&(COL[colsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
#endif
|
#endif
|
||||||
|
@ -490,7 +490,7 @@ byte sdBuffer[512];
|
|||||||
|
|
||||||
// soft reset Arduino: jumps to 0
|
// soft reset Arduino: jumps to 0
|
||||||
// using the watchdog timer would be more elegant but some Mega2560 bootloaders are buggy with it
|
// using the watchdog timer would be more elegant but some Mega2560 bootloaders are buggy with it
|
||||||
void (*resetArduino)(void) = 0;
|
void (*resetArduino)(void) __attribute__ ((noreturn)) = 0;
|
||||||
|
|
||||||
// Progressbar
|
// Progressbar
|
||||||
void draw_progressbar(uint32_t processedsize, uint32_t totalsize);
|
void draw_progressbar(uint32_t processedsize, uint32_t totalsize);
|
||||||
@ -2005,6 +2005,22 @@ void print_Error(byte errorMessage, boolean forceReset) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_FatalError(const __FlashStringHelper* errorMessage) __attribute__ ((noreturn));
|
||||||
|
void print_FatalError(const __FlashStringHelper* errorMessage) {
|
||||||
|
print_Error(errorMessage, true);
|
||||||
|
// Redundant as print_Error already calls it, but makes gcc understand that
|
||||||
|
// this in fact does not return.
|
||||||
|
resetArduino();
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_FatalError(byte errorMessage) __attribute__ ((noreturn));
|
||||||
|
void print_FatalError(byte errorMessage){
|
||||||
|
print_Error(errorMessage, true);
|
||||||
|
// Redundant as print_Error already calls it, but makes gcc understand that
|
||||||
|
// this in fact does not return.
|
||||||
|
resetArduino();
|
||||||
|
}
|
||||||
|
|
||||||
void wait() {
|
void wait() {
|
||||||
// Switch status LED off
|
// Switch status LED off
|
||||||
statusLED(false);
|
statusLED(false);
|
||||||
|
@ -3,12 +3,6 @@
|
|||||||
//******************************************
|
//******************************************
|
||||||
#ifdef enable_GBX
|
#ifdef enable_GBX
|
||||||
|
|
||||||
/******************************************
|
|
||||||
Variables
|
|
||||||
*****************************************/
|
|
||||||
char calcChecksumStr[5];
|
|
||||||
boolean readType;
|
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Menu
|
Menu
|
||||||
*****************************************/
|
*****************************************/
|
||||||
@ -569,6 +563,16 @@ void writeByte_GBA(unsigned long myAddress, byte myData) {
|
|||||||
/******************************************
|
/******************************************
|
||||||
GBA ROM Functions
|
GBA ROM Functions
|
||||||
*****************************************/
|
*****************************************/
|
||||||
|
// Compute the checksum of rom header
|
||||||
|
// "header" must contain at least the rom's first 188 bytes
|
||||||
|
byte checksumHeader_GBA(const byte *header) {
|
||||||
|
byte result = 0x00;
|
||||||
|
for (byte n = 0xA0; n < 0xBD; n++) {
|
||||||
|
result -= header[n];
|
||||||
|
}
|
||||||
|
return result - 0x19;
|
||||||
|
}
|
||||||
|
|
||||||
// Read info out of rom header
|
// Read info out of rom header
|
||||||
void getCartInfo_GBA() {
|
void getCartInfo_GBA() {
|
||||||
char saveTypeStr[14];
|
char saveTypeStr[14];
|
||||||
@ -760,22 +764,21 @@ void getCartInfo_GBA() {
|
|||||||
// Get ROM version
|
// Get ROM version
|
||||||
romVersion = sdBuffer[0xBC];
|
romVersion = sdBuffer[0xBC];
|
||||||
|
|
||||||
// Get Checksum as string
|
// Calculate Checksum
|
||||||
|
byte calcChecksum = checksumHeader_GBA(sdBuffer);
|
||||||
|
|
||||||
|
// Convert checksum from header into string
|
||||||
|
// (used in compare_checksum_GBA... it should just exchange an integer
|
||||||
|
// instead)
|
||||||
sprintf(checksumStr, "%02X", sdBuffer[0xBD]);
|
sprintf(checksumStr, "%02X", sdBuffer[0xBD]);
|
||||||
|
|
||||||
// Calculate Checksum
|
|
||||||
int calcChecksum = 0x00;
|
|
||||||
for (int n = 0xA0; n < 0xBD; n++) {
|
|
||||||
calcChecksum -= sdBuffer[n];
|
|
||||||
}
|
|
||||||
calcChecksum = (calcChecksum - 0x19) & 0xFF;
|
|
||||||
// Turn into string
|
|
||||||
sprintf(calcChecksumStr, "%02X", calcChecksum);
|
|
||||||
|
|
||||||
// Compare checksum
|
// Compare checksum
|
||||||
if (strcmp(calcChecksumStr, checksumStr) != 0) {
|
if (sdBuffer[0xBD] != calcChecksum) {
|
||||||
|
char calcChecksumStr[3];
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("Result: "));
|
print_Msg(F("Result: "));
|
||||||
|
// Turn into string
|
||||||
|
sprintf(calcChecksumStr, "%02X", calcChecksum);
|
||||||
println_Msg(calcChecksumStr);
|
println_Msg(calcChecksumStr);
|
||||||
print_Error(F("Checksum Error"), false);
|
print_Error(F("Checksum Error"), false);
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
@ -912,15 +915,9 @@ boolean compare_checksum_GBA() {
|
|||||||
myFile.read(sdBuffer, 512);
|
myFile.read(sdBuffer, 512);
|
||||||
myFile.close();
|
myFile.close();
|
||||||
|
|
||||||
// Calculate Checksum
|
// Calculate Checksum and turn into string
|
||||||
int calcChecksum = 0x00;
|
char calcChecksumStr[3];
|
||||||
for (int n = 0xA0; n < 0xBD; n++) {
|
sprintf(calcChecksumStr, "%02X", checksumHeader_GBA(sdBuffer));
|
||||||
calcChecksum -= sdBuffer[n];
|
|
||||||
}
|
|
||||||
calcChecksum = (calcChecksum - 0x19) & 0xFF;
|
|
||||||
|
|
||||||
// Turn into string
|
|
||||||
sprintf(calcChecksumStr, "%02X", calcChecksum);
|
|
||||||
print_Msg(calcChecksumStr);
|
print_Msg(calcChecksumStr);
|
||||||
|
|
||||||
if (strcmp(calcChecksumStr, checksumStr) == 0) {
|
if (strcmp(calcChecksumStr, checksumStr) == 0) {
|
||||||
|
@ -75,7 +75,7 @@ boolean intvmapfound = false;
|
|||||||
byte intvmapselect;
|
byte intvmapselect;
|
||||||
int intvindex;
|
int intvindex;
|
||||||
|
|
||||||
byte INTV[] = { 8, 16, 24, 32, 48 };
|
const byte INTV[] PROGMEM = { 8, 16, 24, 32, 48 };
|
||||||
byte intvlo = 0; // Lowest Entry
|
byte intvlo = 0; // Lowest Entry
|
||||||
byte intvhi = 4; // Highest Entry
|
byte intvhi = 4; // Highest Entry
|
||||||
|
|
||||||
@ -645,7 +645,7 @@ void setROMSize_INTV() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(INTV[i]);
|
println_Msg(pgm_read_byte(&(INTV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -667,7 +667,7 @@ void setROMSize_INTV() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(INTV[i]);
|
println_Msg(pgm_read_byte(&(INTV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -686,7 +686,7 @@ void setROMSize_INTV() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(INTV[i]);
|
println_Msg(pgm_read_byte(&(INTV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -705,7 +705,7 @@ void setROMSize_INTV() {
|
|||||||
display.setCursor(0, 56); // Display selection at bottom
|
display.setCursor(0, 56); // Display selection at bottom
|
||||||
}
|
}
|
||||||
print_Msg(F("ROM SIZE "));
|
print_Msg(F("ROM SIZE "));
|
||||||
print_Msg(INTV[newintvsize]);
|
print_Msg(pgm_read_byte(&(INTV[newintvsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -719,7 +719,7 @@ setrom:
|
|||||||
Serial.print(F("Select ROM Size: "));
|
Serial.print(F("Select ROM Size: "));
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
Serial.print(INTV[i + intvlo]);
|
Serial.print(pgm_read_byte(&(INTV[i + intvlo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.print(F("Enter ROM Size: "));
|
Serial.print(F("Enter ROM Size: "));
|
||||||
@ -734,7 +734,7 @@ setrom:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print(F("ROM Size = "));
|
Serial.print(F("ROM Size = "));
|
||||||
Serial.print(INTV[newintvsize]);
|
Serial.print(pgm_read_byte(&(INTV[newintvsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(8, newintvsize);
|
EEPROM_writeAnything(8, newintvsize);
|
||||||
@ -761,7 +761,7 @@ void checkStatus_INTV() {
|
|||||||
print_Msg(F("MAPPER: "));
|
print_Msg(F("MAPPER: "));
|
||||||
println_Msg(intvmapper);
|
println_Msg(intvmapper);
|
||||||
print_Msg(F("ROM SIZE: "));
|
print_Msg(F("ROM SIZE: "));
|
||||||
print_Msg(INTV[intvsize]);
|
print_Msg(pgm_read_byte(&(INTV[intvsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
wait();
|
wait();
|
||||||
@ -769,7 +769,7 @@ void checkStatus_INTV() {
|
|||||||
Serial.print(F("CURRENT MAPPER: "));
|
Serial.print(F("CURRENT MAPPER: "));
|
||||||
Serial.println(intvmapper);
|
Serial.println(intvmapper);
|
||||||
Serial.print(F("CURRENT ROM SIZE: "));
|
Serial.print(F("CURRENT ROM SIZE: "));
|
||||||
Serial.print(INTV[intvsize]);
|
Serial.print(pgm_read_byte(&(INTV[intvsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
#endif
|
#endif
|
||||||
|
@ -124,6 +124,9 @@ static const byte PROGMEM mapsize[] = {
|
|||||||
255, 7, 7, 8, 8, 0, 0, // 110-in-1 multicart (same as 225) [UNLICENSED]
|
255, 7, 7, 8, 8, 0, 0, // 110-in-1 multicart (same as 225) [UNLICENSED]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const char _file_name_no_number_fmt[] PROGMEM = "%s.%s";
|
||||||
|
const char _file_name_with_number_fmt[] PROGMEM = "%s.%02d.%s";
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Defines
|
Defines
|
||||||
*****************************************/
|
*****************************************/
|
||||||
@ -165,15 +168,15 @@ static const byte PROGMEM mapsize[] = {
|
|||||||
byte mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
byte mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
||||||
byte mapselect;
|
byte mapselect;
|
||||||
|
|
||||||
int PRG[] = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 };
|
const int PRG[] PROGMEM = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 };
|
||||||
byte prglo = 0; // Lowest Entry
|
byte prglo = 0; // Lowest Entry
|
||||||
byte prghi = 8; // Highest Entry
|
byte prghi = 8; // Highest Entry
|
||||||
|
|
||||||
int CHR[] = { 0, 8, 16, 32, 64, 128, 256, 512, 1024 };
|
const int CHR[] PROGMEM = { 0, 8, 16, 32, 64, 128, 256, 512, 1024 };
|
||||||
byte chrlo = 0; // Lowest Entry
|
byte chrlo = 0; // Lowest Entry
|
||||||
byte chrhi = 8; // Highest Entry
|
byte chrhi = 8; // Highest Entry
|
||||||
|
|
||||||
byte RAM[] = { 0, 8, 16, 32 };
|
const byte RAM[] PROGMEM = { 0, 8, 16, 32 };
|
||||||
byte ramlo = 0; // Lowest Entry
|
byte ramlo = 0; // Lowest Entry
|
||||||
byte ramhi = 3; // Highest Entry
|
byte ramhi = 3; // Highest Entry
|
||||||
|
|
||||||
@ -192,19 +195,6 @@ byte bytecheck;
|
|||||||
byte firstbyte;
|
byte firstbyte;
|
||||||
boolean flashfound = false; // NESmaker 39SF040 Flash Cart
|
boolean flashfound = false; // NESmaker 39SF040 Flash Cart
|
||||||
|
|
||||||
// Files
|
|
||||||
char fileCount[3];
|
|
||||||
|
|
||||||
#ifndef nointro
|
|
||||||
FsFile nesFile;
|
|
||||||
uint32_t prg_crc32;
|
|
||||||
uint32_t chr_crc32;
|
|
||||||
char filePRG[] = "PRG.bin";
|
|
||||||
char fileCHR[] = "CHR.bin";
|
|
||||||
char fileNES[] = "CART.nes";
|
|
||||||
char fileBIN[] = "CART.bin";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Cartridge Config
|
// Cartridge Config
|
||||||
byte mapper;
|
byte mapper;
|
||||||
byte prgsize;
|
byte prgsize;
|
||||||
@ -1078,79 +1068,39 @@ void CreateROMFolderInSD() {
|
|||||||
sd.chdir(folder);
|
sd.chdir(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatePRGFileInSD() {
|
FsFile createNewFile(const char *prefix, const char *extension) {
|
||||||
strcpy(fileName, "PRG");
|
char filename[FILENAME_LENGTH];
|
||||||
strcat(fileName, ".bin");
|
snprintf_P(filename, sizeof(filename), _file_name_no_number_fmt, prefix, extension);
|
||||||
for (byte i = 0; i < 100; i++) {
|
for (byte i = 0; i < 100; i++) {
|
||||||
if (!sd.exists(fileName)) {
|
if (!sd.exists(filename)) {
|
||||||
myFile = sd.open(fileName, O_RDWR | O_CREAT);
|
return sd.open(fileName, O_RDWR | O_CREAT);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
sprintf(fileCount, "%02d", i);
|
snprintf_P(filename, sizeof(filename), _file_name_with_number_fmt, prefix, i, extension);
|
||||||
strcpy(fileName, "PRG.");
|
|
||||||
strcat(fileName, fileCount);
|
|
||||||
strcat(fileName, ".bin");
|
|
||||||
}
|
}
|
||||||
if (!myFile) {
|
// Could not find an available name, recompose the original name and error out.
|
||||||
LED_RED_ON;
|
snprintf_P(filename, sizeof(filename), _file_name_no_number_fmt, prefix, extension);
|
||||||
|
|
||||||
display_Clear();
|
LED_RED_ON;
|
||||||
println_Msg(F("PRG FILE FAILED!"));
|
|
||||||
display_Update();
|
|
||||||
print_Error(sd_error_STR, true);
|
|
||||||
|
|
||||||
LED_RED_OFF;
|
display_Clear();
|
||||||
}
|
print_Msg(filename);
|
||||||
|
println_Msg(F(": no available name"));
|
||||||
|
display_Update();
|
||||||
|
print_FatalError(sd_error_STR);
|
||||||
|
|
||||||
|
LED_RED_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CreatePRGFileInSD() {
|
||||||
|
myFile = createNewFile("PRG", "bin");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateCHRFileInSD() {
|
void CreateCHRFileInSD() {
|
||||||
strcpy(fileName, "CHR");
|
myFile = createNewFile("CHR", "bin");
|
||||||
strcat(fileName, ".bin");
|
|
||||||
for (byte i = 0; i < 100; i++) {
|
|
||||||
if (!sd.exists(fileName)) {
|
|
||||||
myFile = sd.open(fileName, O_RDWR | O_CREAT);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sprintf(fileCount, "%02d", i);
|
|
||||||
strcpy(fileName, "CHR.");
|
|
||||||
strcat(fileName, fileCount);
|
|
||||||
strcat(fileName, ".bin");
|
|
||||||
}
|
|
||||||
if (!myFile) {
|
|
||||||
LED_RED_ON;
|
|
||||||
|
|
||||||
display_Clear();
|
|
||||||
println_Msg(F("CHR FILE FAILED!"));
|
|
||||||
display_Update();
|
|
||||||
print_Error(sd_error_STR, true);
|
|
||||||
|
|
||||||
LED_RED_OFF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateRAMFileInSD() {
|
void CreateRAMFileInSD() {
|
||||||
strcpy(fileName, "RAM");
|
myFile = createNewFile("RAM", "bin");
|
||||||
strcat(fileName, ".bin");
|
|
||||||
for (byte i = 0; i < 100; i++) {
|
|
||||||
if (!sd.exists(fileName)) {
|
|
||||||
myFile = sd.open(fileName, O_RDWR | O_CREAT);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sprintf(fileCount, "%02d", i);
|
|
||||||
strcpy(fileName, "RAM.");
|
|
||||||
strcat(fileName, fileCount);
|
|
||||||
strcat(fileName, ".bin");
|
|
||||||
}
|
|
||||||
if (!myFile) {
|
|
||||||
LED_RED_ON;
|
|
||||||
|
|
||||||
display_Clear();
|
|
||||||
println_Msg(F("RAM FILE FAILED!"));
|
|
||||||
display_Update();
|
|
||||||
print_Error(sd_error_STR, true);
|
|
||||||
|
|
||||||
LED_RED_OFF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef nointro
|
#ifndef nointro
|
||||||
@ -1226,13 +1176,17 @@ uint32_t atoi32_unsigned(const char* input_string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void outputNES() {
|
void outputNES() {
|
||||||
display_Clear();
|
FsFile nesFile;
|
||||||
|
const char fileNES[] = "CART.nes";
|
||||||
|
const char fileBIN[] = "CART.bin";
|
||||||
char* outputFile;
|
char* outputFile;
|
||||||
unsigned long crcOffset = 0;
|
unsigned long crcOffset = 0;
|
||||||
uint32_t prg_size_bytes = 1024 * (uint32_t)prg;
|
uint32_t prg_size_bytes = 1024 * (uint32_t)prg;
|
||||||
uint32_t chr_size_bytes = 1024 * (uint32_t)chr;
|
uint32_t chr_size_bytes = 1024 * (uint32_t)chr;
|
||||||
int has_header = 0;
|
int has_header = 0;
|
||||||
|
|
||||||
|
display_Clear();
|
||||||
|
|
||||||
unsigned char* nes_header_bytes = getNESHeaderForFileInfo(prg_size_bytes, chr_size_bytes, prg_crc32, chr_crc32);
|
unsigned char* nes_header_bytes = getNESHeaderForFileInfo(prg_size_bytes, chr_size_bytes, prg_crc32, chr_crc32);
|
||||||
|
|
||||||
if (nes_header_bytes != NULL) {
|
if (nes_header_bytes != NULL) {
|
||||||
@ -1242,7 +1196,7 @@ void outputNES() {
|
|||||||
LED_RED_ON;
|
LED_RED_ON;
|
||||||
LED_GREEN_ON;
|
LED_GREEN_ON;
|
||||||
LED_BLUE_ON;
|
LED_BLUE_ON;
|
||||||
if (!myFile.open(filePRG, FILE_READ)) {
|
if (!myFile.open("PRG.bin", FILE_READ)) {
|
||||||
LED_GREEN_OFF;
|
LED_GREEN_OFF;
|
||||||
LED_BLUE_OFF;
|
LED_BLUE_OFF;
|
||||||
|
|
||||||
@ -1285,16 +1239,7 @@ void outputNES() {
|
|||||||
nesFile.write(sdBuffer, n);
|
nesFile.write(sdBuffer, n);
|
||||||
}
|
}
|
||||||
myFile.close();
|
myFile.close();
|
||||||
if (sd.exists(fileCHR)) {
|
if (myFile.open("CHR.bin", FILE_READ)) {
|
||||||
if (!myFile.open(fileCHR, FILE_READ)) {
|
|
||||||
LED_GREEN_OFF;
|
|
||||||
LED_BLUE_OFF;
|
|
||||||
|
|
||||||
display_Clear();
|
|
||||||
println_Msg(F("CHR FILE FAILED!"));
|
|
||||||
display_Update();
|
|
||||||
print_Error(sd_error_STR, true);
|
|
||||||
}
|
|
||||||
while ((n = myFile.read(sdBuffer, sizeof(sdBuffer))) > 0) {
|
while ((n = myFile.read(sdBuffer, sizeof(sdBuffer))) > 0) {
|
||||||
nesFile.write(sdBuffer, n);
|
nesFile.write(sdBuffer, n);
|
||||||
}
|
}
|
||||||
@ -1885,7 +1830,7 @@ void setPRGSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("PRG Size: "));
|
print_Msg(F("PRG Size: "));
|
||||||
println_Msg(PRG[i]);
|
println_Msg(pgm_read_word(&(PRG[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -1907,7 +1852,7 @@ void setPRGSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("PRG Size: "));
|
print_Msg(F("PRG Size: "));
|
||||||
println_Msg(PRG[i]);
|
println_Msg(pgm_read_word(&(PRG[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -1926,7 +1871,7 @@ void setPRGSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("PRG Size: "));
|
print_Msg(F("PRG Size: "));
|
||||||
println_Msg(PRG[i]);
|
println_Msg(pgm_read_word(&(PRG[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -1946,7 +1891,7 @@ void setPRGSize() {
|
|||||||
display.setCursor(0, 56); // Display selection at bottom
|
display.setCursor(0, 56); // Display selection at bottom
|
||||||
}
|
}
|
||||||
print_Msg(F("PRG SIZE "));
|
print_Msg(F("PRG SIZE "));
|
||||||
print_Msg(PRG[newprgsize]);
|
print_Msg(pgm_read_word(&(PRG[newprgsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -1961,7 +1906,7 @@ setprg:
|
|||||||
Serial.print(F("Select PRG Size: "));
|
Serial.print(F("Select PRG Size: "));
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
Serial.print(PRG[i + prglo]);
|
Serial.print(pgm_read_word(&(PRG[i + prglo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.print(F("Enter PRG Size: "));
|
Serial.print(F("Enter PRG Size: "));
|
||||||
@ -1976,7 +1921,7 @@ setprg:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print(F("PRG Size = "));
|
Serial.print(F("PRG Size = "));
|
||||||
Serial.print(PRG[newprgsize]);
|
Serial.print(pgm_read_word(&(PRG[newprgsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(8, newprgsize);
|
EEPROM_writeAnything(8, newprgsize);
|
||||||
@ -2004,7 +1949,7 @@ void setCHRSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("CHR Size: "));
|
print_Msg(F("CHR Size: "));
|
||||||
println_Msg(CHR[i]);
|
println_Msg(pgm_read_word(&(CHR[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2026,7 +1971,7 @@ void setCHRSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("CHR Size: "));
|
print_Msg(F("CHR Size: "));
|
||||||
println_Msg(CHR[i]);
|
println_Msg(pgm_read_word(&(CHR[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2046,7 +1991,7 @@ void setCHRSize() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("CHR Size: "));
|
print_Msg(F("CHR Size: "));
|
||||||
println_Msg(CHR[i]);
|
println_Msg(pgm_read_word(&(CHR[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2066,7 +2011,7 @@ void setCHRSize() {
|
|||||||
display.setCursor(0, 56); // Display selection at bottom
|
display.setCursor(0, 56); // Display selection at bottom
|
||||||
}
|
}
|
||||||
print_Msg(F("CHR SIZE "));
|
print_Msg(F("CHR SIZE "));
|
||||||
print_Msg(CHR[newchrsize]);
|
print_Msg(pgm_read_word(&(CHR[newchrsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -2081,7 +2026,7 @@ setchr:
|
|||||||
Serial.print(F("Select CHR Size: "));
|
Serial.print(F("Select CHR Size: "));
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
Serial.print(CHR[i + chrlo]);
|
Serial.print(pgm_read_word(&(CHR[i + chrlo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.print(F("Enter CHR Size: "));
|
Serial.print(F("Enter CHR Size: "));
|
||||||
@ -2096,7 +2041,7 @@ setchr:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print(F("CHR Size = "));
|
Serial.print(F("CHR Size = "));
|
||||||
Serial.print(CHR[newchrsize]);
|
Serial.print(pgm_read_word(&(CHR[newchrsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(9, newchrsize);
|
EEPROM_writeAnything(9, newchrsize);
|
||||||
@ -2125,20 +2070,20 @@ void setRAMSize() {
|
|||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("RAM Size: "));
|
print_Msg(F("RAM Size: "));
|
||||||
if (mapper == 0)
|
if (mapper == 0)
|
||||||
println_Msg(RAM[i] / 4);
|
println_Msg(pgm_read_byte(&(RAM[i])) / 4);
|
||||||
else if (mapper == 16)
|
else if (mapper == 16)
|
||||||
println_Msg(RAM[i] * 32);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 32);
|
||||||
else if (mapper == 19) {
|
else if (mapper == 19) {
|
||||||
if (i == 2)
|
if (i == 2)
|
||||||
println_Msg(F("128"));
|
println_Msg(F("128"));
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
} else if ((mapper == 159) || (mapper == 80))
|
} else if ((mapper == 159) || (mapper == 80))
|
||||||
println_Msg(RAM[i] * 16);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 16);
|
||||||
else if (mapper == 82)
|
else if (mapper == 82)
|
||||||
println_Msg(i * 5);
|
println_Msg(i * 5);
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2161,20 +2106,20 @@ void setRAMSize() {
|
|||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("RAM Size: "));
|
print_Msg(F("RAM Size: "));
|
||||||
if (mapper == 0)
|
if (mapper == 0)
|
||||||
println_Msg(RAM[i] / 4);
|
println_Msg(pgm_read_byte(&(RAM[i])) / 4);
|
||||||
else if (mapper == 16)
|
else if (mapper == 16)
|
||||||
println_Msg(RAM[i] * 32);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 32);
|
||||||
else if (mapper == 19) {
|
else if (mapper == 19) {
|
||||||
if (i == 2)
|
if (i == 2)
|
||||||
println_Msg(F("128"));
|
println_Msg(F("128"));
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
} else if ((mapper == 159) || (mapper == 80))
|
} else if ((mapper == 159) || (mapper == 80))
|
||||||
println_Msg(RAM[i] * 16);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 16);
|
||||||
else if (mapper == 82)
|
else if (mapper == 82)
|
||||||
println_Msg(i * 5);
|
println_Msg(i * 5);
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2195,20 +2140,20 @@ void setRAMSize() {
|
|||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("RAM Size: "));
|
print_Msg(F("RAM Size: "));
|
||||||
if (mapper == 0)
|
if (mapper == 0)
|
||||||
println_Msg(RAM[i] / 4);
|
println_Msg(pgm_read_byte(&(RAM[i])) / 4);
|
||||||
else if (mapper == 16)
|
else if (mapper == 16)
|
||||||
println_Msg(RAM[i] * 32);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 32);
|
||||||
else if (mapper == 19) {
|
else if (mapper == 19) {
|
||||||
if (i == 2)
|
if (i == 2)
|
||||||
println_Msg(F("128"));
|
println_Msg(F("128"));
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
} else if ((mapper == 159) || (mapper == 80))
|
} else if ((mapper == 159) || (mapper == 80))
|
||||||
println_Msg(RAM[i] * 16);
|
println_Msg(pgm_read_byte(&(RAM[i])) * 16);
|
||||||
else if (mapper == 82)
|
else if (mapper == 82)
|
||||||
println_Msg(i * 5);
|
println_Msg(i * 5);
|
||||||
else
|
else
|
||||||
println_Msg(RAM[i]);
|
println_Msg(pgm_read_byte(&(RAM[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -2232,9 +2177,9 @@ void setRAMSize() {
|
|||||||
int sizeEEP = 0;
|
int sizeEEP = 0;
|
||||||
print_Msg(F("EEPROM SIZE "));
|
print_Msg(F("EEPROM SIZE "));
|
||||||
if (mapper == 16)
|
if (mapper == 16)
|
||||||
sizeEEP = RAM[newramsize] * 32;
|
sizeEEP = pgm_read_byte(&(RAM[newramsize])) * 32;
|
||||||
else
|
else
|
||||||
sizeEEP = RAM[newramsize] * 16;
|
sizeEEP = pgm_read_byte(&(RAM[newramsize])) * 16;
|
||||||
print_Msg(sizeEEP);
|
print_Msg(sizeEEP);
|
||||||
println_Msg(F("B"));
|
println_Msg(F("B"));
|
||||||
} else if (mapper == 19) {
|
} else if (mapper == 19) {
|
||||||
@ -2242,12 +2187,12 @@ void setRAMSize() {
|
|||||||
if (newramsize == 2)
|
if (newramsize == 2)
|
||||||
println_Msg(F("128B"));
|
println_Msg(F("128B"));
|
||||||
else {
|
else {
|
||||||
print_Msg(RAM[newramsize]);
|
print_Msg(pgm_read_byte(&(RAM[newramsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
}
|
}
|
||||||
} else if (mapper == 80) {
|
} else if (mapper == 80) {
|
||||||
print_Msg(F("RAM SIZE "));
|
print_Msg(F("RAM SIZE "));
|
||||||
print_Msg(RAM[newramsize] * 16);
|
print_Msg(pgm_read_byte(&(RAM[newramsize])) * 16);
|
||||||
println_Msg(F("B"));
|
println_Msg(F("B"));
|
||||||
} else {
|
} else {
|
||||||
print_Msg(F("RAM SIZE "));
|
print_Msg(F("RAM SIZE "));
|
||||||
@ -2256,7 +2201,7 @@ void setRAMSize() {
|
|||||||
else if (mapper == 82)
|
else if (mapper == 82)
|
||||||
print_Msg(newramsize * 5);
|
print_Msg(newramsize * 5);
|
||||||
else
|
else
|
||||||
print_Msg(RAM[newramsize]);
|
print_Msg(pgm_read_byte(&(RAM[newramsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
}
|
}
|
||||||
display_Update();
|
display_Update();
|
||||||
@ -2273,23 +2218,23 @@ setram:
|
|||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
if (mapper == 0) {
|
if (mapper == 0) {
|
||||||
Serial.print(RAM[i] / 4);
|
Serial.print(pgm_read_byte(&(RAM[i])) / 4);
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
} else if ((mapper == 16) || (mapper == 159)) {
|
} else if ((mapper == 16) || (mapper == 159)) {
|
||||||
if (mapper == 16)
|
if (mapper == 16)
|
||||||
Serial.print(RAM[i + ramlo] * 32);
|
Serial.print(pgm_read_byte(&(RAM[i + ramlo])) * 32);
|
||||||
else
|
else
|
||||||
Serial.print(RAM[i + ramlo] * 16);
|
Serial.print(pgm_read_byte(&(RAM[i + ramlo])) * 16);
|
||||||
Serial.println(F("B"));
|
Serial.println(F("B"));
|
||||||
} else if (mapper == 19) {
|
} else if (mapper == 19) {
|
||||||
if (i == 2)
|
if (i == 2)
|
||||||
Serial.println(F("128B"));
|
Serial.println(F("128B"));
|
||||||
else {
|
else {
|
||||||
Serial.print(RAM[i + ramlo]);
|
Serial.print(pgm_read_byte(&(RAM[i + ramlo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Serial.print(RAM[i + ramlo]);
|
Serial.print(pgm_read_byte(&(RAM[i + ramlo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2308,9 +2253,9 @@ setram:
|
|||||||
int sizeEEP = 0;
|
int sizeEEP = 0;
|
||||||
Serial.print(F("EEPROM Size = "));
|
Serial.print(F("EEPROM Size = "));
|
||||||
if (mapper == 16)
|
if (mapper == 16)
|
||||||
sizeEEP = RAM[newramsize] * 32;
|
sizeEEP = pgm_read_byte(&(RAM[newramsize])) * 32;
|
||||||
else
|
else
|
||||||
sizeEEP = RAM[newramsize] * 16;
|
sizeEEP = pgm_read_byte(&(RAM[newramsize])) * 16;
|
||||||
Serial.print(sizeEEP);
|
Serial.print(sizeEEP);
|
||||||
Serial.println(F("B"));
|
Serial.println(F("B"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
@ -2319,13 +2264,13 @@ setram:
|
|||||||
if (newramsize == 2)
|
if (newramsize == 2)
|
||||||
Serial.println(F("128B"));
|
Serial.println(F("128B"));
|
||||||
else {
|
else {
|
||||||
Serial.print(RAM[newramsize]);
|
Serial.print(pgm_read_byte(&(RAM[newramsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
} else if (mapper == 80) {
|
} else if (mapper == 80) {
|
||||||
Serial.print(F("RAM Size = "));
|
Serial.print(F("RAM Size = "));
|
||||||
Serial.print(RAM[newramsize] * 16);
|
Serial.print(pgm_read_byte(&(RAM[newramsize])) * 16);
|
||||||
Serial.println(F("B"));
|
Serial.println(F("B"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
} else {
|
} else {
|
||||||
@ -2335,7 +2280,7 @@ setram:
|
|||||||
else if (mapper == 82)
|
else if (mapper == 82)
|
||||||
Serial.print(newramsize * 5);
|
Serial.print(newramsize * 5);
|
||||||
else
|
else
|
||||||
Serial.print(RAM[newramsize]);
|
Serial.print(pgm_read_byte(&(RAM[newramsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
}
|
}
|
||||||
|
@ -58,15 +58,13 @@ static const char pceMenuItem3[] PROGMEM = "Turbochip";
|
|||||||
static const char *const menuOptionspce[] PROGMEM = { pceMenuItem1, pceMenuItem2, pceMenuItem3, string_reset2 };
|
static const char *const menuOptionspce[] PROGMEM = { pceMenuItem1, pceMenuItem2, pceMenuItem3, string_reset2 };
|
||||||
|
|
||||||
// PCE card menu items
|
// PCE card menu items
|
||||||
static char menuOptionspceCart[7][20] = {
|
static const char menuOptionspceCart_0[] PROGMEM = "Read ROM";
|
||||||
"Read ROM",
|
static const char menuOptionspceCart_1_fmt[] PROGMEM = "Read RAM Bank %d";
|
||||||
"", // Read RAM Bank %d
|
static const char menuOptionspceCart_2_fmt[] PROGMEM = "Write RAM Bank %d";
|
||||||
"", //Write RAM Bank %d
|
static const char menuOptionspceCart_4[] PROGMEM = "Inc Bank Number";
|
||||||
"Reset",
|
static const char menuOptionspceCart_5[] PROGMEM = "Dec Bank Number";
|
||||||
"Inc Bank Number",
|
static const char menuOptionspceCart_6_fmt[] PROGMEM = "ROM size now %dK";
|
||||||
"Dec Bank Number",
|
static const char menuOptionspceCart_6[] PROGMEM = "Force ROM size";
|
||||||
"" // ROM size now %dK / Force ROM size
|
|
||||||
};
|
|
||||||
|
|
||||||
// Turbochip menu items
|
// Turbochip menu items
|
||||||
static const char pceTCMenuItem1[] PROGMEM = "Read ROM";
|
static const char pceTCMenuItem1[] PROGMEM = "Read ROM";
|
||||||
@ -791,14 +789,18 @@ void pceMenu() {
|
|||||||
unsigned char mainMenu;
|
unsigned char mainMenu;
|
||||||
|
|
||||||
if (pce_internal_mode == HUCARD || pce_internal_mode == HUCARD_NOSWAP) {
|
if (pce_internal_mode == HUCARD || pce_internal_mode == HUCARD_NOSWAP) {
|
||||||
sprintf(menuOptionspceCart[1], "Read RAM Bank %d", tennokoe_bank_index + 1);
|
strcpy_P(menuOptions[0], menuOptionspceCart_0);
|
||||||
sprintf(menuOptionspceCart[2], "Write RAM Bank %d", tennokoe_bank_index + 1);
|
sprintf_P(menuOptions[1], menuOptionspceCart_1_fmt, tennokoe_bank_index + 1);
|
||||||
|
sprintf_P(menuOptions[2], menuOptionspceCart_2_fmt, tennokoe_bank_index + 1);
|
||||||
|
strcpy_P(menuOptions[3], string_reset2);
|
||||||
|
strcpy_P(menuOptions[4], menuOptionspceCart_4);
|
||||||
|
strcpy_P(menuOptions[5], menuOptionspceCart_5);
|
||||||
if (pce_force_rom_size > 0) {
|
if (pce_force_rom_size > 0) {
|
||||||
sprintf(menuOptionspceCart[6], "ROM size now %dK", pce_force_rom_size);
|
sprintf_P(menuOptions[6], menuOptionspceCart_6_fmt, pce_force_rom_size);
|
||||||
} else {
|
} else {
|
||||||
sprintf(menuOptionspceCart[6], "Force ROM size");
|
strcpy_P(menuOptions[6], menuOptionspceCart_6);
|
||||||
}
|
}
|
||||||
mainMenu = question_box(F("PCE HuCARD menu"), menuOptionspceCart, 7, 0);
|
mainMenu = question_box(F("PCE HuCARD menu"), menuOptions, 7, 0);
|
||||||
|
|
||||||
// wait for user choice to come back from the question box menu
|
// wait for user choice to come back from the question box menu
|
||||||
switch (mainMenu) {
|
switch (mainMenu) {
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
// /WR - (PH5)
|
// /WR - (PH5)
|
||||||
// /RD - (PH6)
|
// /RD - (PH6)
|
||||||
|
|
||||||
word WSV[] = { 32, 64, 512 };
|
const word WSV[] PROGMEM = { 32, 64, 512 };
|
||||||
byte wsvlo = 0; // Lowest Entry
|
byte wsvlo = 0; // Lowest Entry
|
||||||
byte wsvhi = 2; // Highest Entry
|
byte wsvhi = 2; // Highest Entry
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ void readROM_WSV() {
|
|||||||
dataIn_WSV();
|
dataIn_WSV();
|
||||||
controlIn_WSV();
|
controlIn_WSV();
|
||||||
|
|
||||||
romSize = WSV[wsvsize];
|
romSize = pgm_read_word(&(WSV[wsvsize]));
|
||||||
|
|
||||||
uint32_t romStart = 0;
|
uint32_t romStart = 0;
|
||||||
if (romSize < 64)
|
if (romSize < 64)
|
||||||
@ -254,7 +254,7 @@ void setROMSize_WSV() {
|
|||||||
|
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(WSV[i]);
|
println_Msg(pgm_read_word(&(WSV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -276,7 +276,7 @@ void setROMSize_WSV() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(WSV[i]);
|
println_Msg(pgm_read_word(&(WSV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -296,7 +296,7 @@ void setROMSize_WSV() {
|
|||||||
// Only update display after input because of slow LCD library
|
// Only update display after input because of slow LCD library
|
||||||
display_Clear();
|
display_Clear();
|
||||||
print_Msg(F("ROM Size: "));
|
print_Msg(F("ROM Size: "));
|
||||||
println_Msg(WSV[i]);
|
println_Msg(pgm_read_word(&(WSV[i])));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
#if defined(enable_OLED)
|
#if defined(enable_OLED)
|
||||||
print_STR(press_to_change_STR, 1);
|
print_STR(press_to_change_STR, 1);
|
||||||
@ -315,7 +315,7 @@ void setROMSize_WSV() {
|
|||||||
display.setCursor(0, 56); // Display selection at bottom
|
display.setCursor(0, 56); // Display selection at bottom
|
||||||
}
|
}
|
||||||
print_Msg(F("ROM SIZE "));
|
print_Msg(F("ROM SIZE "));
|
||||||
print_Msg(WSV[newwsvsize]);
|
print_Msg(pgm_read_word(&(WSV[newwsvsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -329,7 +329,7 @@ setrom:
|
|||||||
Serial.print(F("Select ROM Size: "));
|
Serial.print(F("Select ROM Size: "));
|
||||||
Serial.print(i);
|
Serial.print(i);
|
||||||
Serial.print(F(" = "));
|
Serial.print(F(" = "));
|
||||||
Serial.print(WSV[i + wsvlo]);
|
Serial.print(pgm_read_word(&(WSV[i + wsvlo])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
}
|
}
|
||||||
Serial.print(F("Enter ROM Size: "));
|
Serial.print(F("Enter ROM Size: "));
|
||||||
@ -344,7 +344,7 @@ setrom:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print(F("ROM Size = "));
|
Serial.print(F("ROM Size = "));
|
||||||
Serial.print(WSV[newwsvsize]);
|
Serial.print(pgm_read_word(&(WSV[newwsvsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(8, newwsvsize);
|
EEPROM_writeAnything(8, newwsvsize);
|
||||||
@ -364,13 +364,13 @@ void checkStatus_WSV() {
|
|||||||
println_Msg(F("CURRENT SETTINGS"));
|
println_Msg(F("CURRENT SETTINGS"));
|
||||||
println_Msg(F(""));
|
println_Msg(F(""));
|
||||||
print_Msg(F("ROM SIZE: "));
|
print_Msg(F("ROM SIZE: "));
|
||||||
print_Msg(WSV[wsvsize]);
|
print_Msg(pgm_read_word(&(WSV[wsvsize])));
|
||||||
println_Msg(F("K"));
|
println_Msg(F("K"));
|
||||||
display_Update();
|
display_Update();
|
||||||
wait();
|
wait();
|
||||||
#else
|
#else
|
||||||
Serial.print(F("CURRENT ROM SIZE: "));
|
Serial.print(F("CURRENT ROM SIZE: "));
|
||||||
Serial.print(WSV[wsvsize]);
|
Serial.print(pgm_read_word(&(WSV[wsvsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
Serial.println(F(""));
|
Serial.println(F(""));
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user