Great colon purge Part2: RIOT tab and controllers.

This commit is contained in:
Stephen Anthony 2017-05-06 14:06:19 -02:30
parent bab6e3119d
commit a87334a268
15 changed files with 103 additions and 84 deletions

View File

@ -25,15 +25,14 @@ AtariVoxWidget::AtariVoxWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (AtariVox):" : "Right (AtariVox):"; const string& label = leftport ? "Left (AtariVox)" : "Right (AtariVox)";
const int fontWidth = font.getMaxCharWidth(), const int fontHeight = font.getFontHeight(),
fontHeight = font.getFontHeight(),
lineHeight = font.getLineHeight(), lineHeight = font.getLineHeight(),
bwidth = font.getStringWidth("Erase EEPROM") + 20, bwidth = font.getStringWidth("Erase EEPROM") + 20,
bheight = lineHeight + 4; bheight = lineHeight + 4;
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (AtariVox):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (AtariVox)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
@ -46,16 +45,18 @@ AtariVoxWidget::AtariVoxWidget(GuiObject* boss, const GUI::Font& font,
myEEPROMErase->setTarget(this); myEEPROMErase->setTarget(this);
ypos += lineHeight + 20; ypos += lineHeight + 20;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, const GUI::Font& ifont = instance().frameBuffer().infoFont();
lwidth = ifont.getMaxCharWidth() * 20;
new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "(*) This will erase", kTextAlignLeft); fontHeight, "(*) This will erase", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "all EEPROM data, not", kTextAlignLeft); fontHeight, "all EEPROM data, not", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "just the range used", kTextAlignLeft); fontHeight, "just the range used", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "for this ROM", kTextAlignLeft); fontHeight, "for this ROM", kTextAlignLeft);
} }

View File

@ -25,10 +25,10 @@ BoosterWidget::BoosterWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Booster):" : "Right (Booster):"; const string& label = leftport ? "Left (Booster)" : "Right (Booster)";
const int fontHeight = font.getFontHeight(); const int fontHeight = font.getFontHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Booster):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Booster)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,

View File

@ -25,12 +25,12 @@ DrivingWidget::DrivingWidget(GuiObject* boss, const GUI::Font& font,
myGreyIndex(0) myGreyIndex(0)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Driving):" : "Right (Driving):"; const string& label = leftport ? "Left (Driving)" : "Right (Driving)";
const int fontHeight = font.getFontHeight(), const int fontHeight = font.getFontHeight(),
bwidth = font.getStringWidth("Grey code +") + 10, bwidth = font.getStringWidth("Grey code +") + 10,
bheight = font.getLineHeight() + 4; bheight = font.getLineHeight() + 4;
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Driving):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Driving)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,

View File

@ -25,10 +25,10 @@ GenesisWidget::GenesisWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Genesis):" : "Right (Genesis):"; const string& label = leftport ? "Left (Genesis)" : "Right (Genesis)";
const int fontHeight = font.getFontHeight(); const int fontHeight = font.getFontHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Genesis):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Genesis)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,

View File

@ -25,10 +25,10 @@ JoystickWidget::JoystickWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Joystick):" : "Right (Joystick):"; const string& label = leftport ? "Left (Joystick)" : "Right (Joystick)";
const int fontHeight = font.getFontHeight(); const int fontHeight = font.getFontHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joystick):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joystick)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,

View File

@ -25,10 +25,10 @@ KeyboardWidget::KeyboardWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Keyboard):" : "Right (Keyboard):"; const string& label = leftport ? "Left (Keyboard)" : "Right (Keyboard)";
const int fontHeight = font.getFontHeight(); const int fontHeight = font.getFontHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Keyboard):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Keyboard)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,

View File

