From 8c2eaadaa1c4430675dac8ec69cafd3008a4d8c7 Mon Sep 17 00:00:00 2001 From: stephena Date: Sat, 12 Nov 2005 22:04:57 +0000 Subject: [PATCH] Reworked joystick handling wrt Stelladaptor support; it should work a little faster than before, and it makes the code much easier to understand. Made Stelladaptor devices only send events based on which type of controller is connected to the emulated port (Joystick, Paddles, Driving). Since we can't detect which type of controller is attached to a Stelladaptor, previously the code just sent events for all three types. This causes problems with some games that don't know how to deal with events that cannot possibly happen at the same time on a real machine (ie, paddle 0 *and* joystick 0 being operated). Added code to 'swallow' garbage events generated when Stella is first launched, usually caused by jitter in the joystick or mouse. This fixes some weird problems with internal Stella events being set before we even enter the main gaming loop. Still TODO is add support for joystick hats and trackballs, once I can locate a device which has these items. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@875 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/common/mainSDL.cxx | 7 +- stella/src/emucore/Booster.cxx | 7 +- stella/src/emucore/Booster.hxx | 9 +- stella/src/emucore/Control.hxx | 17 ++- stella/src/emucore/Driving.cxx | 7 +- stella/src/emucore/Driving.hxx | 9 +- stella/src/emucore/EventHandler.cxx | 227 +++++++++++++++------------- stella/src/emucore/EventHandler.hxx | 11 +- stella/src/emucore/Joystick.cxx | 7 +- stella/src/emucore/Joystick.hxx | 9 +- stella/src/emucore/Keyboard.cxx | 7 +- stella/src/emucore/Keyboard.hxx | 9 +- stella/src/emucore/OSystem.cxx | 6 +- stella/src/emucore/Paddles.cxx | 7 +- stella/src/emucore/Paddles.hxx | 9 +- 15 files changed, 220 insertions(+), 128 deletions(-) diff --git a/stella/src/common/mainSDL.cxx b/stella/src/common/mainSDL.cxx index c449c732d..4593bedcd 100644 --- a/stella/src/common/mainSDL.cxx +++ b/stella/src/common/mainSDL.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: mainSDL.cxx,v 1.53 2005-11-11 21:44:19 stephena Exp $ +// $Id: mainSDL.cxx,v 1.54 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -248,6 +248,11 @@ int main(int argc, char* argv[]) #endif } + // Swallow any spurious events in the queue + // These are normally caused by joystick/mouse jitter + SDL_Event event; + while(SDL_PollEvent(&event)) /* swallow event */ ; + // Start the main loop, and don't exit until the user issues a QUIT command theOSystem->mainLoop(); diff --git a/stella/src/emucore/Booster.cxx b/stella/src/emucore/Booster.cxx index a7d178bc2..dd2acf82d 100644 --- a/stella/src/emucore/Booster.cxx +++ b/stella/src/emucore/Booster.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Booster.cxx,v 1.3 2005-06-16 00:55:57 stephena Exp $ +// $Id: Booster.cxx,v 1.4 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include "Event.hxx" @@ -103,3 +103,8 @@ void BoosterGrip::write(DigitalPin, bool) // Writing doesn't do anything to the booster grip... } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Controller::Type BoosterGrip::type() +{ + return Controller::BoosterGrip; +} diff --git a/stella/src/emucore/Booster.hxx b/stella/src/emucore/Booster.hxx index d9cc65a2c..ae0b4a8fb 100644 --- a/stella/src/emucore/Booster.hxx +++ b/stella/src/emucore/Booster.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Booster.hxx,v 1.3 2005-06-16 00:55:57 stephena Exp $ +// $Id: Booster.hxx,v 1.4 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef BOOSTERGRIP_HXX @@ -28,7 +28,7 @@ on it (a booster and a trigger). @author Bradford W. Mott - @version $Id: Booster.hxx,v 1.3 2005-06-16 00:55:57 stephena Exp $ + @version $Id: Booster.hxx,v 1.4 2005-11-12 22:04:57 stephena Exp $ */ class BoosterGrip : public Controller { @@ -73,6 +73,11 @@ class BoosterGrip : public Controller @param value The value to write to the pin */ virtual void write(DigitalPin pin, bool value); + + /** + Returns the type of this controller, + */ + virtual Type type(); }; #endif diff --git a/stella/src/emucore/Control.hxx b/stella/src/emucore/Control.hxx index 5016b673a..215f071ce 100644 --- a/stella/src/emucore/Control.hxx +++ b/stella/src/emucore/Control.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Control.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Control.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef CONTROLLER_HXX @@ -55,7 +55,7 @@ class Event; of the controller from the prespective of the controller's jack. @author Bradford W. Mott - @version $Id: Control.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ + @version $Id: Control.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ */ class Controller { @@ -68,6 +68,14 @@ class Controller Left, Right }; + /** + Enumeration of the controller types + */ + enum Type + { + BoosterGrip, Driving, Keyboard, Paddles, Joystick + }; + public: /** Create a new controller plugged into the specified jack @@ -127,6 +135,11 @@ class Controller */ virtual void write(DigitalPin pin, bool value) = 0; + /** + Returns the type of this controller. + */ + virtual Type type() = 0; + public: /// Constant which represents maximum resistance for analog pins static const Int32 maximumResistance; diff --git a/stella/src/emucore/Driving.cxx b/stella/src/emucore/Driving.cxx index c18b258db..365fc1846 100644 --- a/stella/src/emucore/Driving.cxx +++ b/stella/src/emucore/Driving.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Driving.cxx,v 1.4 2005-06-16 01:11:27 stephena Exp $ +// $Id: Driving.cxx,v 1.5 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -134,3 +134,8 @@ void Driving::write(DigitalPin, bool) // Writing doesn't do anything to the driving controller... } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Controller::Type Driving::type() +{ + return Controller::Driving; +} diff --git a/stella/src/emucore/Driving.hxx b/stella/src/emucore/Driving.hxx index cfd0d55ef..3cade8a15 100644 --- a/stella/src/emucore/Driving.hxx +++ b/stella/src/emucore/Driving.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Driving.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Driving.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef DRIVING_HXX @@ -29,7 +29,7 @@ class System; The standard Atari 2600 Indy 500 driving controller. @author Bradford W. Mott - @version $Id: Driving.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ + @version $Id: Driving.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ */ class Driving : public Controller { @@ -76,6 +76,11 @@ class Driving : public Controller */ virtual void write(DigitalPin pin, bool value); + /** + Returns the type of this controller. + */ + virtual Type type(); + private: // Counter to iterate through the gray codes uInt32 myCounter; diff --git a/stella/src/emucore/EventHandler.cxx b/stella/src/emucore/EventHandler.cxx index 03cc9b58b..68fc646b4 100644 --- a/stella/src/emucore/EventHandler.cxx +++ b/stella/src/emucore/EventHandler.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.cxx,v 1.110 2005-11-11 21:44:19 stephena Exp $ +// $Id: EventHandler.cxx,v 1.111 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -593,7 +593,7 @@ void EventHandler::poll(uInt32 time) case SDL_MOUSEMOTION: handleMouseMotionEvent(event); - break; // SDL_MOUSEMOTION + break; // SDL_MOUSEMOTION case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: @@ -616,48 +616,78 @@ void EventHandler::poll(uInt32 time) case SDL_VIDEOEXPOSE: refreshDisplay(); break; // SDL_VIDEOEXPOSE - } #ifdef JOYSTICK_SUPPORT - // Read joystick events and modify event states - int stick; - uInt32 code; - uInt8 state = 0; - Uint8 axis; - Uint8 button; - Int32 resistance; - Sint16 value; - JoyType type; + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: + { + if(event.jbutton.which >= kNumJoysticks) + break; - if(event.jbutton.which >= kNumJoysticks) - return; - - // Figure put what type of joystick we're dealing with - // Stelladaptors behave differently, and can't be remapped - stick = ourJoystickMapping[event.jbutton.which].stick; - type = ourJoystickMapping[event.jbutton.which].type; - switch(type) - { - case JT_NONE: - break; - - case JT_REGULAR: - switch(event.type) + // Stelladaptors handle buttons differently than regular joysticks + int type = ourJoystickMapping[event.jbutton.which].type; + switch(type) { - case SDL_JOYBUTTONUP: - case SDL_JOYBUTTONDOWN: + case JT_REGULAR: + { if(event.jbutton.button >= kNumJoyButtons-4) return; - code = event.jbutton.button; - state = event.jbutton.state == SDL_PRESSED ? 1 : 0; + int stick = ourJoystickMapping[event.jbutton.which].stick; + int code = event.jbutton.button; + int state = event.jbutton.state == SDL_PRESSED ? 1 : 0; handleJoyEvent(stick, code, state); - break; + break; // Regular joystick button + } - case SDL_JOYAXISMOTION: - axis = event.jaxis.axis; - value = event.jaxis.value; + case JT_STELLADAPTOR_1: + case JT_STELLADAPTOR_2: + { + int button = event.jbutton.button; + int state = event.jbutton.state == SDL_PRESSED ? 1 : 0; + + // Since we can't detect what controller is attached to a + // Stelladaptor, we only send events based on controller + // type in ROM properties + Controller::Type ctype = myController[type-2]; + switch((int)ctype) + { + // Send button events for the joysticks + case Controller::Joystick: + handleEvent(SA_Button[type-2][button][0], state); + break; + + // Send axis events for the paddles + case Controller::Paddles: + handleEvent(SA_Button[type-2][button][1], state); + break; + + // Send events for the driving controllers + case Controller::Driving: + handleEvent(SA_Button[type-2][button][2], state); + break; + } + break; // Stelladaptor button + } + } + break; // SDL_JOYBUTTONUP, SDL_JOYBUTTONDOWN + } + + case SDL_JOYAXISMOTION: + { + if(event.jbutton.which >= kNumJoysticks) + break; + + // Stelladaptors handle axis differently than regular joysticks + int type = ourJoystickMapping[event.jbutton.which].type; + switch(type) + { + case JT_REGULAR: + { + int stick = ourJoystickMapping[event.jbutton.which].stick; + int axis = event.jaxis.axis; + int value = event.jaxis.value; // Handle emulation of mouse using the joystick if(myState == S_EMULATE) @@ -675,76 +705,54 @@ void EventHandler::poll(uInt32 time) } else handleMouseWarp(stick, axis, value); - break; + break; // Regular joystick axis + } + + case JT_STELLADAPTOR_1: + case JT_STELLADAPTOR_2: + { + int axis = event.jaxis.axis; + int value = event.jaxis.value; + + // Since we can't detect what controller is attached to a + // Stelladaptor, we only send events based on controller + // type in ROM properties + Controller::Type ctype = myController[type-2]; + switch((int)ctype) + { + // Send axis events for the joysticks + case Controller::Joystick: + handleEvent(SA_Axis[type-2][axis][0], (value < -16384) ? 1 : 0); + handleEvent(SA_Axis[type-2][axis][1], (value > 16384) ? 1 : 0); + break; + + // Send axis events for the paddles + case Controller::Paddles: + int resistance = (Int32) (1000000.0 * (32767 - value) / 65534); + handleEvent(SA_Axis[type-2][axis][2], resistance); + break; + + // Send events for the driving controllers + case Controller::Driving: + if(axis == 1) + { + if(value <= -16384-4096) + handleEvent(SA_DrivingValue[type-2],2); + else if(value > 16384+4096) + handleEvent(SA_DrivingValue[type-2],1); + else if(value >= 16384-4096) + handleEvent(SA_DrivingValue[type-2],0); + else + handleEvent(SA_DrivingValue[type-2],3); + } + } + break; // Stelladaptor axis + } } - break; // Regular joystick - - case JT_STELLADAPTOR_1: - case JT_STELLADAPTOR_2: - switch(event.type) - { - case SDL_JOYBUTTONUP: - case SDL_JOYBUTTONDOWN: - button = event.jbutton.button; - state = event.jbutton.state == SDL_PRESSED ? 1 : 0; - - // Send button events for the joysticks/paddles/driving controllers - if(button == 0) - { - if(type == JT_STELLADAPTOR_1) - { - handleEvent(Event::JoystickZeroFire, state); - handleEvent(Event::DrivingZeroFire, state); - handleEvent(Event::PaddleZeroFire, state); - } - else - { - handleEvent(Event::JoystickOneFire, state); - handleEvent(Event::DrivingOneFire, state); - handleEvent(Event::PaddleTwoFire, state); - } - } - else if(button == 1) - { - if(type == JT_STELLADAPTOR_1) - handleEvent(Event::PaddleOneFire, state); - else - handleEvent(Event::PaddleThreeFire, state); - } - break; - - case SDL_JOYAXISMOTION: - axis = event.jaxis.axis; - value = event.jaxis.value; - - // Send axis events for the joysticks - handleEvent(SA_Axis[type-2][axis][0], (value < -16384) ? 1 : 0); - handleEvent(SA_Axis[type-2][axis][1], (value > 16384) ? 1 : 0); - - // Send axis events for the paddles - resistance = (Int32) (1000000.0 * (32767 - value) / 65534); - handleEvent(SA_Axis[type-2][axis][2], resistance); - - // Send events for the driving controllers - if(axis == 1) - { - if(value <= -16384-4096) - handleEvent(SA_DrivingValue[type-2],2); - else if(value > 16384+4096) - handleEvent(SA_DrivingValue[type-2],1); - else if(value >= 16384-4096) - handleEvent(SA_DrivingValue[type-2],0); - else - handleEvent(SA_DrivingValue[type-2],3); - } - break; - } - break; // Stelladaptor joystick - - default: - break; + break; // SDL_JOYAXISMOTION + } +#endif // JOYSTICK_SUPPORT } -#endif } // Update the current dialog container at regular intervals @@ -1059,7 +1067,6 @@ void EventHandler::handleEvent(Event::Type event, Int32 state) { myOSystem->settings().saveConfig(); myOSystem->createLauncher(); - return; } break; @@ -1699,6 +1706,10 @@ void EventHandler::setEventState(State state) { case S_EMULATE: myOverlay = NULL; + + // Controller types only make sense in Emulate mode + myController[0] = myOSystem->console().controller(Controller::Left).type(); + myController[1] = myOSystem->console().controller(Controller::Right).type(); break; case S_MENU: @@ -2061,11 +2072,19 @@ const Event::Type EventHandler::Paddle_Button[4] = { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const Event::Type EventHandler::SA_Axis[2][2][3] = { { {Event::JoystickZeroLeft, Event::JoystickZeroRight, Event::PaddleZeroResistance}, - {Event::JoystickZeroUp, Event::JoystickZeroDown, Event::PaddleOneResistance } }, + {Event::JoystickZeroUp, Event::JoystickZeroDown, Event::PaddleOneResistance} }, { {Event::JoystickOneLeft, Event::JoystickOneRight, Event::PaddleTwoResistance}, {Event::JoystickOneUp, Event::JoystickOneDown, Event::PaddleThreeResistance} } }; +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +const Event::Type EventHandler::SA_Button[2][2][3] = { + { {Event::JoystickZeroFire, Event::PaddleZeroFire, Event::DrivingZeroFire }, + {Event::NoType, Event::PaddleOneFire, Event::NoType} }, + { {Event::JoystickOneFire, Event::PaddleTwoFire, Event::DrivingOneFire }, + {Event::NoType, Event::PaddleThreeFire, Event::NoType} } +}; + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const Event::Type EventHandler::SA_DrivingValue[2] = { Event::DrivingZeroValue, Event::DrivingOneValue diff --git a/stella/src/emucore/EventHandler.hxx b/stella/src/emucore/EventHandler.hxx index 08320da7f..c839b5429 100644 --- a/stella/src/emucore/EventHandler.hxx +++ b/stella/src/emucore/EventHandler.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: EventHandler.hxx,v 1.54 2005-10-30 20:29:56 stephena Exp $ +// $Id: EventHandler.hxx,v 1.55 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef EVENTHANDLER_HXX @@ -24,6 +24,7 @@ #include "bspf.hxx" #include "Event.hxx" #include "Array.hxx" +#include "Control.hxx" class Console; class OSystem; @@ -82,7 +83,7 @@ struct Joystick_Map { mapping can take place. @author Stephen Anthony - @version $Id: EventHandler.hxx,v 1.54 2005-10-30 20:29:56 stephena Exp $ + @version $Id: EventHandler.hxx,v 1.55 2005-11-12 22:04:57 stephena Exp $ */ class EventHandler { @@ -411,14 +412,18 @@ class EventHandler // How far the joystick will move the mouse on each frame tick int myMouseMove; + // Type of device on each controller port (based on ROM properties) + Controller::Type myController[2]; + // Lookup table for paddle resistance events static const Event::Type Paddle_Resistance[4]; // Lookup table for paddle button events static const Event::Type Paddle_Button[4]; - // Static lookup tables for Stelladaptor axis support + // Static lookup tables for Stelladaptor axis/button support static const Event::Type SA_Axis[2][2][3]; + static const Event::Type SA_Button[2][2][3]; static const Event::Type SA_DrivingValue[2]; }; diff --git a/stella/src/emucore/Joystick.cxx b/stella/src/emucore/Joystick.cxx index e650fcff3..957a83aff 100644 --- a/stella/src/emucore/Joystick.cxx +++ b/stella/src/emucore/Joystick.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Joystick.cxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Joystick.cxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -74,3 +74,8 @@ void Joystick::write(DigitalPin, bool) // Writing doesn't do anything to the joystick... } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Controller::Type Joystick::type() +{ + return Controller::Joystick; +} diff --git a/stella/src/emucore/Joystick.hxx b/stella/src/emucore/Joystick.hxx index 0e7959983..24336d315 100644 --- a/stella/src/emucore/Joystick.hxx +++ b/stella/src/emucore/Joystick.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Joystick.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Joystick.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef JOYSTICK_HXX @@ -26,7 +26,7 @@ The standard Atari 2600 joystick controller. @author Bradford W. Mott - @version $Id: Joystick.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ + @version $Id: Joystick.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ */ class Joystick : public Controller { @@ -71,6 +71,11 @@ class Joystick : public Controller @param value The value to write to the pin */ virtual void write(DigitalPin pin, bool value); + + /** + Returns the type of this controller. + */ + virtual Type type(); }; #endif diff --git a/stella/src/emucore/Keyboard.cxx b/stella/src/emucore/Keyboard.cxx index 29721ce3b..54b6db0f5 100644 --- a/stella/src/emucore/Keyboard.cxx +++ b/stella/src/emucore/Keyboard.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Keyboard.cxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Keyboard.cxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include "Event.hxx" @@ -205,3 +205,8 @@ void Keyboard::write(DigitalPin pin, bool value) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Controller::Type Keyboard::type() +{ + return Controller::Keyboard; +} diff --git a/stella/src/emucore/Keyboard.hxx b/stella/src/emucore/Keyboard.hxx index 0cf09e3a4..ebce6c500 100644 --- a/stella/src/emucore/Keyboard.hxx +++ b/stella/src/emucore/Keyboard.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Keyboard.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ +// $Id: Keyboard.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef KEYBOARD_HXX @@ -26,7 +26,7 @@ The standard Atari 2600 keyboard controller @author Bradford W. Mott - @version $Id: Keyboard.hxx,v 1.2 2005-06-16 01:11:27 stephena Exp $ + @version $Id: Keyboard.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ */ class Keyboard : public Controller { @@ -72,6 +72,11 @@ class Keyboard : public Controller */ virtual void write(DigitalPin pin, bool value); + /** + Returns the type of this controller. + */ + virtual Type type(); + private: // State of the output pins uInt8 myPinState; diff --git a/stella/src/emucore/OSystem.cxx b/stella/src/emucore/OSystem.cxx index bb2af6305..eb08c0258 100644 --- a/stella/src/emucore/OSystem.cxx +++ b/stella/src/emucore/OSystem.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: OSystem.cxx,v 1.44 2005-11-11 21:44:19 stephena Exp $ +// $Id: OSystem.cxx,v 1.45 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -113,10 +113,10 @@ OSystem::OSystem() myFeatures += "Snapshot "; #endif #ifdef DEVELOPER_SUPPORT - myFeatures += "Debugger"; + myFeatures += "Debugger "; #endif #ifdef CHEATCODE_SUPPORT - myFeatures += "Cheats"; + myFeatures += "Cheats"; // FIXME - string too long in 'About' #endif } diff --git a/stella/src/emucore/Paddles.cxx b/stella/src/emucore/Paddles.cxx index 6c0bbf878..22102b917 100644 --- a/stella/src/emucore/Paddles.cxx +++ b/stella/src/emucore/Paddles.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Paddles.cxx,v 1.2 2005-06-16 01:11:28 stephena Exp $ +// $Id: Paddles.cxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #include @@ -74,3 +74,8 @@ void Paddles::write(DigitalPin, bool) // Writing doesn't do anything to the paddles... } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Controller::Type Paddles::type() +{ + return Controller::Paddles; +} diff --git a/stella/src/emucore/Paddles.hxx b/stella/src/emucore/Paddles.hxx index 343213604..0b71bb624 100644 --- a/stella/src/emucore/Paddles.hxx +++ b/stella/src/emucore/Paddles.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Paddles.hxx,v 1.2 2005-06-16 01:11:28 stephena Exp $ +// $Id: Paddles.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ //============================================================================ #ifndef PADDLES_HXX @@ -26,7 +26,7 @@ The standard Atari 2600 pair of paddle controllers. @author Bradford W. Mott - @version $Id: Paddles.hxx,v 1.2 2005-06-16 01:11:28 stephena Exp $ + @version $Id: Paddles.hxx,v 1.3 2005-11-12 22:04:57 stephena Exp $ */ class Paddles : public Controller { @@ -71,6 +71,11 @@ class Paddles : public Controller @param value The value to write to the pin */ virtual void write(DigitalPin pin, bool value); + + /** + Returns the type of this controller. + */ + virtual Type type(); }; #endif