#define PMS_MAP_N16K 6\r
#define PMS_MAP_JANGGUN 7\r
#define PMS_MAP_NEMESIS 8\r
+#define PMS_MAP_8KBRAM 9\r
\r
struct PicoMS\r
{\r
static void write_bank_x8k(unsigned short a, unsigned char d)
{
+ // 8KB address range @ 0x2000
if ((a&0xe000) != 0x2000) return;
+ // never autodetected, selectable only via config
+ if (Pico.ms.mapper != PMS_MAP_8KBRAM) return;
+ elprintf(EL_Z80BNK, "bank x8k %04x %02x @ %04x", a, d, z80_pc());
+
((unsigned char *)PicoMem.vram)[a+0x6000] = d;
z80_map_set(z80_read_map, 0x2000, 0x3fff, PicoMem.vram+0x4000, 0);
z80_map_set(z80_write_map, 0x2000, 0x3fff, PicoMem.vram+0x4000, 0);
case PMS_MAP_N16K: write_bank_n16k(a, d); break;
case PMS_MAP_JANGGUN: write_bank_jang(a, d); break;
case PMS_MAP_NEMESIS: write_bank_msxn(a, d); break;
+ case PMS_MAP_8KBRAM: write_bank_x8k(a, d); break;
case PMS_MAP_AUTO:
// NB the sequence of mappers is crucial for the auto detection
write_bank_codem(a, d);
write_bank_korea(a, d);
write_bank_n16k(a, d);
- write_bank_x8k(a, d);
break;
}
}
#ifndef NO_SMS
static const char *sms_hardwares[] = { "auto", "Game Gear", "Master System", NULL };
-static const char *sms_mappers[] = { "auto", "Sega", "Codemasters", "Korea", "Korea MSX", "Korea X-in-1", "Korea 4-Pak", "Korea Janggun", "Korea Nemesis", NULL };
+static const char *sms_mappers[] = { "auto", "Sega", "Codemasters", "Korea", "Korea MSX", "Korea X-in-1", "Korea 4-Pak", "Korea Janggun", "Korea Nemesis", "Taiwan 8K RAM", NULL };
static const char h_smsfm[] = "FM sound is only supported by few games\nOther games may crash with FM enabled";
static menu_entry e_menu_sms_options[] =
PicoIn.mapper = PMS_MAP_JANGGUN;
else if (strcmp(var.value, "Korea Nemesis") == 0)
PicoIn.mapper = PMS_MAP_NEMESIS;
+ else if (strcmp(var.value, "Taiwan 8K RAM") == 0)
+ PicoIn.mapper = PMS_MAP_8KRAM;
else
PicoIn.mapper = PMS_MAP_SEGA;
}
{ "Korea 4-Pak", NULL },
{ "Korea Janggun", NULL },
{ "Korea Nemesis", NULL },
+ { "Taiwan 8K RAM", NULL },
{ NULL, NULL },
},
"Auto"