Controller/Genesis/Booster cleanup.

- Made BoosterGrip set defaults for analog pins, just like Genesis
- Removed superfluous call to update an unchangeable pin in Genesis
- Renamed Controller resistance constants to indicate that they are actually constants
This commit is contained in:
Stephen Anthony 2018-06-12 19:07:31 -02:30
parent 60519dbc6a
commit 963905759e
11 changed files with 64 additions and 54 deletions

View File

@ -12,7 +12,7 @@
Release History Release History
=========================================================================== ===========================================================================
5.1.2 to 5.2: (MMM d, 2018) 5.1.3 to 5.2: (MMM d, 2018)
* Extra functionality for Time Machine dialog (start/stop recording; * Extra functionality for Time Machine dialog (start/stop recording;
minor fixes; TODO button and initial key repeats...) minor fixes; TODO button and initial key repeats...)
@ -21,14 +21,23 @@
* UI modernization (new widget look, dialog titles added, dialogs refactored) * UI modernization (new widget look, dialog titles added, dialogs refactored)
* Fixed bug in autodetecting Genesis controllers.
* The Linux builds now use the system-installed PNG and ZLIB libraries * The Linux builds now use the system-installed PNG and ZLIB libraries
by default. by default.
* Fixed configure/build scripts to work natively under OpenBSD.
-Have fun! -Have fun!
5.1.2 to 5.1.3: (June 10, 2018)
* Fixed crash in OpenBSD when quitting the app, which can also be
happening on other systems (no reports yet, but the problem is now
fixed for good).
* Fixed configure/build scripts to work natively under OpenBSD.
5.1.1 to 5.1.2: (May 20, 2018) 5.1.1 to 5.1.2: (May 20, 2018)
* Fixed bug with SaveKey autodetection; some ROMs were not correctly * Fixed bug with SaveKey autodetection; some ROMs were not correctly

View File

@ -85,9 +85,9 @@ void BoosterWidget::loadConfig()
myPins[kJFire]->setState(!myController.read(ourPinNo[kJFire])); myPins[kJFire]->setState(!myController.read(ourPinNo[kJFire]));
myPins[kJBooster]->setState( myPins[kJBooster]->setState(
myController.read(Controller::Five) == Controller::minimumResistance); myController.read(Controller::Five) == Controller::MIN_RESISTANCE);
myPins[kJTrigger]->setState( myPins[kJTrigger]->setState(
myController.read(Controller::Nine) == Controller::minimumResistance); myController.read(Controller::Nine) == Controller::MIN_RESISTANCE);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -107,13 +107,13 @@ void BoosterWidget::handleCommand(
break; break;
case kJBooster: case kJBooster:
myController.set(Controller::Five, myController.set(Controller::Five,
myPins[id]->getState() ? Controller::minimumResistance : myPins[id]->getState() ? Controller::MIN_RESISTANCE :
Controller::maximumResistance); Controller::MAX_RESISTANCE);
break; break;
case kJTrigger: case kJTrigger:
myController.set(Controller::Nine, myController.set(Controller::Nine,
myPins[id]->getState() ? Controller::minimumResistance : myPins[id]->getState() ? Controller::MIN_RESISTANCE :
Controller::maximumResistance); Controller::MAX_RESISTANCE);
break; break;
} }
} }

View File

@ -79,7 +79,7 @@ void GenesisWidget::loadConfig()
myPins[kJBbtn]->setState(!myController.read(ourPinNo[kJBbtn])); myPins[kJBbtn]->setState(!myController.read(ourPinNo[kJBbtn]));
myPins[kJCbtn]->setState( myPins[kJCbtn]->setState(
myController.read(Controller::Five) == Controller::maximumResistance); myController.read(Controller::Five) == Controller::MAX_RESISTANCE);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -99,8 +99,8 @@ void GenesisWidget::handleCommand(
break; break;
case kJCbtn: case kJCbtn:
myController.set(Controller::Five, myController.set(Controller::Five,
myPins[id]->getState() ? Controller::maximumResistance : myPins[id]->getState() ? Controller::MAX_RESISTANCE :
Controller::minimumResistance); Controller::MIN_RESISTANCE);
break; break;
} }
} }

View File

@ -47,7 +47,9 @@ BoosterGrip::BoosterGrip(Jack jack, const Event& event, const System& system)
myXAxisValue = Event::SARightAxis0Value; myXAxisValue = Event::SARightAxis0Value;
myYAxisValue = Event::SARightAxis1Value; myYAxisValue = Event::SARightAxis1Value;
} }
updateAnalogPin(Five, maximumResistance);
updateAnalogPin(Five, MAX_RESISTANCE);
updateAnalogPin(Nine, MAX_RESISTANCE);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -64,11 +66,11 @@ void BoosterGrip::update()
// connected to the inputs usually used by paddles. // connected to the inputs usually used by paddles.
updateAnalogPin( updateAnalogPin(
Five, Five,
(myEvent.get(myTriggerEvent) != 0) ? minimumResistance : maximumResistance (myEvent.get(myTriggerEvent) != 0) ? MIN_RESISTANCE : MAX_RESISTANCE
); );
updateAnalogPin( updateAnalogPin(
Nine, Nine,
(myEvent.get(myBoosterEvent) != 0) ? minimumResistance : maximumResistance (myEvent.get(myBoosterEvent) != 0) ? MIN_RESISTANCE : MAX_RESISTANCE
); );
// Axis events (usually generated by the Stelladaptor) // Axis events (usually generated by the Stelladaptor)
@ -122,7 +124,7 @@ void BoosterGrip::update()
if(myEvent.get(Event::MouseButtonLeftValue)) if(myEvent.get(Event::MouseButtonLeftValue))
myDigitalPinState[Six] = false; myDigitalPinState[Six] = false;
if(myEvent.get(Event::MouseButtonRightValue)) if(myEvent.get(Event::MouseButtonRightValue))
updateAnalogPin(Nine, minimumResistance); updateAnalogPin(Nine, MIN_RESISTANCE);
} }
} }

View File

@ -32,10 +32,10 @@ CompuMate::CompuMate(const Console& console, const Event& event,
myLeftController = make_unique<CMControl>(*this, Controller::Left, event, system); myLeftController = make_unique<CMControl>(*this, Controller::Left, event, system);
myRightController = make_unique<CMControl>(*this, Controller::Right, event, system); myRightController = make_unique<CMControl>(*this, Controller::Right, event, system);
myLeftController->updateAnalogPin(Controller::Nine, Controller::maximumResistance); myLeftController->updateAnalogPin(Controller::Nine, Controller::MAX_RESISTANCE);
myLeftController->updateAnalogPin(Controller::Five, Controller::minimumResistance); myLeftController->updateAnalogPin(Controller::Five, Controller::MIN_RESISTANCE);
myRightController->updateAnalogPin(Controller::Nine, Controller::minimumResistance); myRightController->updateAnalogPin(Controller::Nine, Controller::MIN_RESISTANCE);
myRightController->updateAnalogPin(Controller::Five, Controller::maximumResistance); myRightController->updateAnalogPin(Controller::Five, Controller::MAX_RESISTANCE);
enableKeyHandling(false); enableKeyHandling(false);
} }
@ -61,17 +61,17 @@ void CompuMate::update()
Controller& lp = myConsole.leftController(); Controller& lp = myConsole.leftController();
Controller& rp = myConsole.rightController(); Controller& rp = myConsole.rightController();
lp.myAnalogPinValue[Controller::Nine] = Controller::maximumResistance; lp.myAnalogPinValue[Controller::Nine] = Controller::MAX_RESISTANCE;
lp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; lp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = true; lp.myDigitalPinState[Controller::Six] = true;
rp.myAnalogPinValue[Controller::Nine] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Nine] = Controller::MIN_RESISTANCE;
rp.myAnalogPinValue[Controller::Five] = Controller::maximumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MAX_RESISTANCE;
rp.myDigitalPinState[Controller::Six] = true; rp.myDigitalPinState[Controller::Six] = true;
if (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]) if (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
if (myKeyTable[KBDK_LCTRL] || myKeyTable[KBDK_RCTRL]) if (myKeyTable[KBDK_LCTRL] || myKeyTable[KBDK_RCTRL])
lp.myAnalogPinValue[Controller::Nine] = Controller::minimumResistance; lp.myAnalogPinValue[Controller::Nine] = Controller::MIN_RESISTANCE;
rp.myDigitalPinState[Controller::Three] = true; rp.myDigitalPinState[Controller::Three] = true;
rp.myDigitalPinState[Controller::Four] = true; rp.myDigitalPinState[Controller::Four] = true;
@ -89,7 +89,7 @@ void CompuMate::update()
// Emulate the '?' character (Shift-6) with the actual question key // Emulate the '?' character (Shift-6) with the actual question key
if (myKeyTable[KBDK_SLASH] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_SLASH] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_Y]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_Y]) rp.myDigitalPinState[Controller::Three] = false;
@ -101,7 +101,7 @@ void CompuMate::update()
// Emulate the '[' character (Shift-8) with the actual key // Emulate the '[' character (Shift-8) with the actual key
if (myKeyTable[KBDK_LEFTBRACKET] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_LEFTBRACKET] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_I]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_I]) rp.myDigitalPinState[Controller::Three] = false;
@ -113,7 +113,7 @@ void CompuMate::update()
// Emulate the '-' character (Shift-2) with the actual minus key // Emulate the '-' character (Shift-2) with the actual minus key
if (myKeyTable[KBDK_MINUS] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_MINUS] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_W]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_W]) rp.myDigitalPinState[Controller::Three] = false;
@ -131,7 +131,7 @@ void CompuMate::update()
// Emulate the quote character (Shift-0) with the actual quote key // Emulate the quote character (Shift-0) with the actual quote key
if (myKeyTable[KBDK_APOSTROPHE] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_APOSTROPHE] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_P]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_P]) rp.myDigitalPinState[Controller::Three] = false;
@ -141,7 +141,7 @@ void CompuMate::update()
// Emulate Ctrl-space (aka backspace) with the actual Backspace key // Emulate Ctrl-space (aka backspace) with the actual Backspace key
if (myKeyTable[KBDK_BACKSPACE]) if (myKeyTable[KBDK_BACKSPACE])
{ {
lp.myAnalogPinValue[Controller::Nine] = Controller::minimumResistance; lp.myAnalogPinValue[Controller::Nine] = Controller::MIN_RESISTANCE;
rp.myDigitalPinState[Controller::Four] = false; rp.myDigitalPinState[Controller::Four] = false;
} }
break; break;
@ -150,7 +150,7 @@ void CompuMate::update()
// Emulate the ']' character (Shift-9) with the actual key // Emulate the ']' character (Shift-9) with the actual key
if (myKeyTable[KBDK_RIGHTBRACKET] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_RIGHTBRACKET] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_O]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_O]) rp.myDigitalPinState[Controller::Three] = false;
@ -162,7 +162,7 @@ void CompuMate::update()
// Emulate the '=' character (Shift-5) with the actual equals key // Emulate the '=' character (Shift-5) with the actual equals key
if (myKeyTable[KBDK_EQUALS] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_EQUALS] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_T]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_T]) rp.myDigitalPinState[Controller::Three] = false;
@ -174,7 +174,7 @@ void CompuMate::update()
// Emulate the '+' character (Shift-1) with the actual plus key (Shift-=) // Emulate the '+' character (Shift-1) with the actual plus key (Shift-=)
if (myKeyTable[KBDK_EQUALS] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_EQUALS] && (myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_Q]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_Q]) rp.myDigitalPinState[Controller::Three] = false;
@ -186,7 +186,7 @@ void CompuMate::update()
// Emulate the '/' character (Shift-4) with the actual slash key // Emulate the '/' character (Shift-4) with the actual slash key
if (myKeyTable[KBDK_SLASH] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT])) if (myKeyTable[KBDK_SLASH] && !(myKeyTable[KBDK_LSHIFT] || myKeyTable[KBDK_RSHIFT]))
{ {
rp.myAnalogPinValue[Controller::Five] = Controller::minimumResistance; rp.myAnalogPinValue[Controller::Five] = Controller::MIN_RESISTANCE;
lp.myDigitalPinState[Controller::Six] = false; lp.myDigitalPinState[Controller::Six] = false;
} }
if (myKeyTable[KBDK_R]) rp.myDigitalPinState[Controller::Three] = false; if (myKeyTable[KBDK_R]) rp.myDigitalPinState[Controller::Three] = false;

