- missing checks for developer settings added

- "dev.console" selection move to developer settings
- random startup bank implemented for some (tested!) bank switchings
- Options dialog button added in debugger
This commit is contained in:
thrust26 2017-11-18 13:14:27 +01:00
parent 40c831e6e6
commit a14fa6a3ea
25 changed files with 165 additions and 57 deletions

View File

@ -31,9 +31,9 @@ DataGridOpsWidget::DataGridOpsWidget(GuiObject* boss, const GUI::Font& font,
_shiftLeftButton(nullptr),
_shiftRightButton(nullptr)
{
const int bwidth = _font.getMaxCharWidth() * 4,
const int bwidth = _font.getMaxCharWidth() * 4+2,
bheight = _font.getFontHeight() + 3,
space = 6;
space = 4;
int xpos, ypos;
// Create operations buttons

View File

@ -42,6 +42,7 @@
#include "ConsoleMediumFont.hxx"
#include "ConsoleMediumBFont.hxx"
#include "StellaMediumFont.hxx"
#include "OptionsDialog.hxx"
#include "DebuggerDialog.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -61,6 +62,8 @@ DebuggerDialog::DebuggerDialog(OSystem& osystem, DialogContainer& parent,
// Inform the TIA output widget about its associated zoom widget
myTiaOutput->setZoomWidget(myTiaZoom);
myOptions = make_unique<OptionsDialog>(osystem, parent, this, w, h, true);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -158,6 +161,11 @@ void DebuggerDialog::handleCommand(CommandSender* sender, int cmd,
doExitRom();
break;
case kDDOptionsCmd:
myOptions->open();
loadConfig();
break;
case RomWidget::kInvalidateListing:
// Only do a full redraw if the disassembly tab is actually showing
myRom->invalidate(myRomTab->getActiveTab() == 0);
@ -369,7 +377,8 @@ void DebuggerDialog::addStatusArea()
void DebuggerDialog::addRomArea()
{
const GUI::Rect& r = getRomBounds();
const int vBorder = 4;
const int VBORDER = 4;
const string ELLIPSIS = "\x1d";
int bwidth = myLFont->getStringWidth("Frame +1 "),
bheight = myLFont->getLineHeight() + 2;
@ -405,8 +414,13 @@ void DebuggerDialog::addRomArea()
bwidth, bheight, ">", kDDUnwindCmd);
myUnwindButton->clearFlags(WIDGET_ENABLED);
int xpos = buttonX - 8*myLFont->getMaxCharWidth() - 20, ypos = 30;
bwidth = myLFont->getStringWidth("Options" + ELLIPSIS) + 8;
bheight = myLFont->getLineHeight() + 2;
new ButtonWidget(this, *myLFont, xpos, r.top + 5, bwidth, bheight, "Options" + ELLIPSIS, kDDOptionsCmd);
int xpos = buttonX - 8*myLFont->getMaxCharWidth() - 20, ypos = 20;
DataGridOpsWidget* ops = new DataGridOpsWidget(this, *myLFont, xpos, ypos);
int max_w = xpos - r.left - 10;
@ -426,8 +440,8 @@ void DebuggerDialog::addRomArea()
////////////////////////////////////////////////////////////////////
// Disassembly area
xpos = r.left + vBorder; ypos += myRam->getHeight() + 5;
const int tabWidth = r.width() - vBorder - 1;
xpos = r.left + VBORDER; ypos += myRam->getHeight() + 5;
const int tabWidth = r.width() - VBORDER - 1;
const int tabHeight = r.height() - ypos - 1;
int tabID;

View File

@ -34,6 +34,8 @@ class TiaZoomWidget;
class CartDebugWidget;
class CartRamWidget;
class OptionsDialog;
namespace GUI {
class MessageBox;
struct Rect;
@ -103,7 +105,8 @@ class DebuggerDialog : public Dialog
kDDRewindCmd = 'DDrw',
kDDUnwindCmd = 'DDuw',
kDDExitCmd = 'DDex',
kDDExitFatalCmd = 'DDer'
kDDExitFatalCmd = 'DDer',
kDDOptionsCmd = 'DDop'
};
TabWidget *myTab, *myRomTab;
@ -120,7 +123,11 @@ class DebuggerDialog : public Dialog
EditTextWidget* myMessageBox;
ButtonWidget* myRewindButton;
ButtonWidget* myUnwindButton;
//ButtonWidget* myOptionsButton;
unique_ptr<GUI::MessageBox> myFatalError;
unique_ptr<OptionsDialog> myOptions;
unique_ptr<GUI::Font> myLFont; // used for labels
unique_ptr<GUI::Font> myNFont; // used for normal text

View File

@ -24,7 +24,6 @@
#include "CartDebug.hxx"
#include "Font.hxx"
#include "Widget.hxx"
#include "RamWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -59,6 +58,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
// Create actions buttons to the left of the RAM grid
int bx = xpos + myRamGrid->getWidth() + 4;
int by = ypos;
myUndoButton = new ButtonWidget(boss, lfont, bx, by, bwidth, bheight,
"Undo", kUndoCmd);
myUndoButton->setTarget(this);
@ -68,7 +68,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
"Revert", kRevertCmd);
myRevertButton->setTarget(this);
by += 2 * bheight + 2;
by += bheight + 4 * 3;
mySearchButton = new ButtonWidget(boss, lfont, bx, by, bwidth, bheight,
"Search", kSearchCmd);
mySearchButton->setTarget(this);
@ -116,18 +116,16 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
// one resizes as much as possible
// Add Binary display of selected RAM cell
xpos = x + w - 13*myFontWidth - 20;
new StaticTextWidget(boss, lfont, xpos, ypos, 3*myFontWidth, myFontHeight,
"Bin", kTextAlignLeft);
xpos = x + w - 11*myFontWidth - 22;
new StaticTextWidget(boss, lfont, xpos, ypos, "Bin");
myBinValue = new DataGridWidget(boss, nfont, xpos + 3*myFontWidth + 5, ypos-2,
1, 1, 8, 8, Common::Base::F_2);
myBinValue->setTarget(this);
myBinValue->setID(kRamBinID);
// Add Decimal display of selected RAM cell
xpos -= 8*myFontWidth + 5 + 20;
new StaticTextWidget(boss, lfont, xpos, ypos, 3*myFontWidth, myFontHeight,
"Dec", kTextAlignLeft);
xpos -= 7*myFontWidth + 5 + 20;
new StaticTextWidget(boss, lfont, xpos, ypos, "Dec");
myDecValue = new DataGridWidget(boss, nfont, xpos + 3*myFontWidth + 5, ypos-2,
1, 1, 3, 8, Common::Base::F_10);
myDecValue->setTarget(this);
@ -138,9 +136,8 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
// Add Label of selected RAM cell
int xpos_r = xpos - 20;
xpos = x + 10;
new StaticTextWidget(boss, lfont, xpos, ypos, 5*myFontWidth, myFontHeight,
"Label", kTextAlignLeft);
xpos = x;
new StaticTextWidget(boss, lfont, xpos, ypos, "Label");
xpos += 5*myFontWidth + 5;
myLabel = new EditTextWidget(boss, nfont, xpos, ypos-2, xpos_r-xpos,
myLineHeight);

View File

@ -234,7 +234,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
myPause->setTarget(this);
addFocusWidget(myPause);
// Randomize items
/*// Randomize items
xpos = 10; ypos += 3 * lineHeight;
new StaticTextWidget(boss, lfont, xpos, ypos,
lfont.getStringWidth("When loading a ROM:"), fontHeight,
@ -263,7 +263,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
myRandomizeCPU[i]->setTarget(this);
addFocusWidget(myRandomizeCPU[i]);
xpos += CheckboxWidget::boxSize() + lfont.getStringWidth("XX") + 20;
}
}*/
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -354,7 +354,11 @@ void RiotWidget::loadConfig()
// means 'grounded' in the system)
myP0Diff->setSelectedIndex(riot.diffP0());
myP1Diff->setSelectedIndex(riot.diffP1());
myConsole->setSelectedIndex(instance().settings().getString("console") == "7800" ? 1 : 0);
bool devSettings = instance().settings().getBool("dev.settings");
myConsole->setSelectedIndex(devSettings && instance().settings().getString("dev.console") == "7800" ? 1 : 0);
myConsole->setEnabled(false);
myTVType->setSelectedIndex(riot.tvType());
mySelect->setState(!riot.select());
myReset->setState(!riot.reset());
@ -362,12 +366,12 @@ void RiotWidget::loadConfig()
myLeftControl->loadConfig();
myRightControl->loadConfig();
myRandomizeRAM->setState(instance().settings().getBool("dev.ramrandom"));
/*myRandomizeRAM->setState(instance().settings().getBool("dev.ramrandom"));
const string& cpurandom = instance().settings().getString("dev.cpurandom");
const char* const cpuregs[] = { "S", "A", "X", "Y", "P" };
for(int i = 0; i < 5; ++i)
myRandomizeCPU[i]->setState(BSPF::containsIgnoreCase(cpurandom, cpuregs[i]));
myRandomizeCPU[i]->setState(BSPF::containsIgnoreCase(cpurandom, cpuregs[i]));*/
handleConsole();
}
@ -451,12 +455,12 @@ void RiotWidget::handleCommand(CommandSender* sender, int cmd, int data, int id)
case kPauseID:
handleConsole();
break;
case kRandRAMID:
/*case kRandRAMID:
instance().settings().setValue("dev.ramrandom", myRandomizeRAM->getState());
break;
case kRandCPUID:
handleRandomCPU();
break;
break;*/
}
break;
@ -515,16 +519,16 @@ void RiotWidget::handleConsole()
{
RiotDebug& riot = instance().debugger().riotDebug();
bool is7800 = myConsole->getSelected() == 1;
instance().settings().setValue("console", is7800 ? "7800" : "2600");
//instance().settings().setValue("dev.console", is7800 ? "7800" : "2600");
myTVType->setEnabled(!is7800);
myPause->setEnabled(is7800);
myRandomizeRAM->setEnabled(!is7800);
//myRandomizeRAM->setEnabled(!is7800);
if(is7800)
{
myTVType->setSelectedIndex(myPause->getState() ? 0 : 1);
myRandomizeRAM->setState(false);
instance().settings().setValue("dev.ramrandom", 0);
//myRandomizeRAM->setState(false);
//instance().settings().setValue("dev.ramrandom", 0);
}
else
{
@ -533,7 +537,7 @@ void RiotWidget::handleConsole()
riot.tvType(myTVType->getSelected());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/*// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void RiotWidget::handleRandomCPU()
{
string cpurandom;
@ -543,4 +547,4 @@ void RiotWidget::handleRandomCPU()
cpurandom += cpuregs[i];
instance().settings().setValue("dev.cpurandom", cpurandom);
}
}*/

View File

@ -41,7 +41,7 @@ class RiotWidget : public Widget, public CommandSender
int x, int y, Controller& controller);
void handleConsole();
void handleRandomCPU();
//void handleRandomCPU();
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
void loadConfig() override;
@ -69,8 +69,8 @@ class RiotWidget : public Widget, public CommandSender
CheckboxWidget* myReset;
CheckboxWidget* myPause;
CheckboxWidget* myRandomizeCPU[5];
CheckboxWidget* myRandomizeRAM;
//CheckboxWidget* myRandomizeCPU[5];
//CheckboxWidget* myRandomizeRAM;
PopUpWidget* myConsole;
// ID's for the various widgets
@ -79,7 +79,8 @@ class RiotWidget : public Widget, public CommandSender
kTim1TID, kTim8TID, kTim64TID, kTim1024TID, kTimWriteID,
kSWCHABitsID, kSWACNTBitsID, kSWCHBBitsID, kSWBCNTBitsID,
kP0DiffChanged, kP1DiffChanged, kTVTypeChanged, kSelectID, kResetID,
kRandCPUID, kRandRAMID, kSWCHARBitsID, kConsoleChanged, kPauseID
//kRandCPUID, kRandRAMID,
kSWCHARBitsID, kConsoleChanged, kPauseID
};
private:

View File

@ -91,9 +91,17 @@ void Cartridge::createCodeAccessBase(uInt32 size)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge::initializeRAM(uInt8* arr, uInt32 size, uInt8 val) const
{
if(mySettings.getBool("dev.ramrandom"))
if(mySettings.getBool("dev.settings") && mySettings.getBool("dev.ramrandom"))
for(uInt32 i = 0; i < size; ++i)
arr[i] = mySystem->randGenerator().next();
else
memset(arr, val, size);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Cartridge::randomizeStartBank()
{
if(mySettings.getBool("dev.settings") && mySettings.getBool("dev.bankrandom"))
myStartBank = mySystem->randGenerator().next() % bankCount();
}

View File

@ -81,6 +81,12 @@ class Cartridge : public Device
*/
uInt16 startBank() const { return myStartBank; }
/**
Defines the startup bank. if 'bank' is negative, a random bank will
be selected.
*/
void randomizeStartBank();
/**
Answer whether the bank has changed since the last time this
method was called. Each cart class is able to override this

View File

@ -57,6 +57,9 @@ void CartridgeDPC::reset()
myAudioCycles = 0;
myFractionalClocks = 0.0;
// define random startup bank
randomizeStartBank();
// Upon reset we switch to the startup bank
bank(myStartBank);
}

View File

@ -35,6 +35,9 @@ CartridgeF0::CartridgeF0(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF0::reset()
{
// define random startup bank
randomizeStartBank();
// Upon reset we switch to the startup bank
bank(myStartBank);
}

View File

@ -36,6 +36,9 @@ CartridgeF4::CartridgeF4(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF4::reset()
{
// define random startup bank
randomizeStartBank();
// Upon reset we switch to the startup bank
bank(myStartBank);
}

View File

@ -35,6 +35,9 @@ CartridgeF6::CartridgeF6(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF6::reset()
{
// define random startup bank
randomizeStartBank();
// Upon reset we switch to the startup bank
bank(myStartBank);
}

View File

@ -35,6 +35,9 @@ CartridgeF6SC::CartridgeF6SC(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF6SC::reset()
{
// define random startup bank
randomizeStartBank();
initializeRAM(myRAM, 128);
// Upon reset we switch to the startup bank

View File

@ -43,6 +43,9 @@ CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, const string& md5,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF8::reset()
{
// define random startup bank
randomizeStartBank();
// Upon reset we switch to the reset bank
bank(myStartBank);
}

View File

@ -35,6 +35,9 @@ CartridgeF8SC::CartridgeF8SC(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeF8SC::reset()
{
// define startup bank
randomizeStartBank();
initializeRAM(myRAM, 128);
// Upon reset we switch to the startup bank

View File

@ -35,6 +35,9 @@ CartridgeFA::CartridgeFA(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeFA::reset()
{
// define random startup bank
randomizeStartBank();
initializeRAM(myRAM, 256);
// Upon reset we switch to the startup bank

View File

@ -47,6 +47,9 @@ CartridgeFA2::CartridgeFA2(const BytePtr& image, uInt32 size,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void CartridgeFA2::reset()
{
// define random startup bank
randomizeStartBank();
initializeRAM(myRAM, 256);
// Upon reset we switch to the startup bank

View File

@ -896,7 +896,8 @@ void EventHandler::handleEvent(Event::Type event, int state)
{
// Take care of special events that aren't part of the emulation core
// or need to be preprocessed before passing them on
bool is7800 = (myOSystem.settings().getString("console") == "7800");
bool devSettings = myOSystem.settings().getBool("dev.settings");
bool is7800 = devSettings && (myOSystem.settings().getString("dev.console") == "7800");
switch(event)
{

View File

@ -85,7 +85,8 @@ void M6502::reset()
myExecutionStatus = 0;
// Set registers to random or default values
const string& cpurandom = mySettings.getString("dev.cpurandom");
bool devSettings = mySettings.getBool("dev.settings");
const string& cpurandom = devSettings ? mySettings.getString("dev.cpurandom") : "";
SP = BSPF::containsIgnoreCase(cpurandom, "S") ?
mySystem->randGenerator().next() : 0xfd;
A = BSPF::containsIgnoreCase(cpurandom, "A") ?

View File

@ -58,10 +58,11 @@ void M6532::reset()
};
// Initialize the 128 bytes of memory
if(mySettings.getString("console") == "7800")
bool devSettings = mySettings.getBool("dev.settings");
if(devSettings && mySettings.getString("dev.console") == "7800")
for(uInt32 t = 0; t < 128; ++t)
myRAM[t] = RAM_7800[t];
else if(mySettings.getBool("dev.ramrandom"))
else if(devSettings && mySettings.getBool("dev.ramrandom"))
for(uInt32 t = 0; t < 128; ++t)
myRAM[t] = mySystem->randGenerator().next();
else

View File

@ -130,7 +130,6 @@ Settings::Settings(OSystem& osystem)
setInternal("autoslot", "false");
setInternal("loglevel", "1");
setInternal("logtoconsole", "0");
setInternal("console", "2600"); // 7800
setInternal("avoxport", "");
setInternal("stats", "false");
setInternal("fastscbios", "true");
@ -158,6 +157,7 @@ Settings::Settings(OSystem& osystem)
setInternal("dev.tv.jitter_recovery", "2");
setInternal("dev.debugcolors", "false");
setInternal("dev.tiadriven", "true");
setInternal("dev.console", "2600"); // 7800
#ifdef DTHUMB_SUPPORT
// Thumb ARM emulation options
@ -500,6 +500,7 @@ void Settings::usage() const
<< " -ppblend <arg> Sets the 'Display.PPBlend' property\n"
#endif
<< " -dev.console <2600|7800> Select console for B/W and Pause key handling\n"
<< " -dev.tiadriven <1|0> Drive unused TIA pins randomly on a read/peek\n"
<< " -dev.cpurandom <1|0> Randomize the contents of CPU registers on reset\n"
<< " -dev.ramrandom <1|0> Randomize the contents of RAM on reset\n"

View File

@ -55,7 +55,8 @@ Switches::Switches(const Event& event, const Properties& properties)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Switches::update(const Settings& settings)
{
bool is7800 = (settings.getString("console") == "7800");
bool devSettings = settings.getBool("dev.settings");
bool is7800 = devSettings && (settings.getString("dev.console") == "7800");
if(is7800)
{

View File

@ -79,7 +79,8 @@ TIA::TIA(Console& console, Sound& sound, Settings& settings)
mySpriteEnabledBits(0xFF),
myCollisionsEnabledBits(0xFF)
{
myTIAPinsDriven = mySettings.getBool("dev.tiadriven");
bool devSettings = mySettings.getBool("dev.settings");
myTIAPinsDriven = devSettings && mySettings.getBool("dev.tiadriven");
myBackground.setTIA(this);
myPlayfield.setTIA(this);
@ -89,7 +90,6 @@ TIA::TIA(Console& console, Sound& sound, Settings& settings)
myMissile1.setTIA(this);
myBall.setTIA(this);
bool devSettings = mySettings.getBool("dev.settings");
myEnableJitter = mySettings.getBool(devSettings ? "dev.tv.jitter" : "tv.jitter");
myJitterFactor = mySettings.getInt(devSettings ? "dev.tv.jitter_recovery" : "tv.jitter_recovery");
@ -1007,7 +1007,7 @@ bool TIA::driveUnusedPinsRandom(uInt8 mode)
if (mode == 0 || mode == 1)
{
myTIAPinsDriven = bool(mode);
mySettings.setValue("dev.tiadriven", myTIAPinsDriven);
//mySettings.setValue("dev.tiadriven", myTIAPinsDriven);
}
return myTIAPinsDriven;
}

View File

@ -92,6 +92,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
int lineHeight = font.getLineHeight();
StringList actions;
WidgetArray wid;
VariantList items;
int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight();
tabID = myTab->addTab(" Emulation ");
@ -99,26 +100,36 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
ypos = VBORDER;
myDevSettings0 = new CheckboxWidget(myTab, font, HBORDER, ypos, "Enable developer settings", kDevSettings0);
wid.push_back(myDevSettings0);
ypos += lineHeight + VGAP;
// 2600/7800 mode
items.clear();
VarList::push_back(items, "Atari 2600", "2600");
VarList::push_back(items, "Atari 7800", "7800");
int lwidth = font.getStringWidth("Console ");
int pwidth = font.getStringWidth("Atari 2600");
myConsole = new PopUpWidget(myTab, font, HBORDER + INDENT * 1, ypos, pwidth, lineHeight, items, "Console ", lwidth, kConsole);
wid.push_back(myConsole);
ypos += lineHeight + VGAP;
// Randomize items
myLoadingROMLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT*1, ypos, "When loading a ROM:", kTextAlignLeft);
wid.push_back(myLoadingROMLabel);
ypos += lineHeight + VGAP;
myRandomBank = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Random startup bank (TODO)");
wid.push_back(myRandomBank);
ypos += lineHeight + VGAP;
// Randomize RAM
ypos += lineHeight + VGAP;
myRandomizeRAM = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1,
"Randomize zero-page and extended RAM", kRandRAMID);
wid.push_back(myRandomizeRAM);
ypos += lineHeight + VGAP;
// Randomize CPU
ypos += lineHeight + VGAP;
int lwidth = font.getStringWidth("Randomize CPU ");
lwidth = font.getStringWidth("Randomize CPU ");
myRandomizeCPULabel = new StaticTextWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Randomize CPU ");
wid.push_back(myRandomizeCPULabel);
@ -134,17 +145,17 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
wid.push_back(myRandomizeCPU[i]);
xpos += CheckboxWidget::boxSize() + font.getStringWidth("XX") + 20;
}
ypos += lineHeight + VGAP;
/*myThumbException = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, "Thumb ARM emulation can throw an exception");
wid.push_back(myThumbException);*/
//ypos += (lineHeight + VGAP) * 2;
myColorLoss = new CheckboxWidget(myTab, font, HBORDER + INDENT*1, ypos + 1, "PAL color-loss");
wid.push_back(myColorLoss);
ypos += lineHeight + VGAP;
// TV jitter effect
ypos += lineHeight + VGAP;
myTVJitter = new CheckboxWidget(myTab, font, HBORDER + INDENT*1, ypos + 1, "Jitter/Roll Effect", kTVJitter);
wid.push_back(myTVJitter);
myTVJitterRec = new SliderWidget(myTab, font,
@ -159,14 +170,14 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font)
5 * fontWidth, fontHeight, "", kTextAlignLeft);
myTVJitterRecLabel->setFlags(WIDGET_CLEARBG);
wid.push_back(myTVJitterRecLabel);
ypos += lineHeight + VGAP;
// debug colors
ypos += lineHeight + VGAP;
myDebugColors = new CheckboxWidget(myTab, font, HBORDER + INDENT*1, ypos + 1, "Debug Colors");
wid.push_back(myDebugColors);
ypos += lineHeight + VGAP;
// How to handle undriven TIA pins
ypos += lineHeight + VGAP;
myUndrivenPins = new CheckboxWidget(myTab, font, HBORDER + INDENT*1, ypos + 1,
"Drive unused TIA pins randomly on a read/peek");
wid.push_back(myUndrivenPins);
@ -358,6 +369,7 @@ void DeveloperDialog::loadConfig()
{
myDevSettings0->setState(instance().settings().getBool("dev.settings"));
myConsole->setSelectedIndex(instance().settings().getString("dev.console") == "7800" ? 1 : 0);
myRandomBank->setState(instance().settings().getBool("dev.bankrandom"));
myRandomizeRAM->setState(instance().settings().getBool("dev.ramrandom"));
@ -409,11 +421,14 @@ void DeveloperDialog::saveConfig()
//TODO
// - bankrandom (not implemented yet)
// - thumbexception (commandline only yet)
// - debugcolors (no effect yet)
// - remove settings from within debugger
bool devSettings = myDevSettings0->getState();
instance().settings().setValue("dev.settings", devSettings);
bool is7800 = myConsole->getSelected() == 1;
instance().settings().setValue("dev.console", is7800 ? "7800" : "2600");
instance().settings().setValue("dev.bankrandom", myRandomBank->getState());
instance().settings().setValue("dev.ramrandom", myRandomizeRAM->getState());
@ -458,7 +473,7 @@ void DeveloperDialog::saveConfig()
instance().settings().setValue("dev.tiadriven", myUndrivenPins->getState());
// Finally, issue a complete framebuffer re-initialization
instance().createFrameBuffer();
//instance().createFrameBuffer();
#ifdef DEBUGGER_SUPPORT
// Debugger size
@ -479,6 +494,7 @@ void DeveloperDialog::setDefaults()
switch(myTab->getActiveTab())
{
case 0:
myConsole->setSelectedIndex(0);
myRandomBank->setState(true);
myRandomizeRAM->setState(true);
for(int i = 0; i < 5; ++i)
@ -536,6 +552,10 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in
enableOptions();
break;
case kConsole:
handleConsole();
break;
case kTVJitter:
handleTVJitterChange(myTVJitter->getState());
break;
@ -603,14 +623,16 @@ void DeveloperDialog::enableOptions()
{
bool enable = myDevSettings0->getState();
myConsole->setEnabled(enable);
// CPU
myLoadingROMLabel->setEnabled(enable);
myRandomBank->setEnabled(false/*enable*/);
myRandomBank->setEnabled(enable);
myRandomizeRAM->setEnabled(enable);
myRandomizeCPULabel->setEnabled(enable);
for(int i = 0; i < 5; ++i)
myRandomizeCPU[i]->setEnabled(enable);
//myThumbException->setEnabled(enable);
handleConsole();
// TIA
myColorLoss->setEnabled(enable);
@ -637,3 +659,17 @@ void DeveloperDialog::handleDebugColors()
instance().console().tia().toggleFixedColors();
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void DeveloperDialog::handleConsole()
{
bool is7800 = myConsole->getSelected() == 1;
bool enable = myDevSettings0->getState();
myRandomizeRAM->setEnabled(enable && !is7800);
if(is7800)
{
myRandomizeRAM->setState(false);
instance().settings().setValue("dev.ramrandom", 0);
}
}

View File

@ -59,6 +59,7 @@ class DeveloperDialog : public Dialog
enum
{
kDevSettings0 = 'DVs0',
kConsole = 'DVco',
kRandRAMID = 'DVrm',
kRandCPUID = 'DVcp',
kTVJitter = 'DVjt',
@ -79,6 +80,7 @@ class DeveloperDialog : public Dialog
CheckboxWidget* myDevSettings0;
CheckboxWidget* myDevSettings1;
PopUpWidget* myConsole;
StaticTextWidget* myLoadingROMLabel;
CheckboxWidget* myRandomBank;
CheckboxWidget* myRandomizeRAM;
@ -117,6 +119,7 @@ class DeveloperDialog : public Dialog
void enableOptions();
void handleTVJitterChange(bool enable);
void handleDebugColors();
void DeveloperDialog::handleConsole();
// Following constructors and assignment operators not supported
DeveloperDialog() = delete;