{\r
int i, len = strlen(s1);\r
const char *s_rom = (const char *)Pico.rom;\r
+ if (rom_offset + len > Pico.romsize)\r
+ return 0;\r
for (i = 0; i < len; i++)\r
if (s1[i] != s_rom[(i + rom_offset) ^ 1])\r
return 1;\r
SRam.flags &= ~SRF_EEPROM;\r
else if (strcmp(p, "filled_sram") == 0)\r
*fill_sram = 1;\r
+ else if (strcmp(p, "force_6btn") == 0)\r
+ PicoQuirks |= PQUIRK_FORCE_6BTN;\r
else {\r
elprintf(EL_STATUS, "carthw:%d: unsupported prop: %s", line, p);\r
goto bad_nomsg;\r
}\r
+ elprintf(EL_STATUS, "game prop: %s", p);\r
continue;\r
}\r
else if (is_expr("eeprom_type", &p)) {\r
# no_sram - don't emulate sram/EEPROM even if ROM headers tell it's there
# no_eeprom - save storage is not EEPROM, even if ROM headers tell it is
# filled_sram - save storage needs to be initialized with FFh instead of 00h
+# force_6btn - game only supports 6 button pad (32X X-men proto)
#
# mappers (hw = ...):
# ssf2_mapper - used in Super Street Fighter2
check_str = 0x150, "MICRO MACHINES II"
prop = filled_sram
+# X-Men proto
+[X-Men (prototype)]
+check_str = 0x150, "32X SAMPLE PROGRAM"
+check_str = 0x32b74c, "Bishop Level"
+prop = force_6btn
+
# The SSF2 mapper
[Super Street Fighter II - The New Challengers (U)]
check_str = 0x150, "SUPER STREET FIGHTER2 The New Challengers"
# The Pier Solar mapper, custom eeprom location
[Pier Solar and the Great Architects]
-check_str = 0x150, "PIER SOLAR\99&THE GREAT ARCHITECTS© WaterMelon\99"
+check_str = 0x150, "PIER"
+check_str = 0x610, "Respect"
hw = piersolar_mapper
-sram_range = 0xa13009,0xa1300b
-eeprom_type = 3
-eeprom_lines = 2,1,0
# detect *_in_1 based on first game and if it's larger than it should be,
# as some dumps look like to be incomplete.
"check_str=0x150,\"MICRO MACHINES II\"\n"
"prop=filled_sram\n"
"[]\n"
+ "check_str=0x150,\"32X SAMPLE PROGRAM\"\n"
+ "check_str=0x32b74c,\"Bishop Level\"\n"
+ "prop=force_6btn\n"
+ "[]\n"
"check_str=0x150,\"SUPER STREET FIGHTER2 The New Challengers\"\n"
"hw=ssf2_mapper\n"
"prop=no_sram\n"
"[]\n"
- "check_str=0x150,\"PIER SOLAR\x99&THE GREAT ARCHITECTS\xa9 WaterMelon\x99\"\n"
+ "check_str=0x150,\"PIER\"\n"
+ "check_str=0x610,\"Respect\"\n"
"hw=piersolar_mapper\n"
- "sram_range=0xa13009,0xa1300b\n"
- "eeprom_type=3\n"
- "eeprom_lines=2,1,0\n"
"[]\n"
"check_str=0x120,\"FLICKY\"\n"
"check_size_gt=0x020000\n"
Stop_CD();
PicoCartUnload();
PicoAHW = 0;
+ PicoQuirks = 0;
if (media_type == PM_CD)
{
}
}
+ if (PicoQuirks & PQUIRK_FORCE_6BTN)
+ PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN);
+
out:
if (rom_data)
free(rom_data);
int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU\r
int PicoPadInt[2]; // internal copy\r
int PicoAHW; // active addon hardware: PAHW_*\r
+int PicoQuirks; // game-specific quirks\r
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
int PicoAutoRgnOrder;\r
\r
#define PAHW_PICO (1<<3)\r
#define PAHW_SMS (1<<4)\r
extern int PicoAHW; // Pico active hw\r
+\r
+#define PQUIRK_FORCE_6BTN (1<<0)\r
+extern int PicoQuirks;\r
+\r
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff\r
extern int PicoRegionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
extern int PicoAutoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP\r
break;\r
}\r
\r
+ // make quirks visible in UI\r
+ if (PicoQuirks & PQUIRK_FORCE_6BTN)\r
+ currentConfig.input_dev0 = PICO_INPUT_PAD_6BTN;\r
+\r
menu_romload_end();\r
menu_romload_started = 0;\r
\r