@ -16,6 +16,7 @@
//============================================================================ //============================================================================
#include "OSystem.hxx" #include "OSystem.hxx"
#include "Paddles.hxx"
#include "EventHandler.hxx" #include "EventHandler.hxx"
#include "PaddleWidget.hxx" #include "PaddleWidget.hxx"
@ -25,25 +26,26 @@ PaddleWidget::PaddleWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (Paddles):" : "Right (Paddles):"; const string& label = leftport ? "Left (Paddles)" : "Right (Paddles)";
const int fontWidth = font.getMaxCharWidth(), const int fontWidth = font.getMaxCharWidth(),
fontHeight = font.getFontHeight(), fontHeight = font.getFontHeight(),
lineHeight = font.getLineHeight(); lineHeight = font.getLineHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Paddles):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Paddles)");
new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
fontHeight, label, kTextAlignLeft); fontHeight, label, kTextAlignLeft);
ypos += lineHeight + 20; ypos += lineHeight + 20;
const string& p0string = leftport ? "P0 pot: " : "P2 pot: "; const string& p0string = leftport ? "P0 pot " : "P2 pot ";
const string& p1string = leftport ? "P1 pot: " : "P3 pot: "; const string& p1string = leftport ? "P1 pot " : "P3 pot ";
lwidth = font.getStringWidth("P3 pot: "); lwidth = font.getStringWidth("P3 pot: ");
myP0Resistance = myP0Resistance =
new SliderWidget(boss, font, xpos, ypos, 10*fontWidth, lineHeight, new SliderWidget(boss, font, xpos, ypos, 10*fontWidth, lineHeight,
p0string, lwidth, kP0Changed); p0string, lwidth, kP0Changed);
myP0Resistance->setMinValue(0); myP0Resistance->setMaxValue(1400000); myP0Resistance->setMinValue(0);
myP0Resistance->setStepValue(1400000/100); myP0Resistance->setMaxValue(Paddles::MAX_RESISTANCE);
myP0Resistance->setStepValue(Paddles::MAX_RESISTANCE/100);
myP0Resistance->setTarget(this); myP0Resistance->setTarget(this);
xpos += 20; ypos += myP0Resistance->getHeight() + 4; xpos += 20; ypos += myP0Resistance->getHeight() + 4;
@ -55,8 +57,9 @@ PaddleWidget::PaddleWidget(GuiObject* boss, const GUI::Font& font,
myP1Resistance = myP1Resistance =
new SliderWidget(boss, font, xpos, ypos, 10*fontWidth, lineHeight, new SliderWidget(boss, font, xpos, ypos, 10*fontWidth, lineHeight,
p1string, lwidth, kP1Changed); p1string, lwidth, kP1Changed);
myP1Resistance->setMinValue(0); myP1Resistance->setMaxValue(1400000); myP1Resistance->setMinValue(0);
myP1Resistance->setStepValue(1400000/100); myP1Resistance->setMaxValue(Paddles::MAX_RESISTANCE);
myP1Resistance->setStepValue(Paddles::MAX_RESISTANCE/100);
myP1Resistance->setTarget(this); myP1Resistance->setTarget(this);
xpos += 20; ypos += myP1Resistance->getHeight() + 4; xpos += 20; ypos += myP1Resistance->getHeight() + 4;
@ -68,8 +71,10 @@ PaddleWidget::PaddleWidget(GuiObject* boss, const GUI::Font& font,
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void PaddleWidget::loadConfig() void PaddleWidget::loadConfig()
{ {
myP0Resistance->setValue(1400000 - Int32(myController.read(Controller::Nine))); myP0Resistance->setValue(Paddles::MAX_RESISTANCE -
myP1Resistance->setValue(1400000 - Int32(myController.read(Controller::Five))); Int32(myController.read(Controller::Nine)));
myP1Resistance->setValue(Paddles::MAX_RESISTANCE -
Int32(myController.read(Controller::Five)));
myP0Fire->setState(!myController.read(Controller::Four)); myP0Fire->setState(!myController.read(Controller::Four));
myP1Fire->setState(!myController.read(Controller::Three)); myP1Fire->setState(!myController.read(Controller::Three));
} }
@ -81,10 +86,12 @@ void PaddleWidget::handleCommand(
switch(cmd) switch(cmd)
{ {
case kP0Changed: case kP0Changed:
myController.set(Controller::Nine, 1400000 - myP0Resistance->getValue()); myController.set(Controller::Nine,
Paddles::MAX_RESISTANCE - myP0Resistance->getValue());
break; break;
case kP1Changed: case kP1Changed:
myController.set(Controller::Five, 1400000 - myP1Resistance->getValue()); myController.set(Controller::Five,
Paddles::MAX_RESISTANCE - myP1Resistance->getValue());
break; break;
case kP0Fire: case kP0Fire:
myController.set(Controller::Four, !myP0Fire->getState()); myController.set(Controller::Four, !myP0Fire->getState());

View File

@ -115,18 +115,18 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
// Add Binary display of selected RAM cell // Add Binary display of selected RAM cell
xpos = x + w - 13*myFontWidth - 20; xpos = x + w - 13*myFontWidth - 20;
new StaticTextWidget(boss, lfont, xpos, ypos, 4*myFontWidth, myFontHeight, new StaticTextWidget(boss, lfont, xpos, ypos, 3*myFontWidth, myFontHeight,
"Bin", kTextAlignLeft); "Bin", kTextAlignLeft);
myBinValue = new DataGridWidget(boss, nfont, xpos + 4*myFontWidth + 5, ypos-2, myBinValue = new DataGridWidget(boss, nfont, xpos + 3*myFontWidth + 5, ypos-2,
1, 1, 8, 8, Common::Base::F_2); 1, 1, 8, 8, Common::Base::F_2);
myBinValue->setTarget(this); myBinValue->setTarget(this);
myBinValue->setID(kRamBinID); myBinValue->setID(kRamBinID);
// Add Decimal display of selected RAM cell // Add Decimal display of selected RAM cell
xpos -= 8*myFontWidth + 5 + 20; xpos -= 8*myFontWidth + 5 + 20;
new StaticTextWidget(boss, lfont, xpos, ypos, 4*myFontWidth, myFontHeight, new StaticTextWidget(boss, lfont, xpos, ypos, 3*myFontWidth, myFontHeight,
"Dec", kTextAlignLeft); "Dec", kTextAlignLeft);
myDecValue = new DataGridWidget(boss, nfont, xpos + 4*myFontWidth + 5, ypos-2, myDecValue = new DataGridWidget(boss, nfont, xpos + 3*myFontWidth + 5, ypos-2,
1, 1, 3, 8, Common::Base::F_10); 1, 1, 3, 8, Common::Base::F_10);
myDecValue->setTarget(this); myDecValue->setTarget(this);
myDecValue->setID(kRamDecID); myDecValue->setID(kRamDecID);
@ -137,9 +137,9 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n
// Add Label of selected RAM cell // Add Label of selected RAM cell
int xpos_r = xpos - 20; int xpos_r = xpos - 20;
xpos = x + 10; xpos = x + 10;
new StaticTextWidget(boss, lfont, xpos, ypos, 6*myFontWidth, myFontHeight, new StaticTextWidget(boss, lfont, xpos, ypos, 5*myFontWidth, myFontHeight,
"Label", kTextAlignLeft); "Label", kTextAlignLeft);
xpos += 6*myFontWidth + 5; xpos += 5*myFontWidth + 5;
myLabel = new EditTextWidget(boss, nfont, xpos, ypos-2, xpos_r-xpos, myLabel = new EditTextWidget(boss, nfont, xpos, ypos-2, xpos_r-xpos,
myLineHeight); myLineHeight);
myLabel->setEditable(false, true); myLabel->setEditable(false, true);

View File

@ -48,7 +48,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
const int fontWidth = lfont.getMaxCharWidth(), const int fontWidth = lfont.getMaxCharWidth(),
fontHeight = lfont.getFontHeight(), fontHeight = lfont.getFontHeight(),
lineHeight = lfont.getLineHeight(); lineHeight = lfont.getLineHeight();
int xpos = 10, ypos = 25, lwidth = 9 * fontWidth, col = 0; int xpos = 10, ypos = 25, lwidth = 8 * fontWidth, col = 0;
StaticTextWidget* t; StaticTextWidget* t;
VariantList items; VariantList items;
@ -73,50 +73,50 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
bits->setList(off, on); bits->setList(off, on);
// SWCHA bits in 'poke' mode // SWCHA bits in 'poke' mode
CREATE_IO_REGS("SWCHA(W):", mySWCHAWriteBits, kSWCHABitsID, true); CREATE_IO_REGS("SWCHA(W)", mySWCHAWriteBits, kSWCHABitsID, true);
col = xpos + 20; // remember this for adding widgets to the second column col = xpos + 20; // remember this for adding widgets to the second column
// SWACNT bits // SWACNT bits
xpos = 10; ypos += lineHeight + 5; xpos = 10; ypos += lineHeight + 5;
CREATE_IO_REGS("SWACNT:", mySWACNTBits, kSWACNTBitsID, true); CREATE_IO_REGS("SWACNT", mySWACNTBits, kSWACNTBitsID, true);
// SWCHA bits in 'peek' mode // SWCHA bits in 'peek' mode
xpos = 10; ypos += lineHeight + 5; xpos = 10; ypos += lineHeight + 5;
CREATE_IO_REGS("SWCHA(R):", mySWCHAReadBits, 0, false); CREATE_IO_REGS("SWCHA(R)", mySWCHAReadBits, 0, false);
// SWCHB bits in 'poke' mode // SWCHB bits in 'poke' mode
xpos = 10; ypos += 2 * lineHeight; xpos = 10; ypos += 2 * lineHeight;
CREATE_IO_REGS("SWCHB(W):", mySWCHBWriteBits, kSWCHBBitsID, true); CREATE_IO_REGS("SWCHB(W)", mySWCHBWriteBits, kSWCHBBitsID, true);
// SWBCNT bits // SWBCNT bits
xpos = 10; ypos += lineHeight + 5; xpos = 10; ypos += lineHeight + 5;
CREATE_IO_REGS("SWBCNT:", mySWBCNTBits, kSWBCNTBitsID, true); CREATE_IO_REGS("SWBCNT", mySWBCNTBits, kSWBCNTBitsID, true);
// SWCHB bits in 'peek' mode // SWCHB bits in 'peek' mode
xpos = 10; ypos += lineHeight + 5; xpos = 10; ypos += lineHeight + 5;
CREATE_IO_REGS("SWCHB(R):", mySWCHBReadBits, 0, false); CREATE_IO_REGS("SWCHB(R)", mySWCHBReadBits, 0, false);
// Timer registers (R/W) // Timer registers (R/W)
const char* writeNames[] = { "TIM1T:", "TIM8T:", "TIM64T:", "T1024T:" }; const char* writeNames[] = { "TIM1T", "TIM8T", "TIM64T", "T1024T" };
xpos = 10; ypos += 2*lineHeight; xpos = 10; ypos += 2*lineHeight;
for(int row = 0; row < 4; ++row) for(int row = 0; row < 4; ++row)
{ {
t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2,
9*fontWidth, fontHeight, writeNames[row], kTextAlignLeft); lwidth, fontHeight, writeNames[row], kTextAlignLeft);
} }
xpos += 9*fontWidth + 5; xpos += t->getWidth() + 5;
myTimWrite = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 2, 8, Common::Base::F_16); myTimWrite = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 2, 8, Common::Base::F_16);
myTimWrite->setTarget(this); myTimWrite->setTarget(this);
myTimWrite->setID(kTimWriteID); myTimWrite->setID(kTimWriteID);
addFocusWidget(myTimWrite); addFocusWidget(myTimWrite);
// Timer registers (RO) // Timer registers (RO)
const char* readNames[] = { "INTIM:", "TIMINT:", "Total Clks:", "INTIM Clks:" }; const char* readNames[] = { "INTIM", "TIMINT", "Total Clks", "INTIM Clks" };
xpos = 10; ypos += myTimWrite->getHeight() + lineHeight; xpos = 10; ypos += myTimWrite->getHeight() + lineHeight;
for(int row = 0; row < 4; ++row) for(int row = 0; row < 4; ++row)
{ {
t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2,
11*fontWidth, fontHeight, readNames[row], kTextAlignLeft); 10*fontWidth, fontHeight, readNames[row], kTextAlignLeft);
} }
xpos += t->getWidth() + 5; xpos += t->getWidth() + 5;
myTimRead = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 8, 32, Common::Base::F_16); myTimRead = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 8, 32, Common::Base::F_16);
@ -133,27 +133,27 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
riot.controller(Controller::Right)); riot.controller(Controller::Right));
// TIA INPTx registers (R), left port // TIA INPTx registers (R), left port
const char* contLeftReadNames[] = { "INPT0:", "INPT1:", "INPT4:" }; const char* contLeftReadNames[] = { "INPT0", "INPT1", "INPT4" };
xpos = col; ypos += myLeftControl->getHeight() + 2 * lineHeight; xpos = col; ypos += myLeftControl->getHeight() + 2 * lineHeight;
for(int row = 0; row < 3; ++row) for(int row = 0; row < 3; ++row)
{ {
new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2,
6*fontWidth, fontHeight, contLeftReadNames[row], kTextAlignLeft); 5*fontWidth, fontHeight, contLeftReadNames[row], kTextAlignLeft);
} }
xpos += 6*fontWidth + 5; xpos += 5*fontWidth + 5;
myLeftINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16); myLeftINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16);
myLeftINPT->setTarget(this); myLeftINPT->setTarget(this);
myLeftINPT->setEditable(false); myLeftINPT->setEditable(false);
// TIA INPTx registers (R), right port // TIA INPTx registers (R), right port
const char* contRightReadNames[] = { "INPT2:", "INPT3:", "INPT5:" }; const char* contRightReadNames[] = { "INPT2", "INPT3", "INPT5" };
xpos = col + myLeftControl->getWidth() + 15; xpos = col + myLeftControl->getWidth() + 15;
for(int row = 0; row < 3; ++row) for(int row = 0; row < 3; ++row)
{ {
new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2,
6*fontWidth, fontHeight, contRightReadNames[row], kTextAlignLeft); 5*fontWidth, fontHeight, contRightReadNames[row], kTextAlignLeft);
} }
xpos += 6*fontWidth + 5; xpos += 5*fontWidth + 5;
myRightINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16); myRightINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16);
myRightINPT->setTarget(this); myRightINPT->setTarget(this);
myRightINPT->setEditable(false); myRightINPT->setEditable(false);
@ -170,19 +170,19 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
// PO & P1 difficulty switches // PO & P1 difficulty switches
int pwidth = lfont.getStringWidth("B/easy"); int pwidth = lfont.getStringWidth("B/easy");
lwidth = lfont.getStringWidth("P0 Diff: "); lwidth = lfont.getStringWidth("P0 Diff ");
xpos = col; ypos += 2 * lineHeight; xpos = col; ypos += 2 * lineHeight;
int col2_ypos = ypos; int col2_ypos = ypos;
items.clear(); items.clear();
VarList::push_back(items, "B/easy", "b"); VarList::push_back(items, "B/easy", "b");
VarList::push_back(items, "A/hard", "a"); VarList::push_back(items, "A/hard", "a");
myP0Diff = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items, myP0Diff = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items,
"P0 Diff: ", lwidth, kP0DiffChanged); "P0 Diff ", lwidth, kP0DiffChanged);
myP0Diff->setTarget(this); myP0Diff->setTarget(this);
addFocusWidget(myP0Diff); addFocusWidget(myP0Diff);
ypos += myP0Diff->getHeight() + 5; ypos += myP0Diff->getHeight() + 5;
myP1Diff = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items, myP1Diff = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items,
"P1 Diff: ", lwidth, kP1DiffChanged); "P1 Diff ", lwidth, kP1DiffChanged);
myP1Diff->setTarget(this); myP1Diff->setTarget(this);
addFocusWidget(myP1Diff); addFocusWidget(myP1Diff);
@ -192,7 +192,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
VarList::push_back(items, "B&W", "bw"); VarList::push_back(items, "B&W", "bw");
VarList::push_back(items, "Color", "color"); VarList::push_back(items, "Color", "color");
myTVType = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items, myTVType = new PopUpWidget(boss, lfont, xpos, ypos, pwidth, lineHeight, items,
"TV Type: ", lwidth, kTVTypeChanged); "TV Type ", lwidth, kTVTypeChanged);
myTVType->setTarget(this); myTVType->setTarget(this);
addFocusWidget(myTVType); addFocusWidget(myTVType);
@ -436,23 +436,33 @@ ControllerWidget* RiotWidget::addControlWidget(GuiObject* boss, const GUI::Font&
{ {
switch(controller.type()) switch(controller.type())
{ {
case Controller::Joystick: case Controller::AmigaMouse: // TODO - implement this
return new JoystickWidget(boss, font, x, y, controller); return new NullControlWidget(boss, font, x, y, controller);
case Controller::Paddles: case Controller::AtariMouse: // TODO - implement this
return new PaddleWidget(boss, font, x, y, controller); return new NullControlWidget(boss, font, x, y, controller);
case Controller::AtariVox:
return new AtariVoxWidget(boss, font, x, y, controller);
case Controller::BoosterGrip: case Controller::BoosterGrip:
return new BoosterWidget(boss, font, x, y, controller); return new BoosterWidget(boss, font, x, y, controller);
case Controller::CompuMate: // TODO - implement this
return new NullControlWidget(boss, font, x, y, controller);
case Controller::Driving: case Controller::Driving:
return new DrivingWidget(boss, font, x, y, controller); return new DrivingWidget(boss, font, x, y, controller);
case Controller::Genesis: case Controller::Genesis:
return new GenesisWidget(boss, font, x, y, controller); return new GenesisWidget(boss, font, x, y, controller);
case Controller::Joystick:
return new JoystickWidget(boss, font, x, y, controller);
case Controller::Keyboard: case Controller::Keyboard:
return new KeyboardWidget(boss, font, x, y, controller); return new KeyboardWidget(boss, font, x, y, controller);
case Controller::AtariVox: case Controller::KidVid: // TODO - implement this
return new AtariVoxWidget(boss, font, x, y, controller); return new NullControlWidget(boss, font, x, y, controller);
case Controller::MindLink: // TODO - implement this
return new NullControlWidget(boss, font, x, y, controller);
case Controller::Paddles:
return new PaddleWidget(boss, font, x, y, controller);
case Controller::SaveKey: case Controller::SaveKey:
return new SaveKeyWidget(boss, font, x, y, controller); return new SaveKeyWidget(boss, font, x, y, controller);
default: case Controller::TrakBall: // TODO - implement this
return new NullControlWidget(boss, font, x, y, controller); return new NullControlWidget(boss, font, x, y, controller);
} }
} }

View File

@ -25,15 +25,14 @@ SaveKeyWidget::SaveKeyWidget(GuiObject* boss, const GUI::Font& font,
: ControllerWidget(boss, font, x, y, controller) : ControllerWidget(boss, font, x, y, controller)
{ {
bool leftport = myController.jack() == Controller::Left; bool leftport = myController.jack() == Controller::Left;
const string& label = leftport ? "Left (SaveKey):" : "Right (SaveKey):"; const string& label = leftport ? "Left (SaveKey)" : "Right (SaveKey)";
const int fontWidth = font.getMaxCharWidth(), const int fontHeight = font.getFontHeight(),
fontHeight = font.getFontHeight(),
lineHeight = font.getLineHeight(), lineHeight = font.getLineHeight(),
bwidth = font.getStringWidth("Erase EEPROM") + 20, bwidth = font.getStringWidth("Erase EEPROM") + 20,
bheight = lineHeight + 4; bheight = lineHeight + 4;
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (SaveKey):"); int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (SaveKey)");
StaticTextWidget* t; StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
@ -46,16 +45,18 @@ SaveKeyWidget::SaveKeyWidget(GuiObject* boss, const GUI::Font& font,
myEEPROMErase->setTarget(this); myEEPROMErase->setTarget(this);
ypos += lineHeight + 20; ypos += lineHeight + 20;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, const GUI::Font& ifont = instance().frameBuffer().infoFont();
lwidth = ifont.getMaxCharWidth() * 20;
new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "(*) This will erase", kTextAlignLeft); fontHeight, "(*) This will erase", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "all EEPROM data, not", kTextAlignLeft); fontHeight, "all EEPROM data, not", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "just the range used", kTextAlignLeft); fontHeight, "just the range used", kTextAlignLeft);
ypos += lineHeight + 2; ypos += lineHeight + 2;
new StaticTextWidget(boss, font, xpos, ypos, fontWidth*22, new StaticTextWidget(boss, ifont, xpos, ypos, lwidth,
fontHeight, "for this ROM", kTextAlignLeft); fontHeight, "for this ROM", kTextAlignLeft);
} }

View File

@ -87,9 +87,9 @@ class Controller : public Serializable
*/ */
enum Type enum Type
{ {
BoosterGrip, Driving, Keyboard, Paddles, Joystick, AmigaMouse, AtariMouse, AtariVox, BoosterGrip, CompuMate,
AmigaMouse, AtariMouse, TrakBall, AtariVox, SaveKey, Driving, Genesis, Joystick, Keyboard, KidVid, MindLink,
KidVid, Genesis, MindLink, CompuMate Paddles, SaveKey, TrakBall
}; };
public: public:

View File

@ -260,12 +260,12 @@ void Paddles::update()
int sa_yaxis = myEvent.get(myP1AxisValue); int sa_yaxis = myEvent.get(myP1AxisValue);
if(abs(myLastAxisX - sa_xaxis) > 10) if(abs(myLastAxisX - sa_xaxis) > 10)
{ {
myAnalogPinValue[Nine] = Int32(1400000 * ((32767 - Int16(sa_xaxis)) / 65536.0)); myAnalogPinValue[Nine] = Int32(MAX_RESISTANCE * ((32767 - Int16(sa_xaxis)) / 65536.0));
sa_changed = true; sa_changed = true;
} }
if(abs(myLastAxisY - sa_yaxis) > 10) if(abs(myLastAxisY - sa_yaxis) > 10)
{ {
myAnalogPinValue[Five] = Int32(1400000 * ((32767 - Int16(sa_yaxis)) / 65536.0)); myAnalogPinValue[Five] = Int32(MAX_RESISTANCE * ((32767 - Int16(sa_yaxis)) / 65536.0));
sa_changed = true; sa_changed = true;
} }
myLastAxisX = sa_xaxis; myLastAxisX = sa_xaxis;
@ -353,10 +353,10 @@ void Paddles::update()
// Only change state if the charge has actually changed // Only change state if the charge has actually changed
if(myCharge[1] != myLastCharge[1]) if(myCharge[1] != myLastCharge[1])
myAnalogPinValue[Five] = myAnalogPinValue[Five] =
Int32(1400000 * (myCharge[1] / float(TRIGMAX))); Int32(MAX_RESISTANCE * (myCharge[1] / float(TRIGMAX)));
if(myCharge[0] != myLastCharge[0]) if(myCharge[0] != myLastCharge[0])
myAnalogPinValue[Nine] = myAnalogPinValue[Nine] =
Int32(1400000 * (myCharge[0] / float(TRIGMAX))); Int32(MAX_RESISTANCE * (myCharge[0] / float(TRIGMAX)));
myLastCharge[1] = myCharge[1]; myLastCharge[1] = myCharge[1];
myLastCharge[0] = myCharge[0]; myLastCharge[0] = myCharge[0];

View File

@ -104,6 +104,8 @@ class Paddles : public Controller
*/ */
static void setPaddleRange(int range); static void setPaddleRange(int range);
static constexpr double MAX_RESISTANCE = 1400000.0;
private: private:
// Pre-compute the events we care about based on given port // Pre-compute the events we care about based on given port
// This will eliminate test for left or right port in update() // This will eliminate test for left or right port in update()

View File

@ -19,6 +19,7 @@
#include "M6502.hxx" #include "M6502.hxx"
#include "Console.hxx" #include "Console.hxx"
#include "Control.hxx" #include "Control.hxx"
#include "Paddles.hxx"
#ifdef DEBUGGER_SUPPORT #ifdef DEBUGGER_SUPPORT
#include "CartDebug.hxx" #include "CartDebug.hxx"
@ -1326,8 +1327,6 @@ void TIA::delayedWrite(uInt8 address, uInt8 value)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void TIA::updatePaddle(uInt8 idx) void TIA::updatePaddle(uInt8 idx)
{ {
static constexpr double MAX_RESISTANCE = 1400000;
Int32 resistance; Int32 resistance;
switch (idx) { switch (idx) {
case 0: case 0:
@ -1351,7 +1350,7 @@ void TIA::updatePaddle(uInt8 idx)
} }
myPaddleReaders[idx].update( myPaddleReaders[idx].update(
(resistance == Controller::maximumResistance ? -1 : double(resistance)) / MAX_RESISTANCE, (resistance == Controller::maximumResistance ? -1 : double(resistance)) / Paddles::MAX_RESISTANCE,
myTimestamp, myTimestamp,
myFrameManager.layout() myFrameManager.layout()
); );

View File

@ -52,7 +52,6 @@
class TIA : public Device class TIA : public Device
{ {
public: public:
enum DummyRegisters: uInt8 { enum DummyRegisters: uInt8 {
shuffleP0 = 0xF0, shuffleP0 = 0xF0,
shuffleP1 = 0xF1, shuffleP1 = 0xF1,