mirror of
https://github.com/libretro/stella2023.git
synced 2024-12-11 02:43:43 +00:00
added delayed background color glitch developer option
This commit is contained in:
parent
c165c9b159
commit
859f33f54c
@ -41,6 +41,8 @@
|
||||
|
||||
* Added option to display detected settings info when a ROM is loaded.
|
||||
|
||||
* Added another oddball TIA glitch option for delayed background color. (TODO: DOC)
|
||||
|
||||
* Replaced "Re-disassemble" with "Disassemble @ current line" in debugger.
|
||||
|
||||
* Fixed bug when taking fullscreen snapshots; the dimensions were
|
||||
@ -51,7 +53,7 @@
|
||||
|
||||
6.2.1 to 6.2.2 (August 25, 2020)
|
||||
|
||||
* Fixed bug in initial controller mapping.
|
||||
* Fixed a bug in initial controller mapping.
|
||||
|
||||
|
||||
6.2 to 6.2.1: (June 20, 2020)
|
||||
|
@ -220,6 +220,7 @@ Settings::Settings()
|
||||
setPermanent("dev.tia.blinvphase", "true");
|
||||
setPermanent("dev.tia.delaypfbits", "true");
|
||||
setPermanent("dev.tia.delaypfcolor", "true");
|
||||
setPermanent("dev.tia.delaybkcolor", "true");
|
||||
setPermanent("dev.tia.delayplswap", "true");
|
||||
setPermanent("dev.tia.delayblswap", "true");
|
||||
setPermanent("dev.timemachine", true);
|
||||
@ -659,13 +660,15 @@ void Settings::usage() const
|
||||
<< " -dev.tia.type <standard|custom| Selects a TIA type\n"
|
||||
<< " koolaidman|\n"
|
||||
<< " cosmicark|pesco|\n"
|
||||
<< " quickstep|heman|>\n"
|
||||
<< " quickstep|\n"
|
||||
<< " indy500|heman|>\n"
|
||||
<< " -dev.tia.plinvphase <1|0> Enable inverted HMOVE clock phase for players\n"
|
||||
<< " -dev.tia.msinvphase <1|0> Enable inverted HMOVE clock phase for\n"
|
||||
<< " missiles\n"
|
||||
<< " -dev.tia.blinvphase <1|0> Enable inverted HMOVE clock phase for ball\n"
|
||||
<< " -dev.tia.delaypfbits <1|0> Enable extra delay cycle for PF bits access\n"
|
||||
<< " -dev.tia.delaypfcolor <1|0> Enable extra delay cycle for PF color\n"
|
||||
<< " -dev.tia.delaybkcolor <1|0> Enable extra delay cycle for background color\n"
|
||||
<< " -dev.tia.delayplswap <1|0> Enable extra delay cycle for VDELP0/1 swap\n"
|
||||
<< " -dev.tia.delayblswap <1|0> Enable extra delay cycle for VDELBL swap\n"
|
||||
<< endl << std::flush;
|
||||
|
@ -285,6 +285,7 @@ bool TIA::save(Serializer& out) const
|
||||
|
||||
out.putByte(myPFBitsDelay);
|
||||
out.putByte(myPFColorDelay);
|
||||
out.putByte(myBKColorDelay);
|
||||
out.putByte(myPlSwapDelay);
|
||||
}
|
||||
catch(...)
|
||||
@ -356,6 +357,7 @@ bool TIA::load(Serializer& in)
|
||||
|
||||
myPFBitsDelay = in.getByte();
|
||||
myPFColorDelay = in.getByte();
|
||||
myBKColorDelay = in.getByte();
|
||||
myPlSwapDelay = in.getByte();
|
||||
|
||||
// Re-apply dev settings
|
||||
@ -605,8 +607,13 @@ bool TIA::poke(uInt16 address, uInt8 value)
|
||||
case COLUBK:
|
||||
{
|
||||
value &= 0xFE;
|
||||
myBackground.setColor(value);
|
||||
myShadowRegisters[address] = value;
|
||||
if(myBKColorDelay)
|
||||
myDelayQueue.push(COLUBK, value, 1);
|
||||
else
|
||||
{
|
||||
myBackground.setColor(value);
|
||||
myShadowRegisters[address] = value;
|
||||
}
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
uInt16 dataAddr = mySystem->m6502().lastDataAddressForPoke();
|
||||
if(dataAddr)
|
||||
@ -918,6 +925,9 @@ void TIA::applyDeveloperSettings()
|
||||
setPFColorDelay(custom
|
||||
? mySettings.getBool("dev.tia.delaypfcolor")
|
||||
: BSPF::equalsIgnoreCase("quickstep", mySettings.getString("dev.tia.type")));
|
||||
setBKColorDelay(custom
|
||||
? mySettings.getBool("dev.tia.delaybkcolor")
|
||||
: BSPF::equalsIgnoreCase("indy500", mySettings.getString("dev.tia.type")));
|
||||
setPlSwapDelay(custom
|
||||
? mySettings.getBool("dev.tia.delayplswap")
|
||||
: BSPF::equalsIgnoreCase("heman", mySettings.getString("dev.tia.type")));
|
||||
@ -930,6 +940,7 @@ void TIA::applyDeveloperSettings()
|
||||
setBlInvertedPhaseClock(false);
|
||||
setPFBitsDelay(false);
|
||||
setPFColorDelay(false);
|
||||
setBKColorDelay(false);
|
||||
setPlSwapDelay(false);
|
||||
setBlSwapDelay(false);
|
||||
}
|
||||
@ -1608,6 +1619,12 @@ void TIA::setPFColorDelay(bool delayed)
|
||||
myPFColorDelay = delayed ? 1 : 0;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void TIA::setBKColorDelay(bool delayed)
|
||||
{
|
||||
myBKColorDelay = delayed ? 1 : 0;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void TIA::setPlSwapDelay(bool delayed)
|
||||
{
|
||||
@ -1683,6 +1700,10 @@ void TIA::delayedWrite(uInt8 address, uInt8 value)
|
||||
myPlayfield.pf2(value);
|
||||
break;
|
||||
|
||||
case COLUBK:
|
||||
myBackground.setColor(value);
|
||||
break;
|
||||
|
||||
case COLUPF:
|
||||
myPlayfield.setColor(value);
|
||||
myBall.setColor(value);
|
||||
|
@ -435,6 +435,13 @@ class TIA : public Device
|
||||
*/
|
||||
void setPFColorDelay(bool delayed);
|
||||
|
||||
/**
|
||||
Enables/disables delayed background colors.
|
||||
|
||||
@param delayed Wether to enable delayed background colors
|
||||
*/
|
||||
void setBKColorDelay(bool delayed);
|
||||
|
||||
/**
|
||||
Enables/disables delayed player swapping.
|
||||
|
||||
@ -740,6 +747,7 @@ class TIA : public Device
|
||||
*/
|
||||
uInt8 myPFBitsDelay{0};
|
||||
uInt8 myPFColorDelay{0};
|
||||
uInt8 myBKColorDelay{0};
|
||||
uInt8 myPlSwapDelay{0};
|
||||
uInt8 myBlSwapDelay{0};
|
||||
|
||||
|
@ -233,6 +233,7 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font)
|
||||
VarList::push_back(items, "Faulty Cosmic Ark stars", "cosmicark");
|
||||
VarList::push_back(items, "Glitched Pesco", "pesco");
|
||||
VarList::push_back(items, "Glitched Quick Step!", "quickstep");
|
||||
VarList::push_back(items, "Glitched Indy 500 menu", "indy500");
|
||||
VarList::push_back(items, "Glitched He-Man title", "heman");
|
||||
VarList::push_back(items, "Custom", "custom");
|
||||
myTIATypeWidget = new PopUpWidget(myTab, font, HBORDER + INDENT, ypos - 1,
|
||||
@ -271,6 +272,15 @@ void DeveloperDialog::addTiaTab(const GUI::Font& font)
|
||||
wid.push_back(myPFColorWidget);
|
||||
ypos += lineHeight + VGAP * 1;
|
||||
|
||||
myBackgroundLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1,
|
||||
"Delayed background");
|
||||
wid.push_back(myBackgroundLabel);
|
||||
ypos += lineHeight + VGAP * 1;
|
||||
|
||||
myBKColorWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 3, ypos + 1, "Color");
|
||||
wid.push_back(myBKColorWidget);
|
||||
ypos += lineHeight + VGAP * 1;
|
||||
|
||||
ostringstream ss;
|
||||
ss << "Delayed VDEL" << ELLIPSIS << " swap for";
|
||||
mySwapLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, ss.str());
|
||||
@ -644,6 +654,7 @@ void DeveloperDialog::loadSettings(SettingsSet set)
|
||||
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;
|
||||
|
||||
@ -708,6 +719,7 @@ void DeveloperDialog::saveSettings(SettingsSet 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]);
|
||||
}
|
||||
@ -762,6 +774,7 @@ void DeveloperDialog::getWidgetStates(SettingsSet set)
|
||||
myBlInvPhase[set] = myBlInvPhaseWidget->getState();
|
||||
myPFBits[set] = myPFBitsWidget->getState();
|
||||
myPFColor[set] = myPFColorWidget->getState();
|
||||
myBKColor[set] = myBKColorWidget->getState();
|
||||
myPlSwap[set] = myPlSwapWidget->getState();
|
||||
myBlSwap[set] = myBlSwapWidget->getState();
|
||||
|
||||
@ -909,6 +922,7 @@ void DeveloperDialog::saveConfig()
|
||||
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());
|
||||
}
|
||||
@ -995,6 +1009,7 @@ void DeveloperDialog::setDefaults()
|
||||
myBlInvPhase[set] = devSettings ? true : false;
|
||||
myPFBits[set] = devSettings ? true : false;
|
||||
myPFColor[set] = devSettings ? true : false;
|
||||
myBKColor[set] = devSettings ? true : false;
|
||||
myPlSwap[set] = devSettings ? true : false;
|
||||
myBlSwap[set] = devSettings ? true : false;
|
||||
|
||||
@ -1210,8 +1225,10 @@ void DeveloperDialog::handleTia()
|
||||
myMsInvPhaseWidget->setEnabled(enable);
|
||||
myBlInvPhaseWidget->setEnabled(enable);
|
||||
myPlayfieldLabel->setEnabled(enable);
|
||||
myBackgroundLabel->setEnabled(enable);
|
||||
myPFBitsWidget->setEnabled(enable);
|
||||
myPFColorWidget->setEnabled(enable);
|
||||
myBKColorWidget->setEnabled(enable);
|
||||
mySwapLabel->setEnabled(enable);
|
||||
myPlSwapWidget->setEnabled(enable);
|
||||
myBlSwapWidget->setEnabled(enable);
|
||||
@ -1223,6 +1240,7 @@ void DeveloperDialog::handleTia()
|
||||
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]);
|
||||
}
|
||||
@ -1233,6 +1251,7 @@ void DeveloperDialog::handleTia()
|
||||
myBlInvPhaseWidget->setState(false);
|
||||
myPFBitsWidget->setState(BSPF::equalsIgnoreCase("pesco", myTIATypeWidget->getSelectedTag().toString()));
|
||||
myPFColorWidget->setState(BSPF::equalsIgnoreCase("quickstep", myTIATypeWidget->getSelectedTag().toString()));
|
||||
myBKColorWidget->setState(BSPF::equalsIgnoreCase("indy500", myTIATypeWidget->getSelectedTag().toString()));
|
||||
myPlSwapWidget->setState(BSPF::equalsIgnoreCase("heman", myTIATypeWidget->getSelectedTag().toString()));
|
||||
myBlSwapWidget->setState(false);
|
||||
}
|
||||
|
@ -115,6 +115,8 @@ class DeveloperDialog : public Dialog
|
||||
StaticTextWidget* myPlayfieldLabel{nullptr};
|
||||
CheckboxWidget* myPFBitsWidget{nullptr};
|
||||
CheckboxWidget* myPFColorWidget{nullptr};
|
||||
StaticTextWidget* myBackgroundLabel{nullptr};
|
||||
CheckboxWidget* myBKColorWidget{nullptr};
|
||||
StaticTextWidget* mySwapLabel{nullptr};
|
||||
CheckboxWidget* myPlSwapWidget{nullptr};
|
||||
CheckboxWidget* myBlSwapWidget{nullptr};
|
||||
@ -172,6 +174,7 @@ class DeveloperDialog : public Dialog
|
||||
std::array<bool, 2> myBlInvPhase;
|
||||
std::array<bool, 2> myPFBits;
|
||||
std::array<bool, 2> myPFColor;
|
||||
std::array<bool, 2> myBKColor;
|
||||
std::array<bool, 2> myPlSwap;
|
||||
std::array<bool, 2> myBlSwap;
|
||||
// States sets
|
||||
|
Loading…
Reference in New Issue
Block a user