View File

@ -36,7 +36,7 @@ Controller::Controller(Jack jack, const Event& event, const System& system,
myDigitalPinState[Six] = true; myDigitalPinState[Six] = true;
myAnalogPinValue[Five] = myAnalogPinValue[Five] =
myAnalogPinValue[Nine] = maximumResistance; myAnalogPinValue[Nine] = MAX_RESISTANCE;
switch(myType) switch(myType)
{ {

View File

@ -262,10 +262,10 @@ class Controller : public Serializable
public: public:
/// Constant which represents maximum resistance for analog pins /// Constant which represents maximum resistance for analog pins
static constexpr Int32 maximumResistance = 0x7FFFFFFF; static constexpr Int32 MAX_RESISTANCE = 0x7FFFFFFF;
/// Constant which represents minimum resistance for analog pins /// Constant which represents minimum resistance for analog pins
static constexpr Int32 minimumResistance = 0x00000000; static constexpr Int32 MIN_RESISTANCE = 0x00000000;
protected: protected:
void updateAnalogPin(AnalogPin, Int32 value); void updateAnalogPin(AnalogPin, Int32 value);

View File

@ -42,8 +42,8 @@ Genesis::Genesis(Jack jack, const Event& event, const System& system)
myFire2Event = Event::JoystickOneFire5; myFire2Event = Event::JoystickOneFire5;
} }
updateAnalogPin(Five, minimumResistance); updateAnalogPin(Five, MIN_RESISTANCE);
updateAnalogPin(Nine, minimumResistance); updateAnalogPin(Nine, MIN_RESISTANCE);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -61,9 +61,8 @@ void Genesis::update()
// in that the logic is inverted // in that the logic is inverted
updateAnalogPin( updateAnalogPin(
Five, Five,
(myEvent.get(myFire2Event) == 0) ? minimumResistance : maximumResistance (myEvent.get(myFire2Event) == 0) ? MIN_RESISTANCE : MAX_RESISTANCE
); );
updateAnalogPin(Nine, minimumResistance);
// Mouse motion and button events // Mouse motion and button events
if(myControlID > -1) if(myControlID > -1)
@ -94,7 +93,7 @@ void Genesis::update()
if(myEvent.get(Event::MouseButtonLeftValue)) if(myEvent.get(Event::MouseButtonLeftValue))
myDigitalPinState[Six] = false; myDigitalPinState[Six] = false;
if(myEvent.get(Event::MouseButtonRightValue)) if(myEvent.get(Event::MouseButtonRightValue))
updateAnalogPin(Five, maximumResistance); updateAnalogPin(Five, MAX_RESISTANCE);
} }
} }

