Merge branch 'master' into feature/filesystem

This commit is contained in:
Stephen Anthony 2022-07-06 14:49:24 -02:30
commit 20903564e6
33 changed files with 954 additions and 808 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -273,10 +273,11 @@
Atari 2600 FPGA project, including cycle-exact audio, analog interference Atari 2600 FPGA project, including cycle-exact audio, analog interference
from mixing of audio channels, as well as stereo sound support; dynamic from mixing of audio channels, as well as stereo sound support; dynamic
sound resampling is also included</li> sound resampling is also included</li>
<li>Emulates the Atari 2600 Joystick, Paddle, Driving, CBS Booster Grip, Sega Genesis, QuadTari controllers using your computer's keyboard, <li>Emulates the Atari 2600 Joystick, Paddle, Driving, CBS Booster Grip,
joysticks or mouse</li> Sega Genesis, <a href="https://github.com/ascrnet/Joy2Bplus">Joy 2B+</a>,
<li>Emulates CX22/CX80 style Trak-Balls, Amiga/Atari mouse, MindLink controller and the Light Gun using your QuadTari controllers using your computer's keyboard, joysticks or mouse</li>
computer's mouse</li> <li>Emulates CX22/CX80 style Trak-Balls, Amiga/Atari mouse, MindLink controller
and the Light Gun using your computer's mouse</li>
<li>Emulates the Atari 2600 Keyboard controllers using your computer's keyboard</li> <li>Emulates the Atari 2600 Keyboard controllers using your computer's keyboard</li>
<li>Emulates <a href="https://en.wikipedia.org/wiki/CompuMate">Spectravideo CompuMate</a> system using your computer's keyboard, <li>Emulates <a href="https://en.wikipedia.org/wiki/CompuMate">Spectravideo CompuMate</a> system using your computer's keyboard,
including mapping of CompuMate 'Backspace', 'Space' and 'Enter' functionality to including mapping of CompuMate 'Backspace', 'Space' and 'Enter' functionality to
@ -797,101 +798,57 @@
</table> </table>
</br> </br>
<p><b>Joystick/Booster Grip Controller (can be remapped)</b></p> <p><b>Joystick, Booster Grip (&#185;), Sega Genesis (&#178;) & Joy 2B+ (&#179;) Controller (can be remapped)</b></p>
<table style="border: hidden"> <table style="border: hidden">
<tr> <tr>
<td style="padding: 0px"> <td style="padding: 0px">
<table> <table>
<tr>
<th colspan=2>Left Joystick</th>
</tr>
<tr> <tr>
<th>Function</th> <th>Function</th>
<th>Key</th> <th>Left Controller Key</th>
<th>Right Controller Key</th>
</tr> </tr>
<tr> <tr>
<td>Joystick Up</td> <td>Up</td>
<td>Up arrow, Keypad 8</td> <td>Up arrow, Keypad 8</td>
</tr>
<tr>
<td>Joystick Down</td>
<td>Down arrow, Keypad 2</td>
</tr>
<tr>
<td>Joystick Left</td>
<td>Left arrow, Keypad 4</td>
</tr>
<tr>
<td>Joystick Right</td>
<td>Right arrow, Keypad 6</td>
</tr>
<tr>
<td>Fire Button</td>
<td>Left Control, Space, Keypad 5</td>
</tr>
<tr>
<td>Top Booster Button</td>
<td>Right Shift, 4, Keypad 9</td>
</tr>
<tr>
<td>Handle Grip Trigger</td>
<td>Right Control, 5, Keypad 3</td>
</tr>
</table>
</td>
<td style="border: hidden"></td>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Right Joystick</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Joystick Up</td>
<td>Y</td> <td>Y</td>
</tr> </tr>
<tr> <tr>
<td>Joystick Down</td> <td>Down</td>
<td>Down arrow, Keypad 2</td>
<td>H</td> <td>H</td>
</tr> </tr>
<tr> <tr>
<td>Joystick Left</td> <td>Left</td>
<td>Left arrow, Keypad 4</td>
<td>G</td> <td>G</td>
</tr> </tr>
<tr> <tr>
<td>Joystick Right</td> <td>Right</td>
<td>Right arrow, Keypad 6</td>
<td>J</td> <td>J</td>
</tr> </tr>
<tr> <tr>
<td>Fire Button</td> <td>Fire, Button 'B'</td>
<td>Left Control, Space, Keypad 5</td>
<td>F</td> <td>F</td>
</tr> </tr>
<tr> <tr>
<td>Top Booster Button</td> <td>Top Booster Button &#185;, Button 'C' &#178; &#179;</td>
<td>Right Shift, 4, Keypad 9</td>
<td>6</td> <td>6</td>
</tr> </tr>
<tr> <tr>
<td>Handle Grip Trigger</td> <td>Handle Grip Trigger &#185;, Button '3' &#179;</td>
<td>Right Control, 5, Keypad 3</td>
<td>7</td> <td>7</td>
</tr> </tr>
</table> </table>
@ -900,92 +857,52 @@
</table> </table>
</br> </br>
<p><b>Sega Genesis Controller (cannot be remapped, always associated with joystick and Booster Grip controllers)</b></p> <p><b>Paddle Controller (digital emulation) (can be remapped)</b></p>
<table style="border: hidden"> <table style="border: hidden">
<tr> <tr>
<td style="padding: 0px"> <td style="padding: 0px">
<table> <table>
<tr>
<th colspan=2>Left Pad</th>
</tr>
<tr> <tr>
<th>Function</th> <th>Function</th>
<th>Key</th> <th>Left Paddles Key</th>
<th>Right Paddles Key</th>
</tr> </tr>
<tr> <tr>
<td>Pad Up</td> <td>Paddle A Turn Left</td>
<td>Same as Left Joystick 'Up'</td> <td>Left arrow</td>
<td>G</td>
</tr> </tr>
<tr> <tr>
<td>Pad Down</td> <td>Paddle A Turn Right</td>
<td>Same as Left Joystick 'Down'</td> <td>Right arrow</td>
<td>J</td>
</tr> </tr>
<tr> <tr>
<td>Pad Left</td> <td>Paddle A Fire</td>
<td>Same as Left Joystick 'Left'</td> <td>Left Control, Space, Keypad 5</td>
<td>F</td>
</tr> </tr>
<tr> <tr>
<td>Pad Right</td> <td>Paddle B Turn Left</td>
<td>Same as Left Joystick 'Right'</td> <td>Up arrow</td>
<td>Y</td>
</tr> </tr>
<tr> <tr>
<td>Button 'B'</td> <td>Paddle B Turn Right</td>
<td>Same as Left Joystick 'Fire'</td> <td>Down arrow</td>
<td>H</td>
</tr> </tr>
<tr> <tr>
<td>Button 'C'</td> <td>Paddle B Fire</td>
<td>Same as Left Joystick 'Top Booster Button'</td> <td>Right Control, 4</td>
</tr> <td>6</td>
</table>
</td>
<td style="border: hidden"></td>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Right Pad</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Pad Up</td>
<td>Same as Right Joystick 'Up'</td>
</tr>
<tr>
<td>Pad Down</td>
<td>Same as Right Joystick 'Down'</td>
</tr>
<tr>
<td>Pad Left</td>
<td>Same as Right Joystick 'Left'</td>
</tr>
<tr>
<td>Pad Right</td>
<td>Same as Right Joystick 'Right'</td>
</tr>
<tr>
<td>Button 'B'</td>
<td>Same as Right Joystick 'Fire'</td>
</tr>
<tr>
<td>Button 'C'</td>
<td>Same as Right Joystick 'Top Booster Button'</td>
</tr> </tr>
</table> </table>
</td> </td>
@ -999,54 +916,27 @@
<tr> <tr>
<td style="padding: 0px"> <td style="padding: 0px">
<table> <table>
<tr>
<th colspan=2>Left Driving</th>
</tr>
<tr> <tr>
<th>Function</th> <th>Function</th>
<th>Key</th> <th>Left Driving Key</th>
<th>Right Driving Key</th>
</tr> </tr>
<tr> <tr>
<td>Counter Clockwise</td> <td>Turn Left</td>
<td>Left arrow, Keypad 4</td> <td>Left arrow, Keypad 4</td>
<td>G</td>
</tr> </tr>
<tr> <tr>
<td>Clockwise</td> <td>Turn Right</td>
<td>Right arrow, Keypad 6</td> <td>Right arrow, Keypad 6</td>
</tr>
<tr>
<td>Fire Button</td>
<td>Left Control, Space, Keypad 5</td>
</tr>
</table>
</td>
<td style="border: hidden"></td>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Right Driving</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Counter Clockwise</td>
<td>G</td>
</tr>
<tr>
<td>Clockwise</td>
<td>J</td> <td>J</td>
</tr> </tr>
<tr> <tr>
<td>Fire Button</td> <td>Fire Button</td>
<td>Left Control, Space, Keypad 5</td>
<td>F</td> <td>F</td>
</tr> </tr>
</table> </table>
@ -1055,132 +945,19 @@
</table> </table>
</br> </br>
<p><b>Trackball Controller (uses mouse, left port only)</b></p> <p><b>Trackball & Light Gun Controller (uses mouse, left port only)</b></p>
<table> <table>
<tr>
<th colspan=2>Left Trackball</th>
</tr>
<tr> <tr>
<th>Function</th> <th>Function</th>
<th>Key</th> <th>Left Trackball Key</th>
</tr> </tr>
<tr> <tr>
<td>Fire Button</td> <td>Fire</td>
<td>Same as Left Joystick 'Fire'</td> <td>Same as Left Joystick 'Fire'</td>
</tr> </tr>
</table> </table>
</br>
<p><b>Light Gun Controller (uses mouse, left port only)</b></p>
<table>
<tr>
<th colspan=2>Left Light Gun</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Fire Button</td>
<td>Same as Left Joystick 'Fire'</td>
</tr>
</table>
</br>
<p><b>Paddle Controller digital emulation (can be remapped)</b></p>
<table style="border: hidden">
<tr>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Left Paddles</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Paddle A Turn Left</td>
<td>Left arrow</td>
</tr>
<tr>
<td>Paddle A Turn Right</td>
<td>Right arrow</td>
</tr>
<tr>
<td>Paddle A Fire</td>
<td>Left Control, Space, Keypad 5</td>
</tr>
<tr>
<td>Paddle B Turn Left</td>
<td>Up arrow</td>
</tr>
<tr>
<td>Paddle B Turn Right</td>
<td>Down arrow</td>
</tr>
<tr>
<td>Paddle B Fire</td>
<td>Right Control, 4</td>
</tr>
</table>
</td>
<td style="border: hidden"></td>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Right Paddles</th>
</tr>
<tr>
<th>Function</th>
<th>Key</th>
</tr>
<tr>
<td>Paddle A Turn Left</td>
<td>G</td>
</tr>
<tr>
<td>Paddle A Turn Right</td>
<td>J</td>
</tr>
<tr>
<td>Paddle A Fire</td>
<td>F</td>
</tr>
<tr>
<td>Paddle B Turn Left</td>
<td>Y</td>
</tr>
<tr>
<td>Paddle B Turn Right</td>
<td>H</td>
</tr>
<tr>
<td>Paddle B Fire</td>
<td>6</td>
</tr>
</table>
</td>
</tr>
</table>
</br> </br>
<p><b>Keyboard Controller (can be remapped)</b></p> <p><b>Keyboard Controller (can be remapped)</b></p>
@ -1188,145 +965,81 @@
<tr> <tr>
<td style="padding: 0px"> <td style="padding: 0px">
<table> <table>
<tr>
<th colspan=2>Left Keyboard</th>
</tr>
<tr> <tr>
<th>Pad Button</th> <th>Pad Button</th>
<th>Key</th> <th>Left Keyboard Key</th>
<th>Right Keyboard Key</th>
</tr> </tr>
<tr> <tr>
<td>1</td> <td>1</td>
<td>1</td> <td>1</td>
<td>8</td>
</tr> </tr>
<tr> <tr>
<td>2</td> <td>2</td>
<td>2</td> <td>2</td>
<td>9</td>
</tr> </tr>
<tr> <tr>
<td>3</td> <td>3</td>
<td>3</td> <td>3</td>
<td>0</td>
</tr> </tr>
<tr> <tr>
<td>4</td> <td>4</td>
<td>Q</td> <td>Q</td>
</tr>
<tr>
<td>5</td>
<td>W</td>
</tr>
<tr>
<td>6</td>
<td>E</td>
</tr>
<tr>
<td>7</td>
<td>A</td>
</tr>
<tr>
<td>8</td>
<td>S</td>
</tr>
<tr>
<td>9</td>
<td>D</td>
</tr>
<tr>
<td>.</td>
<td>Z</td>
</tr>
<tr>
<td>0</td>
<td>X</td>
</tr>
<tr>
<td>#</td>
<td>C</td>
</tr>
</table>
</td>
<td style="border: hidden"></td>
<td style="padding: 0px">
<table>
<tr>
<th colspan=2>Right Keyboard</th>
</tr>
<tr>
<th>Pad Button</th>
<th>Key</th>
</tr>
<tr>
<td>1</td>
<td>8</td>
</tr>
<tr>
<td>2</td>
<td>9</td>
</tr>
<tr>
<td>3</td>
<td>0</td>
</tr>
<tr>
<td>4</td>
<td>I</td> <td>I</td>
</tr> </tr>
<tr> <tr>
<td>5</td> <td>5</td>
<td>W</td>
<td>O</td> <td>O</td>
</tr> </tr>
<tr> <tr>
<td>6</td> <td>6</td>
<td>E</td>
<td>P</td> <td>P</td>
</tr> </tr>
<tr> <tr>
<td>7</td> <td>7</td>
<td>A</td>
<td>K</td> <td>K</td>
</tr> </tr>
<tr> <tr>
<td>8</td> <td>8</td>
<td>S</td>
<td>L</td> <td>L</td>
</tr> </tr>
<tr> <tr>
<td>9</td> <td>9</td>
<td>D</td>
<td>;</td> <td>;</td>
</tr> </tr>
<tr> <tr>
<td>.</td> <td>.</td>
<td>Z</td>
<td>,</td> <td>,</td>
</tr> </tr>
<tr> <tr>
<td>0</td> <td>0</td>
<td>X</td>
<td>.</td> <td>.</td>
</tr> </tr>
<tr> <tr>
<td>#</td> <td>#</td>
<td>C</td>
<td>/</td> <td>/</td>
</tr> </tr>
</table> </table>
@ -1518,7 +1231,7 @@
</table> </table>
</br> </br>
<p><b>TV effects Keys (can be remapped)</b></p> <p><b>TV Effects Keys (can be remapped)</b></p>
<table BORDER=2 cellpadding=4> <table BORDER=2 cellpadding=4>
<tr> <tr>
@ -2192,7 +1905,6 @@
<td>Shift-Control-Alt + P to enter, Shift-Control-Alt + P/Escape to exit and continue with emulation</td> <td>Shift-Control-Alt + P to enter, Shift-Control-Alt + P/Escape to exit and continue with emulation</td>
<td>Shift-Control-Cmd + P to enter, Shift-Control-Cmd + P/Escape to exit and continue with emulation</td> <td>Shift-Control-Cmd + P to enter, Shift-Control-Cmd + P/Escape to exit and continue with emulation</td>
</tr> </tr>
</table> </table>
</br> </br>
@ -2556,7 +2268,7 @@
<tr> <tr>
<th> Booster Grip</th> <th> Booster Grip</th>
<td> &#x2713;</td> <td> &#x2713;</td>
<td> &#x2713;</td> <td> &#x2713; (+ extra)</td>
<td> &#x2713; (+ extra)</td> <td> &#x2713; (+ extra)</td>
<td> &#x2715;</td> <td> &#x2715;</td>
<td> &#x2713; (+ extra)</td> <td> &#x2713; (+ extra)</td>
@ -2569,6 +2281,14 @@
<td> &#x2715;</td> <td> &#x2715;</td>
<td> &#x2715;</td> <td> &#x2715;</td>
</tr> </tr>
<tr>
<th> Joy 2B+</th>
<td> &#x2713;</td>
<td> &#x2713; (+ extra)</td>
<td> &#x2713; (+ extra)</td>
<td> &#x2715;</td>
<td> &#x2715; (+ extra)</td>
</tr>
<tr> <tr>
<th> Keyboard</th> <th> Keyboard</th>
<td> &#x2713;</td> <td> &#x2713;</td>
@ -5260,6 +4980,7 @@ Ms Pac-Man (Stella extended codes):
<tr><td><a href="https://atariage.com/store/index.php?l=product_detail&p=1045">AtariVox &#185</a></td><td>A SpeakJet based unlimited-vocabulary speech/sound synthesizer with 32K EEPROM.</td></tr> <tr><td><a href="https://atariage.com/store/index.php?l=product_detail&p=1045">AtariVox &#185</a></td><td>A SpeakJet based unlimited-vocabulary speech/sound synthesizer with 32K EEPROM.</td></tr>
<tr><td>SaveKey</td><td>A 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).</td></tr> <tr><td>SaveKey</td><td>A 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).</td></tr>
<tr><td>Genesis </td><td>Sega Genesis controller, which can be used similar to a Booster Grip, giving an extra button.</td></tr> <tr><td>Genesis </td><td>Sega Genesis controller, which can be used similar to a Booster Grip, giving an extra button.</td></tr>
<tr><td>Joy2B+ </td><td><a href="https://github.com/ascrnet/Joy2Bplus">Joy 2B+</a> controller, which can be used similar to a Booster Grip, giving two extra buttons.</td></tr>
<tr><td>CompuMate &#185</td><td>Spectravideo CompuMate (if either left or right is set, CompuMate is used for both).</td></tr> <tr><td>CompuMate &#185</td><td>Spectravideo CompuMate (if either left or right is set, CompuMate is used for both).</td></tr>
<tr><td>Lightgun</td><td>Atari XG-1 compatible Light Gun.</td></tr> <tr><td>Lightgun</td><td>Atari XG-1 compatible Light Gun.</td></tr>
<tr><td>MindLink &#185</td><td>MindLink controller.</td></tr> <tr><td>MindLink &#185</td><td>MindLink controller.</td></tr>

