mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-27 15:04:15 +01:00
[NES] Added mapper 148
AddedNES mapper 148
This commit is contained in:
parent
3dc1fbe3e0
commit
8c13b615d2
@ -118,6 +118,7 @@ static const byte PROGMEM mapsize[] = {
|
|||||||
140, 3, 3, 3, 5, 0, 0, // jaleco jf-11/jf-14
|
140, 3, 3, 3, 5, 0, 0, // jaleco jf-11/jf-14
|
||||||
142, 1, 3, 0, 0, 0, 0, // UNL-KS7032 [UNLICENSED]
|
142, 1, 3, 0, 0, 0, 0, // UNL-KS7032 [UNLICENSED]
|
||||||
146, 1, 2, 2, 3, 0, 0, // Sachen 3015 [UNLICENSED]
|
146, 1, 2, 2, 3, 0, 0, // Sachen 3015 [UNLICENSED]
|
||||||
|
148, 1, 2, 0, 4, 0, 0, // Sachen SA-0037 & Tengen 800008 [UNLICENSED]
|
||||||
// 151 - bad mapper, not used
|
// 151 - bad mapper, not used
|
||||||
152, 2, 3, 5, 5, 0, 0, // BANDAI-74*161/161/32
|
152, 2, 3, 5, 5, 0, 0, // BANDAI-74*161/161/32
|
||||||
153, 5, 5, 0, 0, 1, 1, // (famicom jump ii) [sram r/w]
|
153, 5, 5, 0, 0, 1, 1, // (famicom jump ii) [sram r/w]
|
||||||
@ -224,16 +225,17 @@ int banks;
|
|||||||
int prg;
|
int prg;
|
||||||
int chr;
|
int chr;
|
||||||
byte ram;
|
byte ram;
|
||||||
boolean vrc4e = false;
|
bool vrc4e = false;
|
||||||
byte prgchk0;
|
byte prgchk0;
|
||||||
byte prgchk1;
|
byte prgchk1;
|
||||||
boolean mmc6 = false;
|
bool mmc6 = false;
|
||||||
byte prgchk2;
|
byte prgchk2;
|
||||||
byte prgchk3;
|
byte prgchk3;
|
||||||
word eepsize;
|
word eepsize;
|
||||||
byte bytecheck;
|
byte bytecheck;
|
||||||
byte firstbyte;
|
byte firstbyte;
|
||||||
boolean flashfound = false; // NESmaker 39SF040 Flash Cart
|
bool flashfound = false; // NESmaker 39SF040 Flash Cart
|
||||||
|
bool busConflict = false;
|
||||||
|
|
||||||
// Cartridge Config
|
// Cartridge Config
|
||||||
byte mapper;
|
byte mapper;
|
||||||
@ -567,7 +569,7 @@ void getMapping() {
|
|||||||
}
|
}
|
||||||
oldcrc32 = ~oldcrc32;
|
oldcrc32 = ~oldcrc32;
|
||||||
oldcrc32MMC3 = ~oldcrc32MMC3;
|
oldcrc32MMC3 = ~oldcrc32MMC3;
|
||||||
boolean browseDatabase;
|
bool browseDatabase;
|
||||||
|
|
||||||
// Filter out all 0xFF checksums at 0x8000 and 0xE000
|
// Filter out all 0xFF checksums at 0x8000 and 0xE000
|
||||||
if (oldcrc32 == 0xBD7BC39F && oldcrc32MMC3 == 0xBD7BC39F) {
|
if (oldcrc32 == 0xBD7BC39F && oldcrc32MMC3 == 0xBD7BC39F) {
|
||||||
@ -778,7 +780,7 @@ static void readDatabaseEntry(FsFile& database, struct database_entry* entry) {
|
|||||||
entry->crc512 = strtoul(entry->crc512_str, NULL, 16);
|
entry->crc512 = strtoul(entry->crc512_str, NULL, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean selectMapping(FsFile& database) {
|
bool selectMapping(FsFile& database) {
|
||||||
// Select starting letter
|
// Select starting letter
|
||||||
byte myLetter = starting_letter();
|
byte myLetter = starting_letter();
|
||||||
|
|
||||||
@ -1746,7 +1748,7 @@ chooseMapper:
|
|||||||
newmapper = hundreds * 100 + tens * 10 + units;
|
newmapper = hundreds * 100 + tens * 10 + units;
|
||||||
|
|
||||||
// Check if valid
|
// Check if valid
|
||||||
boolean validMapper = 0;
|
bool validMapper = 0;
|
||||||
byte mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
byte mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
||||||
for (byte currMaplist = 0; currMaplist < mapcount; currMaplist++) {
|
for (byte currMaplist = 0; currMaplist < mapcount; currMaplist++) {
|
||||||
if (pgm_read_byte(mapsize + currMaplist * 7) == newmapper)
|
if (pgm_read_byte(mapsize + currMaplist * 7) == newmapper)
|
||||||
@ -1826,7 +1828,7 @@ chooseMapper:
|
|||||||
#elif defined(enable_serial)
|
#elif defined(enable_serial)
|
||||||
setmapper:
|
setmapper:
|
||||||
String newmap;
|
String newmap;
|
||||||
boolean mapfound = false;
|
bool mapfound = false;
|
||||||
Serial.println(F("SUPPORTED MAPPERS:"));
|
Serial.println(F("SUPPORTED MAPPERS:"));
|
||||||
for (int i = 0; i < mapcount; i++) {
|
for (int i = 0; i < mapcount; i++) {
|
||||||
int index = i * 7;
|
int index = i * 7;
|
||||||
@ -2498,7 +2500,7 @@ void writeMMC5RAM(word base, word address) { // MMC5 SRAM WRITE
|
|||||||
write_prg_byte(0x5103, 0); // PRG RAM PROTECT2
|
write_prg_byte(0x5103, 0); // PRG RAM PROTECT2
|
||||||
}
|
}
|
||||||
|
|
||||||
void readPRG(boolean readrom) {
|
void readPRG(bool readrom) {
|
||||||
if (!readrom) {
|
if (!readrom) {
|
||||||
display_Clear();
|
display_Clear();
|
||||||
display_Update();
|
display_Update();
|
||||||
@ -3383,6 +3385,26 @@ void readPRG(boolean readrom) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 148: // Sachen SA-008-A and Tengen 800008 -- Bus conflicts
|
||||||
|
banks = int_pow(2, prgsize) / 2;
|
||||||
|
busConflict = true;
|
||||||
|
for (int i = 0; i < banks; i++) {
|
||||||
|
for (int x = 0; x < 0x8000; x++) {
|
||||||
|
if (read_prg_byte(0x8000 + x) == i) {
|
||||||
|
write_prg_byte(0x8000 + x, i << 3);
|
||||||
|
busConflict = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (busConflict) {
|
||||||
|
write_prg_byte(0x8000 + i, i << 3);
|
||||||
|
}
|
||||||
|
for (word address = 0x0; address < 0x8000; address += 512) {
|
||||||
|
dumpPRG(base, address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 153: // 512K
|
case 153: // 512K
|
||||||
banks = int_pow(2, prgsize);
|
banks = int_pow(2, prgsize);
|
||||||
for (int i = 0; i < banks; i++) { // 512K
|
for (int i = 0; i < banks; i++) { // 512K
|
||||||
@ -3710,7 +3732,7 @@ void readPRG(boolean readrom) {
|
|||||||
LED_BLUE_OFF;
|
LED_BLUE_OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void readCHR(boolean readrom) {
|
void readCHR(bool readrom) {
|
||||||
if (!readrom) {
|
if (!readrom) {
|
||||||
display_Clear();
|
display_Clear();
|
||||||
display_Update();
|
display_Update();
|
||||||
@ -4467,6 +4489,26 @@ void readCHR(boolean readrom) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 148: // Sachen SA-008-A and Tengen 800008 -- Bus conflicts
|
||||||
|
banks = int_pow(2, chrsize);
|
||||||
|
busConflict = true;
|
||||||
|
for (int i = 0; i < banks; i++) {
|
||||||
|
for (int x = 0; x < 0x8000; x++) {
|
||||||
|
if (read_prg_byte(0x8000 + x) == i) {
|
||||||
|
write_prg_byte(0x8000 + x, i & 0x07);
|
||||||
|
busConflict = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (busConflict) {
|
||||||
|
write_prg_byte(0x8000 + i, i & 0x07);
|
||||||
|
}
|
||||||
|
for (word address = 0x0; address < 0x2000; address += 512) {
|
||||||
|
dumpCHR(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 174: // 64k
|
case 174: // 64k
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
write_prg_byte(0xFF00 + (i << 1), 0);
|
write_prg_byte(0xFF00 + (i << 1), 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user