1 //============================================================================
2 //
3 // SSSS tt lll lll
4 // SS SS tt ll ll
5 // SS tttttt eeee ll ll aaaa
6 // SSSS tt ee ee ll ll aa
7 // SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8 // SS SS tt ee ll ll aa aa
9 // SSSS ttt eeeee llll llll aaaaa
10 //
11 // Copyright (c) 1995-2014 by Bradford W. Mott, Stephen Anthony
12 // and the Stella Team
13 //
14 // See the file "License.txt" for information on usage and redistribution of
15 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
16 //
17 // $Id: Keyboard.cxx 2838 2014-01-17 23:34:03Z stephena $
18 //============================================================================
19
20 #include "Event.hxx"
21 #include "Keyboard.hxx"
22
23 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Keyboard(Jack jack,const Event & event,const System & system)24 Keyboard::Keyboard(Jack jack, const Event& event, const System& system)
25 : Controller(jack, event, system, Controller::Keyboard)
26 {
27 if(myJack == Left)
28 {
29 myOneEvent = Event::KeyboardZero1;
30 myTwoEvent = Event::KeyboardZero2;
31 myThreeEvent = Event::KeyboardZero3;
32 myFourEvent = Event::KeyboardZero4;
33 myFiveEvent = Event::KeyboardZero5;
34 mySixEvent = Event::KeyboardZero6;
35 mySevenEvent = Event::KeyboardZero7;
36 myEightEvent = Event::KeyboardZero8;
37 myNineEvent = Event::KeyboardZero9;
38 myStarEvent = Event::KeyboardZeroStar;
39 myZeroEvent = Event::KeyboardZero0;
40 myPoundEvent = Event::KeyboardZeroPound;
41 }
42 else
43 {
44 myOneEvent = Event::KeyboardOne1;
45 myTwoEvent = Event::KeyboardOne2;
46 myThreeEvent = Event::KeyboardOne3;
47 myFourEvent = Event::KeyboardOne4;
48 myFiveEvent = Event::KeyboardOne5;
49 mySixEvent = Event::KeyboardOne6;
50 mySevenEvent = Event::KeyboardOne7;
51 myEightEvent = Event::KeyboardOne8;
52 myNineEvent = Event::KeyboardOne9;
53 myStarEvent = Event::KeyboardOneStar;
54 myZeroEvent = Event::KeyboardOne0;
55 myPoundEvent = Event::KeyboardOnePound;
56 }
57 }
58
59 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
~Keyboard()60 Keyboard::~Keyboard()
61 {
62 }
63
64 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
write(DigitalPin pin,bool value)65 void Keyboard::write(DigitalPin pin, bool value)
66 {
67 myDigitalPinState[pin] = value;
68
69 // Set defaults
70 myDigitalPinState[Six] = true;
71 myAnalogPinValue[Five] = minimumResistance;
72 myAnalogPinValue[Nine] = minimumResistance;
73
74 // Now scan the rows and columns
75 if(!myDigitalPinState[Four])
76 {
77 myDigitalPinState[Six] = (myEvent.get(myPoundEvent) == 0);
78 if(myEvent.get(myZeroEvent) != 0) myAnalogPinValue[Five] = maximumResistance;
79 if(myEvent.get(myStarEvent) != 0) myAnalogPinValue[Nine] = maximumResistance;
80 }
81 if(!myDigitalPinState[Three])
82 {
83 myDigitalPinState[Six] = (myEvent.get(myNineEvent) == 0);
84 if(myEvent.get(myEightEvent) != 0) myAnalogPinValue[Five] = maximumResistance;
85 if(myEvent.get(mySevenEvent) != 0) myAnalogPinValue[Nine] = maximumResistance;
86 }
87 if(!myDigitalPinState[Two])
88 {
89 myDigitalPinState[Six] = (myEvent.get(mySixEvent) == 0);
90 if(myEvent.get(myFiveEvent) != 0) myAnalogPinValue[Five] = maximumResistance;
91 if(myEvent.get(myFourEvent) != 0) myAnalogPinValue[Nine] = maximumResistance;
92 }
93 if(!myDigitalPinState[One])
94 {
95 myDigitalPinState[Six] = (myEvent.get(myThreeEvent) == 0);
96 if(myEvent.get(myTwoEvent) != 0) myAnalogPinValue[Five] = maximumResistance;
97 if(myEvent.get(myOneEvent) != 0) myAnalogPinValue[Nine] = maximumResistance;
98 }
99 }
100