"Time Machine" name change
|
@ -23,7 +23,7 @@
|
||||||
- improved cycle count (page penalties, sums created in disassembly)
|
- improved cycle count (page penalties, sums created in disassembly)
|
||||||
- improved handling of instruction masking opcodes (e.g. BIT)
|
- improved handling of instruction masking opcodes (e.g. BIT)
|
||||||
|
|
||||||
* Added "Continuous Rewind" mode, which automatically creates save states
|
* Added "Time Machine" mode, which automatically creates save states
|
||||||
in user-defined intervals. The user can navigate back and forth within
|
in user-defined intervals. The user can navigate back and forth within
|
||||||
these states inside the emulator and the debugger.
|
these states inside the emulator and the debugger.
|
||||||
|
|
||||||
|
|
|
@ -320,7 +320,7 @@ which will undo the previous Step/Trace/Scan/Frame... advance, the smaller butto
|
||||||
the left bottom (labeled '>') performs the unwind operation, which will undo the
|
the left bottom (labeled '>') performs the unwind operation, which will undo the
|
||||||
previous rewind operation. The rewind buffer is 100 levels deep by default, the
|
previous rewind operation. The rewind buffer is 100 levels deep by default, the
|
||||||
size can be configured e.g. in the
|
size can be configured e.g. in the
|
||||||
<b><a href="index.html#Debugger">Developer Settings</a> - States</b> dialog.<p>
|
<b><a href="index.html#Debugger">Developer Settings</a> - Time Machine</b> dialog.<p>
|
||||||
|
|
||||||
<p>The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).</p>
|
<p>The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).</p>
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 6.6 KiB |
|
@ -295,7 +295,7 @@
|
||||||
<li>TIA emulation supports full collision checking, with ability to disable
|
<li>TIA emulation supports full collision checking, with ability to disable
|
||||||
TIA sprites and collisions for each object separately</li>
|
TIA sprites and collisions for each object separately</li>
|
||||||
<li>Full system state save/load functionality</li>
|
<li>Full system state save/load functionality</li>
|
||||||
<li>Automatic save state creation which allows moving back and forth in the recorded timeline</li>
|
<li>Automatic save state creation ('Time Machine') which allows moving back and forth in the recorded timeline</li>
|
||||||
<li>Cross-platform UI including a built-in ROM launcher frontend</li>
|
<li>Cross-platform UI including a built-in ROM launcher frontend</li>
|
||||||
<li>Built-in extensive debugger, including static analysis with the Distella disassembler
|
<li>Built-in extensive debugger, including static analysis with the Distella disassembler
|
||||||
and dynamic analysis at runtime by tracking code/graphics/data sections, and
|
and dynamic analysis at runtime by tracking code/graphics/data sections, and
|
||||||
|
@ -1613,9 +1613,9 @@
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Toggle 'Continuous Rewind' mode</td>
|
<td>Toggle 'Time Machine' mode</td>
|
||||||
<td>Alt + r</td>
|
<td>Alt + t</td>
|
||||||
<td>Cmd + r</td>
|
<td>Cmd + t</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -2313,6 +2313,11 @@
|
||||||
<td>Set the size of the debugger window.</td>
|
<td>Set the size of the debugger window.</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><pre>-dbg.fontsize <small|medium|large|></pre></td>
|
||||||
|
<td>Set the font size in the debugger window.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><pre>-dbg.fontstyle <0|1|2|3></pre></td>
|
<td><pre>-dbg.fontstyle <0|1|2|3></pre></td>
|
||||||
<td>How to use bold fonts in the debugger window. '0' means all normal font,
|
<td>How to use bold fonts in the debugger window. '0' means all normal font,
|
||||||
|
@ -2502,23 +2507,23 @@
|
||||||
<td><pre>-<plr.|dev.>debugcolors <1|0></pre></td>
|
<td><pre>-<plr.|dev.>debugcolors <1|0></pre></td>
|
||||||
<td>Enable/disable the fixed debug colors.</td>
|
<td>Enable/disable the fixed debug colors.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><pre>-<plr.|dev.>rewind <1|0></pre></td>
|
<td><pre>-<plr.|dev.>timemachine <1|0></pre></td>
|
||||||
<td>Enables continuous rewind</td>
|
<td>Enables the Time Machine</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><pre>-<plr.|dev.>rewind.size <20 - 1000></pre></td>
|
<td><pre>-<plr.|dev.>tm.size <20 - 1000></pre></td>
|
||||||
<td>Defines the rewind buffer size.</td>
|
<td>Defines the Time Machine buffer size.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><pre>-<plr.|dev.>rewind.uncompressed <0 - 1000></pre></td>
|
<td><pre>-<plr.|dev.>tm.uncompressed <0 - 1000></pre></td>
|
||||||
<td>Defines the uncompressed rewind buffer size. Must be <= rewind buffer size.</td>
|
<td>Defines the uncompressed Time Machine buffer size. Must be <= Time Machine buffer size.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><pre>-<plr.|dev.>rewind.interval <1f|3f|10f|30f|1s|3s|10s></pre></td>
|
<td><pre>-<plr.|dev.>tm.interval <1f|3f|10f|30f|1s|3s|10s></pre></td>
|
||||||
<td>Defines the interval between two save states.</td>
|
<td>Defines the interval between two save states.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><pre>-<plr.|dev.>rewind.horizon <3s|10s|30s|1m|3m|10m|30m|60m></pre></td>
|
<td><pre>-<plr.|dev.>tm.horizon <3s|10s|30s|1m|3m|10m|30m|60m></pre></td>
|
||||||
<td>Defines the horizon of the rewind buffer.</td>
|
<td>Defines the horizon of the Time Machine.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
|
@ -3062,7 +3067,7 @@
|
||||||
<p><b>Developer Settings</b> dialog (Video):</p>
|
<p><b>Developer Settings</b> dialog (Video):</p>
|
||||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="graphics/options_developer_dbgcolors.png"></td>
|
<td><img src="graphics/options_developer_video.png"></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<table border="1" cellpadding="4">
|
<table border="1" cellpadding="4">
|
||||||
|
@ -3086,48 +3091,47 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p><b>Developer Settings</b> dialog (States) <b>TODO</b></p>
|
<p><b>Developer Settings</b> dialog (Time Machine)</p>
|
||||||
<table border="5" cellpadding="2" frame="box" rules="none">
|
<table border="5" cellpadding="2" frame="box" rules="none">
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="graphics/options_developer_states.png"></td>
|
<td><img src="graphics/options_developer_timemachine.png"></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<table border="1" cellpadding="4">
|
<table border="1" cellpadding="4">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th>
|
<th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td>Continuous rewind</td>
|
<td>Time Machine</td>
|
||||||
<td>
|
<td>
|
||||||
When continuous rewind is enabled, Stella will automatically
|
When the Time Machine is enabled, Stella will automatically
|
||||||
create new save states in the interval described below. The user
|
buffer save states in the interval described below. The user
|
||||||
can then navigate back and forth within the recorded timeline.</br>
|
can then navigate back and forth within the recorded timeline.</br>
|
||||||
Note: This buffer is identical with the one described in
|
Note: This buffer is identical with the one described in
|
||||||
<a href="debugger.html#GlobalButtons"><b>Debugger/Global Buttons</b></a>.
|
<a href="debugger.html#GlobalButtons"><b>Debugger - Global Buttons</b></a>.
|
||||||
It is independent from the save states manually created
|
It is independent from the save states manually created with F9.
|
||||||
with F9.
|
|
||||||
</td>
|
</td>
|
||||||
<td>-plr.rewind<br>-dev.rewind</td>
|
<td>-plr.timemachine<br>-dev.timemachine</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td>Buffer size</td>
|
<td>Buffer size</td>
|
||||||
<td>
|
<td>
|
||||||
Defines the rewind buffer size. The larger the buffer, the less
|
Defines the Time Machine buffer size. The larger the buffer, the less
|
||||||
save states have to be compressed to reach the horizon.
|
save states have to be compressed to reach the horizon.
|
||||||
</td>
|
</td>
|
||||||
<td>-plr.rewind.size<br>-dev.rewind.size</td>
|
<td>-plr.tm.size<br>-dev.tm.size</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td>Uncompressed size</td>
|
<td>Uncompressed size (*)</td>
|
||||||
<td>
|
<td>
|
||||||
Defines the uncompressed rewind buffer size. States within this
|
Defines the uncompressed Time Machine buffer size. States within this
|
||||||
area will not be compressed and keep their initial interval.</td>
|
area will not be compressed and keep their initial interval.</td>
|
||||||
<td><span style="white-space:nowrap">-plr.rewind.uncompressed<br>-dev.rewind.uncompressed</span></td>
|
<td><span style="white-space:nowrap">-plr.tm.uncompressed<br>-dev.tm.uncompressed</span></td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td>Interval</td>
|
<td>Interval</td>
|
||||||
<td>Defines the interval between two save states when they are created.</td>
|
<td>Defines the interval between two save states when they are created.</td>
|
||||||
<td>-plr.rewind.interval<br>-dev.rewind.interval</td>
|
<td>-plr.tm.interval<br>-dev.tm.interval</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td>Horizon</td>
|
<td>Horizon</td>
|
||||||
<td>
|
<td>
|
||||||
Defines the horizon of the rewind buffer. A large horizon allows
|
Defines the horizon of the Time Machine. A large horizon allows
|
||||||
going back further in time. To reach the horizon, save states
|
going back further in time. To reach the horizon, save states
|
||||||
will be compressed (*). This means that more and more intermediate
|
will be compressed (*). This means that more and more intermediate
|
||||||
states will be removed and the interval between save states
|
states will be removed and the interval between save states
|
||||||
|
@ -3136,7 +3140,7 @@
|
||||||
(*) Compresion only works if 'Uncompressed size' is smaller than
|
(*) Compresion only works if 'Uncompressed size' is smaller than
|
||||||
'Buffer size'.
|
'Buffer size'.
|
||||||
</td>
|
</td>
|
||||||
<td>-plr.rewind.horizon<br>-dev.rewind.horizon</td>
|
<td>-plr.tm.horizon<br>-dev.tm.horizon</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
|
@ -3151,8 +3155,8 @@
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<table border="1" cellpadding="4">
|
<table border="1" cellpadding="4">
|
||||||
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr>
|
<tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr>
|
||||||
|
<tr><td>Font size</td><td>Self-explanatory (requires ROM reload)</td><td>-dbg.fontsize</td></tr>
|
||||||
<tr><td>Font style</td><td>Self-explanatory (requires ROM reload)</td><td>-dbg.fontstyle</td></tr>
|
<tr><td>Font style</td><td>Self-explanatory (requires ROM reload)</td><td>-dbg.fontstyle</td></tr>
|
||||||
<tr><td>Font size</td><td>Self-explanatory (requires ROM reload)</td><td>N/A</td></tr>
|
|
||||||
<tr><td>Debugger width/height</td><td>Self-explanatory (requires ROM reload)</td><td>-dbg.res</td></tr>
|
<tr><td>Debugger width/height</td><td>Self-explanatory (requires ROM reload)</td><td>-dbg.res</td></tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -35,24 +35,24 @@ RewindManager::RewindManager(OSystem& system, StateManager& statemgr)
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void RewindManager::setup()
|
void RewindManager::setup()
|
||||||
{
|
{
|
||||||
myLastContinuousAdd = false;
|
myLastTimeMachineAdd = false;
|
||||||
|
|
||||||
string prefix = myOSystem.settings().getBool("dev.settings") ? "dev." : "plr.";
|
string prefix = myOSystem.settings().getBool("dev.settings") ? "dev." : "plr.";
|
||||||
|
|
||||||
mySize = myOSystem.settings().getInt(prefix + "rewind.size");
|
mySize = myOSystem.settings().getInt(prefix + "tm.size");
|
||||||
if(mySize != myStateList.capacity())
|
if(mySize != myStateList.capacity())
|
||||||
myStateList.resize(mySize);
|
myStateList.resize(mySize);
|
||||||
|
|
||||||
myUncompressed = myOSystem.settings().getInt(prefix + "rewind.uncompressed");
|
myUncompressed = myOSystem.settings().getInt(prefix + "tm.uncompressed");
|
||||||
|
|
||||||
myInterval = INTERVAL_CYCLES[0];
|
myInterval = INTERVAL_CYCLES[0];
|
||||||
for(int i = 0; i < NUM_INTERVALS; ++i)
|
for(int i = 0; i < NUM_INTERVALS; ++i)
|
||||||
if(INT_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.interval"))
|
if(INT_SETTINGS[i] == myOSystem.settings().getString(prefix + "tm.interval"))
|
||||||
myInterval = INTERVAL_CYCLES[i];
|
myInterval = INTERVAL_CYCLES[i];
|
||||||
|
|
||||||
myHorizon = HORIZON_CYCLES[NUM_HORIZONS-1];
|
myHorizon = HORIZON_CYCLES[NUM_HORIZONS-1];
|
||||||
for(int i = 0; i < NUM_HORIZONS; ++i)
|
for(int i = 0; i < NUM_HORIZONS; ++i)
|
||||||
if(HOR_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.horizon"))
|
if(HOR_SETTINGS[i] == myOSystem.settings().getString(prefix + "tm.horizon"))
|
||||||
myHorizon = HORIZON_CYCLES[i];
|
myHorizon = HORIZON_CYCLES[i];
|
||||||
|
|
||||||
// calc interval growth factor
|
// calc interval growth factor
|
||||||
|
@ -91,10 +91,10 @@ void RewindManager::setup()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool RewindManager::addState(const string& message, bool continuous)
|
bool RewindManager::addState(const string& message, bool timeMachine)
|
||||||
{
|
{
|
||||||
// only check for continuous rewind states, ignore for debugger
|
// only check for Time Machine states, ignore for debugger
|
||||||
if(continuous && myStateList.currentIsValid())
|
if(timeMachine && myStateList.currentIsValid())
|
||||||
{
|
{
|
||||||
// check if the current state has the right interval from the last state
|
// check if the current state has the right interval from the last state
|
||||||
RewindState& lastState = myStateList.current();
|
RewindState& lastState = myStateList.current();
|
||||||
|
@ -130,7 +130,7 @@ bool RewindManager::addState(const string& message, bool continuous)
|
||||||
{
|
{
|
||||||
state.message = message;
|
state.message = message;
|
||||||
state.cycles = myOSystem.console().tia().cycles();
|
state.cycles = myOSystem.console().tia().cycles();
|
||||||
myLastContinuousAdd = continuous;
|
myLastTimeMachineAdd = timeMachine;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -147,14 +147,14 @@ uInt32 RewindManager::rewindState(uInt32 numStates)
|
||||||
{
|
{
|
||||||
if(!atFirst())
|
if(!atFirst())
|
||||||
{
|
{
|
||||||
if(!myLastContinuousAdd)
|
if(!myLastTimeMachineAdd)
|
||||||
// Set internal current iterator to previous state (back in time),
|
// Set internal current iterator to previous state (back in time),
|
||||||
// since we will now processed this state
|
// since we will now processed this state
|
||||||
myStateList.moveToPrevious();
|
myStateList.moveToPrevious();
|
||||||
else
|
else
|
||||||
// except fif the last state was added automatically,
|
// except fif the last state was added automatically,
|
||||||
// because that already happened one interval before
|
// because that already happened one interval before
|
||||||
myLastContinuousAdd = false;
|
myLastTimeMachineAdd = false;
|
||||||
|
|
||||||
RewindState& state = myStateList.current();
|
RewindState& state = myStateList.current();
|
||||||
Serializer& s = state.data;
|
Serializer& s = state.data;
|
||||||
|
|
|
@ -103,7 +103,7 @@ class RewindManager
|
||||||
|
|
||||||
@param message Message to display when replaying this state
|
@param message Message to display when replaying this state
|
||||||
*/
|
*/
|
||||||
bool addState(const string& message, bool continuous = false);
|
bool addState(const string& message, bool timeMachine = false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Rewind one level of the state list, and display the message associated
|
Rewind one level of the state list, and display the message associated
|
||||||
|
@ -142,7 +142,7 @@ class RewindManager
|
||||||
uInt32 myInterval;
|
uInt32 myInterval;
|
||||||
uInt64 myHorizon;
|
uInt64 myHorizon;
|
||||||
double myFactor;
|
double myFactor;
|
||||||
bool myLastContinuousAdd;
|
bool myLastTimeMachineAdd;
|
||||||
|
|
||||||
struct RewindState {
|
struct RewindState {
|
||||||
Serializer data; // actual save state
|
Serializer data; // actual save state
|
||||||
|
|
|
@ -129,16 +129,16 @@ void StateManager::toggleRecordMode()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void StateManager::toggleRewindMode()
|
void StateManager::toggleTimeMachine()
|
||||||
{
|
{
|
||||||
bool devSettings = myOSystem.settings().getBool("dev.settings");
|
bool devSettings = myOSystem.settings().getBool("dev.settings");
|
||||||
|
|
||||||
myActiveMode = myActiveMode == Mode::Rewind ? Mode::Off : Mode::Rewind;
|
myActiveMode = myActiveMode == Mode::TimeMachine ? Mode::Off : Mode::TimeMachine;
|
||||||
if(myActiveMode == Mode::Rewind)
|
if(myActiveMode == Mode::TimeMachine)
|
||||||
myOSystem.frameBuffer().showMessage("Continuous rewind enabled");
|
myOSystem.frameBuffer().showMessage("Time Machine enabled");
|
||||||
else
|
else
|
||||||
myOSystem.frameBuffer().showMessage("Continuous rewind disabled");
|
myOSystem.frameBuffer().showMessage("Time Machine disabled");
|
||||||
myOSystem.settings().setValue(devSettings ? "dev.rewind" : "plr.rewind", myActiveMode == Mode::Rewind);
|
myOSystem.settings().setValue(devSettings ? "dev.timemachine" : "plr.timemachine", myActiveMode == Mode::TimeMachine);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -160,8 +160,8 @@ void StateManager::update()
|
||||||
{
|
{
|
||||||
switch(myActiveMode)
|
switch(myActiveMode)
|
||||||
{
|
{
|
||||||
case Mode::Rewind:
|
case Mode::TimeMachine:
|
||||||
myRewindManager->addState("continuous rewind", true);
|
myRewindManager->addState("Time Machine", true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -357,7 +357,7 @@ void StateManager::reset()
|
||||||
{
|
{
|
||||||
myRewindManager->clear();
|
myRewindManager->clear();
|
||||||
myActiveMode = myOSystem.settings().getBool(
|
myActiveMode = myOSystem.settings().getBool(
|
||||||
myOSystem.settings().getBool("dev.settings") ? "dev.rewind" : "plr.rewind") ? Mode::Rewind : Mode::Off;
|
myOSystem.settings().getBool("dev.settings") ? "dev.timemachine" : "plr.timemachine") ? Mode::TimeMachine : Mode::Off;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
myCurrentSlot = 0;
|
myCurrentSlot = 0;
|
||||||
|
|
|
@ -35,7 +35,7 @@ class StateManager
|
||||||
public:
|
public:
|
||||||
enum class Mode {
|
enum class Mode {
|
||||||
Off,
|
Off,
|
||||||
Rewind,
|
TimeMachine,
|
||||||
MovieRecord,
|
MovieRecord,
|
||||||
MoviePlayback
|
MoviePlayback
|
||||||
};
|
};
|
||||||
|
@ -63,7 +63,7 @@ class StateManager
|
||||||
Toggle state rewind recording mode; this uses the RewindManager
|
Toggle state rewind recording mode; this uses the RewindManager
|
||||||
for its functionality.
|
for its functionality.
|
||||||
*/
|
*/
|
||||||
void toggleRewindMode();
|
void toggleTimeMachine();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets state rewind recording mode; this uses the RewindManager
|
Sets state rewind recording mode; this uses the RewindManager
|
||||||
|
|
|
@ -142,6 +142,12 @@ int CpuDebug::c() const
|
||||||
return mySystem.m6502().C;
|
return mySystem.m6502().C;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
int CpuDebug::cycles() const
|
||||||
|
{
|
||||||
|
return mySystem.m6502().cycles;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void CpuDebug::setPC(int pc)
|
void CpuDebug::setPC(int pc)
|
||||||
{
|
{
|
||||||
|
@ -220,6 +226,12 @@ void CpuDebug::setC(bool on)
|
||||||
my6502.C = on;
|
my6502.C = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void CpuDebug::setCycles(int cycles)
|
||||||
|
{
|
||||||
|
my6502.cycles = cycles;
|
||||||
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void CpuDebug::toggleN()
|
void CpuDebug::toggleN()
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,6 +61,8 @@ class CpuDebug : public DebuggerSystem
|
||||||
int z() const;
|
int z() const;
|
||||||
int c() const;
|
int c() const;
|
||||||
|
|
||||||
|
int cycles() const;
|
||||||
|
|
||||||
void setPC(int pc);
|
void setPC(int pc);
|
||||||
void setSP(int sp);
|
void setSP(int sp);
|
||||||
void setPS(int ps);
|
void setPS(int ps);
|
||||||
|
@ -76,6 +78,8 @@ class CpuDebug : public DebuggerSystem
|
||||||
void setZ(bool on);
|
void setZ(bool on);
|
||||||
void setC(bool on);
|
void setC(bool on);
|
||||||
|
|
||||||
|
void setCycles(int cycles);
|
||||||
|
|
||||||
void toggleN();
|
void toggleN();
|
||||||
void toggleV();
|
void toggleV();
|
||||||
void toggleB();
|
void toggleB();
|
||||||
|
|
|
@ -299,25 +299,25 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state)
|
||||||
switch(key)
|
switch(key)
|
||||||
{
|
{
|
||||||
case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states
|
case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states
|
||||||
myOSystem.frameBuffer().resetPauseDelay();
|
myOSystem.frameBuffer().setPauseDelay();
|
||||||
setEventState(S_PAUSE);
|
setEventState(S_PAUSE);
|
||||||
myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1);
|
myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states
|
case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states
|
||||||
myOSystem.frameBuffer().resetPauseDelay();
|
myOSystem.frameBuffer().setPauseDelay();
|
||||||
setEventState(S_PAUSE);
|
setEventState(S_PAUSE);
|
||||||
myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1);
|
myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBDK_DOWN: // Alt-down rewinds to start of list
|
case KBDK_DOWN: // Alt-down rewinds to start of list
|
||||||
myOSystem.frameBuffer().resetPauseDelay();
|
myOSystem.frameBuffer().setPauseDelay();
|
||||||
setEventState(S_PAUSE);
|
setEventState(S_PAUSE);
|
||||||
myOSystem.state().rewindState(1000);
|
myOSystem.state().rewindState(1000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBDK_UP: // Alt-up rewinds to end of list
|
case KBDK_UP: // Alt-up rewinds to end of list
|
||||||
myOSystem.frameBuffer().resetPauseDelay();
|
myOSystem.frameBuffer().setPauseDelay();
|
||||||
setEventState(S_PAUSE);
|
setEventState(S_PAUSE);
|
||||||
myOSystem.state().unwindState(1000);
|
myOSystem.state().unwindState(1000);
|
||||||
break;
|
break;
|
||||||
|
@ -489,8 +489,8 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state)
|
||||||
myOSystem.frameBuffer().toggleFrameStats();
|
myOSystem.frameBuffer().toggleFrameStats();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBDK_R: // Alt-r toggles continuous store rewind states
|
case KBDK_T: // Alt-t toggles Time Machine
|
||||||
myOSystem.state().toggleRewindMode();
|
myOSystem.state().toggleTimeMachine();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KBDK_S:
|
case KBDK_S:
|
||||||
|
|
|
@ -301,7 +301,7 @@ void FrameBuffer::update()
|
||||||
// Show a pause message immediately and then every 7 seconds
|
// Show a pause message immediately and then every 7 seconds
|
||||||
if (myPausedCount-- <= 0)
|
if (myPausedCount-- <= 0)
|
||||||
{
|
{
|
||||||
resetPauseDelay();
|
myPausedCount = uInt32(7 * myOSystem.frameRate());
|
||||||
showMessage("Paused", MessagePosition::MiddleCenter);
|
showMessage("Paused", MessagePosition::MiddleCenter);
|
||||||
}
|
}
|
||||||
break; // S_PAUSE
|
break; // S_PAUSE
|
||||||
|
@ -472,9 +472,9 @@ inline void FrameBuffer::drawMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBuffer::resetPauseDelay()
|
void FrameBuffer::setPauseDelay()
|
||||||
{
|
{
|
||||||
myPausedCount = uInt32(7 * myOSystem.frameRate());
|
myPausedCount = uInt32(2 * myOSystem.frameRate());
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -147,7 +147,7 @@ class FrameBuffer
|
||||||
/**
|
/**
|
||||||
Reset 'Paused' display delay counter
|
Reset 'Paused' display delay counter
|
||||||
*/
|
*/
|
||||||
void resetPauseDelay();
|
void setPauseDelay();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Allocate a new surface. The FrameBuffer class takes all responsibility
|
Allocate a new surface. The FrameBuffer class takes all responsibility
|
||||||
|
|
|
@ -155,11 +155,11 @@ Settings::Settings(OSystem& osystem)
|
||||||
setInternal("plr.debugcolors", "false");
|
setInternal("plr.debugcolors", "false");
|
||||||
setInternal("plr.tiadriven", "false");
|
setInternal("plr.tiadriven", "false");
|
||||||
setInternal("plr.console", "2600"); // 7800
|
setInternal("plr.console", "2600"); // 7800
|
||||||
setInternal("plr.rewind", false);
|
setInternal("plr.timemachine", false);
|
||||||
setInternal("plr.rewind.size", 100);
|
setInternal("plr.tm.size", 100);
|
||||||
setInternal("plr.rewind.uncompressed", 30);
|
setInternal("plr.tm.uncompressed", 30);
|
||||||
setInternal("plr.rewind.interval", "30f"); // = 0.5 seconds
|
setInternal("plr.tm.interval", "30f"); // = 0.5 seconds
|
||||||
setInternal("plr.rewind.horizon", "10m"); // = ~10 minutes
|
setInternal("plr.tm.horizon", "10m"); // = ~10 minutes
|
||||||
// Thumb ARM emulation options
|
// Thumb ARM emulation options
|
||||||
setInternal("plr.thumb.trapfatal", "false");
|
setInternal("plr.thumb.trapfatal", "false");
|
||||||
|
|
||||||
|
@ -175,11 +175,11 @@ Settings::Settings(OSystem& osystem)
|
||||||
setInternal("dev.debugcolors", "false");
|
setInternal("dev.debugcolors", "false");
|
||||||
setInternal("dev.tiadriven", "true");
|
setInternal("dev.tiadriven", "true");
|
||||||
setInternal("dev.console", "2600"); // 7800
|
setInternal("dev.console", "2600"); // 7800
|
||||||
setInternal("dev.rewind", true);
|
setInternal("dev.timemachine", true);
|
||||||
setInternal("dev.rewind.size", 100);
|
setInternal("dev.tm.size", 100);
|
||||||
setInternal("dev.rewind.uncompressed", 60);
|
setInternal("dev.tm.uncompressed", 60);
|
||||||
setInternal("dev.rewind.interval", "1f"); // = 1 frame
|
setInternal("dev.tm.interval", "1f"); // = 1 frame
|
||||||
setInternal("dev.rewind.horizon", "10s"); // = ~10 seconds
|
setInternal("dev.tm.horizon", "10s"); // = ~10 seconds
|
||||||
// Thumb ARM emulation options
|
// Thumb ARM emulation options
|
||||||
setInternal("dev.thumb.trapfatal", "true");
|
setInternal("dev.thumb.trapfatal", "true");
|
||||||
}
|
}
|
||||||
|
@ -319,40 +319,40 @@ void Settings::validate()
|
||||||
i = getInt("dev.tv.jitter_recovery");
|
i = getInt("dev.tv.jitter_recovery");
|
||||||
if(i < 1 || i > 20) setInternal("dev.tv.jitter_recovery", "2");
|
if(i < 1 || i > 20) setInternal("dev.tv.jitter_recovery", "2");
|
||||||
|
|
||||||
int size = getInt("dev.rewind.size");
|
int size = getInt("dev.tm.size");
|
||||||
if(size < 20 || size > 1000)
|
if(size < 20 || size > 1000)
|
||||||
{
|
{
|
||||||
setInternal("dev.rewind.size", 20);
|
setInternal("dev.tm.size", 20);
|
||||||
size = 20;
|
size = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = getInt("dev.rewind.uncompressed");
|
i = getInt("dev.tm.uncompressed");
|
||||||
if(i < 0 || i > size) setInternal("dev.rewind.uncompressed", size);
|
if(i < 0 || i > size) setInternal("dev.tm.uncompressed", size);
|
||||||
|
|
||||||
/*i = getInt("dev.rewind.interval");
|
/*i = getInt("dev.tm.interval");
|
||||||
if(i < 0 || i > 5) setInternal("dev.rewind.interval", 0);
|
if(i < 0 || i > 5) setInternal("dev.tm.interval", 0);
|
||||||
|
|
||||||
i = getInt("dev.rewind.horizon");
|
i = getInt("dev.tm.horizon");
|
||||||
if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 1);*/
|
if(i < 0 || i > 6) setInternal("dev.tm.horizon", 1);*/
|
||||||
|
|
||||||
i = getInt("plr.tv.jitter_recovery");
|
i = getInt("plr.tv.jitter_recovery");
|
||||||
if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10");
|
if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10");
|
||||||
|
|
||||||
size = getInt("plr.rewind.size");
|
size = getInt("plr.tm.size");
|
||||||
if(size < 20 || size > 1000)
|
if(size < 20 || size > 1000)
|
||||||
{
|
{
|
||||||
setInternal("plr.rewind.size", 20);
|
setInternal("plr.tm.size", 20);
|
||||||
size = 20;
|
size = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
i = getInt("plr.rewind.uncompressed");
|
i = getInt("plr.tm.uncompressed");
|
||||||
if(i < 0 || i > size) setInternal("plr.rewind.uncompressed", size);
|
if(i < 0 || i > size) setInternal("plr.tm.uncompressed", size);
|
||||||
|
|
||||||
/*i = getInt("plr.rewind.interval");
|
/*i = getInt("plr.tm.interval");
|
||||||
if(i < 0 || i > 5) setInternal("plr.rewind.interval", 3);
|
if(i < 0 || i > 5) setInternal("plr.tm.interval", 3);
|
||||||
|
|
||||||
i = getInt("plr.rewind.horizon");
|
i = getInt("plr.tm.horizon");
|
||||||
if(i < 0 || i > 6) setInternal("plr.rewind.horizon", 5);*/
|
if(i < 0 || i > 6) setInternal("plr.tm.horizon", 5);*/
|
||||||
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
i = getInt("volume");
|
i = getInt("volume");
|
||||||
|
|
|
@ -63,7 +63,7 @@ DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent,
|
||||||
|
|
||||||
addEmulationTab(font);
|
addEmulationTab(font);
|
||||||
addVideoTab(font);
|
addVideoTab(font);
|
||||||
addStatesTab(font);
|
addTimeMachineTab(font);
|
||||||
addDebuggerTab(font);
|
addDebuggerTab(font);
|
||||||
addDefaultOKCancelButtons(font);
|
addDefaultOKCancelButtons(font);
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void DeveloperDialog::addStatesTab(const GUI::Font& font)
|
void DeveloperDialog::addTimeMachineTab(const GUI::Font& font)
|
||||||
{
|
{
|
||||||
const string INTERVALS[NUM_INTERVALS] = {
|
const string INTERVALS[NUM_INTERVALS] = {
|
||||||
" 1 frame",
|
" 1 frame",
|
||||||
|
@ -308,7 +308,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font)
|
||||||
int fontHeight = font.getFontHeight();
|
int fontHeight = font.getFontHeight();
|
||||||
WidgetArray wid;
|
WidgetArray wid;
|
||||||
VariantList items;
|
VariantList items;
|
||||||
int tabID = myTab->addTab("States");
|
int tabID = myTab->addTab("Time Machine");
|
||||||
|
|
||||||
// settings set
|
// settings set
|
||||||
mySettingsGroup2 = new RadioButtonGroup();
|
mySettingsGroup2 = new RadioButtonGroup();
|
||||||
|
@ -321,9 +321,9 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font)
|
||||||
wid.push_back(r);
|
wid.push_back(r);
|
||||||
ypos += lineHeight + VGAP * 1;
|
ypos += lineHeight + VGAP * 1;
|
||||||
|
|
||||||
myContinuousRewindWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1,
|
myTimeMachineWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1,
|
||||||
"Continuous rewind", kRewind);
|
"Time Machine", kTimeMachine);
|
||||||
wid.push_back(myContinuousRewindWidget);
|
wid.push_back(myTimeMachineWidget);
|
||||||
ypos += lineHeight + VGAP;
|
ypos += lineHeight + VGAP;
|
||||||
|
|
||||||
int sWidth = font.getMaxCharWidth() * 8;
|
int sWidth = font.getMaxCharWidth() * 8;
|
||||||
|
@ -518,11 +518,11 @@ void DeveloperDialog::loadSettings(SettingsSet set)
|
||||||
myTVJitterRec[set] = instance().settings().getInt(prefix + "tv.jitter_recovery");
|
myTVJitterRec[set] = instance().settings().getInt(prefix + "tv.jitter_recovery");
|
||||||
|
|
||||||
// States
|
// States
|
||||||
myContinuousRewind[set] = instance().settings().getBool(prefix + "rewind");
|
myTimeMachine[set] = instance().settings().getBool(prefix + "timemachine");
|
||||||
myStateSize[set] = instance().settings().getInt(prefix + "rewind.size");
|
myStateSize[set] = instance().settings().getInt(prefix + "tm.size");
|
||||||
myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed");
|
myUncompressed[set] = instance().settings().getInt(prefix + "tm.uncompressed");
|
||||||
myStateInterval[set] = instance().settings().getString(prefix + "rewind.interval");
|
myStateInterval[set] = instance().settings().getString(prefix + "tm.interval");
|
||||||
myStateHorizon[set] = instance().settings().getString(prefix + "rewind.horizon");
|
myStateHorizon[set] = instance().settings().getString(prefix + "tm.horizon");
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -550,11 +550,11 @@ void DeveloperDialog::saveSettings(SettingsSet set)
|
||||||
instance().settings().setValue(prefix + "tv.jitter_recovery", myTVJitterRec[set]);
|
instance().settings().setValue(prefix + "tv.jitter_recovery", myTVJitterRec[set]);
|
||||||
|
|
||||||
// States
|
// States
|
||||||
instance().settings().setValue(prefix + "rewind", myContinuousRewind[set]);
|
instance().settings().setValue(prefix + "timemachine", myTimeMachine[set]);
|
||||||
instance().settings().setValue(prefix + "rewind.size", myStateSize[set]);
|
instance().settings().setValue(prefix + "tm.size", myStateSize[set]);
|
||||||
instance().settings().setValue(prefix + "rewind.uncompressed", myUncompressed[set]);
|
instance().settings().setValue(prefix + "tm.uncompressed", myUncompressed[set]);
|
||||||
instance().settings().setValue(prefix + "rewind.interval", myStateInterval[set]);
|
instance().settings().setValue(prefix + "tm.interval", myStateInterval[set]);
|
||||||
instance().settings().setValue(prefix + "rewind.horizon", myStateHorizon[set]);
|
instance().settings().setValue(prefix + "tm.horizon", myStateHorizon[set]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -585,7 +585,7 @@ void DeveloperDialog::getWidgetStates(SettingsSet set)
|
||||||
myTVJitterRec[set] = myTVJitterRecWidget->getValue();
|
myTVJitterRec[set] = myTVJitterRecWidget->getValue();
|
||||||
|
|
||||||
// States
|
// States
|
||||||
myContinuousRewind[set] = myContinuousRewindWidget->getState();
|
myTimeMachine[set] = myTimeMachineWidget->getState();
|
||||||
myStateSize[set] = myStateSizeWidget->getValue();
|
myStateSize[set] = myStateSizeWidget->getValue();
|
||||||
myUncompressed[set] = myUncompressedWidget->getValue();
|
myUncompressed[set] = myUncompressedWidget->getValue();
|
||||||
myStateInterval[set] = myStateIntervalWidget->getSelected();
|
myStateInterval[set] = myStateIntervalWidget->getSelected();
|
||||||
|
@ -625,13 +625,13 @@ void DeveloperDialog::setWidgetStates(SettingsSet set)
|
||||||
handleEnableDebugColors();
|
handleEnableDebugColors();
|
||||||
|
|
||||||
// States
|
// States
|
||||||
myContinuousRewindWidget->setState(myContinuousRewind[set]);
|
myTimeMachineWidget->setState(myTimeMachine[set]);
|
||||||
myStateSizeWidget->setValue(myStateSize[set]);
|
myStateSizeWidget->setValue(myStateSize[set]);
|
||||||
myUncompressedWidget->setValue(myUncompressed[set]);
|
myUncompressedWidget->setValue(myUncompressed[set]);
|
||||||
myStateIntervalWidget->setSelected(myStateInterval[set]);
|
myStateIntervalWidget->setSelected(myStateInterval[set]);
|
||||||
myStateHorizonWidget->setSelected(myStateHorizon[set]);
|
myStateHorizonWidget->setSelected(myStateHorizon[set]);
|
||||||
|
|
||||||
handleRewind();
|
handleTimeMachine();
|
||||||
handleSize();
|
handleSize();
|
||||||
handleUncompressed();
|
handleUncompressed();
|
||||||
handleInterval();
|
handleInterval();
|
||||||
|
@ -715,8 +715,8 @@ void DeveloperDialog::saveConfig()
|
||||||
|
|
||||||
// update RewindManager
|
// update RewindManager
|
||||||
instance().state().rewindManager().setup();
|
instance().state().rewindManager().setup();
|
||||||
instance().state().setRewindMode(myContinuousRewindWidget->getState() ?
|
instance().state().setRewindMode(myTimeMachineWidget->getState() ?
|
||||||
StateManager::Mode::Rewind : StateManager::Mode::Off);
|
StateManager::Mode::TimeMachine : StateManager::Mode::Off);
|
||||||
|
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
// Debugger font style
|
// Debugger font style
|
||||||
|
@ -768,7 +768,7 @@ void DeveloperDialog::setDefaults()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // States
|
case 2: // States
|
||||||
myContinuousRewind[set] = devSettings ? true : false;
|
myTimeMachine[set] = devSettings ? true : false;
|
||||||
myStateSize[set] = 100;
|
myStateSize[set] = 100;
|
||||||
myUncompressed[set] = devSettings ? 60 : 30;
|
myUncompressed[set] = devSettings ? 60 : 30;
|
||||||
myStateInterval[set] = devSettings ? "1f" : "30f";
|
myStateInterval[set] = devSettings ? "1f" : "30f";
|
||||||
|
@ -827,8 +827,8 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in
|
||||||
instance().console().tia().driveUnusedPinsRandom(myUndrivenPinsWidget->getState());
|
instance().console().tia().driveUnusedPinsRandom(myUndrivenPinsWidget->getState());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kRewind:
|
case kTimeMachine:
|
||||||
handleRewind();
|
handleTimeMachine();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kSizeChanged:
|
case kSizeChanged:
|
||||||
|
@ -947,9 +947,9 @@ void DeveloperDialog::handleConsole()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void DeveloperDialog::handleRewind()
|
void DeveloperDialog::handleTimeMachine()
|
||||||
{
|
{
|
||||||
bool enable = myContinuousRewindWidget->getState();
|
bool enable = myTimeMachineWidget->getState();
|
||||||
|
|
||||||
myStateSizeWidget->setEnabled(enable);
|
myStateSizeWidget->setEnabled(enable);
|
||||||
myStateSizeLabelWidget->setEnabled(enable);
|
myStateSizeLabelWidget->setEnabled(enable);
|
||||||
|
|
|
@ -63,11 +63,11 @@ class DeveloperDialog : public Dialog
|
||||||
kTVJitter = 'DVjt',
|
kTVJitter = 'DVjt',
|
||||||
kTVJitterChanged = 'DVjr',
|
kTVJitterChanged = 'DVjr',
|
||||||
kPPinCmd = 'DVpn',
|
kPPinCmd = 'DVpn',
|
||||||
kRewind = 'DSrw',
|
kTimeMachine = 'DTtm',
|
||||||
kSizeChanged = 'DSsz',
|
kSizeChanged = 'DTsz',
|
||||||
kUncompressedChanged = 'DSuc',
|
kUncompressedChanged = 'DTuc',
|
||||||
kIntervalChanged = 'DSin',
|
kIntervalChanged = 'DTin',
|
||||||
kHorizonChanged = 'DShz',
|
kHorizonChanged = 'DThz',
|
||||||
kP0ColourChangedCmd = 'GOp0',
|
kP0ColourChangedCmd = 'GOp0',
|
||||||
kM0ColourChangedCmd = 'GOm0',
|
kM0ColourChangedCmd = 'GOm0',
|
||||||
kP1ColourChangedCmd = 'GOp1',
|
kP1ColourChangedCmd = 'GOp1',
|
||||||
|
@ -117,7 +117,7 @@ class DeveloperDialog : public Dialog
|
||||||
|
|
||||||
// States widgets
|
// States widgets
|
||||||
RadioButtonGroup* mySettingsGroup2;
|
RadioButtonGroup* mySettingsGroup2;
|
||||||
CheckboxWidget* myContinuousRewindWidget;
|
CheckboxWidget* myTimeMachineWidget;
|
||||||
SliderWidget* myStateSizeWidget;
|
SliderWidget* myStateSizeWidget;
|
||||||
StaticTextWidget* myStateSizeLabelWidget;
|
StaticTextWidget* myStateSizeLabelWidget;
|
||||||
SliderWidget* myUncompressedWidget;
|
SliderWidget* myUncompressedWidget;
|
||||||
|
@ -149,7 +149,7 @@ class DeveloperDialog : public Dialog
|
||||||
bool myUndrivenPins[2];
|
bool myUndrivenPins[2];
|
||||||
bool myThumbException[2];
|
bool myThumbException[2];
|
||||||
// States sets
|
// States sets
|
||||||
bool myContinuousRewind[2];
|
bool myTimeMachine[2];
|
||||||
int myStateSize[2];
|
int myStateSize[2];
|
||||||
int myUncompressed[2];
|
int myUncompressed[2];
|
||||||
string myStateInterval[2];
|
string myStateInterval[2];
|
||||||
|
@ -157,7 +157,7 @@ class DeveloperDialog : public Dialog
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void addEmulationTab(const GUI::Font& font);
|
void addEmulationTab(const GUI::Font& font);
|
||||||
void addStatesTab(const GUI::Font& font);
|
void addTimeMachineTab(const GUI::Font& font);
|
||||||
void addVideoTab(const GUI::Font& font);
|
void addVideoTab(const GUI::Font& font);
|
||||||
void addDebuggerTab(const GUI::Font& font);
|
void addDebuggerTab(const GUI::Font& font);
|
||||||
// Add Defaults, OK and Cancel buttons
|
// Add Defaults, OK and Cancel buttons
|
||||||
|
@ -176,7 +176,7 @@ class DeveloperDialog : public Dialog
|
||||||
void handleDebugColours(int cmd, int color);
|
void handleDebugColours(int cmd, int color);
|
||||||
void handleDebugColours(const string& colors);
|
void handleDebugColours(const string& colors);
|
||||||
|
|
||||||
void handleRewind();
|
void handleTimeMachine();
|
||||||
void handleSize();
|
void handleSize();
|
||||||
void handleUncompressed();
|
void handleUncompressed();
|
||||||
void handleInterval();
|
void handleInterval();
|
||||||
|
|
|
@ -153,9 +153,9 @@ void HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title)
|
||||||
ADD_BIND("Ctrl PgUp", "Increase Display.Height");
|
ADD_BIND("Ctrl PgUp", "Increase Display.Height");
|
||||||
ADD_BIND("Ctrl PgDn", "Decrease Display.Height");
|
ADD_BIND("Ctrl PgDn", "Decrease Display.Height");
|
||||||
ADD_LINE();
|
ADD_LINE();
|
||||||
ADD_BIND("Alt L", "Toggle frame stats");
|
ADD_BIND(ALT_" L", "Toggle frame stats");
|
||||||
ADD_BIND("Alt ,", "Toggle 'Debug Colors' mode");
|
ADD_BIND(ALT_" ,", "Toggle 'Debug Colors' mode");
|
||||||
ADD_BIND("Alt r", "Toggle continuous rewind");
|
ADD_BIND(ALT_" t", "Toggle 'Time Machine' mode");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
|
|