mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
32x: add 6btn quirk
This commit is contained in:
parent
eb35ce1506
commit
a76fad4129
7 changed files with 33 additions and 8 deletions
|
@ -643,6 +643,8 @@ static int rom_strcmp(int rom_offset, const char *s1)
|
||||||
{
|
{
|
||||||
int i, len = strlen(s1);
|
int i, len = strlen(s1);
|
||||||
const char *s_rom = (const char *)Pico.rom;
|
const char *s_rom = (const char *)Pico.rom;
|
||||||
|
if (rom_offset + len > Pico.romsize)
|
||||||
|
return 0;
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
if (s1[i] != s_rom[(i + rom_offset) ^ 1])
|
if (s1[i] != s_rom[(i + rom_offset) ^ 1])
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -897,10 +899,13 @@ static void parse_carthw(const char *carthw_cfg, int *fill_sram)
|
||||||
SRam.flags &= ~SRF_EEPROM;
|
SRam.flags &= ~SRF_EEPROM;
|
||||||
else if (strcmp(p, "filled_sram") == 0)
|
else if (strcmp(p, "filled_sram") == 0)
|
||||||
*fill_sram = 1;
|
*fill_sram = 1;
|
||||||
|
else if (strcmp(p, "force_6btn") == 0)
|
||||||
|
PicoQuirks |= PQUIRK_FORCE_6BTN;
|
||||||
else {
|
else {
|
||||||
elprintf(EL_STATUS, "carthw:%d: unsupported prop: %s", line, p);
|
elprintf(EL_STATUS, "carthw:%d: unsupported prop: %s", line, p);
|
||||||
goto bad_nomsg;
|
goto bad_nomsg;
|
||||||
}
|
}
|
||||||
|
elprintf(EL_STATUS, "game prop: %s", p);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (is_expr("eeprom_type", &p)) {
|
else if (is_expr("eeprom_type", &p)) {
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
# no_sram - don't emulate sram/EEPROM even if ROM headers tell it's there
|
# 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
|
# 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
|
# 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 = ...):
|
# mappers (hw = ...):
|
||||||
# ssf2_mapper - used in Super Street Fighter2
|
# ssf2_mapper - used in Super Street Fighter2
|
||||||
|
@ -60,6 +61,12 @@ prop = filled_sram
|
||||||
check_str = 0x150, "MICRO MACHINES II"
|
check_str = 0x150, "MICRO MACHINES II"
|
||||||
prop = filled_sram
|
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
|
# The SSF2 mapper
|
||||||
[Super Street Fighter II - The New Challengers (U)]
|
[Super Street Fighter II - The New Challengers (U)]
|
||||||
check_str = 0x150, "SUPER STREET FIGHTER2 The New Challengers"
|
check_str = 0x150, "SUPER STREET FIGHTER2 The New Challengers"
|
||||||
|
@ -68,11 +75,9 @@ prop = no_sram
|
||||||
|
|
||||||
# The Pier Solar mapper, custom eeprom location
|
# The Pier Solar mapper, custom eeprom location
|
||||||
[Pier Solar and the Great Architects]
|
[Pier Solar and the Great Architects]
|
||||||
check_str = 0x150, "PIER SOLAR™&THE GREAT ARCHITECTS© WaterMelon™"
|
check_str = 0x150, "PIER"
|
||||||
|
check_str = 0x610, "Respect"
|
||||||
hw = piersolar_mapper
|
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,
|
# detect *_in_1 based on first game and if it's larger than it should be,
|
||||||
# as some dumps look like to be incomplete.
|
# as some dumps look like to be incomplete.
|
||||||
|
|
|
@ -22,15 +22,17 @@ static const char builtin_carthw_cfg[] =
|
||||||
"check_str=0x150,\"MICRO MACHINES II\"\n"
|
"check_str=0x150,\"MICRO MACHINES II\"\n"
|
||||||
"prop=filled_sram\n"
|
"prop=filled_sram\n"
|
||||||
"[]\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"
|
"check_str=0x150,\"SUPER STREET FIGHTER2 The New Challengers\"\n"
|
||||||
"hw=ssf2_mapper\n"
|
"hw=ssf2_mapper\n"
|
||||||
"prop=no_sram\n"
|
"prop=no_sram\n"
|
||||||
"[]\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"
|
"hw=piersolar_mapper\n"
|
||||||
"sram_range=0xa13009,0xa1300b\n"
|
|
||||||
"eeprom_type=3\n"
|
|
||||||
"eeprom_lines=2,1,0\n"
|
|
||||||
"[]\n"
|
"[]\n"
|
||||||
"check_str=0x120,\"FLICKY\"\n"
|
"check_str=0x120,\"FLICKY\"\n"
|
||||||
"check_size_gt=0x020000\n"
|
"check_size_gt=0x020000\n"
|
||||||
|
|
|
@ -212,6 +212,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
|
||||||
Stop_CD();
|
Stop_CD();
|
||||||
PicoCartUnload();
|
PicoCartUnload();
|
||||||
PicoAHW = 0;
|
PicoAHW = 0;
|
||||||
|
PicoQuirks = 0;
|
||||||
|
|
||||||
if (media_type == PM_CD)
|
if (media_type == PM_CD)
|
||||||
{
|
{
|
||||||
|
@ -296,6 +297,9 @@ enum media_type_e PicoLoadMedia(const char *filename,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (PicoQuirks & PQUIRK_FORCE_6BTN)
|
||||||
|
PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (rom_data)
|
if (rom_data)
|
||||||
free(rom_data);
|
free(rom_data);
|
||||||
|
|
|
@ -16,6 +16,7 @@ int PicoSkipFrame; // skip rendering frame?
|
||||||
int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU
|
int PicoPad[2]; // Joypads, format is MXYZ SACB RLDU
|
||||||
int PicoPadInt[2]; // internal copy
|
int PicoPadInt[2]; // internal copy
|
||||||
int PicoAHW; // active addon hardware: PAHW_*
|
int PicoAHW; // active addon hardware: PAHW_*
|
||||||
|
int PicoQuirks; // game-specific quirks
|
||||||
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
int PicoRegionOverride; // override the region detection 0: Auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||||
int PicoAutoRgnOrder;
|
int PicoAutoRgnOrder;
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,10 @@ extern int PicoOpt; // bitfield
|
||||||
#define PAHW_PICO (1<<3)
|
#define PAHW_PICO (1<<3)
|
||||||
#define PAHW_SMS (1<<4)
|
#define PAHW_SMS (1<<4)
|
||||||
extern int PicoAHW; // Pico active hw
|
extern int PicoAHW; // Pico active hw
|
||||||
|
|
||||||
|
#define PQUIRK_FORCE_6BTN (1<<0)
|
||||||
|
extern int PicoQuirks;
|
||||||
|
|
||||||
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff
|
extern int PicoSkipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff
|
||||||
extern int PicoRegionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
extern int PicoRegionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe
|
||||||
extern int PicoAutoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP
|
extern int PicoAutoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP
|
||||||
|
|
|
@ -444,6 +444,10 @@ int emu_reload_rom(const char *rom_fname_in)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make quirks visible in UI
|
||||||
|
if (PicoQuirks & PQUIRK_FORCE_6BTN)
|
||||||
|
currentConfig.input_dev0 = PICO_INPUT_PAD_6BTN;
|
||||||
|
|
||||||
menu_romload_end();
|
menu_romload_end();
|
||||||
menu_romload_started = 0;
|
menu_romload_started = 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue