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
+