~ubuntu-branches/debian/sid/stella/sid

« back to all changes in this revision

Viewing changes to src/emucore/M6532.cxx

  • Committer: Package Import Robot
  • Author(s): Stephen Kitt
  • Date: 2012-02-05 08:09:05 UTC
  • mto: (1.3.1)
  • mto: This revision was merged to the branch mainline in revision 14.
  • Revision ID: package-import@ubuntu.com-20120205080905-fyhwzsu3hrvvujpp
Tags: upstream-3.5.5
ImportĀ upstreamĀ versionĀ 3.5.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
//  SS  SS   tt   ee      ll   ll  aa  aa
9
9
//   SSSS     ttt  eeeee llll llll  aaaaa
10
10
//
11
 
// Copyright (c) 1995-2011 by Bradford W. Mott, Stephen Anthony
 
11
// Copyright (c) 1995-2012 by Bradford W. Mott, Stephen Anthony
12
12
// and the Stella Team
13
13
//
14
14
// See the file "License.txt" for information on usage and redistribution of
15
15
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16
16
//
17
 
// $Id: M6532.cxx 2199 2011-01-01 16:04:32Z stephena $
 
17
// $Id: M6532.cxx 2381 2012-02-04 15:17:30Z stephena $
18
18
//============================================================================
19
19
 
20
20
#include <cassert>
119
119
  {
120
120
    case 0x00:    // SWCHA - Port A I/O Register (Joystick)
121
121
    {
122
 
      uInt8 value = 0x00;
123
 
 
124
 
      Controller& port0 = myConsole.controller(Controller::Left);
125
 
      if(port0.read(Controller::One))   value |= 0x10;
126
 
      if(port0.read(Controller::Two))   value |= 0x20;
127
 
      if(port0.read(Controller::Three)) value |= 0x40;
128
 
      if(port0.read(Controller::Four))  value |= 0x80;
129
 
 
130
 
      Controller& port1 = myConsole.controller(Controller::Right);
131
 
      if(port1.read(Controller::One))   value |= 0x01;
132
 
      if(port1.read(Controller::Two))   value |= 0x02;
133
 
      if(port1.read(Controller::Three)) value |= 0x04;
134
 
      if(port1.read(Controller::Four))  value |= 0x08;
 
122
      uInt8 value = (myConsole.controller(Controller::Left).read() << 4) |
 
123
                     myConsole.controller(Controller::Right).read();
135
124
 
136
125
      // Each pin is high (1) by default and will only go low (0) if either
137
126
      //  (a) External device drives the pin low
231
220
      case 0:     // SWCHA - Port A I/O Register (Joystick)
232
221
      {
233
222
        myOutA = value;
234
 
        setPinState();
 
223
        setPinState(true);
235
224
        break;
236
225
      }
237
226
 
238
227
      case 1:     // SWACNT - Port A Data Direction Register 
239
228
      {
240
229
        myDDRA = value;
241
 
        setPinState();
 
230
        setPinState(false);
242
231
        break;
243
232
      }
244
233
 
271
260
}
272
261
 
273
262
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
274
 
void M6532::setPinState()
 
263
void M6532::setPinState(bool swcha)
275
264
{
276
265
  /*
277
266
    When a bit in the DDR is set as input, +5V is placed on its output
290
279
  port0.write(Controller::Two, a & 0x20);
291
280
  port0.write(Controller::Three, a & 0x40);
292
281
  port0.write(Controller::Four, a & 0x80);
 
282
  if(swcha)  port0.controlWrite();
293
283
 
294
284
  Controller& port1 = myConsole.controller(Controller::Right);
295
285
  port1.write(Controller::One, a & 0x01);
296
286
  port1.write(Controller::Two, a & 0x02);
297
287
  port1.write(Controller::Three, a & 0x04);
298
288
  port1.write(Controller::Four, a & 0x08);
 
289
  if(swcha)  port1.controlWrite();
299
290
}
300
291
 
301
292
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -