SNES: Support "compact form" where delay resets aren't supported

This commit is contained in:
Ilari Liusvaara 2013-08-20 01:20:34 +03:00
parent e4db2486b5
commit e2b08d9c83
2 changed files with 27 additions and 10 deletions

View file

@ -65,6 +65,7 @@ namespace
bool do_hreset_flag = false;
long do_reset_flag = -1;
bool support_hreset = false;
bool support_dreset = false;
bool save_every_frame = false;
bool have_saved_this_frame = false;
int16_t blanksound[1070] = {0};
@ -175,7 +176,8 @@ namespace
}},
{"hardreset", "Support hard resets", "0", boolean_values},
{"saveevery", "Emulate saving each frame", "0", boolean_values},
{"radominit", "Random initial state", "0", boolean_values}
{"radominit", "Random initial state", "0", boolean_values},
{"compact", "Don't support delayed resets", "0", boolean_values}
};
////////////////// PORTS COMMON ///////////////////
@ -245,6 +247,7 @@ namespace
signed type1 = bsnes_settings.ivalue_to_index(_settings, "port1");
signed type2 = bsnes_settings.ivalue_to_index(_settings, "port2");
signed hreset = bsnes_settings.ivalue_to_index(_settings, "hardreset");
signed compact = bsnes_settings.ivalue_to_index(_settings, "compact");
signed esave = bsnes_settings.ivalue_to_index(_settings, "saveevery");
signed irandom = bsnes_settings.ivalue_to_index(_settings, "radominit");
@ -253,7 +256,8 @@ namespace
snes_unload_cartridge();
SNES::config.random = (irandom != 0);
save_every_frame = (esave != 0);
support_hreset = (hreset != 0);
support_hreset = (hreset != 0 || compact != 0);
support_dreset = (compact == 0);
SNES::config.expansion_port = SNES::System::ExpansionPortDevice::None;
bool r = fun(img);
if(r) {
@ -277,8 +281,11 @@ namespace
signed type1 = bsnes_settings.ivalue_to_index(_settings, "port1");
signed type2 = bsnes_settings.ivalue_to_index(_settings, "port2");
signed hreset = bsnes_settings.ivalue_to_index(_settings, "hardreset");
signed compact = bsnes_settings.ivalue_to_index(_settings, "compact");
controller_set r;
if(hreset)
if(compact)
r.ports.push_back(&psystem_compact);
else if(hreset)
r.ports.push_back(&psystem_hreset);
else
r.ports.push_back(&psystem);
@ -302,12 +309,6 @@ namespace
return r;
}
#ifdef BSNES_HAS_DEBUGGER
#define BSNES_RESET_LEVEL 6
#else
#define BSNES_RESET_LEVEL 5
#endif
class my_interface : public SNES::Interface
{
string path(SNES::Cartridge::Slot slot, const string &hint)
@ -542,7 +543,7 @@ namespace
struct _bsnes_core : public core_core
{
_bsnes_core() : core_core({&gamepad, &gamepad16, &justifier, &justifiers, &mouse, &multitap,
&multitap16, &none, &superscope, &psystem, &psystem_hreset}, {
&multitap16, &none, &superscope, &psystem, &psystem_hreset, &psystem_compact}, {
{0, "Soft reset", "reset", {}},
{1, "Hard reset", "hardreset", {}},
#ifdef BSNES_HAS_DEBUGGER
@ -831,6 +832,8 @@ again2:
const interface_device_reg* c_get_registers() { return snes_registers; }
unsigned c_action_flags(unsigned id)
{
if((id == 2 || id == 3) && !support_dreset)
return 0;
if(id == 0 || id == 2)
return 1;
if(id == 1 || id == 3)

View file

@ -84,6 +84,16 @@ system_controller_hreset = {
}
};
system_controller_compact = {
["name"] = "(system)", ["class"] = "(system)", ["buttons"] = {
{shadow, "F", "framesync"},
{shadow, "R", "reset"},
{shadow_null},
{shadow_null},
{shadow, "H", "hard"}
}
};
ports = {
{
["symbol"] = "gamepad", ["iname"] = "gamepad", ["hname"] = "gamepad", ["controllers"] = {
@ -145,5 +155,9 @@ ports = {
["symbol"] = "psystem_hreset", ["iname"] = "system", ["hname"] = "system", ["controllers"] = {
system_controller_hreset
}, ["legal"] = {0}
},{
["symbol"] = "psystem_compact", ["iname"] = "system", ["hname"] = "system", ["controllers"] = {
system_controller_compact
}, ["legal"] = {0}
}
};