Fixed SWCHA read handler in the case where the ports are swapped.

git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2370 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2012-01-28 15:19:41 +00:00
parent a56778d497
commit 7247029e70
5 changed files with 8 additions and 23 deletions

View File

@ -99,8 +99,7 @@ uInt8 Controller::read()
if(read(Two)) ioport |= 0x02; if(read(Two)) ioport |= 0x02;
if(read(Three)) ioport |= 0x04; if(read(Three)) ioport |= 0x04;
if(read(Four)) ioport |= 0x08; if(read(Four)) ioport |= 0x08;
return ioport;
return myJack == Left ? (ioport << 4) : ioport;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -123,12 +123,7 @@ class Controller : public Serializable
/** /**
Read the entire state of all digital pins for this controller. Read the entire state of all digital pins for this controller.
Note that this method must use the lower 4 bits, and zero the upper bits.
Note that this method must take into account the location of the
pin data in the bitfield, and zero the remaining data:
Left port : upper 4 bits valid, lower 4 bits zero'ed
Right port: lower 4 bits valid, upper 4 bits zero'ed
@return The state of all digital pins @return The state of all digital pins
*/ */

View File

@ -119,8 +119,8 @@ uInt8 M6532::peek(uInt16 addr)
{ {
case 0x00: // SWCHA - Port A I/O Register (Joystick) case 0x00: // SWCHA - Port A I/O Register (Joystick)
{ {
uInt8 value = myConsole.controller(Controller::Left).read() | uInt8 value = (myConsole.controller(Controller::Left).read() << 4)|
myConsole.controller(Controller::Right).read(); myConsole.controller(Controller::Right).read();
// Each pin is high (1) by default and will only go low (0) if either // Each pin is high (1) by default and will only go low (0) if either
// (a) External device drives the pin low // (a) External device drives the pin low

View File

@ -109,7 +109,7 @@ uInt8 TrackBall::read()
myDigitalPinState[Three] = IOPortA & 0x40; myDigitalPinState[Three] = IOPortA & 0x40;
myDigitalPinState[Four] = IOPortA & 0x80; myDigitalPinState[Four] = IOPortA & 0x80;
return myJack == Left ? IOPortA : (IOPortA >> 4); return (IOPortA >> 4);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -131,9 +131,8 @@ void TrackBall::update()
if(myTrakBallLinesV == 0) myTrakBallLinesV = 1; if(myTrakBallLinesV == 0) myTrakBallLinesV = 1;
// Get mouse button state // Get mouse button state
myDigitalPinState[Six] = myDigitalPinState[Six] = (myEvent.get(Event::MouseButtonLeftValue) == 0) &&
(myEvent.get(Event::MouseButtonLeftValue) == 0) || (myEvent.get(Event::MouseButtonRightValue) == 0);
(myEvent.get(Event::MouseButtonRightValue) == 0);
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -59,15 +59,7 @@ class TrackBall : public Controller
public: public:
/** /**
Read the entire state of all digital pins for this controller. Read the entire state of all digital pins for this controller.
Note that this method must use the lower 4 bits, and zero the upper bits.
Note that this method must take into account the location of the
pin data in the bitfield, and zero the remaining data:
Left port : upper 4 bits valid, lower 4 bits zero'ed
Right port: lower 4 bits valid, upper 4 bits zero'ed
This method completely takes over reading of the port;
it doesn't call Controller::read() at all.
@return The state of all digital pins @return The state of all digital pins
*/ */