diff --git a/Changes.txt b/Changes.txt index 012e1bda4..16364a58a 100644 --- a/Changes.txt +++ b/Changes.txt @@ -33,6 +33,8 @@ * Added different debug color luminances for player and missile copies. + * Added hotkeys for TV roll speed and toggling 'Developer settings' sets. + * Debugger: enhanced prompt's auto complete and history. * Debugger: added optional logging of breaks and traps. diff --git a/docs/index.html b/docs/index.html index 00b2cc38d..3ea94ea6d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1840,6 +1840,12 @@ Key (macOS) + + Toggle Developer Settings sets (player/developer) + Control + D + Control + D + + Toggle frame stats
(scanline count/FPS/BS type etc.) Alt + L @@ -1949,13 +1955,13 @@ - Decrease TV jitter roll + Decrease TV jitter roll time Shift-Control + J Shift-Control + J - Increase TV jitter roll + Increase TV jitter roll time Control + J Control + J diff --git a/src/common/PKeyboardHandler.cxx b/src/common/PKeyboardHandler.cxx index a21ee8c42..17f70a5e8 100644 --- a/src/common/PKeyboardHandler.cxx +++ b/src/common/PKeyboardHandler.cxx @@ -680,6 +680,7 @@ PhysicalKeyboardHandler::DefaultCommonMapping = { { Event::ToggleTurbo, KBDK_T, KBDM_CTRL }, { Event::JitterDecrease, KBDK_J, KBDM_SHIFT | KBDM_CTRL }, { Event::JitterIncrease, KBDK_J, KBDM_CTRL }, + { Event::ToggleDeveloperSet, KBDK_D, KBDM_CTRL }, { Event::ToggleJitter, KBDK_J, MOD3 }, { Event::ToggleFrameStats, KBDK_L, MOD3 }, { Event::ToggleTimeMachine, KBDK_T, MOD3 }, diff --git a/src/common/jsonDefinitions.hxx b/src/common/jsonDefinitions.hxx index 26136ab89..cfea0b31f 100644 --- a/src/common/jsonDefinitions.hxx +++ b/src/common/jsonDefinitions.hxx @@ -350,6 +350,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM(Event::Type, { {Event::PhosphorDecrease, "PhosphorDecrease"}, {Event::PhosphorIncrease, "PhosphorIncrease"}, {Event::TogglePhosphor, "TogglePhosphor"}, + {Event::ToggleDeveloperSet, "ToggleDeveloperSet"}, {Event::ToggleInter, "ToggleInter"}, {Event::JitterDecrease, "JitterDecrease"}, {Event::JitterIncrease, "JitterIncrease"}, diff --git a/src/common/module.mk b/src/common/module.mk index 7b5c09015..dc9f1fd1b 100644 --- a/src/common/module.mk +++ b/src/common/module.mk @@ -4,6 +4,7 @@ MODULE_OBJS := \ src/common/AudioQueue.o \ src/common/AudioSettings.o \ src/common/Base.o \ + src/common/DevSettingsHandler.o \ src/common/EventHandlerSDL2.o \ src/common/FBBackendSDL2.o \ src/common/FBSurfaceSDL2.o \ diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 86d9e7e3d..52098f912 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -63,6 +63,7 @@ #include "FrameLayout.hxx" #include "AudioQueue.hxx" #include "AudioSettings.hxx" +#include "DevSettingsHandler.hxx" #include "frame-manager/FrameManager.hxx" #include "frame-manager/FrameLayoutDetector.hxx" @@ -155,6 +156,9 @@ Console::Console(OSystem& osystem, unique_ptr& cart, // We can only initialize after all the devices/components have been created mySystem->initialize(); + // Create developer/player settings handler (handles switching sets) + myDevSettingsHandler = make_unique(myOSystem); + // Auto-detect NTSC/PAL mode if it's requested string autodetected = ""; myDisplayFormat = myProperties.get(PropType::Display_Format); @@ -1145,6 +1149,26 @@ int Console::gameRefreshRate() const myDisplayFormat == "SECAM60" ? 60 : 50; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Console::toggleDeveloperSet(bool toggle) +{ + bool devSettings = myOSystem.settings().getBool("dev.settings"); + if(toggle) + { + devSettings = !devSettings; + DevSettingsHandler::SettingsSet set = devSettings + ? DevSettingsHandler::SettingsSet::developer + : DevSettingsHandler::SettingsSet::player; + + myOSystem.settings().setValue("dev.settings", devSettings); + myDevSettingsHandler->loadSettings(set); + myDevSettingsHandler->applySettings(set); + } + const string message = (devSettings ? "Developer" : "Player") + string(" settings enabled"); + + myOSystem.frameBuffer().showTextMessage(message); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Console::toggleTIABit(TIABit bit, const string& bitname, bool show, bool toggle) const { diff --git a/src/emucore/Console.hxx b/src/emucore/Console.hxx index 449a5e089..9481026b5 100644 --- a/src/emucore/Console.hxx +++ b/src/emucore/Console.hxx @@ -29,6 +29,7 @@ class CompuMate; class Debugger; class AudioQueue; class AudioSettings; +class DevSettingsHandler; #include "bspf.hxx" #include "ConsoleIO.hxx" @@ -324,6 +325,11 @@ class Console : public Serializable, public ConsoleIO */ int gameRefreshRate() const; + /** + Toggle between developer settings sets (player/developer) + */ + void toggleDeveloperSet(bool toggle = true); + /** Toggles the TIA bit specified in the method name. */ @@ -453,6 +459,9 @@ class Console : public Serializable, public ConsoleIO // Pointers to the left and right controllers unique_ptr myLeftControl, myRightControl; + // Pointer to handler for switching developer settings sets + unique_ptr myDevSettingsHandler; + // Pointer to CompuMate handler (only used in CompuMate ROMs) shared_ptr myCMHandler; diff --git a/src/emucore/Event.hxx b/src/emucore/Event.hxx index afe24865b..ac1400393 100644 --- a/src/emucore/Event.hxx +++ b/src/emucore/Event.hxx @@ -112,7 +112,7 @@ class Event PreviousAttribute, NextAttribute, DecreaseAttribute, IncreaseAttribute, ScanlinesDecrease, ScanlinesIncrease, PhosphorDecrease, PhosphorIncrease, TogglePhosphor, ToggleInter, - JitterDecrease, JitterIncrease, ToggleJitter, + ToggleDeveloperSet, JitterDecrease, JitterIncrease, ToggleJitter, VolumeDecrease, VolumeIncrease, SoundToggle, diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index d0c6cd864..ba3ddbace 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -88,6 +88,7 @@ EventHandler::~EventHandler() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void EventHandler::initialize() { + // Create global key handler (handles all global hot keys) myGlobalKeyHandler = make_unique(myOSystem); // Create keyboard handler (to handle all physical keyboard functionality) @@ -937,6 +938,14 @@ void EventHandler::handleEvent(Event::Type event, Int32 value, bool repeated) } return; + case Event::ToggleDeveloperSet: + if(pressed && !repeated) + { + myOSystem.console().toggleDeveloperSet(); + myGlobalKeyHandler->setSetting(GlobalKeyHandler::Setting::DEVELOPER); + } + break; + case Event::ToggleJitter: if(pressed && !repeated) { @@ -2882,6 +2891,7 @@ EventHandler::EmulActionList EventHandler::ourEmulActionList = { { { Event::SettingIncrease, "Increase current setting", "" }, // Developer keys: + { Event::ToggleDeveloperSet, "Toggle developer settings sets", "" }, { Event::ToggleFrameStats, "Toggle frame stats", "" }, { Event::ToggleP0Bit, "Toggle TIA Player0 object", "" }, { Event::ToggleP0Collision, "Toggle TIA Player0 collisions", "" }, @@ -3131,7 +3141,7 @@ const Event::EventSet EventHandler::ComboEvents = { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const Event::EventSet EventHandler::DebugEvents = { - Event::DebuggerMode, + Event::DebuggerMode, Event::ToggleDeveloperSet, Event::ToggleFrameStats, Event::ToggleP0Collision, Event::ToggleP0Bit, Event::ToggleP1Collision, Event::ToggleP1Bit, Event::ToggleM0Collision, Event::ToggleM0Bit, Event::ToggleM1Collision, Event::ToggleM1Bit, diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 20840a5a8..ab229a1bb 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -522,7 +522,7 @@ class EventHandler #else REFRESH_SIZE = 0, #endif - EMUL_ACTIONLIST_SIZE = 218 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE, + EMUL_ACTIONLIST_SIZE = 219 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE, MENU_ACTIONLIST_SIZE = 19 ; diff --git a/src/emucore/GlobalKeyHandler.cxx b/src/emucore/GlobalKeyHandler.cxx index 6b9270e21..c7ae47b16 100644 --- a/src/emucore/GlobalKeyHandler.cxx +++ b/src/emucore/GlobalKeyHandler.cxx @@ -404,6 +404,7 @@ GlobalKeyHandler::SettingData GlobalKeyHandler::getSettingData(const Setting set {Setting::MOUSE_CONTROL, {false, std::bind(&EventHandler::changeMouseControl, &myOSystem.eventHandler(), _1)}}, // property, not persisted {Setting::MOUSE_RANGE, {true, std::bind(&Console::changePaddleAxesRange, &myOSystem.console(), _1)}}, // property, not persisted // *** Debug group *** + {Setting::DEVELOPER, {false, std::bind(&Console::toggleDeveloperSet, &myOSystem.console(), _1)}}, {Setting::STATS, {false, std::bind(&FrameBuffer::toggleFrameStats, &myOSystem.frameBuffer(), _1)}}, {Setting::P0_ENAM, {false, std::bind(&Console::toggleP0Bit, &myOSystem.console(), _1)}}, // debug, not persisted {Setting::P1_ENAM, {false, std::bind(&Console::toggleP1Bit, &myOSystem.console(), _1)}}, // debug, not persisted diff --git a/src/emucore/GlobalKeyHandler.hxx b/src/emucore/GlobalKeyHandler.hxx index ee378d0d6..ec9417f64 100644 --- a/src/emucore/GlobalKeyHandler.hxx +++ b/src/emucore/GlobalKeyHandler.hxx @@ -98,6 +98,7 @@ class GlobalKeyHandler MOUSE_CONTROL, MOUSE_RANGE, // *** Debug group *** + DEVELOPER, STATS, P0_ENAM, P1_ENAM, @@ -127,7 +128,7 @@ class GlobalKeyHandler END_AV_ADJ = INTERPOLATION, START_INPUT_ADJ = DIGITAL_DEADZONE, END_INPUT_ADJ = MOUSE_RANGE, - START_DEBUG_ADJ = STATS, + START_DEBUG_ADJ = DEVELOPER, END_DEBUG_ADJ = JITTER, }; @@ -195,6 +196,13 @@ class GlobalKeyHandler // they can be changed with global hotkeys while their message is still // displayed Setting myDirectSetting{Setting::NONE}; + + // Following constructors and assignment operators not supported + GlobalKeyHandler() = delete; + GlobalKeyHandler(const GlobalKeyHandler&) = delete; + GlobalKeyHandler(GlobalKeyHandler&&) = delete; + GlobalKeyHandler& operator=(const GlobalKeyHandler&) = delete; + GlobalKeyHandler& operator=(GlobalKeyHandler&&) = delete; }; #endif diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 6e96a39cb..fbd7d570a 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -23,6 +23,7 @@ #include "SaveKey.hxx" #include "AtariVox.hxx" #include "Settings.hxx" +#include "DevSettingsHandler.hxx" #include "EditTextWidget.hxx" #include "PopUpWidget.hxx" #include "RadioButtonWidget.hxx" @@ -46,7 +47,8 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& font, int max_w, int max_h) - : Dialog(osystem, parent, font, "Developer settings") + : Dialog(osystem, parent, font, "Developer settings"), + DevSettingsHandler(osystem) { const int lineHeight = Dialog::lineHeight(), fontWidth = Dialog::fontWidth(), @@ -662,128 +664,6 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) myTab->parentWidget(tabID)->setHelpAnchor("DeveloperDebugger"); } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::loadSettings(SettingsSet set) -{ - bool devSettings = set == SettingsSet::developer; - const string& prefix = devSettings ? "dev." : "plr."; - - myFrameStats[set] = instance().settings().getBool(prefix + "stats"); - myDetectedInfo[set] = instance().settings().getBool(prefix + "detectedinfo"); - myConsole[set] = instance().settings().getString(prefix + "console") == "7800" ? 1 : 0; - // Randomization - myRandomBank[set] = instance().settings().getBool(prefix + "bankrandom"); - myRandomizeTIA[set] = instance().settings().getBool(prefix + "tiarandom"); - myRandomizeRAM[set] = instance().settings().getBool(prefix + "ramrandom"); - myRandomizeCPU[set] = instance().settings().getString(prefix + "cpurandom"); - // Undriven TIA pins - myUndrivenPins[set] = devSettings ? instance().settings().getBool("dev.tiadriven") : false; -#ifdef DEBUGGER_SUPPORT - // Read from write ports break - myRWPortBreak[set] = devSettings ? instance().settings().getBool("dev.rwportbreak") : false; - // Write to read ports break - myWRPortBreak[set] = devSettings ? instance().settings().getBool("dev.wrportbreak") : false; -#endif - // Thumb ARM emulation exception - myThumbException[set] = devSettings ? instance().settings().getBool("dev.thumb.trapfatal") : false; - // AtariVox/SaveKey/PlusROM access - myExternAccess[set] = instance().settings().getBool(prefix + "extaccess"); - - // TIA tab - myTIAType[set] = devSettings ? instance().settings().getString("dev.tia.type") : "standard"; - myPlInvPhase[set] = devSettings ? instance().settings().getBool("dev.tia.plinvphase") : false; - myMsInvPhase[set] = devSettings ? instance().settings().getBool("dev.tia.msinvphase") : false; - myBlInvPhase[set] = devSettings ? instance().settings().getBool("dev.tia.blinvphase") : false; - myPFBits[set] = devSettings ? instance().settings().getBool("dev.tia.delaypfbits") : false; - myPFColor[set] = devSettings ? instance().settings().getBool("dev.tia.delaypfcolor") : false; - myBKColor[set] = devSettings ? instance().settings().getBool("dev.tia.delaybkcolor") : false; - myPlSwap[set] = devSettings ? instance().settings().getBool("dev.tia.delayplswap") : false; - myBlSwap[set] = devSettings ? instance().settings().getBool("dev.tia.delayblswap") : false; - - // Debug colors - myDebugColors[set] = instance().settings().getBool(prefix + "debugcolors"); - // PAL color-loss effect - myColorLoss[set] = instance().settings().getBool(prefix + "colorloss"); - // Jitter - myTVJitter[set] = instance().settings().getBool(prefix + "tv.jitter"); - myTVJitterRec[set] = instance().settings().getInt(prefix + "tv.jitter_recovery"); - - // States - myTimeMachine[set] = instance().settings().getBool(prefix + "timemachine"); - myStateSize[set] = instance().settings().getInt(prefix + "tm.size"); - myUncompressed[set] = instance().settings().getInt(prefix + "tm.uncompressed"); - myStateInterval[set] = instance().settings().getString(prefix + "tm.interval"); - myStateHorizon[set] = instance().settings().getString(prefix + "tm.horizon"); -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::saveSettings(SettingsSet set) -{ - bool devSettings = set == SettingsSet::developer; - const string& prefix = devSettings ? "dev." : "plr."; - - instance().settings().setValue(prefix + "stats", myFrameStats[set]); - instance().settings().setValue(prefix + "detectedinfo", myDetectedInfo[set]); - instance().settings().setValue(prefix + "console", myConsole[set] == 1 ? "7800" : "2600"); - if(instance().hasConsole()) - instance().eventHandler().set7800Mode(); - - // Randomization - instance().settings().setValue(prefix + "bankrandom", myRandomBank[set]); - instance().settings().setValue(prefix + "tiarandom", myRandomizeTIA[set]); - instance().settings().setValue(prefix + "ramrandom", myRandomizeRAM[set]); - instance().settings().setValue(prefix + "cpurandom", myRandomizeCPU[set]); - - if(devSettings) - { - // Undriven TIA pins - instance().settings().setValue("dev.tiadriven", myUndrivenPins[set]); - #ifdef DEBUGGER_SUPPORT - // Read from write ports break - instance().settings().setValue("dev.rwportbreak", myRWPortBreak[set]); - // Write to read ports break - instance().settings().setValue("dev.wrportbreak", myWRPortBreak[set]); - #endif - // Thumb ARM emulation exception - instance().settings().setValue("dev.thumb.trapfatal", myThumbException[set]); - } - - // AtariVox/SaveKey/PlusROM access - instance().settings().setValue(prefix + "extaccess", myExternAccess[set]); - - // TIA tab - if (devSettings) - { - instance().settings().setValue("dev.tia.type", myTIAType[set]); - if (BSPF::equalsIgnoreCase("custom", myTIAType[set])) - { - instance().settings().setValue("dev.tia.plinvphase", myPlInvPhase[set]); - instance().settings().setValue("dev.tia.msinvphase", myMsInvPhase[set]); - instance().settings().setValue("dev.tia.blinvphase", myBlInvPhase[set]); - instance().settings().setValue("dev.tia.delaypfbits", myPFBits[set]); - instance().settings().setValue("dev.tia.delaypfcolor", myPFColor[set]); - instance().settings().setValue("dev.tia.delaybkcolor", myBKColor[set]); - instance().settings().setValue("dev.tia.delayplswap", myPlSwap[set]); - instance().settings().setValue("dev.tia.delayblswap", myBlSwap[set]); - } - } - - // Debug colors - instance().settings().setValue(prefix + "debugcolors", myDebugColors[set]); - // PAL color loss - instance().settings().setValue(prefix + "colorloss", myColorLoss[set]); - // Jitter - instance().settings().setValue(prefix + "tv.jitter", myTVJitter[set]); - instance().settings().setValue(prefix + "tv.jitter_recovery", myTVJitterRec[set]); - - // States - instance().settings().setValue(prefix + "timemachine", myTimeMachine[set]); - instance().settings().setValue(prefix + "tm.size", myStateSize[set]); - instance().settings().setValue(prefix + "tm.uncompressed", myUncompressed[set]); - instance().settings().setValue(prefix + "tm.interval", myStateInterval[set]); - instance().settings().setValue(prefix + "tm.horizon", myStateHorizon[set]); -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::getWidgetStates(SettingsSet set) { @@ -947,39 +827,16 @@ void DeveloperDialog::loadConfig() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::saveConfig() { - instance().settings().setValue("dev.settings", mySettingsGroupEmulation->getSelected() == SettingsSet::developer); + bool devSettings = mySettingsGroupEmulation->getSelected() == SettingsSet::developer; + + instance().settings().setValue("dev.settings", devSettings); // copy current widget status into set... getWidgetStates(SettingsSet(mySettingsGroupEmulation->getSelected())); // ...and save both sets saveSettings(SettingsSet::player); saveSettings(SettingsSet::developer); - // activate the current settings - instance().frameBuffer().showFrameStats(myFrameStatsWidget->getState()); - // jitter - if(instance().hasConsole()) - { - instance().console().tia().toggleJitter(myTVJitterWidget->getState() ? 1 : 0); - instance().console().tia().setJitterRecoveryFactor(myTVJitterRecWidget->getValue()); - } - - // TIA tab - if(instance().hasConsole()) - { - instance().console().tia().setPlInvertedPhaseClock(myPlInvPhaseWidget->getState()); - instance().console().tia().setMsInvertedPhaseClock(myMsInvPhaseWidget->getState()); - instance().console().tia().setBlInvertedPhaseClock(myBlInvPhaseWidget->getState()); - instance().console().tia().setPFBitsDelay(myPFBitsWidget->getState()); - instance().console().tia().setPFColorDelay(myPFColorWidget->getState()); - instance().console().tia().setBKColorDelay(myBKColorWidget->getState()); - instance().console().tia().setPlSwapDelay(myPlSwapWidget->getState()); - instance().console().tia().setBlSwapDelay(myBlSwapWidget->getState()); - } - - handleEnableDebugColors(); - // PAL color loss - if(instance().hasConsole()) - instance().console().enableColorLoss(myColorLossWidget->getState()); + applySettings(devSettings ? SettingsSet::developer : SettingsSet::player); // Debug colours string dbgcolors; @@ -989,11 +846,6 @@ void DeveloperDialog::saveConfig() instance().console().tia().setFixedColorPalette(dbgcolors)) instance().settings().setValue("tia.dbgcolors", dbgcolors); - // update RewindManager - instance().state().rewindManager().setup(); - instance().state().setRewindMode(myTimeMachineWidget->getState() ? - StateManager::Mode::TimeMachine : StateManager::Mode::Off); - #ifdef DEBUGGER_SUPPORT // Debugger font style instance().settings().setValue("dbg.fontstyle", @@ -1009,13 +861,6 @@ void DeveloperDialog::saveConfig() instance().settings().setValue("dbg.ghostreadstrap", myGhostReadsTrapWidget->getState()); if(instance().hasConsole()) instance().console().system().m6502().setGhostReadsTrap(myGhostReadsTrapWidget->getState()); - - // Read from write ports and write to read ports breaks - if (instance().hasConsole()) - { - instance().console().system().m6502().setReadFromWritePortBreak(myRWPortBreakWidget->getState()); - instance().console().system().m6502().setWriteToReadPortBreak(myWRPortBreakWidget->getState()); - } #endif } @@ -1132,7 +977,7 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in case kConsole: handleConsole(); - break; + break; case kTVJitter: handleTVJitterChange(myTVJitterWidget->getState()); @@ -1142,10 +987,6 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in myTVJitterRecLabelWidget->setValue(myTVJitterRecWidget->getValue()); break; - case kPPinCmd: - instance().console().tia().driveUnusedPinsRandom(myUndrivenPinsWidget->getState()); - break; - case kTimeMachine: handleTimeMachine(); break; @@ -1228,12 +1069,16 @@ void DeveloperDialog::handleSettings(bool devSettings) if (mySettings != devSettings) { mySettings = devSettings; // block redundant events first! - SettingsSet set = devSettings ? SettingsSet::developer : SettingsSet::player; + SettingsSet set = devSettings ? SettingsSet::developer + : SettingsSet::player; mySettingsGroupEmulation->setSelected(set); mySettingsGroupTia->setSelected(set); mySettingsGroupVideo->setSelected(set); mySettingsGroupTM->setSelected(set); - getWidgetStates(devSettings ? SettingsSet::player : SettingsSet::developer); + // Save current widget states into old set + getWidgetStates(devSettings ? SettingsSet::player + : SettingsSet::developer); + // Load new set into widgets states setWidgetStates(set); } } @@ -1245,17 +1090,6 @@ void DeveloperDialog::handleTVJitterChange(bool enable) myTVJitterRecLabelWidget->setEnabled(enable); } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::handleEnableDebugColors() -{ - if(instance().hasConsole()) - { - bool fixed = instance().console().tia().usingFixedColors(); - if(fixed != myDebugColorsWidget->getState()) - instance().console().tia().toggleFixedColors(); - } -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleConsole() { @@ -1287,14 +1121,16 @@ void DeveloperDialog::handleTia() if(BSPF::equalsIgnoreCase("custom", myTIATypeWidget->getSelectedTag().toString())) { - myPlInvPhaseWidget->setState(myPlInvPhase[SettingsSet::developer]); - myMsInvPhaseWidget->setState(myMsInvPhase[SettingsSet::developer]); - myBlInvPhaseWidget->setState(myBlInvPhase[SettingsSet::developer]); - myPFBitsWidget->setState(myPFBits[SettingsSet::developer]); - myPFColorWidget->setState(myPFColor[SettingsSet::developer]); - myBKColorWidget->setState(myBKColor[SettingsSet::developer]); - myPlSwapWidget->setState(myPlSwap[SettingsSet::developer]); - myBlSwapWidget->setState(myBlSwap[SettingsSet::developer]); + SettingsSet set = SettingsSet::developer; + + myPlInvPhaseWidget->setState(myPlInvPhase[set]); + myMsInvPhaseWidget->setState(myMsInvPhase[set]); + myBlInvPhaseWidget->setState(myBlInvPhase[set]); + myPFBitsWidget->setState(myPFBits[set]); + myPFColorWidget->setState(myPFColor[set]); + myBKColorWidget->setState(myBKColor[set]); + myPlSwapWidget->setState(myPlSwap[set]); + myBlSwapWidget->setState(myBlSwap[set]); } else { diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index 57582ef1c..c19a5b7eb 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -29,6 +29,7 @@ class RadioButtonWidget; class SliderWidget; class StaticTextWidget; class ColorWidget; +class DevSettingsHandler; namespace GUI { class Font; @@ -36,8 +37,9 @@ namespace GUI { #include "bspf.hxx" #include "Dialog.hxx" +#include "DevSettingsHandler.hxx" -class DeveloperDialog : public Dialog +class DeveloperDialog : public Dialog, DevSettingsHandler { public: DeveloperDialog(OSystem& osystem, DialogContainer& parent, @@ -60,7 +62,6 @@ class DeveloperDialog : public Dialog kTIAType = 'DVtt', kTVJitter = 'DVjt', kTVJitterChanged = 'DVjr', - kPPinCmd = 'DVpn', kTimeMachine = 'DTtm', kSizeChanged = 'DTsz', kUncompressedChanged = 'DTuc', @@ -76,7 +77,6 @@ class DeveloperDialog : public Dialog kDFontSizeChanged = 'UIfs', #endif }; - enum SettingsSet { player = 0, developer = 1 }; // MUST be aligned with RewindManager! static constexpr int NUM_INTERVALS = 7; @@ -148,41 +148,6 @@ class DeveloperDialog : public Dialog #endif bool mySettings{false}; - // Emulator sets - std::array myFrameStats; - std::array myDetectedInfo; - std::array myExternAccess; - std::array myConsole; - std::array myRandomBank; - std::array myRandomizeTIA; - std::array myRandomizeRAM; - std::array myRandomizeCPU; - std::array myColorLoss; - std::array myTVJitter; - std::array myTVJitterRec; - std::array myDebugColors; - std::array myUndrivenPins; -#ifdef DEBUGGER_SUPPORT - std::array myRWPortBreak; - std::array myWRPortBreak; -#endif - std::array myThumbException; - // TIA sets - std::array myTIAType; - std::array myPlInvPhase; - std::array myMsInvPhase; - std::array myBlInvPhase; - std::array myPFBits; - std::array myPFColor; - std::array myBKColor; - std::array myPlSwap; - std::array myBlSwap; - // States sets - std::array myTimeMachine; - std::array myStateSize; - std::array myUncompressed; - std::array myStateInterval; - std::array myStateHorizon; private: void addEmulationTab(const GUI::Font& font); @@ -191,14 +156,11 @@ class DeveloperDialog : public Dialog void addVideoTab(const GUI::Font& font); void addDebuggerTab(const GUI::Font& font); - void loadSettings(SettingsSet set); - void saveSettings(SettingsSet set); void getWidgetStates(SettingsSet set); void setWidgetStates(SettingsSet set); void handleSettings(bool devSettings); void handleTVJitterChange(bool enable); - void handleEnableDebugColors(); void handleConsole(); void handleTia(); diff --git a/src/libretro/Makefile.common b/src/libretro/Makefile.common index a41865aa1..0a4769c35 100644 --- a/src/libretro/Makefile.common +++ b/src/libretro/Makefile.common @@ -17,6 +17,7 @@ SOURCES_CXX := \ $(CORE_DIR)/common/AudioQueue.cxx \ $(CORE_DIR)/common/AudioSettings.cxx \ $(CORE_DIR)/common/Base.cxx \ + $(CORE_DIR)/common/DevSettingsHandler.cxx \ $(CORE_DIR)/common/FpsMeter.cxx \ $(CORE_DIR)/common/FSNodeZIP.cxx \ $(CORE_DIR)/common/JoyMap.cxx \ diff --git a/src/libretro/Stella.vcxproj b/src/libretro/Stella.vcxproj index dabca20a5..f9e192b84 100644 --- a/src/libretro/Stella.vcxproj +++ b/src/libretro/Stella.vcxproj @@ -159,6 +159,7 @@ + diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index b66b64569..8741d4ac9 100755 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -614,6 +614,7 @@ + @@ -1778,6 +1779,7 @@ + diff --git a/src/windows/Stella.vcxproj.filters b/src/windows/Stella.vcxproj.filters index d3a301a74..9af38e18f 100644 --- a/src/windows/Stella.vcxproj.filters +++ b/src/windows/Stella.vcxproj.filters @@ -1116,6 +1116,9 @@ Source Files\emucore + + Source Files + @@ -2294,6 +2297,9 @@ Header Files\emucore + + Header Files +