Update NGP.ino

4M, 8M, 16M chips support added
RomVersion detection fixed
SystemType detection (NGP Monochrome or NGP Color) added
This commit is contained in:
PsyK0p4T 2021-07-09 00:24:21 +02:00 committed by GitHub
parent f61ec0ff6d
commit 18128f1063

View File

@ -9,7 +9,8 @@ static const char ngpMenuItem1[] PROGMEM = "Read Rom";
static const char ngpMenuItemReset[] PROGMEM = "Reset"; static const char ngpMenuItemReset[] PROGMEM = "Reset";
static const char* const menuOptionsNGP[] PROGMEM = {ngpMenuItem1, ngpMenuItemReset}; static const char* const menuOptionsNGP[] PROGMEM = {ngpMenuItem1, ngpMenuItemReset};
char ngpRomVersion[5]; char ngpRomVersion[3];
uint8_t ngpSystemType;
void setup_NGP() { void setup_NGP() {
// A0 - A7 // A0 - A7
@ -51,7 +52,6 @@ void setup_NGP() {
} }
void ngpMenu() { void ngpMenu() {
uint8_t mainMenu; uint8_t mainMenu;
convertPgm(menuOptionsNGP, 2); convertPgm(menuOptionsNGP, 2);
@ -94,9 +94,35 @@ bool getCartInfo_NGP() {
switch (romSize) switch (romSize)
{ {
// 4 Mbits
// Toshiba
case 0xab98:
cartSize = 524288;
break;
// Toshiba ?
case 0x4c20:
cartSize = 524288;
break;
// 8 Mbits
// Toshiba
case 0x2c98: case 0x2c98:
cartSize = 1048576; cartSize = 1048576;
break; break;
// Samsung
case 0x2cec:
cartSize = 1048576;
break;
// 16 Mbits
// Toshiba
case 0x2f98:
cartSize = 2097152;
break;
// Samsung
case 0x2fec:
cartSize = 2097152;
break;
} }
// reset to read mode // reset to read mode
@ -115,7 +141,8 @@ bool getCartInfo_NGP() {
return false; return false;
snprintf(cartID, 5, "%02X%02X", readByte_NGP(0x000021), readByte_NGP(0x000020)); snprintf(cartID, 5, "%02X%02X", readByte_NGP(0x000021), readByte_NGP(0x000020));
snprintf(ngpRomVersion, 5, "%02X%02X", readByte_NGP(0x000023), readByte_NGP(0x000022)); snprintf(ngpRomVersion, 3, "%02X", readByte_NGP(0x000022));
ngpSystemType = readByte_NGP(0x000023);
for (uint32_t i = 0; i < 17; i++) for (uint32_t i = 0; i < 17; i++)
romName[i] = readByte_NGP(0x24 + i); romName[i] = readByte_NGP(0x24 + i);
@ -134,13 +161,21 @@ void showCartInfo_NGP() {
print_Msg(F("GameID: ")); print_Msg(F("GameID: "));
println_Msg(cartID); println_Msg(cartID);
print_Msg(F("Rom Size: "));
print_Msg((cartSize >> 17));
println_Msg(F(" Mb"));
print_Msg(F("Version: ")); print_Msg(F("Version: "));
println_Msg(ngpRomVersion); println_Msg(ngpRomVersion);
print_Msg(F("System: "));
if (ngpSystemType == 0)
println_Msg("NGPMonochrome");
else if (ngpSystemType == 16)
println_Msg("NGPColor");
else
println_Msg("Unknown");
print_Msg(F("Rom Size: "));
print_Msg((cartSize >> 17));
println_Msg(F(" MB"));
println_Msg(F("")); println_Msg(F(""));
println_Msg(F("Press Button...")); println_Msg(F("Press Button..."));
display_Update(); display_Update();
@ -195,7 +230,6 @@ void readROM_NGP(char *outPathBuf, size_t bufferSize) {
myFile.close(); myFile.close();
} }
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;