added delayed background color glitch developer option

This commit is contained in:
thrust26 2020-08-26 23:39:20 +02:00
parent c165c9b159
commit 859f33f54c
6 changed files with 60 additions and 4 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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);

View File

@ -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};

View File

@ -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);
}

View File

@ -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