Merge pull request #703 from PsyK0p4T/master

Add some flashcarts dumping support
This commit is contained in:
sanni 2023-02-06 08:52:18 +01:00 committed by GitHub
commit 4c52f35011
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,10 +3,11 @@
//****************************************** //******************************************
#ifdef enable_NGP #ifdef enable_NGP
static const char ngpMenuItem1[] PROGMEM = "Read Rom"; static const char ngpMenuItem1[] PROGMEM = "Read ROM";
static const char ngpMenuItem2[] PROGMEM = "Read chip info"; static const char ngpMenuItem2[] PROGMEM = "Read chip info";
static const char ngpMenuItem3[] PROGMEM = "Change ROM size";
//static const char ngpMenuItemReset[] PROGMEM = "Reset"; (stored in common strings array) //static const char ngpMenuItemReset[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const menuOptionsNGP[] PROGMEM = { ngpMenuItem1, ngpMenuItem2, string_reset2 }; static const char* const menuOptionsNGP[] PROGMEM = { ngpMenuItem1, ngpMenuItem2, ngpMenuItem3, string_reset2 };
static const char ngpRomItem1[] PROGMEM = "4 Mbits / 512 KB"; static const char ngpRomItem1[] PROGMEM = "4 Mbits / 512 KB";
static const char ngpRomItem2[] PROGMEM = "8 Mbits / 1 MB"; static const char ngpRomItem2[] PROGMEM = "8 Mbits / 1 MB";
@ -54,8 +55,8 @@ void ngpMenu() {
vselect(false); vselect(false);
uint8_t mainMenu; uint8_t mainMenu;
convertPgm(menuOptionsNGP, 3); convertPgm(menuOptionsNGP, 4);
mainMenu = question_box(F("NGP Menu"), menuOptions, 3, 0); mainMenu = question_box(F("NGP Menu"), menuOptions, 4, 0);
switch (mainMenu) { switch (mainMenu) {
case 0: case 0:
@ -69,6 +70,10 @@ void ngpMenu() {
break; break;
case 2: case 2:
changeSize_NGP();
break;
case 3:
resetArduino(); resetArduino();
break; break;
} }
@ -101,13 +106,29 @@ bool getCartInfo_NGP() {
switch (romSize) { switch (romSize) {
case 0xffff: return false; break; // detection error (no cart inserted or hw problem) // 4 Mbits
case 0x98ab: cartSize = 524288; break; // 4 Mbits - Toshiba case 0x98ab: // Toshiba
case 0x204c: cartSize = 524288; break; // 4 Mbits - STMicroelectronics ? case 0x204c: // STMicroelectronics ?
case 0x982c: cartSize = 1048576; break; // 8 Mbits - Toshiba cartSize = 524288;
case 0xec2c: cartSize = 1048576; break; // 8 Mbits - Samsung break;
case 0x982f: cartSize = 2097152; break; // 16 Mbits - Toshiba
case 0xec2f: cartSize = 2097152; break; // 16 Mbits - Samsung // 8 Mbits
case 0x982c: // Toshiba
case 0xec2c: // Samsung
cartSize = 1048576;
break;
// 16 Mbits
case 0x982f: // Toshiba
case 0xec2f: // Samsung
case 0x4c7: // Fujitsu (FlashMasta USB)
cartSize = 2097152;
break;
// detection error (no cart inserted or hw problem)
case 0xffff:
return false;
break;
} }
// reset to read mode // reset to read mode
@ -178,22 +199,9 @@ void printCartInfo_NGP() {
} }
void readROM_NGP(char* outPathBuf, size_t bufferSize) { void readROM_NGP(char* outPathBuf, size_t bufferSize) {
// Set cartsize manually if chip ID is unknown // Set rom size manually if chip ID is unknown
if (cartSize == 0) { if (cartSize == 0)
unsigned char ngpRomMenu; changeSize_NGP();
// Copy menuOptions out of progmem
convertPgm(ngpRomOptions, 4);
ngpRomMenu = question_box(F("Select ROM size"), menuOptions, 4, 0);
// wait for user choice to come back from the question box menu
switch (ngpRomMenu) {
case 0: cartSize = 524288; break;
case 1: cartSize = 1048576; break;
case 2: cartSize = 2097152; break;
case 3: cartSize = 4194304; break;
}
}
// generate fullname of rom file // generate fullname of rom file
snprintf(fileName, FILENAME_LENGTH, "%s.ngp", romName); snprintf(fileName, FILENAME_LENGTH, "%s.ngp", romName);
@ -327,6 +335,22 @@ void scanChip_NGP() {
} }
} }
void changeSize_NGP() {
unsigned char ngpRomMenu;
// Copy menuOptions out of progmem
convertPgm(ngpRomOptions, 4);
ngpRomMenu = question_box(F("Select ROM size"), menuOptions, 4, 0);
// wait for user choice to come back from the question box menu
switch (ngpRomMenu) {
case 0: cartSize = 524288; break;
case 1: cartSize = 1048576; break;
case 2: cartSize = 2097152; break;
case 3: cartSize = 4194304; break;
}
}
void writeByte_NGP(uint32_t addr, uint8_t data) { void writeByte_NGP(uint32_t addr, uint8_t data) {
PORTF = addr & 0xff; PORTF = addr & 0xff;
PORTK = (addr >> 8) & 0xff; PORTK = (addr >> 8) & 0xff;