View File

@ -0,0 +1,133 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2022 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "Joy2BPlusWidget.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Joy2BPlusWidget::Joy2BPlusWidget(GuiObject* boss, const GUI::Font& font,
int x, int y, Controller& controller)
: ControllerWidget(boss, font, x, y, controller)
{
const string& label = isLeftPort() ? "Left (Joy 2B+)" : "Right (Joy 2B+)";
const int fontHeight = font.getFontHeight();
int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Joy 2B+)");
StaticTextWidget* t;
t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth,
fontHeight, label, TextAlign::Left);
xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10;
myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "",
CheckboxWidget::kCheckActionCmd);
myPins[kJUp]->setID(kJUp);
myPins[kJUp]->setTarget(this);
ypos += myPins[kJUp]->getHeight() * 2 + 10;
myPins[kJDown] = new CheckboxWidget(boss, font, xpos, ypos, "",
CheckboxWidget::kCheckActionCmd);
myPins[kJDown]->setID(kJDown);
myPins[kJDown]->setTarget(this);
xpos -= myPins[kJUp]->getWidth() + 5;
ypos -= myPins[kJUp]->getHeight() + 5;
myPins[kJLeft] = new CheckboxWidget(boss, font, xpos, ypos, "",
CheckboxWidget::kCheckActionCmd);
myPins[kJLeft]->setID(kJLeft);
myPins[kJLeft]->setTarget(this);
xpos += (myPins[kJUp]->getWidth() + 5) * 2;
myPins[kJRight] = new CheckboxWidget(boss, font, xpos, ypos, "",
CheckboxWidget::kCheckActionCmd);
myPins[kJRight]->setID(kJRight);
myPins[kJRight]->setTarget(this);
xpos -= (myPins[kJUp]->getWidth() + 5) * 2;
ypos = 20 + (myPins[kJUp]->getHeight() + 10) * 3;
myPins[kJButtonB] = new CheckboxWidget(boss, font, xpos, ypos, "Button B",
CheckboxWidget::kCheckActionCmd);
myPins[kJButtonB]->setID(kJButtonB);
myPins[kJButtonB]->setTarget(this);
ypos += myPins[kJButtonB]->getHeight() + 5;
myPins[kJButtonC] = new CheckboxWidget(boss, font, xpos, ypos, "Button C",
CheckboxWidget::kCheckActionCmd);
myPins[kJButtonC]->setID(kJButtonC);
myPins[kJButtonC]->setTarget(this);
ypos += myPins[kJButtonC]->getHeight() + 5;
myPins[kJButton3] = new CheckboxWidget(boss, font, xpos, ypos, "Button 3",
CheckboxWidget::kCheckActionCmd);
myPins[kJButton3]->setID(kJButton3);
myPins[kJButton3]->setTarget(this);
addFocusWidget(myPins[kJUp]);
addFocusWidget(myPins[kJLeft]);
addFocusWidget(myPins[kJRight]);
addFocusWidget(myPins[kJDown]);
addFocusWidget(myPins[kJButtonB]);
addFocusWidget(myPins[kJButtonC]);
addFocusWidget(myPins[kJButton3]);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Joy2BPlusWidget::loadConfig()
{
myPins[kJUp]->setState(!getPin(ourPinNo[kJUp]));
myPins[kJDown]->setState(!getPin(ourPinNo[kJDown]));
myPins[kJLeft]->setState(!getPin(ourPinNo[kJLeft]));
myPins[kJRight]->setState(!getPin(ourPinNo[kJRight]));
myPins[kJButtonB]->setState(!getPin(ourPinNo[kJButtonB]));
myPins[kJButton3]->setState(
getPin(Controller::AnalogPin::Five) == AnalogReadout::connectToGround());
myPins[kJButtonC]->setState(
getPin(Controller::AnalogPin::Nine) == AnalogReadout::connectToGround());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Joy2BPlusWidget::handleCommand(
CommandSender* sender, int cmd, int data, int id)
{
if(cmd == CheckboxWidget::kCheckActionCmd)
{
switch(id)
{
case kJUp:
case kJDown:
case kJLeft:
case kJRight:
case kJButtonB:
setPin(ourPinNo[id], !myPins[id]->getState());
break;
case kJButtonC:
setPin(Controller::AnalogPin::Nine,
myPins[id]->getState() ? AnalogReadout::connectToGround()
: AnalogReadout::connectToVcc());
break;
case kJButton3:
setPin(Controller::AnalogPin::Five,
myPins[id]->getState() ? AnalogReadout::connectToGround()
: AnalogReadout::connectToVcc());
break;
default:
break;
}
}
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
constexpr std::array<Controller::DigitalPin, 5> Joy2BPlusWidget::ourPinNo;

View File

@ -0,0 +1,53 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2022 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef JOY2BPLUS_WIDGET_HXX
#define JOY2BPLUS_WIDGET_HXX
#include "Control.hxx"
#include "ControllerWidget.hxx"
class Joy2BPlusWidget : public ControllerWidget
{
public:
Joy2BPlusWidget(GuiObject* boss, const GUI::Font& font, int x, int y,
Controller& controller);
~Joy2BPlusWidget() override = default;
private:
enum { kJUp = 0, kJDown, kJLeft, kJRight, kJButtonB, kJButtonC, kJButton3 };
std::array<CheckboxWidget*, 7> myPins{nullptr};
static constexpr std::array<Controller::DigitalPin, 5> ourPinNo = {{
Controller::DigitalPin::One, Controller::DigitalPin::Two,
Controller::DigitalPin::Three, Controller::DigitalPin::Four,
Controller::DigitalPin::Six
}};
private:
void loadConfig() override;
void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
// Following constructors and assignment operators not supported
Joy2BPlusWidget() = delete;
Joy2BPlusWidget(const Joy2BPlusWidget&) = delete;
Joy2BPlusWidget(Joy2BPlusWidget&&) = delete;
Joy2BPlusWidget& operator=(const Joy2BPlusWidget&) = delete;
Joy2BPlusWidget& operator=(Joy2BPlusWidget&&) = delete;
};
#endif

View File

@ -40,6 +40,7 @@
#include "AtariMouseWidget.hxx" #include "AtariMouseWidget.hxx"
#include "TrakBallWidget.hxx" #include "TrakBallWidget.hxx"
#include "QuadTariWidget.hxx" #include "QuadTariWidget.hxx"
#include "Joy2BPlusWidget.hxx"
#include "RiotWidget.hxx" #include "RiotWidget.hxx"
@ -537,6 +538,8 @@ ControllerWidget* RiotWidget::addControlWidget(GuiObject* boss, const GUI::Font&
return new DrivingWidget(boss, font, x, y, controller); return new DrivingWidget(boss, font, x, y, controller);
case Controller::Type::Genesis: case Controller::Type::Genesis:
return new GenesisWidget(boss, font, x, y, controller); return new GenesisWidget(boss, font, x, y, controller);
case Controller::Type::Joy2BPlus:
return new Joy2BPlusWidget(boss, font, x, y, controller);
case Controller::Type::Joystick: case Controller::Type::Joystick:
return new JoystickWidget(boss, font, x, y, controller); return new JoystickWidget(boss, font, x, y, controller);
case Controller::Type::Keyboard: case Controller::Type::Keyboard:
@ -544,14 +547,14 @@ ControllerWidget* RiotWidget::addControlWidget(GuiObject* boss, const GUI::Font&
// case Controller::Type::KidVid: // TODO - implement this // case Controller::Type::KidVid: // TODO - implement this
// case Controller::Type::MindLink: // TODO - implement this // case Controller::Type::MindLink: // TODO - implement this
// case Controller::Type::Lightgun: // TODO - implement this // case Controller::Type::Lightgun: // TODO - implement this
case Controller::Type::QuadTari:
return new QuadTariWidget(boss, font, x, y, controller);
case Controller::Type::Paddles: case Controller::Type::Paddles:
return new PaddleWidget(boss, font, x, y, controller); return new PaddleWidget(boss, font, x, y, controller);
case Controller::Type::SaveKey: case Controller::Type::SaveKey:
return new SaveKeyWidget(boss, font, x, y, controller); return new SaveKeyWidget(boss, font, x, y, controller);
case Controller::Type::TrakBall: case Controller::Type::TrakBall:
return new TrakBallWidget(boss, font, x, y, controller); return new TrakBallWidget(boss, font, x, y, controller);
case Controller::Type::QuadTari:
return new QuadTariWidget(boss, font, x, y, controller);
default: default:
return new NullControlWidget(boss, font, x, y, controller); return new NullControlWidget(boss, font, x, y, controller);
} }

View File

@ -63,6 +63,7 @@ MODULE_OBJS := \
src/debugger/gui/DrivingWidget.o \ src/debugger/gui/DrivingWidget.o \
src/debugger/gui/FlashWidget.o \ src/debugger/gui/FlashWidget.o \
src/debugger/gui/GenesisWidget.o \ src/debugger/gui/GenesisWidget.o \
src/debugger/gui/Joy2BPlusWidget.o \
src/debugger/gui/JoystickWidget.o \ src/debugger/gui/JoystickWidget.o \
src/debugger/gui/KeyboardWidget.o \ src/debugger/gui/KeyboardWidget.o \
src/debugger/gui/PaddleWidget.o \ src/debugger/gui/PaddleWidget.o \

View File

@ -23,13 +23,13 @@ BoosterGrip::BoosterGrip(Jack jack, const Event& event, const System& system)
{ {
if(myJack == Jack::Left) if(myJack == Jack::Left)
{ {
myTriggerEvent = Event::LeftJoystickFire5; myBoosterEvent = Event::LeftJoystickFire5;
myBoosterEvent = Event::LeftJoystickFire9; myTriggerEvent = Event::LeftJoystickFire9;
} }
else else
{ {
myTriggerEvent = Event::RightJoystickFire5; myBoosterEvent = Event::RightJoystickFire5;
myBoosterEvent = Event::RightJoystickFire9; myTriggerEvent = Event::RightJoystickFire9;
} }
setPin(AnalogPin::Five, AnalogReadout::disconnect()); setPin(AnalogPin::Five, AnalogReadout::disconnect());
@ -48,6 +48,6 @@ void BoosterGrip::updateButtons()
updateMouseButtons(firePressed, boosterPressed); updateMouseButtons(firePressed, boosterPressed);
setPin(DigitalPin::Six, !getAutoFireState(firePressed)); setPin(DigitalPin::Six, !getAutoFireState(firePressed));
setPin(AnalogPin::Five, triggerPressed ? AnalogReadout::connectToVcc() : AnalogReadout::disconnect()); setPin(AnalogPin::Five, boosterPressed ? AnalogReadout::connectToVcc() : AnalogReadout::disconnect());
setPin(AnalogPin::Nine, boosterPressed ? AnalogReadout::connectToVcc() : AnalogReadout::disconnect()); setPin(AnalogPin::Nine, triggerPressed ? AnalogReadout::connectToVcc() : AnalogReadout::disconnect());
} }

View File

@ -40,6 +40,7 @@
#include "TrakBall.hxx" #include "TrakBall.hxx"
#include "Lightgun.hxx" #include "Lightgun.hxx"
#include "QuadTari.hxx" #include "QuadTari.hxx"
#include "Joy2BPlus.hxx"
#include "M6502.hxx" #include "M6502.hxx"
#include "M6532.hxx" #include "M6532.hxx"
#include "TIA.hxx" #include "TIA.hxx"
@ -1015,6 +1016,10 @@ unique_ptr<Controller> Console::getControllerPort(const Controller::Type type,
controller = make_unique<QuadTari>(port, myOSystem, *mySystem, myProperties); controller = make_unique<QuadTari>(port, myOSystem, *mySystem, myProperties);
break; break;
case Controller::Type::Joy2BPlus:
controller = make_unique<Joy2BPlus>(port, myEvent, *mySystem);
break;
default: default:
// What else can we do? // What else can we do?
// always create because it may have been changed by user dialog // always create because it may have been changed by user dialog

View File

@ -111,7 +111,7 @@ string Controller::getName(const Type type)
"Amiga mouse", "Atari mouse", "AtariVox", "Booster Grip", "CompuMate", "Amiga mouse", "Atari mouse", "AtariVox", "Booster Grip", "CompuMate",
"Driving", "Sega Genesis", "Joystick", "Keyboard", "Kid Vid", "MindLink", "Driving", "Sega Genesis", "Joystick", "Keyboard", "Kid Vid", "MindLink",
"Paddles", "Paddles_IAxis", "Paddles_IAxDr", "SaveKey", "Trak-Ball", "Paddles", "Paddles_IAxis", "Paddles_IAxDr", "SaveKey", "Trak-Ball",
"Light Gun", "QuadTari" "Light Gun", "QuadTari", "Joy 2B+"
}; };
return NAMES[static_cast<int>(type)]; return NAMES[static_cast<int>(type)];
@ -126,7 +126,7 @@ string Controller::getPropName(const Type type)
"AMIGAMOUSE", "ATARIMOUSE", "ATARIVOX", "BOOSTERGRIP", "COMPUMATE", "AMIGAMOUSE", "ATARIMOUSE", "ATARIVOX", "BOOSTERGRIP", "COMPUMATE",
"DRIVING", "GENESIS", "JOYSTICK", "KEYBOARD", "KIDVID", "MINDLINK", "DRIVING", "GENESIS", "JOYSTICK", "KEYBOARD", "KIDVID", "MINDLINK",
"PADDLES", "PADDLES_IAXIS", "PADDLES_IAXDR", "SAVEKEY", "TRAKBALL", "PADDLES", "PADDLES_IAXIS", "PADDLES_IAXDR", "SAVEKEY", "TRAKBALL",
"LIGHTGUN", "QUADTARI" "LIGHTGUN", "QUADTARI", "JOY2B+"
}; };
return PROP_NAMES[static_cast<int>(type)]; return PROP_NAMES[static_cast<int>(type)];

View File

@ -102,7 +102,7 @@ class Controller : public Serializable
AmigaMouse, AtariMouse, AtariVox, BoosterGrip, CompuMate, AmigaMouse, AtariMouse, AtariVox, BoosterGrip, CompuMate,
Driving, Genesis, Joystick, Keyboard, KidVid, MindLink, Driving, Genesis, Joystick, Keyboard, KidVid, MindLink,
Paddles, PaddlesIAxis, PaddlesIAxDr, SaveKey, TrakBall, Paddles, PaddlesIAxis, PaddlesIAxDr, SaveKey, TrakBall,
Lightgun, QuadTari, Lightgun, QuadTari, Joy2BPlus,
LastType LastType
}; };

View File

@ -71,8 +71,10 @@ Controller::Type ControllerDetector::autodetectPort(
type = Controller::Type::AtariMouse; type = Controller::Type::AtariMouse;
else if(isProbablyAmigaMouse(image, size)) else if(isProbablyAmigaMouse(image, size))
type = Controller::Type::AmigaMouse; type = Controller::Type::AmigaMouse;
else if(usesKeyboard(image, size, port)) else if(usesKeyboard(image, size, port)) // must be detected before Genesis!
type = Controller::Type::Keyboard; type = usesJoystickDirections(image, size)
? Controller::Type::Joy2BPlus
: Controller::Type::Keyboard;
else if(usesGenesisButton(image, size, port)) else if(usesGenesisButton(image, size, port))
type = Controller::Type::Genesis; type = Controller::Type::Genesis;
else if(isProbablyLightGun(image, size, port)) else if(isProbablyLightGun(image, size, port))
@ -248,6 +250,31 @@ bool ControllerDetector::usesJoystickButton(const ByteBuffer& image, size_t size
return false; return false;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Returns true if the port's joystick direction access code is found.
bool ControllerDetector::usesJoystickDirections(const ByteBuffer& image, size_t size)
{
// check for SWCHA access (both ports)
static constexpr int NUM_SIGS = 8;
static constexpr int SIG_SIZE = 3;
static constexpr uInt8 signature[NUM_SIGS][SIG_SIZE] = {
{ 0xad, 0x80, 0x02 }, // lda SWCHA (also found in MagiCard, so this needs properties now!)
{ 0xae, 0x80, 0x02 }, // ldx SWCHA
{ 0xac, 0x80, 0x02 }, // ldy SWCHA
{ 0x2c, 0x80, 0x02 }, // bit SWCHA
{ 0x0d, 0x80, 0x02 }, // ora SWCHA (Official Frogger)
{ 0x2d, 0x80, 0x02 }, // and SWCHA (Crypts of Chaos, some paddle games)
{ 0x4d, 0x80, 0x02 }, // eor SWCHA (Chopper Command)
{ 0xad, 0x88, 0x02 }, // lda SWCHA|8 (Jawbreaker)
};
for(uInt32 i = 0; i < NUM_SIGS; ++i)
if(searchForBytes(image, size, signature[i], SIG_SIZE))
return true;
return false;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size, bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size,
Controller::Jack port) Controller::Jack port)
@ -255,7 +282,7 @@ bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size,
if(port == Controller::Jack::Left) if(port == Controller::Jack::Left)
{ {
// check for INPT0 *AND* INPT1 access // check for INPT0 *AND* INPT1 access
static constexpr int NUM_SIGS_0_0 = 6; static constexpr int NUM_SIGS_0_0 = 7;
static constexpr int SIG_SIZE_0_0 = 3; static constexpr int SIG_SIZE_0_0 = 3;
static constexpr uInt8 signature_0_0[NUM_SIGS_0_0][SIG_SIZE_0_0] = { static constexpr uInt8 signature_0_0[NUM_SIGS_0_0][SIG_SIZE_0_0] = {
{ 0x24, 0x38, 0x30 }, // bit INPT0|$30; bmi { 0x24, 0x38, 0x30 }, // bit INPT0|$30; bmi
@ -263,6 +290,7 @@ bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size,
{ 0xa4, 0x38, 0x30 }, // ldy INPT0|$30; bmi { 0xa4, 0x38, 0x30 }, // ldy INPT0|$30; bmi
{ 0xb5, 0x38, 0x30 }, // lda INPT0|$30,x; bmi { 0xb5, 0x38, 0x30 }, // lda INPT0|$30,x; bmi
{ 0x24, 0x08, 0x30 }, // bit INPT0; bmi { 0x24, 0x08, 0x30 }, // bit INPT0; bmi
{ 0x24, 0x08, 0x10 }, // bit INPT0; bpl (Tap-A-Mole, also e.g. Chopper Command, Secret Quest, River Raid II)
{ 0xa6, 0x08, 0x30 } // ldx INPT0; bmi { 0xa6, 0x08, 0x30 } // ldx INPT0; bmi
}; };
static constexpr int NUM_SIGS_0_2 = 1; static constexpr int NUM_SIGS_0_2 = 1;
@ -271,7 +299,7 @@ bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size,
{ 0xb5, 0x38, 0x29, 0x80, 0xd0 } // lda INPT0,x; and #80; bne { 0xb5, 0x38, 0x29, 0x80, 0xd0 } // lda INPT0,x; and #80; bne
}; };
static constexpr int NUM_SIGS_1_0 = 7; static constexpr int NUM_SIGS_1_0 = 8;
static constexpr int SIG_SIZE_1_0 = 3; static constexpr int SIG_SIZE_1_0 = 3;
static constexpr uInt8 signature_1_0[NUM_SIGS_1_0][SIG_SIZE_1_0] = { static constexpr uInt8 signature_1_0[NUM_SIGS_1_0][SIG_SIZE_1_0] = {
{ 0x24, 0x39, 0x10 }, // bit INPT1|$30; bpl { 0x24, 0x39, 0x10 }, // bit INPT1|$30; bpl
@ -280,6 +308,7 @@ bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size,
{ 0xa4, 0x39, 0x30 }, // ldy INPT1|$30; bmi { 0xa4, 0x39, 0x30 }, // ldy INPT1|$30; bmi
{ 0xb5, 0x38, 0x30 }, // lda INPT0|$30,x; bmi { 0xb5, 0x38, 0x30 }, // lda INPT0|$30,x; bmi
{ 0x24, 0x09, 0x30 }, // bit INPT1; bmi { 0x24, 0x09, 0x30 }, // bit INPT1; bmi
{ 0x24, 0x09, 0x10 }, // bit INPT1; bpl (Tap-A-Mole and some Genesis games)
{ 0xa6, 0x09, 0x30 } // ldx INPT1; bmi { 0xa6, 0x09, 0x30 } // ldx INPT1; bmi
}; };
static constexpr int NUM_SIGS_1_2 = 1; static constexpr int NUM_SIGS_1_2 = 1;

View File

@ -92,6 +92,9 @@ class ControllerDetector
static bool usesJoystickButton(const ByteBuffer& image, size_t size, static bool usesJoystickButton(const ByteBuffer& image, size_t size,
Controller::Jack port); Controller::Jack port);
// Returns true if joystick direction access code is found.
static bool usesJoystickDirections(const ByteBuffer& image, size_t size);
// Returns true if the port's keyboard access code is found. // Returns true if the port's keyboard access code is found.
static bool usesKeyboard(const ByteBuffer& image, size_t size, static bool usesKeyboard(const ByteBuffer& image, size_t size,
Controller::Jack port); Controller::Jack port);

View File

@ -840,7 +840,7 @@ static constexpr BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
{ "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation - Western Technologies, John Hall", "VC1012", "M.A.D. (1983) (U.S. Games)", "AKA Missile Intercept, Mutually Assured Destruction", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation - Western Technologies, John Hall", "VC1012", "M.A.D. (1983) (U.S. Games)", "AKA Missile Intercept, Mutually Assured Destruction", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "", "AUTO 60", "", "", "", "" }, { "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "", "AUTO 60", "", "", "", "" },
{ "3974e2d1f614fbd3a092533ecae2e84d", "Alessandro Ciceri", "", "MagiCard+ (alex_79) WIP_20150118", "MagiCard hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3974e2d1f614fbd3a092533ecae2e84d", "Alessandro Ciceri", "", "MagiCard+ (alex_79) WIP_20150118", "MagiCard hack", "", "", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "KEYBOARD", "", "", "", "", "", "", "", "", "", "" },
{ "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "39a6a5a2e1f6297cceaa48bb03af02e9", "", "", "Pitfall 2 Plus (Hack)", "Hack of Pitfall 2", "Hack", "", "", "", "{\"score_addresses\":[\"0xc7\",\"0xc8\",\"0xc9\"],\"score_digits\":6,\"variations_count\":1}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "39a6a5a2e1f6297cceaa48bb03af02e9", "", "", "Pitfall 2 Plus (Hack)", "Hack of Pitfall 2", "Hack", "", "", "", "{\"score_addresses\":[\"0xc7\",\"0xc8\",\"0xc9\"],\"score_digits\":6,\"variations_count\":1}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "39b94d41bd3b01c12b4054c1a8733783", "SOLID Corp. (D. Scott Williamson)", "CX2655-016", "Star Castle 2600 (SolidCorp) [016]", "", "Homebrew", "", "", "", "", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "39b94d41bd3b01c12b4054c1a8733783", "SOLID Corp. (D. Scott Williamson)", "CX2655-016", "Star Castle 2600 (SolidCorp) [016]", "", "Homebrew", "", "", "", "", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -1751,7 +1751,7 @@ static constexpr BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
{ "78297db7f416af3052dd793b53ff014e", "", "", "Poker Squares (V0.17) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "78297db7f416af3052dd793b53ff014e", "", "", "Poker Squares (V0.17) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7836794b79e8060c2b8326a2db74eef0", "", "", "RIOT RAM Test (26-11-2002) (Dennis Debro)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7836794b79e8060c2b8326a2db74eef0", "", "", "RIOT RAM Test (26-11-2002) (Dennis Debro)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "784176346e9422733d55c427230e5bad", "Activision, Alex DeMeo", "", "Title Match Pro Wrestling (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "784176346e9422733d55c427230e5bad", "Activision, Alex DeMeo", "", "Title Match Pro Wrestling (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "784abfdb31d5341e5bd404d8d2a71c3b", "Alessandro Ciceri", "", "MagiCard (TV format conversion) (alex_79) (PAL)", "MagiCard PAL conversion hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "784abfdb31d5341e5bd404d8d2a71c3b", "Alessandro Ciceri", "", "MagiCard (TV format conversion) (alex_79) (PAL)", "MagiCard PAL conversion hack", "", "", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "KEYBOARD", "", "", "", "", "", "", "", "", "", "" },
{ "7860716fa5dbc0fffab93fb9a4cb4132", "", "", "Hangman Monkey Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7860716fa5dbc0fffab93fb9a4cb4132", "", "", "Hangman Monkey Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7867ee819b53d69cfcfe740f7ddca574", "Arcadia Corporation, Dennis Caswell", "1 AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7867ee819b53d69cfcfe740f7ddca574", "Arcadia Corporation, Dennis Caswell", "1 AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "787ebc2609a31eb5c57c4a18837d1aee", "Brian Prescott", "", "Vault Assault (19xx) (Brian Prescott)", "", "", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=113", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "787ebc2609a31eb5c57c4a18837d1aee", "Brian Prescott", "", "Vault Assault (19xx) (Brian Prescott)", "", "", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=113", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1833,7 +1833,7 @@ static constexpr BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
{ "7d93071b3e3616093a6b5a98b0315751", "", "", "Gunfight 2600 - Music & Bugfixes 2 (2001) (Manuel Rotschkar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d93071b3e3616093a6b5a98b0315751", "", "", "Gunfight 2600 - Music & Bugfixes 2 (2001) (Manuel Rotschkar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7d940d749e55b96b7b746519fa06f2de", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix (Preview) (1983) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d940d749e55b96b7b746519fa06f2de", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix (Preview) (1983) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7d9c96b215d1941e87b6fb412eb9204f", "", "", "Othello (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d9c96b215d1941e87b6fb412eb9204f", "", "", "Othello (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7da9de8d62fcdd3a2c545b2e720c2a61", "CommaVid, John Bronstein", "CM-001", "MagiCard (1981) (CommaVid) (4K)", "Uses the Keyboard Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7da9de8d62fcdd3a2c545b2e720c2a61", "CommaVid, John Bronstein", "CM-001", "MagiCard (1981) (CommaVid) (4K)", "Uses the Keyboard Controllers", "", "", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "KEYBOARD", "", "", "", "", "", "", "", "", "", "" },
{ "7dbc8fa2e488e3f6b87fbe0f76c5b89f", "Ed Federmeyer", "", "Sound X (1996) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7dbc8fa2e488e3f6b87fbe0f76c5b89f", "Ed Federmeyer", "", "Sound X (1996) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7dc03a1f56d0e6a8aae3e3e50d654a08", "", "", "Hozer Video Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7dc03a1f56d0e6a8aae3e3e50d654a08", "", "", "Hozer Video Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7dcbfd2acc013e817f011309c7504daa", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7dcbfd2acc013e817f011309c7504daa", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -2903,7 +2903,7 @@ static constexpr BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
{ "cdb81bf33d830ee4ee0606ee99e84dba", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (1982) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "15", "15", "01", "", "", "", "" }, { "cdb81bf33d830ee4ee0606ee99e84dba", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (1982) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "15", "15", "01", "", "", "", "" },
{ "cdc1a5c61d7488eadc9aba36166b253d", "Retroactive", "", "Qb (V0.12) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cdc1a5c61d7488eadc9aba36166b253d", "Retroactive", "", "Qb (V0.12) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "cdd4a538c420358ab64767d326921bf6", "", "", "4 in 1 (Logitachi)", "", "", "", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cdd4a538c420358ab64767d326921bf6", "", "", "4 in 1 (Logitachi)", "", "", "", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "cddabfd68363a76cd30bee4e8094c646", "Computer Magic - CommaVid, John Bronstein", "CM-001", "MagiCard (1981) (CommaVid)", "Uses the Keyboard Controllers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cddabfd68363a76cd30bee4e8094c646", "Computer Magic - CommaVid, John Bronstein", "CM-001", "MagiCard (1981) (CommaVid)", "Uses the Keyboard Controllers", "", "", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "KEYBOARD", "", "", "", "", "", "", "", "", "", "" },
{ "ce17325834bf8b0a0d0d8de08478d436", "", "", "Boring Freeway (Hack)", "Hack of Freeway", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce17325834bf8b0a0d0d8de08478d436", "", "", "Boring Freeway (Hack)", "Hack of Freeway", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ce1cbe159b9ae5992dacf09371de5e13", "Atari - GCC, Kevin Osborn", "CX2689", "Kangaroo (01-19-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "http://www.atariprotos.com/2600/software/kangaroo/kangaroo.htm", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce1cbe159b9ae5992dacf09371de5e13", "Atari - GCC, Kevin Osborn", "CX2689", "Kangaroo (01-19-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "http://www.atariprotos.com/2600/software/kangaroo/kangaroo.htm", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ce243747bf34a2de366f846b3f4ca772", "Home Vision - Gem International Corp. - VDI", "", "Jacky Jump (1983) (Home Vision) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce243747bf34a2de366f846b3f4ca772", "Home Vision - Gem International Corp. - VDI", "", "Jacky Jump (1983) (Home Vision) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3265,7 +3265,7 @@ static constexpr BSPF::array2D<const char*, DEF_PROPS_SIZE, 29> DefProps = {{
{ "e556e07cc06c803f2955986f53ef63ed", "Coleco - Individeo, Ed Temple", "2665", "Front Line (1984) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e556e07cc06c803f2955986f53ef63ed", "Coleco - Individeo, Ed Temple", "2665", "Front Line (1984) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e558be88eef569f33716e8e330d2f5bc", "Shock Vision", "", "Keystone Kapers (Shock Vision)", "", "", "", "", "", "{\"score_addresses\":[\"0x9a\",\"0x9b\",\"0x9c\"],\"score_digits\":6,\"variations_count\":1}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e558be88eef569f33716e8e330d2f5bc", "Shock Vision", "", "Keystone Kapers (Shock Vision)", "", "", "", "", "", "{\"score_addresses\":[\"0x9a\",\"0x9b\",\"0x9c\"],\"score_digits\":6,\"variations_count\":1}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e56da674188ba2f02c7a0a343a01236f", "", "", "This Planet Sucks Demo 4 (Greg Troutman) (PD)", "", "New Release", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=102", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e56da674188ba2f02c7a0a343a01236f", "", "", "This Planet Sucks Demo 4 (Greg Troutman) (PD)", "", "New Release", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=102", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e59d022d524d05acc19515598c831e4d", "Alessandro Ciceri", "", "MagiCard+ (alex_79) WIP_20150118 (PAL)", "MagiCard hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e59d022d524d05acc19515598c831e4d", "Alessandro Ciceri", "", "MagiCard+ (alex_79) WIP_20150118 (PAL)", "MagiCard hack", "", "", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "KEYBOARD", "", "", "", "", "", "", "", "", "", "" },
{ "e5a6e0bb7d56e2f08b237e15076e5699", "", "", "Color Table Display Helper (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e5a6e0bb7d56e2f08b237e15076e5699", "", "", "Color Table Display Helper (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e5bacf526036d3c8c99db5b030cf00e7", "", "", "Starmaster (Genesis)", "Genesis controller (C switches to map mode)", "Hack of Starmaster", "", "", "", "{\"notes\":\"Score only calculated when game is over\",\"score_addresses\":[\"0xc1\",\"0xc2\"],\"variations_address\":\"0x80\",\"variations_count\":4,\"variations_zero_based\":true}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e5bacf526036d3c8c99db5b030cf00e7", "", "", "Starmaster (Genesis)", "Genesis controller (C switches to map mode)", "Hack of Starmaster", "", "", "", "{\"notes\":\"Score only calculated when game is over\",\"score_addresses\":[\"0xc1\",\"0xc2\"],\"variations_address\":\"0x80\",\"variations_count\":4,\"variations_zero_based\":true}", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e5d5085123a98c1e61818caa2971e999", "", "", "Euchre (PAL) (Erik Eid) (PD)", "", "", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=126", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e5d5085123a98c1e61818caa2971e999", "", "", "Euchre (PAL) (Erik Eid) (PD)", "", "", "", "", "", "", "https://atariage.com/store/index.php?l=product_detail&p=126", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },

View File

@ -2784,327 +2784,332 @@ void EventHandler::exitEmulation(bool checkLauncher)
} }
} }
#if defined(__clang__)
#pragma clang diagnostic ignored "-Wmissing-field-initializers"
#elif defined(__GNUC__) || defined(__GNUG__)
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#endif
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EventHandler::EmulActionList EventHandler::ourEmulActionList = { { EventHandler::EmulActionList EventHandler::ourEmulActionList = { {
{ Event::Quit, "Quit", "" }, { Event::Quit, "Quit" },
{ Event::ReloadConsole, "Reload current ROM/load next game", "" }, { Event::ReloadConsole, "Reload current ROM/load next game" },
{ Event::PreviousMultiCartRom, "Load previous multicart game", "" }, { Event::PreviousMultiCartRom, "Load previous multicart game" },
{ Event::ExitMode, "Exit current Stella menu/mode", "" }, { Event::ExitMode, "Exit current Stella menu/mode" },
{ Event::OptionsMenuMode, "Enter Options menu UI", "" }, { Event::OptionsMenuMode, "Enter Options menu UI" },
{ Event::CmdMenuMode, "Toggle Commands menu UI", "" }, { Event::CmdMenuMode, "Toggle Commands menu UI" },
{ Event::HighScoresMenuMode, "Toggle High Scores UI", "" }, { Event::HighScoresMenuMode, "Toggle High Scores UI" },
{ Event::PlusRomsSetupMode, "Toggle PlusROMs setup UI", "" }, { Event::PlusRomsSetupMode, "Toggle PlusROMs setup UI" },
{ Event::TogglePauseMode, "Toggle Pause mode", "" }, { Event::TogglePauseMode, "Toggle Pause mode" },
{ Event::StartPauseMode, "Start Pause mode", "" }, { Event::StartPauseMode, "Start Pause mode" },
{ Event::Fry, "Fry cartridge", "" }, { Event::Fry, "Fry cartridge" },
{ Event::DecreaseSpeed, "Decrease emulation speed", "" }, { Event::DecreaseSpeed, "Decrease emulation speed" },
{ Event::IncreaseSpeed, "Increase emulation speed", "" }, { Event::IncreaseSpeed, "Increase emulation speed" },
{ Event::ToggleTurbo, "Toggle 'Turbo' mode", "" }, { Event::ToggleTurbo, "Toggle 'Turbo' mode" },
{ Event::DebuggerMode, "Toggle Debugger mode", "" }, { Event::DebuggerMode, "Toggle Debugger mode" },
{ Event::ConsoleSelect, "Select", "" }, { Event::ConsoleSelect, "Select" },
{ Event::ConsoleReset, "Reset", "" }, { Event::ConsoleReset, "Reset" },
{ Event::ConsoleColor, "Color TV", "" }, { Event::ConsoleColor, "Color TV" },
{ Event::ConsoleBlackWhite, "Black & White TV", "" }, { Event::ConsoleBlackWhite, "Black & White TV" },
{ Event::ConsoleColorToggle, "Toggle Color / B&W TV", "" }, { Event::ConsoleColorToggle, "Toggle Color / B&W TV" },
{ Event::Console7800Pause, "7800 Pause Key", "" }, { Event::Console7800Pause, "7800 Pause Key" },
{ Event::ConsoleLeftDiffA, "Left Difficulty A", "" }, { Event::ConsoleLeftDiffA, "Left Difficulty A" },
{ Event::ConsoleLeftDiffB, "Left Difficulty B", "" }, { Event::ConsoleLeftDiffB, "Left Difficulty B" },
{ Event::ConsoleLeftDiffToggle, "Toggle Left Difficulty", "" }, { Event::ConsoleLeftDiffToggle, "Toggle Left Difficulty" },
{ Event::ConsoleRightDiffA, "Right Difficulty A", "" }, { Event::ConsoleRightDiffA, "Right Difficulty A" },
{ Event::ConsoleRightDiffB, "Right Difficulty B", "" }, { Event::ConsoleRightDiffB, "Right Difficulty B" },
{ Event::ConsoleRightDiffToggle, "Toggle Right Difficulty", "" }, { Event::ConsoleRightDiffToggle, "Toggle Right Difficulty" },
{ Event::SaveState, "Save state", "" }, { Event::SaveState, "Save state" },
{ Event::SaveAllStates, "Save all TM states of current game", "" }, { Event::SaveAllStates, "Save all TM states of current game" },
{ Event::PreviousState, "Change to previous state slot", "" }, { Event::PreviousState, "Change to previous state slot" },
{ Event::NextState, "Change to next state slot", "" }, { Event::NextState, "Change to next state slot" },
{ Event::ToggleAutoSlot, "Toggle automatic state slot change", "" }, { Event::ToggleAutoSlot, "Toggle automatic state slot change" },
{ Event::LoadState, "Load state", "" }, { Event::LoadState, "Load state" },
{ Event::LoadAllStates, "Load saved TM states for current game", "" }, { Event::LoadAllStates, "Load saved TM states for current game" },
#ifdef PNG_SUPPORT #ifdef PNG_SUPPORT
{ Event::TakeSnapshot, "Snapshot", "" }, { Event::TakeSnapshot, "Snapshot" },
{ Event::ToggleContSnapshots, "Save continuous snapsh. (as defined)", "" }, { Event::ToggleContSnapshots, "Save continuous snapsh. (as defined)" },
{ Event::ToggleContSnapshotsFrame,"Save continuous snapsh. (every frame)", "" }, { Event::ToggleContSnapshotsFrame,"Save continuous snapsh. (every frame)" },
#endif #endif
// Global keys: // Global keys:
{ Event::PreviousSettingGroup, "Select previous setting group", "" }, { Event::PreviousSettingGroup, "Select previous setting group" },
{ Event::NextSettingGroup, "Select next setting group", "" }, { Event::NextSettingGroup, "Select next setting group" },
{ Event::PreviousSetting, "Select previous setting", "" }, { Event::PreviousSetting, "Select previous setting" },
{ Event::NextSetting, "Select next setting", "" }, { Event::NextSetting, "Select next setting" },
{ Event::SettingDecrease, "Decrease current setting", "" }, { Event::SettingDecrease, "Decrease current setting" },
{ Event::SettingIncrease, "Increase current setting", "" }, { Event::SettingIncrease, "Increase current setting" },
// Controllers: // Controllers:
{ Event::LeftJoystickUp, "Left Joystick Up", "" }, { Event::LeftJoystickUp, "Left Joystick Up" },
{ Event::LeftJoystickDown, "Left Joystick Down", "" }, { Event::LeftJoystickDown, "Left Joystick Down" },
{ Event::LeftJoystickLeft, "Left Joystick Left", "" }, { Event::LeftJoystickLeft, "Left Joystick Left" },
{ Event::LeftJoystickRight, "Left Joystick Right", "" }, { Event::LeftJoystickRight, "Left Joystick Right" },
{ Event::LeftJoystickFire, "Left Joystick Fire", "" }, { Event::LeftJoystickFire, "Left Joystick Fire" },
{ Event::LeftJoystickFire5, "Left Booster Top Booster Button", "" }, { Event::LeftJoystickFire5, "Left Top Booster Button, Button 'C'" },
{ Event::LeftJoystickFire9, "Left Booster Handle Grip Trigger", "" }, { Event::LeftJoystickFire9, "Left Handle Grip Trigger, Button '3'" },
{ Event::RightJoystickUp, "Right Joystick Up", "" }, { Event::RightJoystickUp, "Right Joystick Up" },
{ Event::RightJoystickDown, "Right Joystick Down", "" }, { Event::RightJoystickDown, "Right Joystick Down" },
{ Event::RightJoystickLeft, "Right Joystick Left", "" }, { Event::RightJoystickLeft, "Right Joystick Left" },
{ Event::RightJoystickRight, "Right Joystick Right", "" }, { Event::RightJoystickRight, "Right Joystick Right" },
{ Event::RightJoystickFire, "Right Joystick Fire", "" }, { Event::RightJoystickFire, "Right Joystick Fire" },
{ Event::RightJoystickFire5, "Right Booster Top Booster Button", "" }, { Event::RightJoystickFire5, "Right Top Booster Button, Button 'C'" },
{ Event::RightJoystickFire9, "Right Booster Handle Grip Trigger", "" }, { Event::RightJoystickFire9, "Right Handle Grip Trigger, Button '3'" },
{ Event::QTJoystickThreeUp, "QuadTari Joystick 3 Up", "" }, { Event::QTJoystickThreeUp, "QuadTari Joystick 3 Up" },
{ Event::QTJoystickThreeDown, "QuadTari Joystick 3 Down", "" }, { Event::QTJoystickThreeDown, "QuadTari Joystick 3 Down" },
{ Event::QTJoystickThreeLeft, "QuadTari Joystick 3 Left", "" }, { Event::QTJoystickThreeLeft, "QuadTari Joystick 3 Left" },
{ Event::QTJoystickThreeRight, "QuadTari Joystick 3 Right", "" }, { Event::QTJoystickThreeRight, "QuadTari Joystick 3 Right" },
{ Event::QTJoystickThreeFire, "QuadTari Joystick 3 Fire", "" }, { Event::QTJoystickThreeFire, "QuadTari Joystick 3 Fire" },
{ Event::QTJoystickFourUp, "QuadTari Joystick 4 Up", "" }, { Event::QTJoystickFourUp, "QuadTari Joystick 4 Up" },
{ Event::QTJoystickFourDown, "QuadTari Joystick 4 Down", "" }, { Event::QTJoystickFourDown, "QuadTari Joystick 4 Down" },
{ Event::QTJoystickFourLeft, "QuadTari Joystick 4 Left", "" }, { Event::QTJoystickFourLeft, "QuadTari Joystick 4 Left" },
{ Event::QTJoystickFourRight, "QuadTari Joystick 4 Right", "" }, { Event::QTJoystickFourRight, "QuadTari Joystick 4 Right" },
{ Event::QTJoystickFourFire, "QuadTari Joystick 4 Fire", "" }, { Event::QTJoystickFourFire, "QuadTari Joystick 4 Fire" },
{ Event::LeftPaddleAAnalog, "Left Paddle A Analog", "" }, { Event::LeftPaddleAAnalog, "Left Paddle A Analog" },
{ Event::LeftPaddleAIncrease, "Left Paddle A Turn Left", "" }, { Event::LeftPaddleAIncrease, "Left Paddle A Turn Left" },
{ Event::LeftPaddleADecrease, "Left Paddle A Turn Right", "" }, { Event::LeftPaddleADecrease, "Left Paddle A Turn Right" },
{ Event::LeftPaddleAFire, "Left Paddle A Fire", "" }, { Event::LeftPaddleAFire, "Left Paddle A Fire" },
{ Event::LeftPaddleBAnalog, "Left Paddle B Analog", "" }, { Event::LeftPaddleBAnalog, "Left Paddle B Analog" },
{ Event::LeftPaddleBIncrease, "Left Paddle B Turn Left", "" }, { Event::LeftPaddleBIncrease, "Left Paddle B Turn Left" },
{ Event::LeftPaddleBDecrease, "Left Paddle B Turn Right", "" }, { Event::LeftPaddleBDecrease, "Left Paddle B Turn Right" },
{ Event::LeftPaddleBFire, "Left Paddle B Fire", "" }, { Event::LeftPaddleBFire, "Left Paddle B Fire" },
{ Event::RightPaddleAAnalog, "Right Paddle A Analog", "" }, { Event::RightPaddleAAnalog, "Right Paddle A Analog" },
{ Event::RightPaddleAIncrease, "Right Paddle A Turn Left", "" }, { Event::RightPaddleAIncrease, "Right Paddle A Turn Left" },
{ Event::RightPaddleADecrease, "Right Paddle A Turn Right", "" }, { Event::RightPaddleADecrease, "Right Paddle A Turn Right" },
{ Event::RightPaddleAFire, "Right Paddle A Fire", "" }, { Event::RightPaddleAFire, "Right Paddle A Fire" },
{ Event::RightPaddleBAnalog, "Right Paddle B Analog", "" }, { Event::RightPaddleBAnalog, "Right Paddle B Analog" },
{ Event::RightPaddleBIncrease, "Right Paddle B Turn Left", "" }, { Event::RightPaddleBIncrease, "Right Paddle B Turn Left" },
{ Event::RightPaddleBDecrease, "Right Paddle B Turn Right", "" }, { Event::RightPaddleBDecrease, "Right Paddle B Turn Right" },
{ Event::RightPaddleBFire, "Right Paddle B Fire", "" }, { Event::RightPaddleBFire, "Right Paddle B Fire" },
{ Event::QTPaddle3AFire, "QuadTari Paddle 3A Fire", "" }, { Event::QTPaddle3AFire, "QuadTari Paddle 3A Fire" },
{ Event::QTPaddle3BFire, "QuadTari Paddle 3B Fire", "" }, { Event::QTPaddle3BFire, "QuadTari Paddle 3B Fire" },
{ Event::QTPaddle4AFire, "QuadTari Paddle 4A Fire", "" }, { Event::QTPaddle4AFire, "QuadTari Paddle 4A Fire" },
{ Event::QTPaddle4BFire, "QuadTari Paddle 4B Fire", "" }, { Event::QTPaddle4BFire, "QuadTari Paddle 4B Fire" },
{ Event::LeftKeyboard1, "Left Keyboard 1", "" }, { Event::LeftKeyboard1, "Left Keyboard 1" },
{ Event::LeftKeyboard2, "Left Keyboard 2", "" }, { Event::LeftKeyboard2, "Left Keyboard 2" },
{ Event::LeftKeyboard3, "Left Keyboard 3", "" }, { Event::LeftKeyboard3, "Left Keyboard 3" },
{ Event::LeftKeyboard4, "Left Keyboard 4", "" }, { Event::LeftKeyboard4, "Left Keyboard 4" },
{ Event::LeftKeyboard5, "Left Keyboard 5", "" }, { Event::LeftKeyboard5, "Left Keyboard 5" },
{ Event::LeftKeyboard6, "Left Keyboard 6", "" }, { Event::LeftKeyboard6, "Left Keyboard 6" },
{ Event::LeftKeyboard7, "Left Keyboard 7", "" }, { Event::LeftKeyboard7, "Left Keyboard 7" },
{ Event::LeftKeyboard8, "Left Keyboard 8", "" }, { Event::LeftKeyboard8, "Left Keyboard 8" },
{ Event::LeftKeyboard9, "Left Keyboard 9", "" }, { Event::LeftKeyboard9, "Left Keyboard 9" },
{ Event::LeftKeyboardStar, "Left Keyboard *", "" }, { Event::LeftKeyboardStar, "Left Keyboard *" },
{ Event::LeftKeyboard0, "Left Keyboard 0", "" }, { Event::LeftKeyboard0, "Left Keyboard 0" },
{ Event::LeftKeyboardPound, "Left Keyboard #", "" }, { Event::LeftKeyboardPound, "Left Keyboard #" },
{ Event::RightKeyboard1, "Right Keyboard 1", "" }, { Event::RightKeyboard1, "Right Keyboard 1" },
{ Event::RightKeyboard2, "Right Keyboard 2", "" }, { Event::RightKeyboard2, "Right Keyboard 2" },
{ Event::RightKeyboard3, "Right Keyboard 3", "" }, { Event::RightKeyboard3, "Right Keyboard 3" },
{ Event::RightKeyboard4, "Right Keyboard 4", "" }, { Event::RightKeyboard4, "Right Keyboard 4" },
{ Event::RightKeyboard5, "Right Keyboard 5", "" }, { Event::RightKeyboard5, "Right Keyboard 5" },
{ Event::RightKeyboard6, "Right Keyboard 6", "" }, { Event::RightKeyboard6, "Right Keyboard 6" },
{ Event::RightKeyboard7, "Right Keyboard 7", "" }, { Event::RightKeyboard7, "Right Keyboard 7" },
{ Event::RightKeyboard8, "Right Keyboard 8", "" }, { Event::RightKeyboard8, "Right Keyboard 8" },
{ Event::RightKeyboard9, "Right Keyboard 9", "" }, { Event::RightKeyboard9, "Right Keyboard 9" },
{ Event::RightKeyboardStar, "Right Keyboard *", "" }, { Event::RightKeyboardStar, "Right Keyboard *" },
{ Event::RightKeyboard0, "Right Keyboard 0", "" }, { Event::RightKeyboard0, "Right Keyboard 0" },
{ Event::RightKeyboardPound, "Right Keyboard #", "" }, { Event::RightKeyboardPound, "Right Keyboard #" },
{ Event::LeftDrivingAnalog, "Left Driving Analog", "" }, { Event::LeftDrivingAnalog, "Left Driving Analog" },
{ Event::LeftDrivingCCW, "Left Driving Turn Left", "" }, { Event::LeftDrivingCCW, "Left Driving Turn Left" },
{ Event::LeftDrivingCW, "Left Driving Turn Right", "" }, { Event::LeftDrivingCW, "Left Driving Turn Right" },
{ Event::LeftDrivingFire, "Left Driving Fire", "" }, { Event::LeftDrivingFire, "Left Driving Fire" },
{ Event::RightDrivingAnalog, "Right Driving Analog", "" }, { Event::RightDrivingAnalog, "Right Driving Analog" },
{ Event::RightDrivingCCW, "Right Driving Turn Left", "" }, { Event::RightDrivingCCW, "Right Driving Turn Left" },
{ Event::RightDrivingCW, "Right Driving Turn Right", "" }, { Event::RightDrivingCW, "Right Driving Turn Right" },
{ Event::RightDrivingFire, "Right Driving Fire", "" }, { Event::RightDrivingFire, "Right Driving Fire" },
// Video // Video
{ Event::ToggleInter, "Toggle display interpolation", "" }, { Event::ToggleInter, "Toggle display interpolation" },
{ Event::VidmodeDecrease, "Previous zoom level", "" }, { Event::VidmodeDecrease, "Previous zoom level" },
{ Event::VidmodeIncrease, "Next zoom level", "" }, { Event::VidmodeIncrease, "Next zoom level" },
{ Event::ToggleFullScreen, "Toggle fullscreen", "" }, { Event::ToggleFullScreen, "Toggle fullscreen" },
#ifdef ADAPTABLE_REFRESH_SUPPORT #ifdef ADAPTABLE_REFRESH_SUPPORT
{ Event::ToggleAdaptRefresh, "Toggle fullscreen refresh rate adapt", "" }, { Event::ToggleAdaptRefresh, "Toggle fullscreen refresh rate adapt" },
#endif #endif
{ Event::OverscanDecrease, "Decrease overscan in fullscreen mode", "" }, { Event::OverscanDecrease, "Decrease overscan in fullscreen mode" },
{ Event::OverscanIncrease, "Increase overscan in fullscreen mode", "" }, { Event::OverscanIncrease, "Increase overscan in fullscreen mode" },
{ Event::ToggleCorrectAspectRatio,"Toggle aspect ratio correct scaling", "" }, { Event::ToggleCorrectAspectRatio,"Toggle aspect ratio correct scaling" },
{ Event::VSizeAdjustDecrease, "Decrease vertical display size", "" }, { Event::VSizeAdjustDecrease, "Decrease vertical display size" },
{ Event::VSizeAdjustIncrease, "Increase vertical display size", "" }, { Event::VSizeAdjustIncrease, "Increase vertical display size" },
{ Event::VCenterDecrease, "Move display up", "" }, { Event::VCenterDecrease, "Move display up" },
{ Event::VCenterIncrease, "Move display down", "" }, { Event::VCenterIncrease, "Move display down" },
{ Event::FormatDecrease, "Decrease TV format", "" }, { Event::FormatDecrease, "Decrease TV format" },
{ Event::FormatIncrease, "Increase TV format", "" }, { Event::FormatIncrease, "Increase TV format" },
// Palette settings // Palette settings
{ Event::PaletteDecrease, "Switch to previous palette", "" }, { Event::PaletteDecrease, "Switch to previous palette" },
{ Event::PaletteIncrease, "Switch to next palette", "" }, { Event::PaletteIncrease, "Switch to next palette" },
{ Event::PreviousPaletteAttribute,"Select previous palette attribute", "" }, { Event::PreviousPaletteAttribute,"Select previous palette attribute" },
{ Event::NextPaletteAttribute, "Select next palette attribute", "" }, { Event::NextPaletteAttribute, "Select next palette attribute" },
{ Event::PaletteAttributeDecrease,"Decrease selected palette attribute", "" }, { Event::PaletteAttributeDecrease,"Decrease selected palette attribute" },
{ Event::PaletteAttributeIncrease,"Increase selected palette attribute", "" }, { Event::PaletteAttributeIncrease,"Increase selected palette attribute" },
// Blargg TV effects: // Blargg TV effects:
{ Event::VidmodeStd, "Disable TV effects", "" }, { Event::VidmodeStd, "Disable TV effects" },
{ Event::VidmodeRGB, "Select 'RGB' preset", "" }, { Event::VidmodeRGB, "Select 'RGB' preset" },
{ Event::VidmodeSVideo, "Select 'S-Video' preset", "" }, { Event::VidmodeSVideo, "Select 'S-Video' preset" },
{ Event::VidModeComposite, "Select 'Composite' preset", "" }, { Event::VidModeComposite, "Select 'Composite' preset" },
{ Event::VidModeBad, "Select 'Badly adjusted' preset", "" }, { Event::VidModeBad, "Select 'Badly adjusted' preset" },
{ Event::VidModeCustom, "Select 'Custom' preset", "" }, { Event::VidModeCustom, "Select 'Custom' preset" },
{ Event::PreviousVideoMode, "Select previous TV effect mode preset", "" }, { Event::PreviousVideoMode, "Select previous TV effect mode preset" },
{ Event::NextVideoMode, "Select next TV effect mode preset", "" }, { Event::NextVideoMode, "Select next TV effect mode preset" },
{ Event::PreviousAttribute, "Select previous 'Custom' attribute", "" }, { Event::PreviousAttribute, "Select previous 'Custom' attribute" },
{ Event::NextAttribute, "Select next 'Custom' attribute", "" }, { Event::NextAttribute, "Select next 'Custom' attribute" },
{ Event::DecreaseAttribute, "Decrease selected 'Custom' attribute", "" }, { Event::DecreaseAttribute, "Decrease selected 'Custom' attribute" },
{ Event::IncreaseAttribute, "Increase selected 'Custom' attribute", "" }, { Event::IncreaseAttribute, "Increase selected 'Custom' attribute" },
// Other TV effects // Other TV effects
{ Event::TogglePhosphor, "Toggle 'phosphor' effect", "" }, { Event::TogglePhosphor, "Toggle 'phosphor' effect" },
{ Event::PhosphorDecrease, "Decrease 'phosphor' blend", "" }, { Event::PhosphorDecrease, "Decrease 'phosphor' blend" },
{ Event::PhosphorIncrease, "Increase 'phosphor' blend", "" }, { Event::PhosphorIncrease, "Increase 'phosphor' blend" },
{ Event::ScanlinesDecrease, "Decrease scanlines", "" }, { Event::ScanlinesDecrease, "Decrease scanlines" },
{ Event::ScanlinesIncrease, "Increase scanlines", "" }, { Event::ScanlinesIncrease, "Increase scanlines" },
{ Event::PreviousScanlineMask, "Switch to previous scanline mask", "" }, { Event::PreviousScanlineMask, "Switch to previous scanline mask" },
{ Event::NextScanlineMask, "Switch to next scanline mask", "" }, { Event::NextScanlineMask, "Switch to next scanline mask" },
// Audio // Audio
{ Event::SoundToggle, "Toggle sound", "" }, { Event::SoundToggle, "Toggle sound" },
{ Event::VolumeDecrease, "Decrease volume", "" }, { Event::VolumeDecrease, "Decrease volume" },
{ Event::VolumeIncrease, "Increase volume", "" }, { Event::VolumeIncrease, "Increase volume" },
// Devices & Ports: // Devices & Ports:
{ Event::DecreaseDeadzone, "Decrease digital dead zone", "" }, { Event::DecreaseDeadzone, "Decrease digital dead zone" },
{ Event::IncreaseDeadzone, "Increase digital dead zone", "" }, { Event::IncreaseDeadzone, "Increase digital dead zone" },
{ Event::DecAnalogDeadzone, "Decrease analog dead zone", "" }, { Event::DecAnalogDeadzone, "Decrease analog dead zone" },
{ Event::IncAnalogDeadzone, "Increase analog dead zone", "" }, { Event::IncAnalogDeadzone, "Increase analog dead zone" },
{ Event::DecAnalogSense, "Decrease analog paddle sensitivity", "" }, { Event::DecAnalogSense, "Decrease analog paddle sensitivity" },
{ Event::IncAnalogSense, "Increase analog paddle sensitivity", "" }, { Event::IncAnalogSense, "Increase analog paddle sensitivity" },
{ Event::DecAnalogLinear, "Decrease analog paddle linearity", "" }, { Event::DecAnalogLinear, "Decrease analog paddle linearity" },
{ Event::IncAnalogLinear, "Increase analog paddle linearity", "" }, { Event::IncAnalogLinear, "Increase analog paddle linearity" },
{ Event::DecDejtterAveraging, "Decrease paddle dejitter averaging", "" }, { Event::DecDejtterAveraging, "Decrease paddle dejitter averaging" },
{ Event::IncDejtterAveraging, "Increase paddle dejitter averaging", "" }, { Event::IncDejtterAveraging, "Increase paddle dejitter averaging" },
{ Event::DecDejtterReaction, "Decrease paddle dejitter reaction", "" }, { Event::DecDejtterReaction, "Decrease paddle dejitter reaction" },
{ Event::IncDejtterReaction, "Increase paddle dejitter reaction", "" }, { Event::IncDejtterReaction, "Increase paddle dejitter reaction" },
{ Event::DecDigitalSense, "Decrease digital paddle sensitivity", "" }, { Event::DecDigitalSense, "Decrease digital paddle sensitivity" },
{ Event::IncDigitalSense, "Increase digital paddle sensitivity", "" }, { Event::IncDigitalSense, "Increase digital paddle sensitivity" },
{ Event::ToggleAutoFire, "Toggle auto fire", "" }, { Event::ToggleAutoFire, "Toggle auto fire" },
{ Event::DecreaseAutoFire, "Decrease auto fire speed", "" }, { Event::DecreaseAutoFire, "Decrease auto fire speed" },
{ Event::IncreaseAutoFire, "Increase auto fire speed", "" }, { Event::IncreaseAutoFire, "Increase auto fire speed" },
{ Event::ToggleFourDirections, "Toggle allow four joystick directions", "" }, { Event::ToggleFourDirections, "Toggle allow four joystick directions" },
{ Event::ToggleKeyCombos, "Toggle use of modifier key combos", "" }, { Event::ToggleKeyCombos, "Toggle use of modifier key combos" },
{ Event::ToggleSAPortOrder, "Swap Stelladaptor port ordering", "" }, { Event::ToggleSAPortOrder, "Swap Stelladaptor port ordering" },
// Devices & Ports related properties // Devices & Ports related properties
{ Event::PreviousLeftPort, "Select previous left controller", "" }, { Event::PreviousLeftPort, "Select previous left controller" },
{ Event::NextLeftPort, "Select next left controller", "" }, { Event::NextLeftPort, "Select next left controller" },
{ Event::PreviousRightPort, "Select previous right controller", "" }, { Event::PreviousRightPort, "Select previous right controller" },
{ Event::NextRightPort, "Select next right controller", "" }, { Event::NextRightPort, "Select next right controller" },
{ Event::ToggleSwapPorts, "Toggle swap ports", "" }, { Event::ToggleSwapPorts, "Toggle swap ports" },
{ Event::ToggleSwapPaddles, "Toggle swap paddles", "" }, { Event::ToggleSwapPaddles, "Toggle swap paddles" },
// Mouse // Mouse
{ Event::PrevMouseAsController, "Select previous mouse controls", "" }, { Event::PrevMouseAsController, "Select previous mouse controls" },
{ Event::NextMouseAsController, "Select next mouse controls", "" }, { Event::NextMouseAsController, "Select next mouse controls" },
{ Event::DecMousePaddleSense, "Decrease mouse paddle sensitivity", "" }, { Event::DecMousePaddleSense, "Decrease mouse paddle sensitivity" },
{ Event::IncMousePaddleSense, "Increase mouse paddle sensitivity", "" }, { Event::IncMousePaddleSense, "Increase mouse paddle sensitivity" },
{ Event::DecMouseTrackballSense, "Decrease mouse trackball sensitivity", "" }, { Event::DecMouseTrackballSense, "Decrease mouse trackball sensitivity" },
{ Event::IncMouseTrackballSense, "Increase mouse trackball sensitivity", "" }, { Event::IncMouseTrackballSense, "Increase mouse trackball sensitivity" },
{ Event::DecreaseDrivingSense, "Decrease driving sensitivity", "" }, { Event::DecreaseDrivingSense, "Decrease driving sensitivity" },
{ Event::IncreaseDrivingSense, "Increase driving sensitivity", "" }, { Event::IncreaseDrivingSense, "Increase driving sensitivity" },
{ Event::PreviousCursorVisbility, "Select prev. cursor visibility mode", "" }, { Event::PreviousCursorVisbility, "Select prev. cursor visibility mode" },
{ Event::NextCursorVisbility, "Select next cursor visibility mode", "" }, { Event::NextCursorVisbility, "Select next cursor visibility mode" },
{ Event::ToggleGrabMouse, "Toggle grab mouse", "" }, { Event::ToggleGrabMouse, "Toggle grab mouse" },
// Mouse related properties // Mouse related properties
{ Event::PreviousMouseControl, "Select previous mouse emulation mode", "" }, { Event::PreviousMouseControl, "Select previous mouse emulation mode" },
{ Event::NextMouseControl, "Select next mouse emulation mode", "" }, { Event::NextMouseControl, "Select next mouse emulation mode" },
{ Event::DecreaseMouseAxesRange, "Decrease mouse axes range", "" }, { Event::DecreaseMouseAxesRange, "Decrease mouse axes range" },
{ Event::IncreaseMouseAxesRange, "Increase mouse axes range", "" }, { Event::IncreaseMouseAxesRange, "Increase mouse axes range" },
// Time Machine // Time Machine
{ Event::ToggleTimeMachine, "Toggle 'Time Machine' mode", "" }, { Event::ToggleTimeMachine, "Toggle 'Time Machine' mode" },
{ Event::TimeMachineMode, "Toggle 'Time Machine' UI", "" }, { Event::TimeMachineMode, "Toggle 'Time Machine' UI" },
{ Event::RewindPause, "Rewind one state & enter Pause mode", "" }, { Event::RewindPause, "Rewind one state & enter Pause mode" },
{ Event::Rewind1Menu, "Rewind one state & enter TM UI", "" }, { Event::Rewind1Menu, "Rewind one state & enter TM UI" },
{ Event::Rewind10Menu, "Rewind 10 states & enter TM UI", "" }, { Event::Rewind10Menu, "Rewind 10 states & enter TM UI" },
{ Event::RewindAllMenu, "Rewind all states & enter TM UI", "" }, { Event::RewindAllMenu, "Rewind all states & enter TM UI" },
{ Event::UnwindPause, "Unwind one state & enter Pause mode", "" }, { Event::UnwindPause, "Unwind one state & enter Pause mode" },
{ Event::Unwind1Menu, "Unwind one state & enter TM UI", "" }, { Event::Unwind1Menu, "Unwind one state & enter TM UI" },
{ Event::Unwind10Menu, "Unwind 10 states & enter TM UI", "" }, { Event::Unwind10Menu, "Unwind 10 states & enter TM UI" },
{ Event::UnwindAllMenu, "Unwind all states & enter TM UI", "" }, { Event::UnwindAllMenu, "Unwind all states & enter TM UI" },
{ Event::TogglePlayBackMode, "Toggle 'Time Machine' playback mode", "" }, { Event::TogglePlayBackMode, "Toggle 'Time Machine' playback mode" },
// Developer: // Developer:
{ Event::ToggleDeveloperSet, "Toggle developer settings sets", "" }, { Event::ToggleDeveloperSet, "Toggle developer settings sets" },
{ Event::ToggleFrameStats, "Toggle frame stats", "" }, { Event::ToggleFrameStats, "Toggle frame stats" },
{ Event::ToggleP0Bit, "Toggle TIA Player0 object", "" }, { Event::ToggleP0Bit, "Toggle TIA Player0 object" },
{ Event::ToggleP0Collision, "Toggle TIA Player0 collisions", "" }, { Event::ToggleP0Collision, "Toggle TIA Player0 collisions" },
{ Event::ToggleP1Bit, "Toggle TIA Player1 object", "" }, { Event::ToggleP1Bit, "Toggle TIA Player1 object" },
{ Event::ToggleP1Collision, "Toggle TIA Player1 collisions", "" }, { Event::ToggleP1Collision, "Toggle TIA Player1 collisions" },
{ Event::ToggleM0Bit, "Toggle TIA Missile0 object", "" }, { Event::ToggleM0Bit, "Toggle TIA Missile0 object" },
{ Event::ToggleM0Collision, "Toggle TIA Missile0 collisions", "" }, { Event::ToggleM0Collision, "Toggle TIA Missile0 collisions" },
{ Event::ToggleM1Bit, "Toggle TIA Missile1 object", "" }, { Event::ToggleM1Bit, "Toggle TIA Missile1 object" },
{ Event::ToggleM1Collision, "Toggle TIA Missile1 collisions", "" }, { Event::ToggleM1Collision, "Toggle TIA Missile1 collisions" },
{ Event::ToggleBLBit, "Toggle TIA Ball object", "" }, { Event::ToggleBLBit, "Toggle TIA Ball object" },
{ Event::ToggleBLCollision, "Toggle TIA Ball collisions", "" }, { Event::ToggleBLCollision, "Toggle TIA Ball collisions" },
{ Event::TogglePFBit, "Toggle TIA Playfield object", "" }, { Event::TogglePFBit, "Toggle TIA Playfield object" },
{ Event::TogglePFCollision, "Toggle TIA Playfield collisions", "" }, { Event::TogglePFCollision, "Toggle TIA Playfield collisions" },
{ Event::ToggleBits, "Toggle all TIA objects", "" }, { Event::ToggleBits, "Toggle all TIA objects" },
{ Event::ToggleCollisions, "Toggle all TIA collisions", "" }, { Event::ToggleCollisions, "Toggle all TIA collisions" },
{ Event::ToggleFixedColors, "Toggle TIA 'Fixed Debug Colors' mode", "" }, { Event::ToggleFixedColors, "Toggle TIA 'Fixed Debug Colors' mode" },
{ Event::ToggleColorLoss, "Toggle PAL color-loss effect", "" }, { Event::ToggleColorLoss, "Toggle PAL color-loss effect" },
{ Event::ToggleJitter, "Toggle TV scanline 'Jitter' effect", "" }, { Event::ToggleJitter, "Toggle TV scanline 'Jitter' effect" },
{ Event::JitterSenseDecrease, "Decrease TV 'Jitter' sensitivity", "" }, { Event::JitterSenseDecrease, "Decrease TV 'Jitter' sensitivity" },
{ Event::JitterSenseIncrease, "Increase TV 'Jitter' sensitivity", "" }, { Event::JitterSenseIncrease, "Increase TV 'Jitter' sensitivity" },
{ Event::JitterRecDecrease, "Decrease TV 'Jitter' roll", "" }, { Event::JitterRecDecrease, "Decrease TV 'Jitter' roll" },
{ Event::JitterRecIncrease, "Increase TV 'Jitter' roll", "" }, { Event::JitterRecIncrease, "Increase TV 'Jitter' roll" },
// Combo // Combo
{ Event::Combo1, "Combo 1", "" }, { Event::Combo1, "Combo 1" },
{ Event::Combo2, "Combo 2", "" }, { Event::Combo2, "Combo 2" },
{ Event::Combo3, "Combo 3", "" }, { Event::Combo3, "Combo 3" },
{ Event::Combo4, "Combo 4", "" }, { Event::Combo4, "Combo 4" },
{ Event::Combo5, "Combo 5", "" }, { Event::Combo5, "Combo 5" },
{ Event::Combo6, "Combo 6", "" }, { Event::Combo6, "Combo 6" },
{ Event::Combo7, "Combo 7", "" }, { Event::Combo7, "Combo 7" },
{ Event::Combo8, "Combo 8", "" }, { Event::Combo8, "Combo 8" },
{ Event::Combo9, "Combo 9", "" }, { Event::Combo9, "Combo 9" },
{ Event::Combo10, "Combo 10", "" }, { Event::Combo10, "Combo 10" },
{ Event::Combo11, "Combo 11", "" }, { Event::Combo11, "Combo 11" },
{ Event::Combo12, "Combo 12", "" }, { Event::Combo12, "Combo 12" },
{ Event::Combo13, "Combo 13", "" }, { Event::Combo13, "Combo 13" },
{ Event::Combo14, "Combo 14", "" }, { Event::Combo14, "Combo 14" },
{ Event::Combo15, "Combo 15", "" }, { Event::Combo15, "Combo 15" },
{ Event::Combo16, "Combo 16", "" }, { Event::Combo16, "Combo 16" },
} }; } };
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EventHandler::MenuActionList EventHandler::ourMenuActionList = { { EventHandler::MenuActionList EventHandler::ourMenuActionList = { {
{ Event::UIHelp, "Open context-sensitive help", "" }, { Event::UIHelp, "Open context-sensitive help" },
{ Event::UIUp, "Move Up", "" }, { Event::UIUp, "Move Up" },
{ Event::UIDown, "Move Down", "" }, { Event::UIDown, "Move Down" },
{ Event::UILeft, "Move Left", "" }, { Event::UILeft, "Move Left" },
{ Event::UIRight, "Move Right", "" }, { Event::UIRight, "Move Right" },
{ Event::UIHome, "Home", "" }, { Event::UIHome, "Home" },
{ Event::UIEnd, "End", "" }, { Event::UIEnd, "End" },
{ Event::UIPgUp, "Page Up", "" }, { Event::UIPgUp, "Page Up" },
{ Event::UIPgDown, "Page Down", "" }, { Event::UIPgDown, "Page Down" },
{ Event::UIOK, "OK", "" }, { Event::UIOK, "OK" },
{ Event::UICancel, "Cancel", "" }, { Event::UICancel, "Cancel" },
{ Event::UISelect, "Select item", "" }, { Event::UISelect, "Select item" },
{ Event::UINavPrev, "Previous object", "" }, { Event::UINavPrev, "Previous object" },
{ Event::UINavNext, "Next object", "" }, { Event::UINavNext, "Next object" },
{ Event::UITabPrev, "Previous tab", "" }, { Event::UITabPrev, "Previous tab" },
{ Event::UITabNext, "Next tab", "" }, { Event::UITabNext, "Next tab" },
{ Event::UIPrevDir, "Parent directory", "" }, { Event::UIPrevDir, "Parent directory" },
{ Event::ToggleFullScreen, "Toggle fullscreen", "" }, { Event::ToggleFullScreen, "Toggle fullscreen" },
{ Event::Quit, "Quit", "" } { Event::Quit, "Quit" }
} }; } };
// Event groups // Event groups

53
src/emucore/Joy2BPlus.cxx Normal file
View File

@ -0,0 +1,53 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2022 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#include "Joy2BPlus.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Joy2BPlus::Joy2BPlus(Jack jack, const Event& event, const System& system)
: Joystick(jack, event, system, Controller::Type::Joy2BPlus)
{
if(myJack == Jack::Left)
{
myButtonCEvent = Event::LeftJoystickFire5;
myButton3Event = Event::LeftJoystickFire9;
}
else
{
myButtonCEvent = Event::RightJoystickFire5;
myButton3Event = Event::RightJoystickFire9;
}
setPin(AnalogPin::Five, AnalogReadout::connectToVcc());
setPin(AnalogPin::Nine, AnalogReadout::connectToVcc());
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Joy2BPlus::updateButtons()
{
bool firePressed = myEvent.get(myFireEvent) != 0;
// The Joy 2B+ has two more buttons on it. These buttons are
// connected to the inputs usually used by paddles.
bool buttonCPressed = myEvent.get(myButtonCEvent) != 0;
const bool button3Pressed = myEvent.get(myButton3Event) != 0;
updateMouseButtons(firePressed, buttonCPressed);
setPin(DigitalPin::Six, !getAutoFireState(firePressed));
setPin(AnalogPin::Five, buttonCPressed ? AnalogReadout::connectToGround() : AnalogReadout::connectToVcc());
setPin(AnalogPin::Nine, button3Pressed ? AnalogReadout::connectToGround() : AnalogReadout::connectToVcc());
}

71
src/emucore/Joy2BPlus.hxx Normal file
View File

@ -0,0 +1,71 @@
//============================================================================
//
// SSSS tt lll lll
// SS SS tt ll ll
// SS tttttt eeee ll ll aaaa
// SSSS tt ee ee ll ll aa
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
// SS SS tt ee ll ll aa aa
// SSSS ttt eeeee llll llll aaaaa
//
// Copyright (c) 1995-2022 by Bradford W. Mott, Stephen Anthony
// and the Stella Team
//
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//============================================================================
#ifndef JOY2BPLUS_HXX
#define JOY2BPLUS_HXX
#include "Joystick.hxx"
/**
The Joy 2B+ controller works with the 2600 console for joystick directions
and some of the buttons. Button 'B' corresponds to the normal fire button
(joy0fire), while button 'C' is read through INPT1 (analog pin 5) and
button '3' through INPT0 (analog pin 9).
@author Thomas Jentzsch
*/
class Joy2BPlus : public Joystick
{
public:
/**
Create a new Joy 2B+ joystick plugged into the specified jack
@param jack The jack the controller is plugged into
@param event The event object to use for events
@param system The system using this controller
*/
Joy2BPlus(Jack jack, const Event& event, const System& system);
~Joy2BPlus() override = default;
public:
/**
Returns the name of this controller.
*/
string name() const override { return "Joy 2B+"; }
private:
/**
Update the button pin states.
*/
void updateButtons() override;
private:
// Pre-compute the events we care about based on given port
// This will eliminate test for left or right port in update()
Event::Type myButton3Event, myButtonCEvent;
private:
// Following constructors and assignment operators not supported
Joy2BPlus() = delete;
Joy2BPlus(const Joy2BPlus&) = delete;
Joy2BPlus(Joy2BPlus&&) = delete;
Joy2BPlus& operator=(const Joy2BPlus&) = delete;
Joy2BPlus& operator=(Joy2BPlus&&) = delete;
};
#endif

View File

@ -67,6 +67,7 @@ MODULE_OBJS := \
src/emucore/FSNode.o \ src/emucore/FSNode.o \
src/emucore/Genesis.o \ src/emucore/Genesis.o \
src/emucore/GlobalKeyHandler.o \ src/emucore/GlobalKeyHandler.o \
src/emucore/Joy2BPlus.o \
src/emucore/Joystick.o \ src/emucore/Joystick.o \
src/emucore/Keyboard.o \ src/emucore/Keyboard.o \
src/emucore/KidVid.o \ src/emucore/KidVid.o \

View File

@ -5187,6 +5187,8 @@
"Cart.Manufacturer" "Alessandro Ciceri" "Cart.Manufacturer" "Alessandro Ciceri"
"Cart.Name" "MagiCard+ (alex_79) WIP_20150118" "Cart.Name" "MagiCard+ (alex_79) WIP_20150118"
"Cart.Note" "MagiCard hack" "Cart.Note" "MagiCard hack"
"Controller.Left" "KEYBOARD"
"Controller.Right" "KEYBOARD"
"" ""
"Cart.MD5" "39790a2e9030751d7db414e13f1b6960" "Cart.MD5" "39790a2e9030751d7db414e13f1b6960"
@ -10936,6 +10938,8 @@
"Cart.Manufacturer" "Alessandro Ciceri" "Cart.Manufacturer" "Alessandro Ciceri"
"Cart.Name" "MagiCard (TV format conversion) (alex_79) (PAL)" "Cart.Name" "MagiCard (TV format conversion) (alex_79) (PAL)"
"Cart.Note" "MagiCard PAL conversion hack" "Cart.Note" "MagiCard PAL conversion hack"
"Controller.Left" "KEYBOARD"
"Controller.Right" "KEYBOARD"
"" ""
"Cart.MD5" "7860716fa5dbc0fffab93fb9a4cb4132" "Cart.MD5" "7860716fa5dbc0fffab93fb9a4cb4132"
@ -11459,6 +11463,8 @@
"Cart.ModelNo" "CM-001" "Cart.ModelNo" "CM-001"
"Cart.Name" "MagiCard (1981) (CommaVid) (4K)" "Cart.Name" "MagiCard (1981) (CommaVid) (4K)"
"Cart.Note" "Uses the Keyboard Controllers" "Cart.Note" "Uses the Keyboard Controllers"
"Controller.Left" "KEYBOARD"
"Controller.Right" "KEYBOARD"
"" ""
"Cart.MD5" "7dbc8fa2e488e3f6b87fbe0f76c5b89f" "Cart.MD5" "7dbc8fa2e488e3f6b87fbe0f76c5b89f"
@ -18264,6 +18270,8 @@
"Cart.ModelNo" "CM-001" "Cart.ModelNo" "CM-001"
"Cart.Name" "MagiCard (1981) (CommaVid)" "Cart.Name" "MagiCard (1981) (CommaVid)"
"Cart.Note" "Uses the Keyboard Controllers" "Cart.Note" "Uses the Keyboard Controllers"
"Controller.Left" "KEYBOARD"
"Controller.Right" "KEYBOARD"
"" ""
"Cart.MD5" "ce17325834bf8b0a0d0d8de08478d436" "Cart.MD5" "ce17325834bf8b0a0d0d8de08478d436"
@ -20527,6 +20535,8 @@
"Cart.Manufacturer" "Alessandro Ciceri" "Cart.Manufacturer" "Alessandro Ciceri"
"Cart.Name" "MagiCard+ (alex_79) WIP_20150118 (PAL)" "Cart.Name" "MagiCard+ (alex_79) WIP_20150118 (PAL)"
"Cart.Note" "MagiCard hack" "Cart.Note" "MagiCard hack"
"Controller.Left" "KEYBOARD"
"Controller.Right" "KEYBOARD"
"" ""
"Cart.MD5" "e5a6e0bb7d56e2f08b237e15076e5699" "Cart.MD5" "e5a6e0bb7d56e2f08b237e15076e5699"

View File

@ -294,6 +294,7 @@ void GameInfoDialog::addControllersTab()
VarList::push_back(items, "AtariVox", "ATARIVOX"); VarList::push_back(items, "AtariVox", "ATARIVOX");
VarList::push_back(items, "SaveKey", "SAVEKEY"); VarList::push_back(items, "SaveKey", "SAVEKEY");
VarList::push_back(items, "Sega Genesis", "GENESIS"); VarList::push_back(items, "Sega Genesis", "GENESIS");
VarList::push_back(items, "Joy2B+", "JOY_2B+");
VarList::push_back(items, "Kid Vid", "KIDVID"); VarList::push_back(items, "Kid Vid", "KIDVID");
VarList::push_back(items, "Light Gun", "LIGHTGUN"); VarList::push_back(items, "Light Gun", "LIGHTGUN");
VarList::push_back(items, "MindLink", "MINDLINK"); VarList::push_back(items, "MindLink", "MINDLINK");

View File

@ -53,7 +53,7 @@ InputDialog::InputDialog(OSystem& osystem, DialogContainer& parent,
VGAP = Dialog::vGap(); VGAP = Dialog::vGap();
// Set real dimensions // Set real dimensions
setSize(48 * fontWidth + PopUpWidget::dropDownWidth(_font) + HBORDER * 2, setSize(49 * fontWidth + PopUpWidget::dropDownWidth(_font) + HBORDER * 2,
_th + VGAP * 3 + lineHeight + 13 * (lineHeight + VGAP) + VGAP * 9 + buttonHeight + VBORDER * 3, _th + VGAP * 3 + lineHeight + 13 * (lineHeight + VGAP) + VGAP * 9 + buttonHeight + VBORDER * 3,
max_w, max_h); max_w, max_h);

View File

@ -75,8 +75,14 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent,
myUseMinimalUI = instance().settings().getBool("minimal_ui"); myUseMinimalUI = instance().settings().getBool("minimal_ui");
addOptionWidgets(ypos); // if minimalUI, show title within dialog surface instead of showing the filtering control
if(myUseMinimalUI) {
addTitleWidget(ypos);
addPathWidgets(ypos); //-- path widget line will have file count
} else {
addPathWidgets(ypos); addPathWidgets(ypos);
addFilteringWidgets(ypos); //-- filtering widget line has file count
}
addRomWidgets(ypos); addRomWidgets(ypos);
if(!myUseMinimalUI && bottomButtons) if(!myUseMinimalUI && bottomButtons)
addButtonWidgets(ypos); addButtonWidgets(ypos);
@ -97,23 +103,10 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent,
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void LauncherDialog::addOptionWidgets(int& ypos) void LauncherDialog::addTitleWidget(int &ypos)
{ {
const int lineHeight = Dialog::lineHeight(), const int fontHeight = Dialog::fontHeight(),
fontHeight = Dialog::fontHeight(), VGAP = Dialog::vGap();
fontWidth = Dialog::fontWidth(),
HBORDER = Dialog::hBorder(),
VGAP = Dialog::vGap(),
LBL_GAP = Dialog::fontWidth(),
buttonHeight = Dialog::buttonHeight(),
btnGap = fontWidth / 4,
btnYOfs = (buttonHeight - lineHeight) / 2 + 1;
string lblFound = "12345 items found";
int lwFound = _font.getStringWidth(lblFound);
WidgetArray wid;
if(myUseMinimalUI)
{
// App information // App information
ostringstream ver; ostringstream ver;
ver << "Stella " << STELLA_VERSION; ver << "Stella " << STELLA_VERSION;
@ -123,34 +116,51 @@ void LauncherDialog::addOptionWidgets(int& ypos)
new StaticTextWidget(this, _font, 0, ypos, _w, fontHeight, new StaticTextWidget(this, _font, 0, ypos, _w, fontHeight,
ver.str(), TextAlign::Center); ver.str(), TextAlign::Center);
ypos += fontHeight + VGAP; ypos += fontHeight + VGAP;
} }
if(!myUseMinimalUI && _w >= 640) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void LauncherDialog::addFilteringWidgets(int& ypos)
{
const int lineHeight = Dialog::lineHeight(),
fontHeight = Dialog::fontHeight(),
fontWidth = Dialog::fontWidth(),
HBORDER = Dialog::hBorder(),
LBL_GAP = Dialog::fontWidth(),
buttonHeight = Dialog::buttonHeight(),
btnGap = fontWidth / 4,
btnYOfs = (buttonHeight - lineHeight) / 2 + 1;
WidgetArray wid;
if(_w >= 640)
{ {
const bool smallIcon = lineHeight < 26; const bool smallIcon = lineHeight < 26;
const GUI::Icon& settingsIcon = smallIcon ? GUI::icon_settings_small : GUI::icon_settings_large;
const GUI::Icon& helpIcon = smallIcon ? GUI::icon_help_small : GUI::icon_help_large; // Figure out general icon button size
const int iconWidth = settingsIcon.width(); const GUI::Icon& reloadIcon = smallIcon ? GUI::icon_reload_small : GUI::icon_reload_large;
const GUI::Icon& dummyIcon = reloadIcon; //-- used for sizing all the other icons
const int iconWidth = dummyIcon.width();
const int iconGap = ((fontWidth + 1) & ~0b1) + 1; // round up to next even const int iconGap = ((fontWidth + 1) & ~0b1) + 1; // round up to next even
const int buttonWidth = iconWidth + iconGap; const int iconButtonWidth = iconWidth + iconGap;
const GUI::Icon& dummyIcon = settingsIcon;
int xpos = HBORDER; int xpos = HBORDER;
mySettingsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
iconWidth, buttonHeight, settingsIcon,
iconGap, " Options" + ELLIPSIS + " ", kOptionsCmd);
mySettingsButton-> setToolTip("(Ctrl+O)");
wid.push_back(mySettingsButton);
const int cwSettings = mySettingsButton->getWidth(); // Setup some constants for Settings button - icon, label, and width
const int cwSubDirs = buttonWidth; const GUI::Icon& settingsIcon = smallIcon ? GUI::icon_settings_small : GUI::icon_settings_large;
const int cwAllFiles = buttonWidth; const string lblSettings = "Options" + ELLIPSIS;
const int cwHelp = buttonWidth; const int lwSettings = _font.getStringWidth(lblSettings);
const int bwSettings = iconButtonWidth + lwSettings + btnGap * 2 + 1; // Button width for Options button
// Setup some variables for handling the Filter label + field
const string& lblFilter = "Filter"; const string& lblFilter = "Filter";
int lwFilter = _font.getStringWidth(lblFilter); int lwFilter = _font.getStringWidth(lblFilter);
string lblFound = "12345 items found";
int lwFound = _font.getStringWidth(lblFound);
int fwFilter = EditTextWidget::calcWidth(_font, "123456"); // at least 6 chars int fwFilter = EditTextWidget::calcWidth(_font, "123456"); // at least 6 chars
int wTotal = cwSettings + cwSubDirs + cwAllFiles + lwFilter + fwFilter + lwFound + cwHelp
+ LBL_GAP * 5 + btnGap * 2 + HBORDER * 2; // Calculate how much space everything will take
int wTotal = xpos + (iconButtonWidth * 3) + lwFilter + fwFilter + lwFound + bwSettings
+ LBL_GAP * 6 + btnGap * 2 + HBORDER;
// make sure there is space for at least 6 characters in the filter field // make sure there is space for at least 6 characters in the filter field
if(_w < wTotal) if(_w < wTotal)
@ -169,8 +179,15 @@ void LauncherDialog::addOptionWidgets(int& ypos)
fwFilter += _w - wTotal; fwFilter += _w - wTotal;
ypos += btnYOfs;
// Show the reload button
myReloadButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
iconButtonWidth, buttonHeight, reloadIcon, kReloadCmd);
myReloadButton->setToolTip("Reload listing. (Ctrl+R)");
wid.push_back(myReloadButton);
xpos = myReloadButton->getRight() + LBL_GAP * 2;
// Show the "Filter" label // Show the "Filter" label
xpos = mySettingsButton->getRight() + LBL_GAP * 2;
if(lwFilter) if(lwFilter)
{ {
const StaticTextWidget* s = new StaticTextWidget(this, _font, xpos, ypos, lblFilter); const StaticTextWidget* s = new StaticTextWidget(this, _font, xpos, ypos, lblFilter);
@ -182,36 +199,35 @@ void LauncherDialog::addOptionWidgets(int& ypos)
myPattern->setToolTip("Enter filter text to reduce file list.\n" myPattern->setToolTip("Enter filter text to reduce file list.\n"
"Use '*' and '?' as wildcards."); "Use '*' and '?' as wildcards.");
wid.push_back(myPattern); wid.push_back(myPattern);
xpos = myPattern->getRight() + btnGap;
// Show the button for all files // Show the button for all files
xpos = myPattern->getRight() + btnGap;
myOnlyRomsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs, myOnlyRomsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
buttonWidth, buttonHeight, dummyIcon, kAllfilesCmd); iconButtonWidth, buttonHeight, dummyIcon, kAllfilesCmd);
myOnlyRomsButton->setToolTip("Toggle file type filter (Ctrl+A)"); myOnlyRomsButton->setToolTip("Toggle file type filter (Ctrl+A)");
wid.push_back(myOnlyRomsButton); wid.push_back(myOnlyRomsButton);
xpos = myOnlyRomsButton->getRight() + btnGap;
// Show the subdirectories button // Show the subdirectories button
xpos = myOnlyRomsButton->getRight() + btnGap;
mySubDirsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs, mySubDirsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
buttonWidth, buttonHeight, dummyIcon, kSubDirsCmd); iconButtonWidth, buttonHeight, dummyIcon, kSubDirsCmd);
mySubDirsButton->setToolTip("Toggle subdirectories (Ctrl+D)"); mySubDirsButton->setToolTip("Toggle subdirectories (Ctrl+D)");
wid.push_back(mySubDirsButton); wid.push_back(mySubDirsButton);
xpos = mySubDirsButton->getRight() + btnGap + LBL_GAP;
// Show the help button
xpos = _w - HBORDER - buttonWidth;
myHelpButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
buttonWidth, buttonHeight, helpIcon, kHelpCmd);
const string key = instance().eventHandler().getMappingDesc(Event::UIHelp, EventMode::kMenuMode);
myHelpButton->setToolTip("Click for help. (" + key + ")");
wid.push_back(myHelpButton);
// Show the files counter // Show the files counter
xpos = myHelpButton->getLeft() - fontWidth - lwFound; // _w - HBORDER - lwFound;
myRomCount = new StaticTextWidget(this, _font, xpos, ypos, myRomCount = new StaticTextWidget(this, _font, xpos, ypos,
lwFound, fontHeight, "", TextAlign::Right); lwFound, fontHeight, "", TextAlign::Right);
ypos += lineHeight + VGAP * 2; // Show the Settings / Options button (positioned from the right)
xpos = _w - HBORDER - bwSettings;
mySettingsButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
iconWidth, buttonHeight, settingsIcon,
iconGap, lblSettings, kOptionsCmd);
mySettingsButton-> setToolTip("(Ctrl+O)");
wid.push_back(mySettingsButton);
ypos = mySettingsButton->getBottom() + Dialog::vGap();
} }
addToFocusList(wid); addToFocusList(wid);
} }
@ -226,41 +242,47 @@ void LauncherDialog::addPathWidgets(int& ypos)
fontWidth = Dialog::fontWidth(), fontWidth = Dialog::fontWidth(),
HBORDER = Dialog::hBorder(), HBORDER = Dialog::hBorder(),
LBL_GAP = fontWidth, LBL_GAP = fontWidth,
BTN_GAP = fontWidth / 4; buttonHeight = Dialog::buttonHeight(),
BTN_GAP = fontWidth / 4,
btnYOfs = (buttonHeight - lineHeight) / 2 + 1;
const bool smallIcon = lineHeight < 26; const bool smallIcon = lineHeight < 26;
const string lblFound = "12345 items"; const string lblFound = "12345 items";
const int lwFound = _font.getStringWidth(lblFound); const int lwFound = _font.getStringWidth(lblFound);
const GUI::Icon& reloadIcon = smallIcon ? GUI::icon_reload_small : GUI::icon_reload_large;
const int iconWidth = reloadIcon.width(); // Setup some constants for Help button
const int buttonWidth = iconWidth + ((fontWidth + 1) & ~0b1) + 1; // round up to next odd const GUI::Icon& helpIcon = smallIcon ? GUI::icon_help_small : GUI::icon_help_large;
const int buttonHeight = Dialog::buttonHeight(); // lineHeight + 2; const int iconWidth = helpIcon.width();
const int iconGap = ((fontWidth + 1) & ~0b1) + 1; // round up to next even
const int buttonWidth = iconWidth + iconGap;
const int wNav = _w - HBORDER * 2 - (myUseMinimalUI ? lwFound + LBL_GAP : buttonWidth + BTN_GAP); const int wNav = _w - HBORDER * 2 - (myUseMinimalUI ? lwFound + LBL_GAP : buttonWidth + BTN_GAP);
int xpos = HBORDER; int xpos = HBORDER;
WidgetArray wid; WidgetArray wid;
myNavigationBar = new NavigationWidget(this, _font, xpos, ypos, wNav, buttonHeight); myNavigationBar = new NavigationWidget(this, _font, xpos, ypos - btnYOfs, wNav, buttonHeight);
if(!myUseMinimalUI) if(myUseMinimalUI)
{
xpos = myNavigationBar->getRight() + BTN_GAP;
myReloadButton = new ButtonWidget(this, _font, xpos, ypos,
buttonWidth, buttonHeight, reloadIcon, kReloadCmd);
myReloadButton->setToolTip("Reload listing. (Ctrl+R)");
wid.push_back(myReloadButton);
}
else
{ {
// Show the files counter // Show the files counter
myShortCount = true; myShortCount = true;
xpos = _w - HBORDER - lwFound - LBL_GAP / 2; xpos = _w - HBORDER - lwFound - LBL_GAP / 2;
myRomCount = new StaticTextWidget(this, _font, xpos, ypos + 2, myRomCount = new StaticTextWidget(this, _font, xpos, ypos,
lwFound, fontHeight, "", TextAlign::Right); lwFound, fontHeight, "", TextAlign::Right);
EditTextWidget* e = new EditTextWidget(this, _font, myNavigationBar->getRight() - 1, ypos, EditTextWidget* e = new EditTextWidget(this, _font, myNavigationBar->getRight() - 1, ypos - btnYOfs,
lwFound + LBL_GAP + 1, buttonHeight - 2, ""); lwFound + LBL_GAP + 1, buttonHeight - 2, "");
e->setEditable(false, true); e->setEditable(false);
e->setEnabled(false);
} else {
// Show Help icon at far right
xpos = _w - HBORDER - (buttonWidth + BTN_GAP - 2);
myHelpButton = new ButtonWidget(this, _font, xpos, ypos - btnYOfs,
buttonWidth, buttonHeight, helpIcon, kHelpCmd);
const string key = instance().eventHandler().getMappingDesc(Event::UIHelp, EventMode::kMenuMode);
myHelpButton->setToolTip("Click for help. (" + key + ")");
wid.push_back(myHelpButton);
} }
ypos = myNavigationBar->getBottom() + Dialog::vGap(); ypos += lineHeight + Dialog::vGap() * 2;
addToFocusList(wid); addToFocusList(wid);
} }

View File

@ -121,7 +121,8 @@ class LauncherDialog : public Dialog, CommandSender
void loadConfig() override; void loadConfig() override;
void saveConfig() override; void saveConfig() override;
void updateUI(); void updateUI();
void addOptionWidgets(int& ypos); void addTitleWidget(int& ypos);
void addFilteringWidgets(int& ypos);
void addPathWidgets(int& ypos); void addPathWidgets(int& ypos);
void addRomWidgets(int ypos); void addRomWidgets(int ypos);
void addButtonWidgets(int& ypos); void addButtonWidgets(int& ypos);

View File

@ -55,6 +55,7 @@ QuadTariDialog::QuadTariDialog(GuiObject* boss, const GUI::Font& font, int max_w
VarList::push_back(ctrls, "AtariVox", "ATARIVOX"); VarList::push_back(ctrls, "AtariVox", "ATARIVOX");
VarList::push_back(ctrls, "SaveKey", "SAVEKEY"); VarList::push_back(ctrls, "SaveKey", "SAVEKEY");
//VarList::push_back(ctrls, "Sega Genesis", "GENESIS"); //VarList::push_back(ctrls, "Sega Genesis", "GENESIS");
//VarList::push_back(items, "Joy2B+", "JOY_2B+");
//VarList::push_back(ctrls, "Kid Vid", "KIDVID"); //VarList::push_back(ctrls, "Kid Vid", "KIDVID");
//VarList::push_back(ctrls, "Light Gun", "LIGHTGUN"); //VarList::push_back(ctrls, "Light Gun", "LIGHTGUN");
//VarList::push_back(ctrls, "MindLink", "MINDLINK"); //VarList::push_back(ctrls, "MindLink", "MINDLINK");

View File

@ -193,6 +193,7 @@ void StellaSettingsDialog::addGameOptions(WidgetArray& wid, int xpos, int& ypos)
VarList::push_back(ctrls, "Atari mouse", "ATARIMOUSE"); VarList::push_back(ctrls, "Atari mouse", "ATARIMOUSE");
VarList::push_back(ctrls, "Trak-Ball", "TRAKBALL"); VarList::push_back(ctrls, "Trak-Ball", "TRAKBALL");
VarList::push_back(ctrls, "Sega Genesis", "GENESIS"); VarList::push_back(ctrls, "Sega Genesis", "GENESIS");
VarList::push_back(ctrls, "Joy2B+", "JOY_2B+"); // TODO: should work, but needs testing with real hardware
VarList::push_back(ctrls, "QuadTari", "QUADTARI"); VarList::push_back(ctrls, "QuadTari", "QUADTARI");
int pwidth = _font.getStringWidth("Sega Genesis"); int pwidth = _font.getStringWidth("Sega Genesis");

View File

@ -107,6 +107,7 @@ SOURCES_CXX := \
$(CORE_DIR)/emucore/FSNode.cxx \ $(CORE_DIR)/emucore/FSNode.cxx \
$(CORE_DIR)/emucore/Genesis.cxx \ $(CORE_DIR)/emucore/Genesis.cxx \
$(CORE_DIR)/emucore/GlobalKeyHandler.cxx \ $(CORE_DIR)/emucore/GlobalKeyHandler.cxx \
$(CORE_DIR)/emucore/Joy2BPlus.cxx \
$(CORE_DIR)/emucore/Joystick.cxx \ $(CORE_DIR)/emucore/Joystick.cxx \
$(CORE_DIR)/emucore/Keyboard.cxx \ $(CORE_DIR)/emucore/Keyboard.cxx \
$(CORE_DIR)/emucore/KidVid.cxx \ $(CORE_DIR)/emucore/KidVid.cxx \

View File

@ -259,6 +259,7 @@
<ClCompile Include="..\emucore\FSNode.cxx" /> <ClCompile Include="..\emucore\FSNode.cxx" />
<ClCompile Include="..\emucore\Genesis.cxx" /> <ClCompile Include="..\emucore\Genesis.cxx" />
<ClCompile Include="..\emucore\GlobalKeyHandler.cxx" /> <ClCompile Include="..\emucore\GlobalKeyHandler.cxx" />
<ClCompile Include="..\emucore\Joy2BPlus.cxx" />
<ClCompile Include="..\emucore\Joystick.cxx" /> <ClCompile Include="..\emucore\Joystick.cxx" />
<ClCompile Include="..\emucore\Keyboard.cxx" /> <ClCompile Include="..\emucore\Keyboard.cxx" />
<ClCompile Include="..\emucore\KidVid.cxx" /> <ClCompile Include="..\emucore\KidVid.cxx" />

View File

@ -643,6 +643,10 @@
DCDFF08220B781B0001227C0 /* DispatchResult.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCDFF08020B781B0001227C0 /* DispatchResult.hxx */; }; DCDFF08220B781B0001227C0 /* DispatchResult.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCDFF08020B781B0001227C0 /* DispatchResult.hxx */; };
DCE1FF3E286B5D5A003568AD /* FSNodeREGULAR.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE1FF3C286B5D5A003568AD /* FSNodeREGULAR.hxx */; }; DCE1FF3E286B5D5A003568AD /* FSNodeREGULAR.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE1FF3C286B5D5A003568AD /* FSNodeREGULAR.hxx */; };
DCE1FF3F286B5D5A003568AD /* FSNodeREGULAR.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE1FF3D286B5D5A003568AD /* FSNodeREGULAR.cxx */; }; DCE1FF3F286B5D5A003568AD /* FSNodeREGULAR.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE1FF3D286B5D5A003568AD /* FSNodeREGULAR.cxx */; };
DCE1FF42286DFB76003568AD /* Joy2BPlusWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE1FF40286DFB76003568AD /* Joy2BPlusWidget.cxx */; };
DCE1FF43286DFB76003568AD /* Joy2BPlusWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE1FF41286DFB76003568AD /* Joy2BPlusWidget.hxx */; };
DCE1FF46286DFB98003568AD /* Joy2BPlus.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE1FF44286DFB98003568AD /* Joy2BPlus.hxx */; };
DCE1FF47286DFB98003568AD /* Joy2BPlus.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE1FF45286DFB98003568AD /* Joy2BPlus.cxx */; };
DCE395EF16CB0B5F008DB1E5 /* FSNodeFactory.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE395EA16CB0B5F008DB1E5 /* FSNodeFactory.hxx */; }; DCE395EF16CB0B5F008DB1E5 /* FSNodeFactory.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE395EA16CB0B5F008DB1E5 /* FSNodeFactory.hxx */; };
DCE395F016CB0B5F008DB1E5 /* FSNodeZIP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE395EB16CB0B5F008DB1E5 /* FSNodeZIP.cxx */; }; DCE395F016CB0B5F008DB1E5 /* FSNodeZIP.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCE395EB16CB0B5F008DB1E5 /* FSNodeZIP.cxx */; };
DCE395F116CB0B5F008DB1E5 /* FSNodeZIP.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE395EC16CB0B5F008DB1E5 /* FSNodeZIP.hxx */; }; DCE395F116CB0B5F008DB1E5 /* FSNodeZIP.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCE395EC16CB0B5F008DB1E5 /* FSNodeZIP.hxx */; };
@ -1473,6 +1477,10 @@
DCDFF08020B781B0001227C0 /* DispatchResult.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DispatchResult.hxx; sourceTree = "<group>"; }; DCDFF08020B781B0001227C0 /* DispatchResult.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DispatchResult.hxx; sourceTree = "<group>"; };
DCE1FF3C286B5D5A003568AD /* FSNodeREGULAR.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeREGULAR.hxx; sourceTree = "<group>"; }; DCE1FF3C286B5D5A003568AD /* FSNodeREGULAR.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeREGULAR.hxx; sourceTree = "<group>"; };
DCE1FF3D286B5D5A003568AD /* FSNodeREGULAR.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FSNodeREGULAR.cxx; sourceTree = "<group>"; }; DCE1FF3D286B5D5A003568AD /* FSNodeREGULAR.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FSNodeREGULAR.cxx; sourceTree = "<group>"; };
DCE1FF40286DFB76003568AD /* Joy2BPlusWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joy2BPlusWidget.cxx; sourceTree = "<group>"; };
DCE1FF41286DFB76003568AD /* Joy2BPlusWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Joy2BPlusWidget.hxx; sourceTree = "<group>"; };
DCE1FF44286DFB98003568AD /* Joy2BPlus.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Joy2BPlus.hxx; sourceTree = "<group>"; };
DCE1FF45286DFB98003568AD /* Joy2BPlus.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joy2BPlus.cxx; sourceTree = "<group>"; };
DCE395EA16CB0B5F008DB1E5 /* FSNodeFactory.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeFactory.hxx; sourceTree = "<group>"; }; DCE395EA16CB0B5F008DB1E5 /* FSNodeFactory.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeFactory.hxx; sourceTree = "<group>"; };
DCE395EB16CB0B5F008DB1E5 /* FSNodeZIP.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FSNodeZIP.cxx; sourceTree = "<group>"; }; DCE395EB16CB0B5F008DB1E5 /* FSNodeZIP.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FSNodeZIP.cxx; sourceTree = "<group>"; };
DCE395EC16CB0B5F008DB1E5 /* FSNodeZIP.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeZIP.hxx; sourceTree = "<group>"; }; DCE395EC16CB0B5F008DB1E5 /* FSNodeZIP.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FSNodeZIP.hxx; sourceTree = "<group>"; };
@ -1843,6 +1851,8 @@
DC9616271F817830008A2206 /* FlashWidget.hxx */, DC9616271F817830008A2206 /* FlashWidget.hxx */,
DCCF4ADA14B9433100814FAB /* GenesisWidget.cxx */, DCCF4ADA14B9433100814FAB /* GenesisWidget.cxx */,
DCCF4ADB14B9433100814FAB /* GenesisWidget.hxx */, DCCF4ADB14B9433100814FAB /* GenesisWidget.hxx */,
DCE1FF40286DFB76003568AD /* Joy2BPlusWidget.cxx */,
DCE1FF41286DFB76003568AD /* Joy2BPlusWidget.hxx */,
DCCF47DC14B60DEE00814FAB /* JoystickWidget.cxx */, DCCF47DC14B60DEE00814FAB /* JoystickWidget.cxx */,
DCCF47DD14B60DEE00814FAB /* JoystickWidget.hxx */, DCCF47DD14B60DEE00814FAB /* JoystickWidget.hxx */,
DCCF4B0014BA27EB00814FAB /* KeyboardWidget.cxx */, DCCF4B0014BA27EB00814FAB /* KeyboardWidget.cxx */,
@ -2133,6 +2143,8 @@
DCD3F7C411340AAF00DBA3AE /* Genesis.hxx */, DCD3F7C411340AAF00DBA3AE /* Genesis.hxx */,
DC6DC5E5273C2BED00F64413 /* GlobalKeyHandler.cxx */, DC6DC5E5273C2BED00F64413 /* GlobalKeyHandler.cxx */,
DC6DC5E6273C2BED00F64413 /* GlobalKeyHandler.hxx */, DC6DC5E6273C2BED00F64413 /* GlobalKeyHandler.hxx */,
DCE1FF45286DFB98003568AD /* Joy2BPlus.cxx */,
DCE1FF44286DFB98003568AD /* Joy2BPlus.hxx */,
2DE2DF420627AE07006BEC99 /* Joystick.cxx */, 2DE2DF420627AE07006BEC99 /* Joystick.cxx */,
2DE2DF430627AE07006BEC99 /* Joystick.hxx */, 2DE2DF430627AE07006BEC99 /* Joystick.hxx */,
2DE2DF440627AE07006BEC99 /* Keyboard.cxx */, 2DE2DF440627AE07006BEC99 /* Keyboard.cxx */,
@ -2719,6 +2731,7 @@
2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */, 2D91741309BA90380026E9FF /* ScrollBarWidget.hxx in Headers */,
2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */, 2D91741609BA90380026E9FF /* TabWidget.hxx in Headers */,
DCB60ACC25430FC600A5C1D2 /* FBBackend.hxx in Headers */, DCB60ACC25430FC600A5C1D2 /* FBBackend.hxx in Headers */,
DCE1FF43286DFB76003568AD /* Joy2BPlusWidget.hxx in Headers */,
DCB2ECB01F0AECA3009738A6 /* CartDetector.hxx in Headers */, DCB2ECB01F0AECA3009738A6 /* CartDetector.hxx in Headers */,
2D91741809BA90380026E9FF /* Widget.hxx in Headers */, 2D91741809BA90380026E9FF /* Widget.hxx in Headers */,
2D91741909BA90380026E9FF /* CartUA.hxx in Headers */, 2D91741909BA90380026E9FF /* CartUA.hxx in Headers */,
@ -2727,6 +2740,7 @@
DC2ABA7725A0E178007E57D3 /* StellaDb.hxx in Headers */, DC2ABA7725A0E178007E57D3 /* StellaDb.hxx in Headers */,
DCBD31E92299ADB400567357 /* Rect.hxx in Headers */, DCBD31E92299ADB400567357 /* Rect.hxx in Headers */,
DCBA539925557E2800087DD7 /* UndoHandler.hxx in Headers */, DCBA539925557E2800087DD7 /* UndoHandler.hxx in Headers */,
DCE1FF46286DFB98003568AD /* Joy2BPlus.hxx in Headers */,
2D91741A09BA90380026E9FF /* FSNode.hxx in Headers */, 2D91741A09BA90380026E9FF /* FSNode.hxx in Headers */,
DC2ABA5C259BD544007E57D3 /* CompositeKeyValueRepository.hxx in Headers */, DC2ABA5C259BD544007E57D3 /* CompositeKeyValueRepository.hxx in Headers */,
DC816CF72572F92A00FBCCDA /* json_lib.hxx in Headers */, DC816CF72572F92A00FBCCDA /* json_lib.hxx in Headers */,
@ -3153,6 +3167,7 @@
DCF8621921C9D43300F95F52 /* StaggeredLogger.cxx in Sources */, DCF8621921C9D43300F95F52 /* StaggeredLogger.cxx in Sources */,
E0DCD3AA20A64E96000B614E /* ConvolutionBuffer.cxx in Sources */, E0DCD3AA20A64E96000B614E /* ConvolutionBuffer.cxx in Sources */,
DC6DC5E1273C2A5E00F64413 /* OptionsMenu.cxx in Sources */, DC6DC5E1273C2A5E00F64413 /* OptionsMenu.cxx in Sources */,
DCE1FF47286DFB98003568AD /* Joy2BPlus.cxx in Sources */,
DC843980247B297A00C6A4FC /* CartTVBoyWidget.cxx in Sources */, DC843980247B297A00C6A4FC /* CartTVBoyWidget.cxx in Sources */,
2D91747E09BA90380026E9FF /* CartE7.cxx in Sources */, 2D91747E09BA90380026E9FF /* CartE7.cxx in Sources */,
DC9616321F817830008A2206 /* PointingDeviceWidget.cxx in Sources */, DC9616321F817830008A2206 /* PointingDeviceWidget.cxx in Sources */,
@ -3377,6 +3392,7 @@
DCD6FC8111C281ED005DA767 /* pngwtran.c in Sources */, DCD6FC8111C281ED005DA767 /* pngwtran.c in Sources */,
DCD6FC8211C281ED005DA767 /* pngwutil.c in Sources */, DCD6FC8211C281ED005DA767 /* pngwutil.c in Sources */,
DCD6FC9311C28C6F005DA767 /* PNGLibrary.cxx in Sources */, DCD6FC9311C28C6F005DA767 /* PNGLibrary.cxx in Sources */,
DCE1FF42286DFB76003568AD /* Joy2BPlusWidget.cxx in Sources */,
DC98F35611F5B56200AA520F /* MessageBox.cxx in Sources */, DC98F35611F5B56200AA520F /* MessageBox.cxx in Sources */,
DC9616301F817830008A2206 /* FlashWidget.cxx in Sources */, DC9616301F817830008A2206 /* FlashWidget.cxx in Sources */,
DCFFE59D12100E1400DFA000 /* ComboDialog.cxx in Sources */, DCFFE59D12100E1400DFA000 /* ComboDialog.cxx in Sources */,

