mirror of
https://github.com/sanni/cartreader.git
synced 2024-12-25 20:41:52 +01:00
Merge pull request #703 from PsyK0p4T/master
Add some flashcarts dumping support
This commit is contained in:
commit
4c52f35011
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user