Update NES.ino

- typo fix
- added mapper 41, 43
This commit is contained in:
nsx0r 2025-01-18 23:31:46 +00:00 committed by GitHub
parent f6fc43316c
commit c21ab3e539
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -79,10 +79,10 @@ static const struct mapper_NES PROGMEM mapsize[] = {
{ 38, 1, 3, 0, 3, 0, 0 }, // 普澤 [Bit Corp.] PCI556 (Crime Busters)
{ 39, 3, 5, 0, 0, 0, 0 }, // duplicate of 241
// 40 - NTDEC 2722/2752 [TODO]
// 41 - NTDEC 2399 (Caltron 6-in-1) [TODO]
{ 41, 4, 4, 5, 5, 0, 0 }, // NTDEC 2399 (Caltron 6-in-1)
{ 42, 0, 3, 0, 5, 0, 0 }, // AC08/LH09 (FDS games hacked to cartridges)
// 43 - TONY-I / YS-612 [TODO]
// 44 - Super HiK 7-in-1 (MMC3) [TODO]
{ 43, 2, 2, 0, 0, 0, 0 }, // TONY-I / YS-612 [88KiB]
// { 44, 5, 6, 7, 8, 0, 0 }, Super HiK 7-in-1 (MMC3) [TODO]
{ 45, 3, 6, 0, 8, 0, 0 }, // TC3294/GA23C
{ 46, 1, 6, 0, 8, 0, 0 }, // GameStation/RumbleStation
{ 47, 4, 5, 6, 7, 0, 0 }, // Nintendo NES-QJ (2-in-1)
@ -1902,7 +1902,7 @@ void readPRG(bool readrom) {
case 1:
case 155: // 32K/64K/128K/256K/512K
if (prgsize == 1) { // fix for SEROM/SHROM/SH1ROM PCBs
if (prgsize == 1) {
write_prg_byte(0x8000, 0x80);
dumpBankPRG(0x0, 0x8000, base);
} else {
@ -2247,6 +2247,15 @@ void readPRG(bool readrom) {
}
break;
case 41:
banks = int_pow(2, prgsize) / 2;
for (size_t i = 0; i < banks; i++) {
write_prg_byte(0x6000 + i, 0);
write_prg_byte(0x6000 + i, 0);
dumpBankPRG(0x0, 0x8000, base);
}
break;
case 42:
banks = int_pow(2, prgsize) * 2;
base = 0x6000; // 8k switchable PRG ROM bank at $6000-$7FFF
@ -2258,6 +2267,20 @@ void readPRG(bool readrom) {
dumpBankPRG(0x0, 0x8000, base);
break;
case 43:
base = 0xC000;
for (size_t i = 0; i < 8; i++) {
write_prg_byte(0x4022, i);
dumpBankPRG(0x0, 0x2000, base);
}
base = 0x5000;
for (size_t i = 0; i < 4; i++) {
dumpBankPRG(0x0, 0x1000, base);
}
base = 0xE000;
dumpBankPRG(0x0, 0x1000, base);
break;
case 45: // MMC3 Clone with Outer Registers
banks = ((int_pow(2, prgsize) * 2)) - 2; // Set Number of Banks
for (size_t i = 0; i < banks; i += 2) { // 128K/256K/512K/1024K
@ -2932,6 +2955,7 @@ void readCHR(bool readrom) {
if (myFile) {
switch (mapper) {
case 0: // 8K
case 43:
dumpBankCHR(0x0, 0x2000);
break;
@ -3144,6 +3168,7 @@ void readCHR(bool readrom) {
break;
case 23:
{ // 128K
banks = int_pow(2, chrsize) * 4;
// Detect VRC4e Carts - read PRG 0x1FFF6 (DATE)
// Boku Dracula-kun = 890810, Tiny Toon = 910809
@ -3179,6 +3204,7 @@ void readCHR(bool readrom) {
dumpBankCHR(0x0, 0x2000); // 8 Banks for a total of 8 KiB
}
break;
}
case 24: // 128K
banks = int_pow(2, chrsize) * 4;
@ -3281,6 +3307,17 @@ void readCHR(bool readrom) {
}
break;
case 41:
banks = int_pow(2, chrsize) / 2;
for (size_t i = 0; i < banks; i++) {
write_prg_byte(0x6004 + ((i & 0x0C) << 1), 0x00);
write_prg_byte(0x6004 + ((i & 0x0C) << 1), 0x00);
write_prg_byte(0xFFF0 + (i & 0x03), i & 0x03);
write_prg_byte(0xFFF0 + (i & 0x03), i & 0x03);
dumpBankCHR(0x0, 0x2000);
}
break;
case 42:
banks = int_pow(2, chrsize);
for (size_t i = 0; i < banks; i++) {
@ -3574,16 +3611,6 @@ void readCHR(bool readrom) {
}
break;
case 122:
case 184: // 16K/32K
banks = int_pow(2, chrsize);
for (size_t i = 0; i < banks; i++) { // 4K Banks
write_prg_byte(0x6000, i); // CHR LOW (Bits 0-2) ($0000-$0FFF)
dumpBankCHR(0x0, 0x1000); // 4K Banks ($0000-$0FFF)
}
break;
case 140: // 32K/128K
banks = int_pow(2, chrsize) / 2;
for (size_t i = 0; i < banks; i++) { // 8K Banks
@ -3599,6 +3626,15 @@ void readCHR(bool readrom) {
}
break;
case 122:
case 184: // 16K/32K
banks = int_pow(2, chrsize);
for (size_t i = 0; i < banks; i++) { // 4K Banks
write_prg_byte(0x6000, i); // CHR LOW (Bits 0-2) ($0000-$0FFF)
dumpBankCHR(0x0, 0x1000); // 4K Banks ($0000-$0FFF)
}
break;
case 185: // 8K [READ 32K TO OVERRIDE LOCKOUT]
for (size_t i = 0; i < 4; i++) { // Read 32K to locate valid 8K
write_prg_byte(0x8000, i);
@ -3732,6 +3768,18 @@ void readCHR(bool readrom) {
dumpBankCHR(0x1000, 0x1400);
}
break;
case 332:
banks = int_pow(2, chrsize) / 2;
for (int i = 0; i < banks; i++) {
write_prg_byte(0x6001, 0x30 | (i & 0x07)); // NROM mode, A15-A13
write_prg_byte(0x6001, 0x30 | (i & 0x07)); // NROM mode, A15-A13
write_prg_byte(0x6000, (i & 0x08) << 3); // A16
write_prg_byte(0x6000, (i & 0x08) << 3); // A16
delay(100);
dumpBankCHR(0x0, 0x2000);
}
break;
}
if (!readrom) {
myFile.flush();