View File

@ -68,26 +68,26 @@ void Keyboard::write(DigitalPin pin, bool value)
if(!myDigitalPinState[Four]) if(!myDigitalPinState[Four])
{ {
myDigitalPinState[Six] = (myEvent.get(myPoundEvent) == 0); myDigitalPinState[Six] = (myEvent.get(myPoundEvent) == 0);
if(myEvent.get(myZeroEvent) != 0) resistanceFive = maximumResistance; if(myEvent.get(myZeroEvent) != 0) resistanceFive = MAX_RESISTANCE;
if(myEvent.get(myStarEvent) != 0) resistanceNine = maximumResistance; if(myEvent.get(myStarEvent) != 0) resistanceNine = MAX_RESISTANCE;
} }
if(!myDigitalPinState[Three]) if(!myDigitalPinState[Three])
{ {
myDigitalPinState[Six] = (myEvent.get(myNineEvent) == 0); myDigitalPinState[Six] = (myEvent.get(myNineEvent) == 0);
if(myEvent.get(myEightEvent) != 0) resistanceFive = maximumResistance; if(myEvent.get(myEightEvent) != 0) resistanceFive = MAX_RESISTANCE;
if(myEvent.get(mySevenEvent) != 0) resistanceNine = maximumResistance; if(myEvent.get(mySevenEvent) != 0) resistanceNine = MAX_RESISTANCE;
} }
if(!myDigitalPinState[Two]) if(!myDigitalPinState[Two])
{ {
myDigitalPinState[Six] = (myEvent.get(mySixEvent) == 0); myDigitalPinState[Six] = (myEvent.get(mySixEvent) == 0);
if(myEvent.get(myFiveEvent) != 0) resistanceFive = maximumResistance; if(myEvent.get(myFiveEvent) != 0) resistanceFive = MAX_RESISTANCE;
if(myEvent.get(myFourEvent) != 0) resistanceNine = maximumResistance; if(myEvent.get(myFourEvent) != 0) resistanceNine = MAX_RESISTANCE;
} }
if(!myDigitalPinState[One]) if(!myDigitalPinState[One])
{ {
myDigitalPinState[Six] = (myEvent.get(myThreeEvent) == 0); myDigitalPinState[Six] = (myEvent.get(myThreeEvent) == 0);
if(myEvent.get(myTwoEvent) != 0) resistanceFive = maximumResistance; if(myEvent.get(myTwoEvent) != 0) resistanceFive = MAX_RESISTANCE;
if(myEvent.get(myOneEvent) != 0) resistanceNine = maximumResistance; if(myEvent.get(myOneEvent) != 0) resistanceNine = MAX_RESISTANCE;
} }
if (resistanceFive != read(Five)) { if (resistanceFive != read(Five)) {

View File

@ -28,8 +28,8 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
{ {
// We must start with minimum resistance; see commit // We must start with minimum resistance; see commit
// 38b452e1a047a0dca38c5bcce7c271d40f76736e for more information // 38b452e1a047a0dca38c5bcce7c271d40f76736e for more information
updateAnalogPin(Five, minimumResistance); updateAnalogPin(Five, MIN_RESISTANCE);
updateAnalogPin(Nine, minimumResistance); updateAnalogPin(Nine, MIN_RESISTANCE);
// The following logic reflects that mapping paddles to different // The following logic reflects that mapping paddles to different
// devices can be extremely complex // devices can be extremely complex

View File

@ -1542,7 +1542,7 @@ void TIA::updatePaddle(uInt8 idx)
} }
myPaddleReaders[idx].update( myPaddleReaders[idx].update(
(resistance == Controller::maximumResistance) ? -1 : (double(resistance) / Paddles::MAX_RESISTANCE), (resistance == Controller::MAX_RESISTANCE) ? -1 : (double(resistance) / Paddles::MAX_RESISTANCE),
myTimestamp, myTimestamp,
consoleTiming() consoleTiming()
); );