View File

@ -828,6 +828,7 @@
<ClCompile Include="..\debugger\gui\GenesisWidget.cxx"> <ClCompile Include="..\debugger\gui\GenesisWidget.cxx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\debugger\gui\Joy2BPlusWidget.cxx" />
<ClCompile Include="..\debugger\gui\JoystickWidget.cxx"> <ClCompile Include="..\debugger\gui\JoystickWidget.cxx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild>
</ClCompile> </ClCompile>
@ -886,6 +887,7 @@
<ClCompile Include="..\emucore\EmulationWorker.cxx" /> <ClCompile Include="..\emucore\EmulationWorker.cxx" />
<ClCompile Include="..\emucore\FBSurface.cxx" /> <ClCompile Include="..\emucore\FBSurface.cxx" />
<ClCompile Include="..\emucore\GlobalKeyHandler.cxx" /> <ClCompile Include="..\emucore\GlobalKeyHandler.cxx" />
<ClCompile Include="..\emucore\Joy2BPlus.cxx" />
<ClCompile Include="..\emucore\Lightgun.cxx" /> <ClCompile Include="..\emucore\Lightgun.cxx" />
<ClCompile Include="..\emucore\MindLink.cxx" /> <ClCompile Include="..\emucore\MindLink.cxx" />
<ClCompile Include="..\emucore\OSystemStandalone.cxx" /> <ClCompile Include="..\emucore\OSystemStandalone.cxx" />
@ -2014,6 +2016,7 @@
<ClInclude Include="..\debugger\gui\GenesisWidget.hxx"> <ClInclude Include="..\debugger\gui\GenesisWidget.hxx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild>
</ClInclude> </ClInclude>
<ClInclude Include="..\debugger\gui\Joy2BPlusWidget.hxx" />
<ClInclude Include="..\debugger\gui\JoystickWidget.hxx"> <ClInclude Include="..\debugger\gui\JoystickWidget.hxx">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug-NoDebugger|x64'">true</ExcludedFromBuild>
</ClInclude> </ClInclude>
@ -2088,6 +2091,7 @@
<ClInclude Include="..\emucore\FBSurface.hxx" /> <ClInclude Include="..\emucore\FBSurface.hxx" />
<ClInclude Include="..\emucore\FrameBufferConstants.hxx" /> <ClInclude Include="..\emucore\FrameBufferConstants.hxx" />
<ClInclude Include="..\emucore\GlobalKeyHandler.hxx" /> <ClInclude Include="..\emucore\GlobalKeyHandler.hxx" />
<ClInclude Include="..\emucore\Joy2BPlus.hxx" />
<ClInclude Include="..\emucore\Lightgun.hxx" /> <ClInclude Include="..\emucore\Lightgun.hxx" />
<ClInclude Include="..\emucore\MindLink.hxx" /> <ClInclude Include="..\emucore\MindLink.hxx" />
<ClInclude Include="..\emucore\OSystemStandalone.hxx" /> <ClInclude Include="..\emucore\OSystemStandalone.hxx" />

View File

@ -1139,6 +1139,11 @@
</ClCompile> </ClCompile>
<ClCompile Include="..\common\FSNodeREGULAR.cxx"> <ClCompile Include="..\common\FSNodeREGULAR.cxx">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
<ClCompile Include="..\emucore\Joy2BPlus.cxx">
<Filter>Source Files\emucore</Filter>
</ClCompile>
<ClCompile Include="..\debugger\gui\Joy2BPlusWidget.cxx">
<Filter>Source Files\debugger</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -2359,6 +2364,11 @@
</ClInclude> </ClInclude>
<ClInclude Include="..\common\FSNodeREGULAR.hxx"> <ClInclude Include="..\common\FSNodeREGULAR.hxx">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
<ClInclude Include="..\emucore\Joy2BPlus.hxx">
<Filter>Header Files\emucore</Filter>
</ClInclude>
<ClInclude Include="..\debugger\gui\Joy2BPlusWidget.hxx">
<Filter>Header Files\debugger</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>