// simple test for GG. Do this here since m.hardware is nulled in Insert
if (PicoIn.AHW & PAHW_SMS) {
- if (!strcmp(rom->ext,"gg")) {
+ if (!strcmp(rom->ext,"gg") && !PicoIn.hwSelect) {
Pico.m.hardware |= 0x1;
lprintf("detected GG ROM\n");
} else
#define PAHW_PICO (1<<3)\r
#define PAHW_SMS (1<<4)\r
\r
+#define PHWS_AUTO 0\r
+#define PHWS_GG 1\r
+#define PHWS_SMS 2\r
+\r
#define PQUIRK_FORCE_6BTN (1<<0)\r
\r
// the emulator is configured and some status is reported\r
unsigned short skipFrame; // skip rendering frame, but still do sound (if enabled) and emulation stuff\r
unsigned short regionOverride; // override the region detection 0: auto, 1: Japan NTSC, 2: Japan PAL, 4: US, 8: Europe\r
unsigned short autoRgnOrder; // packed priority list of regions, for example 0x148 means this detection order: EUR, USA, JAP\r
+ unsigned short hwSelect; // hardware preselected via option menu\r
\r
unsigned short quirks; // game-specific quirks: PQUIRK_*\r
unsigned short overclockM68k; // overclock the emulated 68k, in %\r
ymflag = 0xffff;
Pico.m.dirtyPal = 1;
+ if (PicoIn.hwSelect) {
+ switch (PicoIn.hwSelect) {
+ case PHWS_GG: Pico.m.hardware |= 0x1; break;
+ default: Pico.m.hardware &= ~0x1; break;
+ }
+ } else {
+ unsigned tmr;
+
+ // check if the ROM header contains more system information to detect GG
+ for (tmr = 0x2000; tmr < 0xbfff && tmr <= Pico.romsize; tmr *= 2) {
+ if (!memcmp(Pico.rom + tmr-16, "TMR SEGA", 8)) {
+ if (Pico.rom[tmr-1] >= 0x50 && Pico.rom[tmr-1] < 0x80)
+ Pico.m.hardware |= 0x1;
+ break;
+ }
+ }
+ }
+
// reset memory mapping
PicoMemSetupMS();
}
void PicoPowerMS(void)
{
int s, tmp;
- unsigned tmr;
memset(&PicoMem,0,sizeof(PicoMem));
memset(&Pico.video,0,sizeof(Pico.video));
tmp = 1 << s;
bank_mask = (tmp - 1) >> 14;
- // check if the ROM header contains more system information to detect GG
- for (tmr = 0x2000; tmr < 0xbfff && tmr <= Pico.romsize; tmr *= 2) {
- if (!memcmp(Pico.rom + tmr-16, "TMR SEGA", 8)) {
- if (Pico.rom[tmr-1] >= 0x50 && Pico.rom[tmr-1] < 0x80)
- Pico.m.hardware |= 0x1;
- break;
- }
- }
-
PicoReset();
}
defaultConfig.s_PsndRate = 44100;\r
defaultConfig.s_PicoRegion = 0; // auto\r
defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP\r
+ defaultConfig.s_hwSelect = PHWS_AUTO;\r
defaultConfig.s_PicoCDBuffers = 0;\r
defaultConfig.s_PicoSndFilterAlpha = 0x10000 * 60 / 100;\r
defaultConfig.confirm_save = EOPT_CONFIRM_SAVE;\r
PicoIn.sndRate = currentConfig.s_PsndRate;\r
PicoIn.regionOverride = currentConfig.s_PicoRegion;\r
PicoIn.autoRgnOrder = currentConfig.s_PicoAutoRgnOrder;\r
+ PicoIn.hwSelect = currentConfig.s_hwSelect;\r
PicoIn.sndFilterAlpha = currentConfig.s_PicoSndFilterAlpha;\r
}\r
\r
int s_PsndRate;
int s_PicoRegion;
int s_PicoAutoRgnOrder;
+ int s_hwSelect;
int s_PicoCDBuffers;
int s_PicoSndFilterAlpha;
int Frameskip;
#endif
+// ------------ SMS options menu ------------
+
+#ifndef NO_SMS
+
+static const char *sms_hardwares[] = { "auto", "Game Gear", "Master System", NULL };
+
+static menu_entry e_menu_sms_options[] =
+{
+ mee_enum ("System", MA_SMSOPT_HARDWARE, currentConfig.s_hwSelect, sms_hardwares ),
+};
+
+static int menu_loop_sms_options(int id, int keys)
+{
+ static int sel = 0;
+
+ me_loop(e_menu_sms_options, &sel);
+
+ PicoIn.hwSelect = currentConfig.s_hwSelect;
+ return 0;
+}
+
+#endif
+
// ------------ adv options menu ------------
static const char h_ovrclk[] = "Will break some games, keep at 0";
mee_handler ("[Sega/Mega CD options]", menu_loop_cd_options),
#ifndef NO_32X
mee_handler ("[32X options]", menu_loop_32x_options),
+#endif
+#ifndef NO_SMS
+ mee_handler ("[SMS options]", menu_loop_sms_options),
#endif
mee_handler ("[Advanced options]", menu_loop_adv_options),
mee_cust_nosave("Save global config", MA_OPT_SAVECFG, mh_saveloadcfg, mgn_saveloadcfg),
e_menu_cd_options,
#ifndef NO_32X
e_menu_32x_options,
+#endif
+#ifndef NO_SMS
+ e_menu_sms_options,
#endif
e_menu_keyconfig,
e_menu_hidden,
MA_32XOPT_PWM,
MA_32XOPT_MSH2_CYCLES,
MA_32XOPT_SSH2_CYCLES,
+ MA_SMSOPT_HARDWARE,
MA_CTRL_PLAYER1,
MA_CTRL_PLAYER2,
MA_CTRL_EMU,
PicoSetInputDevice(1, input_name_to_val(var.value));
var.value = NULL;
- var.key = "picodrive_sprlim";
+ var.key = "picodrive_ramcart";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
if (strcmp(var.value, "enabled") == 0)
- PicoIn.opt |= POPT_DIS_SPRITE_LIM;
+ PicoIn.opt |= POPT_EN_MCD_RAMCART;
else
- PicoIn.opt &= ~POPT_DIS_SPRITE_LIM;
+ PicoIn.opt &= ~POPT_EN_MCD_RAMCART;
}
var.value = NULL;
- var.key = "picodrive_ramcart";
+ var.key = "picodrive_smstype";
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
- if (strcmp(var.value, "enabled") == 0)
- PicoIn.opt |= POPT_EN_MCD_RAMCART;
+ if (strcmp(var.value, "Auto") == 0)
+ PicoIn.hwSelect = PHWS_AUTO;
+ else if (strcmp(var.value, "Game Gear") == 0)
+ PicoIn.hwSelect = PHWS_GG;
else
- PicoIn.opt &= ~POPT_EN_MCD_RAMCART;
+ PicoIn.hwSelect = PHWS_SMS;
}
OldPicoRegionOverride = PicoIn.regionOverride;
environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &av_info);
}
+ var.value = NULL;
+ var.key = "picodrive_sprlim";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) {
+ if (strcmp(var.value, "enabled") == 0)
+ PicoIn.opt |= POPT_DIS_SPRITE_LIM;
+ else
+ PicoIn.opt &= ~POPT_DIS_SPRITE_LIM;
+ }
+
old_show_overscan = show_overscan;
var.value = NULL;
var.key = "picodrive_overscan";
"3 button pad"
},
{
- "picodrive_sprlim",
- "No sprite limit",
- "Enable this to remove the sprite limit.",
+ "picodrive_ramcart",
+ "MegaCD RAM cart",
+ "Emulate a MegaCD RAM cart, used for save game data. WARNING: When enabled, internal save data (BRAM) will be discarded.",
{
{ "disabled", NULL },
{ "enabled", NULL },
"disabled"
},
{
- "picodrive_ramcart",
- "MegaCD RAM cart",
- "Emulate a MegaCD RAM cart, used for save game data. WARNING: When enabled, internal save data (BRAM) will be discarded.",
+ "picodrive_smstype",
+ "Master System type",
+ "Choose which type of system the core should emulate for Master system",
{
- { "disabled", NULL },
- { "enabled", NULL },
+ { "Auto", NULL },
+ { "Game Gear", NULL },
+ { "Master System", NULL },
{ NULL, NULL },
},
"disabled"
},
"PAR"
},
+ {
+ "picodrive_sprlim",
+ "No sprite limit",
+ "Enable this to remove the sprite limit.",
+ {
+ { "disabled", NULL },
+ { "enabled", NULL },
+ { NULL, NULL },
+ },
+ "disabled"
+ },
{
"picodrive_overscan",
"Show Overscan",