[stella] 02/06: Imported Upstream version 4.7.1

Stephen Kitt skitt at moszumanska.debian.org
Mon Feb 15 16:48:53 UTC 2016


This is an automated email from the git hooks/post-receive script.

skitt pushed a commit to branch master
in repository stella.

commit 757d1b7b4ff2041c565e0b5690a05967c66fd562
Author: Stephen Kitt <steve at sk2.org>
Date:   Mon Feb 15 15:45:16 2016 +0100

    Imported Upstream version 4.7.1
---
 Announce.txt                                       |  22 +-
 Changes.txt                                        |  33 +-
 debian/changelog                                   |   7 +
 docs/graphics/options_video_tv.png                 | Bin 8015 -> 8588 bytes
 docs/index.html                                    |  19 +-
 src/common/EventHandlerSDL2.cxx                    |  12 +-
 src/common/EventHandlerSDL2.hxx                    |   8 +-
 src/common/Version.hxx                             |   6 +-
 src/emucore/CartF8.cxx                             |   5 +-
 src/emucore/DefProps.hxx                           |  53 ++-
 src/emucore/EventHandler.cxx                       | 268 +++++++-------
 src/emucore/EventHandler.hxx                       |  16 +-
 src/emucore/EventJoyHandler.cxx                    |   8 +-
 src/emucore/FrameBuffer.cxx                        |   8 +-
 src/emucore/FrameBuffer.hxx                        |   6 +-
 src/emucore/Settings.cxx                           |   8 +-
 src/emucore/TIA.cxx                                |  72 +++-
 src/emucore/TIA.hxx                                |  11 +-
 src/emucore/stella.pro                             | 136 ++++++-
 src/gui/VideoDialog.cxx                            |  52 ++-
 src/gui/VideoDialog.hxx                            |  11 +-
 src/macosx/Info-Stella.plist                       |   2 +-
 src/macosx/stella.xcodeproj/project.pbxproj        |   7 +-
 .../evdev-joystick/80-stelladaptor-joystick.rules  |   8 +
 src/tools/evdev-joystick/License.txt               | 339 ++++++++++++++++++
 src/tools/evdev-joystick/Makefile                  |  11 +
 src/tools/evdev-joystick/Readme.txt                |  83 +++++
 src/tools/evdev-joystick/evdev-joystick.c          | 390 +++++++++++++++++++++
 src/unix/stella.spec                               |   5 +-
 src/windows/SDL-2.0.3_Alt-Beep.diff                |  29 --
 src/windows/stella.rc                              |   8 +-
 31 files changed, 1352 insertions(+), 291 deletions(-)

diff --git a/Announce.txt b/Announce.txt
index a93884a..66c1e1b 100644
--- a/Announce.txt
+++ b/Announce.txt
@@ -9,7 +9,7 @@
      SSSS     ttt  eeeee llll llll  aaaaa
 
 ===========================================================================
-                Release 4.7 for Linux, MacOSX and Windows
+                Release 4.7.1 for Linux, MacOSX and Windows
 ===========================================================================
 
 The Atari 2600 Video Computer System (VCS), introduced in 1977, was the
@@ -21,30 +21,30 @@ all of your favourite Atari 2600 games again!  Stella was originally
 developed for Linux by Bradford W. Mott, however, it has been ported to a
 number of other platforms and is currently maintained by Stephen Anthony.
 
-This is the 4.7 release of Stella for Linux, Mac OSX and Windows.  The
+This is the 4.7.1 release of Stella for Linux, Mac OSX and Windows.  The
 distributions currently available are:
 
   * Binaries for Windows XP_SP3(*)/Vista/7/8/10 :
-      Stella-4.7-win32.exe   (32-bit EXE installer)
-      Stella-4.7-x64.exe     (64-bit EXE installer)
-      Stella-4.7-windows.zip (32/64 bit versions)
+      Stella-4.7.1-win32.exe   (32-bit EXE installer)
+      Stella-4.7.1-x64.exe     (64-bit EXE installer)
+      Stella-4.7.1-windows.zip (32/64 bit versions)
 
       (*) Note: Support for Windows XP is problematic on some systems,
           and will probably be discontinued in a future release.
 
   * Binary distribution for MacOS X 10.7 and above :
-      Stella-4.7-macosx.dmg (64-bit Intel)
+      Stella-4.7.1-macosx.dmg (64-bit Intel)
 
   * Binary distribution in 32-bit & 64-bit Ubuntu DEB format :
-      stella_4.7-1_i386.deb
-      stella_4.7-1_amd64.deb
+      stella_4.7.1-1_i386.deb
+      stella_4.7.1-1_amd64.deb
 
   * Binary distribution in 32-bit & 64-bit RPM format :
-      stella-4.7-2.i386.rpm
-      stella-4.7-2.x86_64.rpm
+      stella-4.7.1-2.i386.rpm
+      stella-4.7.1-2.x86_64.rpm
 
   * Source code distribution for all platforms :
-      stella-4.7-src.tar.gz
+      stella-4.7.1-src.tar.xz
 
 
 Distribution Site
diff --git a/Changes.txt b/Changes.txt
index 0ac9c44..2c2d2da 100644
--- a/Changes.txt
+++ b/Changes.txt
@@ -12,6 +12,37 @@
                                Release History
 ===========================================================================
 
+4.7 to 4.7.1: (Feb. 13, 2016)
+
+  * Improved TV 'jitter' emulation; the recovery time can now be spread
+    over multiple frame, to simulate a real TV taking multiple frames to
+    recover.  Related to this, added new commandline argument
+    'tv.jitter_recovery' to set the recovery time.  Finally, enabling
+    the jitter effect and the recovery time are now accessible through
+    the UI.  Special thanks to SpiceWare of AtariAge for the initial idea
+    and implementation.
+
+  * Fixed bug with 'Medieval Mayhem' ROMs; the paddle range was set too
+    low, and as a result the number of players couldn't be selected.
+
+  * Fixed bug when using more than two input controllers with the same
+    name; each controller after the second one was named the same as the
+    second one.  This caused the joystick mappings to be lost, since there
+    was only information about two controllers being saved.
+
+  * Indirectly fixed issues with Stelladaptor/2600-daptor devices and
+    paddles having too large of a deadzone in Linux.  Currently, this
+    involves running an external application to set the deadzone,
+    since SDL2 does not yet expose this information.  The program is
+    called 'evdev-joystick', and will be released separately from Stella.
+
+  * Updated internal ROM properties database to ROM-Hunter version 11
+    (thanks go to RomHunter for his tireless research in this area).
+    Related to this, updated the snapshot collection.
+
+-Have fun!
+
+
 4.6.7 to 4.7: (January 25, 2016)
 
   * Improved paddle emulation in several ways:
@@ -50,8 +81,6 @@
     through Coverity for the first time.  I'm proud to say that Stella
     now has a 0.00 defect rate!
 
--Have fun!
-
 
 4.6.6 to 4.6.7: (October 28, 2015)
 
diff --git a/debian/changelog b/debian/changelog
index 5cb24eb..6dbeb49 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+stella (4.7.1-1) stable; urgency=high
+
+  * Version 4.7.1 release
+
+ -- Stephen Anthony <stephena at users.sf.net>  Sat, 13 Feb 2016 17:09:59 -0230
+
+
 stella (4.7-1) stable; urgency=high
 
   * Version 4.7 release
diff --git a/docs/graphics/options_video_tv.png b/docs/graphics/options_video_tv.png
index dca7a83..94b4364 100644
Binary files a/docs/graphics/options_video_tv.png and b/docs/graphics/options_video_tv.png differ
diff --git a/docs/index.html b/docs/index.html
index 755e90e..8bbc4bb 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -10,7 +10,7 @@
   <br><br>
   <center><h2><b>A multi-platform Atari 2600 VCS emulator</b></h2></center>
 
-  <center><h4><b>Release 4.7</b></h4></center>
+  <center><h4><b>Release 4.7.1</b></h4></center>
   <br><br>
 
   <center><h2><b>User's Guide</b></h2></center>
@@ -54,7 +54,7 @@
 
   <br><br><br>
 
-  <center><b>February 1999 - January 2016</b></center>
+  <center><b>February 1999 - February 2016</b></center>
     <center><b>The Stella Team</b></center>
   <center><b><a href="http://stella.sourceforge.net">Stella Homepage</a></b></center>
 
@@ -1450,7 +1450,7 @@
     </tr>
 
     <tr>
-      <td>Toggle TV scanline 'jitter'</td>
+      <td>Toggle TV 'jitter' effect</td>
       <td>Shift-Alt + j</td>
       <td>Shift-Cmd + j</td>
     </tr>
@@ -1855,6 +1855,17 @@
         (vs. an integral stretch which won't necessarily completely fill the screen).</td>
     </tr>
 
+    <tr>
+      <td><pre>-tv.jitter <1|0></pre></td>
+      <td>Enable TV jitter/roll effect, when there are too many or too few scanlines
+        per frame.</td>
+    </tr>
+
+    <tr>
+      <td><pre>-tv.jitter_recovery <1 - 20></pre></td>
+      <td>When TV jitter/roll effect is enabled, determines how long to delay recovery
+        time (recovery spread over multiple frames).</td>
+    </tr>
 
     <tr>
       <td><pre>-tv.filter <1 - 6></pre></td>
@@ -2418,6 +2429,8 @@
       <td valign="top">
         <table border="1" cellpadding="4">
           <tr><th>Item</th><th>Brief description</th><th>For more information,<br>see <a href="#CommandLine">CommandLine</a></th></tr>
+          <tr><td>Jitter/Roll effect</td><td>emulate screen roll with inconsistent scanline count</td><td>-tv.jitter</td></tr>
+          <tr><td>Jitter/Roll recovery</td><td>determines recovery time for screen rolling</td><td>-tv.jitter_recovery</td></tr>
           <tr><td>TV Mode</td><td>disable TV effects, or select TV preset</td><td>-tv.filter</td></tr>
           <tr><td>Scanline Intensity</td><td>sets scanline black-level intensity</td><td>-tv.scanlines</td></tr>
           <tr><td>Scanline Interpolation</td><td>smooth/blend scanlines into image</td><td>-tv.scaninter</td></tr>
diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx
index 0937c92..596a33b 100644
--- a/src/common/EventHandlerSDL2.cxx
+++ b/src/common/EventHandlerSDL2.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: EventHandlerSDL2.cxx 3254 2016-01-23 18:16:09Z stephena $
+// $Id: EventHandlerSDL2.cxx 3273 2016-02-06 21:06:23Z stephena $
 //============================================================================
 
 #include "OSystem.hxx"
@@ -196,11 +196,11 @@ EventHandlerSDL2::JoystickSDL2::JoystickSDL2(int idx)
   myStick = SDL_JoystickOpen(idx);
   if(myStick)
   {
-    // There still seems to be some issue with certain controllers not being
-    // recognized.  In this case, SDL names the controller as "XInput Controller".
-    // This would be fine except it also appends " #x", where x seems to vary.
-    // Obviously this wreaks havoc with the idea that a joystick will always
-    // have the same name.  So we truncate the number.
+    // In Windows, all XBox controllers using the XInput API seem to name
+    // the controller as "XInput Controller".  This would be fine, except
+    // it also appends " #x", where x seems to vary. Obviously this wreaks
+    // havoc with the idea that a joystick will always have the same name.
+    // So we truncate the number.
     const char* sdlname = SDL_JoystickName(myStick);
     const string& desc = BSPF_startsWithIgnoreCase(sdlname, "XInput Controller")
                          ? "XInput Controller" : sdlname;
diff --git a/src/common/EventHandlerSDL2.hxx b/src/common/EventHandlerSDL2.hxx
index 6a79444..239340f 100644
--- a/src/common/EventHandlerSDL2.hxx
+++ b/src/common/EventHandlerSDL2.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: EventHandlerSDL2.hxx 3241 2015-12-29 21:41:53Z stephena $
+// $Id: EventHandlerSDL2.hxx 3270 2016-01-31 03:42:23Z stephena $
 //============================================================================
 
 #ifndef EVENTHANDLER_SDL2_HXX
@@ -29,7 +29,7 @@
   that the Stella core can understand.
 
   @author  Stephen Anthony
-  @version $Id: EventHandlerSDL2.hxx 3241 2015-12-29 21:41:53Z stephena $
+  @version $Id: EventHandlerSDL2.hxx 3270 2016-01-31 03:42:23Z stephena $
 */
 class EventHandlerSDL2 : public EventHandler
 {
@@ -38,10 +38,6 @@ class EventHandlerSDL2 : public EventHandler
       Create a new SDL2 event handler object
     */
     EventHandlerSDL2(OSystem& osystem);
-
-    /**
-      Destructor
-    */
     virtual ~EventHandlerSDL2() = default;
 
   private:
diff --git a/src/common/Version.hxx b/src/common/Version.hxx
index f2e4d44..00c3d73 100644
--- a/src/common/Version.hxx
+++ b/src/common/Version.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: Version.hxx 3263 2016-01-25 20:49:21Z stephena $
+// $Id: Version.hxx 3279 2016-02-13 01:21:28Z stephena $
 //============================================================================
 
 #ifndef VERSION_HXX
@@ -22,7 +22,7 @@
 
 #include <cstdlib>
 
-#define STELLA_VERSION "4.7"
-#define STELLA_BUILD atoi("$Rev: 3263 $" + 6)
+#define STELLA_VERSION "4.7.1"
+#define STELLA_BUILD atoi("$Rev: 3279 $" + 6)
 
 #endif
diff --git a/src/emucore/CartF8.cxx b/src/emucore/CartF8.cxx
index f2a5df4..3131a5f 100644
--- a/src/emucore/CartF8.cxx
+++ b/src/emucore/CartF8.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: CartF8.cxx 3254 2016-01-23 18:16:09Z stephena $
+// $Id: CartF8.cxx 3268 2016-01-30 00:57:04Z stephena $
 //============================================================================
 
 #include <cstring>
@@ -39,7 +39,8 @@ CartridgeF8::CartridgeF8(const uInt8* image, uInt32 size, const string& md5,
      md5 == "75ea60884c05ba496473c23a58edf12f" ||  // 8-in-1 Yars Revenge
      md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" ||  // Snow White
      md5 == "74c8a6f20f8adaa7e05183f796eda796" ||  // Tricade Demo
-     md5 == "9905f9f4706223dadee84f6867ede8e3")    // Challenge
+     md5 == "9905f9f4706223dadee84f6867ede8e3" ||  // Challenge
+     md5 == "3c7a7b3a0a7e6319b2fa0f923ef6c9af")    // Racer Prototype
     ? 0 : 1;
 }
 
diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx
index c5e9e34..a9031b6 100644
--- a/src/emucore/DefProps.hxx
+++ b/src/emucore/DefProps.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: DefProps.hxx 3251 2016-01-22 22:10:55Z stephena $
+// $Id: DefProps.hxx 3280 2016-02-13 17:46:19Z stephena $
 //============================================================================
 
 #ifndef DEF_PROPS_HXX
@@ -27,7 +27,7 @@
   regenerated and the application recompiled.
 */
 
-#define DEF_PROPS_SIZE 3267
+#define DEF_PROPS_SIZE 3286
 
 static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -180,7 +180,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "0b24658714f8dff110a693a2052cc207", "CCE", "C-815", "Seaquest (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "0b33252b680b65001e91a411e56e72e9", "CCE", "C-832", "Atlantis (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "0b4e793c9425175498f5a65a3e960086", "CCE", "", "Kung Fu Master (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "0b55399cf640a2a00ba72dd155a0c140", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-1A, 03205", "Fathom (1983) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
+  { "0b55399cf640a2a00ba72dd155a0c140", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-1A, 03205", "Fathom (1983) (Imagic)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "0b577e63b0c64f9779f315dca8967587", "Videospielkassette - Ariola", "PGP236", "Raketen-Angriff (Ariola) (PAL)", "AKA Missile Control", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "0b8d3002d8f744a753ba434a4d39249a", "Sears Tele-Games, Robert Zdybel", "CX2619 - 49-75159", "Stellar Track (1980) (Sears)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "0bf19e40d5cd8aa5afb33b16569313e6", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118", "Millipede (01-04-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
@@ -251,6 +251,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "10958cd0a1a81d599005f1797ab0e51d", "", "", "Centipede 2k (2000) (PD) (Hack)", "Hack of Centipede", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "10a3cd14e5dcfdde6ff216a14ce7b7dd", "Atari", "CX262, CX2627P", "Human Cannonball (1979) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "10af8728f975aa35a99d0965de8f714c", "Dinatronic", "", "Seaquest (Dinatronic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "10c8cfd8c37522f11d47540ff024e5f9", "Canal 3 - Intellivision", "C 3016", "Demon Attack (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "10eae73a07b3da044b72473d8d366267", "Funvision - Fund. Int'l Co.", "", "Karate (1982) (Funvision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "10f0ecaf962aef1fc28abed870b01b65", "Atari, Paul Donaldson", "", "Bionic Breakthrough (06-22-1984) (Atari) (Prototype)", "Uses the Mindlink Controller", "Prototype", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "", "" }, 
   { "10f62443f1ae087dc588a77f9e8f43e9", "Atari, Carla Meninsky", "CX2637, CX2637P", "Dodge 'Em (1980) (Atari) (PAL) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -273,6 +274,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "12bca8305d5ab8ea51fe1cfd95d7ab0e", "Epyx, Steven A. Baker, Tod Frye, Peter Engelbrite", "80561-00250", "Summer Games (1987) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "12d7e0d6b187889f8d150bf7034d1db2", "", "", "Poker Squares (V0.0e) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "130c5742cd6cbe4877704d733d5b08ca", "Home Vision - Gem International Corp.", "VCS83109", "World End (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "1323c45d660f5a5b6d5ea45c6c4cbe4a", "Canal 3 - Intellivision", "", "Enduro (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "133456269a03e3fdae6cddd65754c50d", "Tigervision - Teldec", "7-006 - 3.60008 VG", "Springer (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "133a4234512e8c4e9e8c5651469d4a09", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "133b56de011d562cbab665968bde352b", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -288,6 +290,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "13a991bc9c2ff03753aeb322d3e3e2e5", "Funvision - Fund. International Co.", "", "Galactic (Funvision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "13aa1f9ac4249947e4af61319d9a08f2", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "13abc32f803165c458bb086fa57195fb", "Christian Samuel", "", "E.T. The Extra-Testical (Christian Samuel) (Hack)", "Hack of E.T. The Extra-Terrestrial", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "13ccc692f111d52fec75d83df16192e2", "Canal 3 - Intellivision", "", "Fishing Derby (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "13d8326bf5648db4dafce45d25e62ddd", "", "", "Atari Logo Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "13dfb095e519a555a5b60b7d9d7169f9", "", "", "Red Line Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "140909d204abd6841c64cdad4d7765b4", "", "", "Moving Blue Ladder Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -439,7 +442,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "205070b6a0d454961dd9196a8e81d877", "", "", "Hangman Monkey Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "2091af29b4e7b86914d79d9aaa4cbd20", "CBS Electronics, Harley H. Puthuff Jr.", "4L1802", "Donkey Kong Junior (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "20ae62fb69c6cc6e8098cca8cd080487", "Zirok", "", "Tennis (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "AKA Foxbat", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
+  { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
   { "20dca534b997bf607d658e77fbb3c0ee", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1002", "Fire Fly (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "20edcc3aa6c189259fa7e2f044a99c49", "Spectravision, Spectravideo", "SA-201", "Gangster Alley (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "211774f4c5739042618be8ff67351177", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684", "Galaxian (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -731,7 +734,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "36c31bb5daeb103f488c66de67ac5075", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Bop a Buggy (1 of 3) (1983) (Arcadia)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 56", "", "30", "", "", "" }, 
   { "36c993dc328933e4dd6374a8ffe224f4", "Gameworld", "133-007", "Bermuda Triangle (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "48", "", "", "" }, 
   { "36e47ed74968c365121eab60f48c6517", "Quelle", "343.373 7", "Master Builder (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "36edef446ab4c2395666efc672b92ed0", "Atari - Axlon", "CX26168", "Off the Wall (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "36edef446ab4c2395666efc672b92ed0", "Atari - Axlon, John Vifian", "CX26168", "Off the Wall (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "36f9a953ebdd9a8be97ccf27a2041903", "", "", "Chinese Character Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "37252757a79dc5b174e3c03d6ea0bdcb", "", "", "Sky Diver (Unknown) (PAL) (4K) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "372bddf113d088bc572f94e98d8249f5", "Bomb - Onbase", "CA285", "Wall-Defender (1983) (Bomb) (PAL)", "AKA Wall Break", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -803,9 +806,10 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "3c4a6f613ca8ba27ce9e43c6c92a3128", "", "", "Qb (V0.04) (Non-Lax Version) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "3c57748c8286cf9e821ecd064f21aaa9", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118", "Millipede (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "3c72ddaf41158fdd66e4f1cb90d4fd29", "Dismac", "", "Comando Suicida (Dismac)", "AKA Chopper Command", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "3c7a7b3a0a7e6319b2fa0f923ef6c9af", "Atari, Joe Gaucher", "", "Racer (1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "3c7a96978f52b2b15426cdd50f2c4048", "", "", "Overhead Adventure Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "3c82e808fe0e6a006dc0c4e714d36209", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "3c853d864a1d5534ed0d4b325347f131", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
+  { "3c853d864a1d5534ed0d4b325347f131", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "3c8e57a246742fa5d59e517134c0b4e6", "Parker Brothers, Rex Bradford, Sam Kjellman", "PB5050", "Star Wars - The Empire Strikes Back (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "3ca51b5c08f5a0ecfb17d0c1ec6d0942", "Atari, James Andreasen - Sears", "CX2654 - 49-75141", "Haunted House (09-28-81) (Atari) (Prototype)", "AKA Mystery Mansion, Graves' Manor, Nightmare Manor", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "3caa902ac0ce4509308990645876426a", "Atari - GCC, Dave Payne", "CX2669, CX2669P", "Vanguard (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -952,7 +956,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "47aef18509051bab493589cb2619170b", "", "", "Stell-A-Sketch (Bob Colbert) (PD)", "Uses Driving, Joystick, or Amiga/Atari ST mouse Controllers", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "47b82d47e491ac7fdb5053a88fccc832", "Atari Freak 1, Franklin Cruz", "", "Asteroid 2 (Atari Freak 1) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "47bb1c677fe7ba5f376372ae7358e790", "", "", "Star Fire (10-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "47cd61f83457a0890de381e478f5cf5f", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-2A, 13205", "Fathom (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
+  { "47cd61f83457a0890de381e478f5cf5f", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-2A, 13205", "Fathom (1983) (Imagic) (PAL)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "481d20ec22e7a63e818d5ef9679d548b", "Atari", "CX26163P", "Freeway Rabbit (32 in 1) (1988) (Atari) (PAL)", "AKA Freeway", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "481f9a742052801cc5f3defb41cb638e", "Jeffry Johnston", "", "Radial Pong - Version 4 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "48287a9323a0ae6ab15e671ac2a87598", "Zellers", "", "Laser Volley (Zellers)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -960,6 +964,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "484b0076816a104875e00467d431c2d2", "Atari", "CX26150", "Q-bert (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "40", "", "", "" }, 
   { "4868a81e1b6031ed66ecd60547e6ec85", "Eric Mooney", "", "Invaders by Erik Mooney (V2.1) (1-3-98) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "4884b1297500bd1243659e43c7e7579e", "Atari - Axlon, Tod Frye", "CX26178", "Save Mary! (10-24-1991) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "4892b85c248131d6a42c66a4163a40d0", "Canal 3 - Intellivision", "", "Tac-Scan (Canal 3)", "Uses the Paddle Controllers", "", "", "", "", "", "", "YES", "PADDLES", "", "YES", "AUTO 60", "", "", "215", "", "" }, 
   { "48bcf2c5a8c80f18b24c55db96845472", "Activision, John Van Ryzin - Ariola", "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720", "H.E.R.O. (1984) (Activision) (PAL) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "48e5c4ae4f2d3b62b35a87bca18dc9f5", "Quelle", "476.774 5", "Bobby geht nach Hause (1983) (Quelle) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "42", "", "", "" }, 
   { "48f18d69799a5f5451a5f0d17876acef", "ZiMAG - Emag - Vidco", "GN-070", "Mysterious Thief, A (1983) (ZiMAG) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
@@ -1043,6 +1048,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "4edb251f5f287c22efc64b3a2d095504", "Atari", "", "Atari VCS Point-of-Purchase ROM (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "4f0071946e80ca68edfdccbac86dcce0", "", "", "Virtual Pet Demo 1 (CRACKERS) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "4f2d47792a06da224ba996c489a87939", "HES - Activision", "223", "Super Action Pak - Pitfall, Barnstorming, Grand Prix, Laser Blast (1988) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "4f32b24869d8c1310fecf039c6424db6", "U.S. Games Corporation, Todd Marshall", "", "3-D Zapper (12-15-82) (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "4f618c2429138e0280969193ed6c107e", "Activision, Alan Miller", "AZ-028, AG-028-04", "Robot Tank (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "4f634893d54e9cabe106e0ec0b7bdcdf", "Retroactive", "", "Qb (2.14) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "4f64d6d0694d9b7a1ed7b0cb0b83e759", "20th Century Fox Video Games, John Russell", "11016", "Revenge of the Beefsteak Tomatoes (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1063,6 +1069,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "5069fecbe4706371f17737b0357cfa68", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Shark Attack (1982) (Apollo) (PAL)", "AKA Lochjaw", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5079bfbc7b8f5770f84215ed2e3bdd1b", "Omegamatrix (2012)", "", "Genesis Button Tester", "", "Homebrew", "", "", "", "", "", "", "GENESIS", "GENESIS", "", "", "", "", "", "", "" }, 
   { "50a410a5ded0fc9aa6576be45a04f215", "Activision, Bob Whitehead - Ariola", "EAG-019, EAG-019-04I - 711 019-715", "Sky Jinks (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "50c7edc9f9dc0369abcdab3b4efeb5e9", "U.S. Games Corporation, Todd Marshall", "", "3-D Zapper (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "50ef88f9a5e0e1e6b86e175362a27fdb", "", "", "Multi-Sprite Game V2.4 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "512e874a240731d7378586a05f28aec6", "Tigervision, Rorke Weigandt - Teldec", "7-005", "Marauder (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5131ab3797fe8c127e3e135b18b4d2c8", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1199,6 +1206,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "5be03a1fe7b2c114725150be04b38704", "Atari, Alan Miller", "CX2642", "Hunt & Score (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, 
   { "5c0227ad63300670a647fcebf595ea37", "Josh", "", "Battle for Naboo (Josh) (Hack)", "Hack of Atlantis", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5c0520c00163915a4336e481ca4e7ef4", "Quelle", "262.794 1", "Wuestenschlacht (1983) (Quelle) (PAL)", "AKA Chopper Command", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "5c19f6da638c4c7c1f98d09e63df43e4", "Canal 3 - Intellivision", "", "Cosmic Ark (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5c1b1aa78b7609d43c5144c3b3b60adf", "", "", "Demo Image Series #8 - Two Marios (Different Interlacing) (27-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5c3a6d27c026f59a96b7af91e8b1bf26", "PlayAround - J.H.M.", "", "PlayAround Demo (PlayAround) (1982)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5c618a50dfa23daac97ba459b9ff5206", "Steve Engelhardt", "", "Berzerk Renegade (2002) (Steve Engelhardt) (Hack)", "Hack of Room of Doom", "Hack", "", "", "", "", "", "", "", "", "", "", "", "29", "", "YES", "" }, 
@@ -1215,6 +1223,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "5d8fb14860c2f198472b233874f6b0c9", "", "", "Boing! (PD) [a2]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5d9592756425192ec621d2613d0e683d", "CCE", "C-839", "Misterious Thief, A (1983) (CCE) [a]", "AKA A Mysterious Thief", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5da8fd0b5ed33a360bff37f8b5d0cd58", "Tron", "", "Pole Position (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "5dae540347cf0a559962d62604ecf750", "Canal 3 - Intellivision", "", "Freeway (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5db9e5bf663cad6bf159bc395f6ead53", "Goliath - Hot Shot", "83-212", "Time Race (1983) (Goliath) (PAL)", "AKA Space Jockey", "", "", "", "", "", "", "", "", "", "", "", "", "48", "256", "", "" }, 
   { "5dccf215fdb9bbf5d4a6d0139e5e8bcb", "Froggo", "FG1009", "Sea Hunt (1987) (Froggo)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5de8803a59c36725888346fdc6e7429d", "Atari, John Dunn - Sears", "CX2631 - 49-75152", "Superman (1979) (Atari) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1236,6 +1245,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "5f316973ffd107f7ab9117e93f50e4bd", "", "", "Commando Raid (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5f39353f7c6925779b0169a87ff86f1e", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694", "Pole Position (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5f46d1ff6d7cdeb4b09c39d04dfd50a1", "Atari, Gary Palmer", "CX2661P", "Fun with Numbers (1980) (Atari) (PAL)", "AKA Basic Math", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "5f560837396387455c9dcb05cdd4b053", "Canal 3 - Intellivision", "", "Eggomania (Canal 3)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, 
   { "5f681403b1051a0822344f467b05a94d", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "5f69453a69f21dc49697a80d2e933491", "", "", "Star Fire - Reduced Flickering (06-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "5f708ca39627697e859d1c53f8d8d7d2", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1450,6 +1460,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "6e5d5ba193d2540aec2e847aafb2a5fb", "Retroactive", "", "Qb (2.14) (Retroactive) (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "6e7ed74082f39ad4166c823765a59909", "", "", "Poker Squares (V0.14) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "6ed5012793f5ddf4353a48c11ea9b8d3", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Down on the Line (3 of 3) (1983) (Arcadia)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "PADDLES", "", "01 70", "", "30", "", "", "" }, 
+  { "6ed6bda5c42b2eb7a21c54e5b3ace3e3", "Canal 3 - Intellivision", "", "Ice Hockey (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "6efe876168e2d45d4719b6a61355e5fe", "Bit Corporation", "PG207", "Mission 3,000 A.D. (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "6f084daf265599f65422ef4173b69bc7", "", "", "Music Kit (V2.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "6f2aaffaaf53d23a28bf6677b86ac0e3", "U.S. Games Corporation, Garry Kitchen - Vidtec", "VC1001", "Space Jockey (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1546,8 +1557,8 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "75e276ba12dc4504659481c31345703a", "Arcadia Corporation, Kevin Norman", "AR-4103", "Killer Satellites (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "75e8d8b9e9c5c67c2226dbfd77dcfa7d", "", "", "2600 Digital Clock (V b1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "75ea128ba96ac6db8edf54b071027c4e", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "75ea60884c05ba496473c23a58edf12f", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
-  { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "75ea60884c05ba496473c23a58edf12f", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) (PAL) [a]", "ROM must be started in bank 0", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
+  { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "7608abdfd9b26f4a0ecec18b232bea54", "Atari", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "7623a639a6fffdb246775fe2eabc8d01", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "7628d3cadeee0fd2e41e68b3b8fbe229", "Atari", "CX26163P", "Fishing Derby (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1689,6 +1700,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "8055b9c2622136fd91edfea6df642daf", "Activision", "", "Unknown Activision Game #1 (1983) (Activision) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "805f9a32ef97ac25f999a25014dc5c23", "SnailSoft", "", "Balthazar (SnailSoft)", "AKA Babylon 5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "8068e07b484dfd661158b3771d6621ca", "Epyx, Steven A. Baker, Peter Engelbrite", "80561-00286", "California Games (1988) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "807841df228ee8aab0a06ee639ce5a8a", "Coleco, Michael Green, Anthony R. Henderson, Gary Littleton", "2455", "Turbo (1982) (Coleco) (Prototype)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "807a8ff6216b00d52aba2dfea5d8d860", "John Payson", "", "Strat-O-Gems Deluxe (2005) (J. Payson)", "Uses the AtariVox controller", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" }, 
   { "808c3b1e60ee0e7c65205fa4bd772221", "CCE", "", "Defender (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "80cd42881e670e4b74a9ccd10d0d7b2e", "20th Century Fox Video Games - Sirius, Ed Hodapp", "11004", "Deadly Duck (1982) (20th Century Fox) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -1983,9 +1995,9 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "98ea10c47c13f1b3306c7b13db304865", "", "", "Jam Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "98ec0fa4199b9c01f7b8fa3732e43372", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "98ef1593624b409b9fb83a1c272a0aa7", "CCE", "C-831", "Cosmic Ark (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "98f63949e656ff309cefa672146dc1b8", "Atari - Axlon", "CX26168", "Off the Wall (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "98f63949e656ff309cefa672146dc1b8", "Atari - Axlon, John Vifian", "CX26168", "Off the Wall (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "98fa3ad778a668a79449350de4b3b95b", "", "", "Thrust (V1.1) (2000) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "9905f9f4706223dadee84f6867ede8e3", "HES", "", "Challenge (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "9905f9f4706223dadee84f6867ede8e3", "HES", "", "Challenge (HES) (PAL)", "ROM must be started in bank 0", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "9912d06eea42200a198dd3e2be18c601", "Imagic, Michael Greene", "IA3312", "No Escape! (1982) (Imagic) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "991d57bbcd529ad62925098e0aec1241", "", "", "Gunfight 2600 - The Final Kernel (MP) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "9945a22f60bbaf6d04a8d73b3cf3db75", "Activision, Dan Kitchen", "EAX-039-04B, EAX-039-04I", "Kung-Fu Master (1987) (Activision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2130,7 +2142,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "a5262fe6d01d6a1253692682a47f79dd", "", "", "JKH Text Scrolling Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "a537879d8e82e1061d3ad800479d3b84", "Andrew Wallace", "", "Brooni (2001) (Andrew Wallace) (PD) (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "a539b9fd1ba57e46442b3e9351e6383b", "", "", "River Raid (208 in 1) (Unknown) (PAL) (Hack) [a]", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "a56b642a3d3ab9bbeee63cd44eb73216", "Carrere Video, Sylvia Day, Henry Will IV - Teldec", "USC2001", "Gopher (1983) (Carrere Video) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "a56b642a3d3ab9bbeee63cd44eb73216", "Carrere Video, Sylvia Day, Henry Will IV - Teldec", "USC2001", "Gopher (1983) (Carrere Video) (PAL)", "AKA Vossicht Whlmaus!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "a5855d73d304d83ef07dde03e379619f", "Atari, David Crane", "", "Boggle (08-07-1978) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "27", "215", "YES", "" }, 
   { "a58b11148c18d85e4c2aef4ff46ade67", "", "", "Video Chess (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "a591b5e8587aae0d984a0f6fe2cc7d1c", "", "", "Globe Trotter Demo (24-03-2003) (Weston)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2242,6 +2254,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "aed0b7bd64cc384f85fdea33e28daf3b", "Atari, Alan J. Murphy, Robert C. Polaro", "CX2666", "RealSports Volleyball (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "aed82052f7589df05a3f417bb4e45f0c", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "af6ab88d3d7c7417db2b3b3c70b0da0a", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, 
+  { "af6f3e9718bccfcd8afb421f96561a34", "Atari, Tod Frye", "CX2695", "Xevious (11-08-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "afb3bc45c6a82739cc82582127cd96e6", "Atari, John Howard Palevich", "CX26151, CX26151P", "Dungeon (11-22-1985) (Atari) (Prototype)", "Dark Chambers Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "afc194534c1b346609ef05eff6d3cef6", "Jone Yuan Telephonic Enterprise Co", "", "Boxing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "afd2cf258d51ae4965ee21abba3627ab", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, 
@@ -2307,6 +2320,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "b4f05e544834d0238a0c263491775edf", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "b4f31ea8a6cc9f1fd4d5585a87c3b487", "Mystique - American Multiple Industries, Joel H. Martin", "", "Beat 'Em & Eat 'Em (1982) (Mystique) (PAL)", "Uses the Paddle Controller (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, 
   { "b4f87ce75f7329c18301a2505fe59cd3", "Videospielkassett - Ariola", "PGP232", "Autorennen (Ariola) (PAL)", "AKA Grand Prix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "b50ae55aac93fbed258bc5a873edd2cb", "Recompile", "", "E.T. The Extra-Terrestrial (Recompile) (Hack)", "www.neocomputer.org/projects/et", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "b5110f55ed99d5279f18266d001a8cd5", "Eckhard Stolberg", "", "Auto-mobile Demo (2001) (Eckhard Stolberg)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "b56264f738b2eb2c8f7cf5a2a75e5fdc", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694, CX2694P", "Pole Position (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "b5657d4c1c732fbb6af150668464247f", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2383,6 +2397,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "bc6432cbed32c695658514c4eb41d905", "Manuel Polik", "", "Star Fire (MP) (2002) (PD)", "Won't work with Stella < V1.2", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "bc703ea6afb20bc089f04d8c9d79a2bd", "", "", "Gunfight 2600 - Not mergeable with Colbert wizardry... (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "bc97d544f1d4834cc72bcc92a37b8c1b", "", "", "Sky Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "bcb31f22856b0028c00d12f0e4c0a952", "Canal 3 - Intellivision", "", "Thunderground (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "bccb4e2cfad5efc93f6d55dc992118ce", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "bce4c291d0007f16997faa5c4db0a6b8", "Quelle", "292.651 7", "Weltraumtunnel (1983) (Quelle) (PAL)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "bce93984b920e9b56cf24064f740fe78", "Atari, Carol Shaw", "CX26163P", "Checkers (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2513,7 +2528,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "c6cedb25b7d390b580ea8edb614b168b", "", "", "Star Fire - Radar Completed (22-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "c6d48c6ae6461e0e82753540a985ac9e", "Ed Federmeyer", "", "Edtris (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "c6d7fe7a46dc46f962fe8413c6f53fc9", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype) [a]", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "26", "", "", "" }, 
-  { "c6db733e0b108c2580a1d65211f06dbf", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (07-09-1982) (Atari) (Prototype)", "AKA Foxbat", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
+  { "c6db733e0b108c2580a1d65211f06dbf", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (07-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
   { "c738fc3f5aae1e8f86f7249f6c82ac81", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari) (16K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, 
   { "c73ae5ba5a0a3f3ac77f0a9e14770e73", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger, The (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, 
   { "c745487828a1a6a743488ecebc55ad44", "Rainbow Vision - Suntek", "SS-002", "Galactic (Rainbow Vision) (PAL)", "AKA The Challenge of.... Nexar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2522,7 +2537,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "c77c35a6fc3c0f12bf9e8bae48cba54b", "Xonox - K-Tel Software, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, 
   { "c77d3b47f2293e69419b92522c6f6647", "Panda", "101", "Tank Brigade (1983) (Panda)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, 
   { "c7900a7fe95a47eef3b325072ad2c232", "Larry Petit", "", "Super Congo Bongo (2003) (Larry Petit) (Hack)", "Hack of Bongo", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "c7d5819b26b480a49eb26aeb63cc831e", "Bit Corporation", "PGP210", "Ice Hockey (4 Game in One Light Green) (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "c7d5819b26b480a49eb26aeb63cc831e", "Bit Corporation", "PGP210", "Ice Hockey (4 Game in One Light Green) (1983) (BitCorp) (PAL)", "AKA Hockey, Hockey", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "c7e43ad79c5e5c029d9f5ffde23e32cf", "", "", "PAL-NTSC Detector (15-11-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "c7eab66576696e11e3c11ffff92e13cc", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "c7f13ef38f61ee2367ada94fdcc6d206", "Parker Brothers, Joe Gaucher", "PB5370", "Popeye (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
@@ -2622,6 +2637,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "cfb3260c603b0341d49ddfc94051ec10", "Dactari - Milmar", "", "Boxing (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cfb83a3b0513acaf8be4cae1512281dc", "Starpath Corporation", "", "Going-Up (1983) (Starpath) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cfc226d04d7490b69e155abd7741e98c", "Atari, Matthew L. Hubbard", "CX26159", "Double Dunk (1989) (Atari) (PAL)", "AKA Super Basketball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "cfce5596a7e8ca13529e9804cad693ef", "Canal 3 - Intellivision", "", "Tennis (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cfd6a8b23d12b0462baf6a05ef347cd8", "Activision, Larry Kaplan", "AX-006", "Bridge (1980) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cfdb4d0427a1ea8085c6bc6eb90259d8", "", "", "Gunfight 2600 - Release Candidate (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cfe2185f84ce8501933beb5c5e1fd053", "", "", "Football (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2632,7 +2648,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "cff578e5c60de8caecbee7f2c9bbb57b", "George Veeder", "", "Suicide Adventure (George Veeder) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "cff9950d4e650094f65f40d179a9882d", "Paul Slocum", "", "Mr. Roboto (Paul Slocum) (Hack)", "Hack of Berzerk", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "cfffc4b97d01cc3e7b9f47575f7b11ec", "Xonox - K-Tel Software, Anthony R. Henderson", "99007, 6240", "Tomarc the Barbarian (1983) (Xonox) (PAL60)", "Genesis controller (B is jump and throw, C switches between players)", "Hack of Tomarc the Barbarian", "", "", "", "", "", "", "GENESIS", "", "", "", "PAL60", "", "", "", "" }, 
-  { "d00f6f8ba89559e4b20972a478fc0370", "Spiceware", "SW-01", "Medieval Mayhem (PAL)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 50", "", "", "", "", "" }, 
+  { "d00f6f8ba89559e4b20972a478fc0370", "Spiceware", "SW-01", "Medieval Mayhem (PAL)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "AUTO 55", "", "", "", "", "" }, 
   { "d010e3dfe7366e47561c088079a59439", "Retroactive", "", "Qb (V0.10) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "d026716b3c5be2c951cc4c064317c524", "", "", "Fu Kung! (V0.06) (14-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -2896,7 +2912,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "e2b682f6e6d76b35c180c7d847e93b4f", "", "", "Dodge Demo 4 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "e2c1b60eaa8eda131632d73e4e0c146b", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-04-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "e2c89f270f72cd256ed667507fa038a2", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "e2ca84a2bb63d1a210ebb659929747a9", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
+  { "e2ca84a2bb63d1a210ebb659929747a9", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys) (PAL)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "e2eccbbe963f80f291cb1f18803bf557", "Atari, Joe Decuir, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "40", "256", "", "" }, 
   { "e314b42761cd13c03def744b4afc7b1b", "Activision, David Crane, Dan Kitchen", "AZ-108-04", "Ghostbusters (1985) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "e34c236630c945089fcdef088c4b6e06", "Activision, David Crane - Ariola", "EAB-035-04 - 711 035-720", "Pitfall II (1983) (Activision) (PAL)", "Lost Caverns", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -3049,6 +3065,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "ee67dc0b01746372d2b983d88f48e24f", "", "", "Scroller Demo (02-01-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "ee681f566aad6c07c61bbbfc66d74a27", "Activision", "", "Unknown Activision Game #1 (10-29-1982) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "ee6cbedf6c0aac90faa0a8dbc093ffbe", "CCE", "", "My Golf (CCE) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "ee8027d554d14c8d0b86f94737d2fdcc", "Canal 3 - Intellivision", "", "Yars' Revenge (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "ee84bdc5dae268e227e407c7b5e6b6b7", "", "", "Marilyn Monroe Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "ee9caee4eb958284fb10c277b14537f1", "Carrere Video, Garry Kitchen - Teldec", "USC1001", "Space Jockey (1983) (Carrere Video) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "59", "", "", "" }, 
   { "eea0da9b987d661264cce69a7c13c3bd", "Coleco", "2454", "Zaxxon (1982) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -3085,6 +3102,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "f0e0addc07971561ab80d9abe1b8d333", "Imagic, Rob Fulop", "720000-200, 720101-1B, 720101-1C, IA3200, IA3200C, IX-006-04", "Demon Attack (1982) (Imagic)", "AKA Death from Above", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f10e3f45fb01416c87e5835ab270b53a", "Video Game Cartridge - Ariola", "TP-607", "Ski Run (Ariola) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f1127ade54037236e75a133b1dfc389d", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
+  { "f11cfab087fcbd930ab8b0becc5b2e5a", "Canal 3 - Intellivision", "", "River Raid (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f12afbffa080dd3b2801dd14d4837cf6", "Atari, Michael Kosaka, Peter C. Niday, Robert Vieira", "CX26110", "Crystal Castles (01-04-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, 
   { "f137211537438b1fce3d811baef25457", "", "", "Incoming (02-10-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f1489e27a4539a0c6c8529262f9f7e18", "Champ Games", "", "Lady Bug (PAL60)", "", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, 
@@ -3106,6 +3124,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "f240ba9f8092d2e8a4c7d82c554bf509", "Quelle", "463.860 7", "Strahlen der Teufelsvoegel (1983) (Quelle) (PAL)", "AKA Atlantis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f280976d69d6e27a48506bd6bad11dcd", "Atari, Larry Kaplan", "CX2664, CX2664P", "Brain Games (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, 
   { "f283cc294ece520c2badf9da20cfc025", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, 
+  { "f28c07767b3e90a2689ade5b5e305874", "Canal 3 - Intellivision", "C 3014", "Keystone Kapers (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f2d40c70cf3e1d03bc112796315888d9", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari) (PAL)", "", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, 
   { "f2d4d6187903cac2d5ea8ed90dad120d", "Digimax", "", "River Raid II (Digimax)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f2e4fb2d3600c0f76d05864e658cc57b", "", "", "Marble Craze (Kernel) (17-02-2002) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
@@ -3183,7 +3202,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
   { "f7d6592dcb773c81c278140ed4d01669", "Activision, David Crane, Dan Kitchen", "EAG-108-04, EAZ-108-04B", "Ghostbusters (1985) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f7e07080ed8396b68f2e5788a5c245e2", "Video Game Cartridge - Ariola", "TP-617", "Farmyard Fun (Ariola)", "AKA Play Farm", "", "", "", "", "", "", "", "", "", "", "", "", "33", "217", "", "" }, 
   { "f7f50d9c9d28bcc9f7d3075668b7ac89", "Activision, David Crane - Ariola", "EAG-008, PAG-008, EAG-008-04I - 711 008-720", "Laser Blast (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
-  { "f7fac15cf54b55c5597718b6742dbec2", "Spiceware", "SW-01", "Medieval Mayhem (NTSC)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 50", "", "", "", "", "" }, 
+  { "f7fac15cf54b55c5597718b6742dbec2", "Spiceware", "SW-01", "Medieval Mayhem (NTSC)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "AUTO 55", "", "", "", "", "" }, 
   { "f802fa61011dd9eb6f80b271bac479d0", "Suntek", "SS-023", "Mole Hunter (Suntek) (PAL)", "AKA Topy", "", "", "", "", "", "", "", "", "", "", "", "", "60", "", "", "" }, 
   { "f80cf77164079d774b9b0fae33dffca9", "", "", "Fu Kung! (V0.15) (Negative Version) (05-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
   { "f8240e62d8c0a64a61e19388414e3104", "Activision, Steve Cartwright", "AX-013", "Barnstorming (1982) (Activision)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, 
diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx
index e027d10..fe8f6ef 100644
--- a/src/emucore/EventHandler.cxx
+++ b/src/emucore/EventHandler.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: EventHandler.cxx 3254 2016-01-23 18:16:09Z stephena $
+// $Id: EventHandler.cxx 3270 2016-01-31 03:42:23Z stephena $
 //============================================================================
 
 #include <sstream>
@@ -82,18 +82,6 @@ EventHandler::EventHandler(OSystem& osystem)
 }
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-EventHandler::~EventHandler()
-{
-  // Free strings created with strdup
-  for(uInt32 i = 0; i < kEmulActionListSize; ++i)
-    if(ourEmulActionList[i].key)
-      free(ourEmulActionList[i].key);
-  for(uInt32 i = 0; i < kMenuActionListSize; ++i)
-    if(ourMenuActionList[i].key)
-      free(ourMenuActionList[i].key);
-}
-
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 void EventHandler::initialize()
 {
   // Make sure the event/action mappings are correctly set,
@@ -249,7 +237,7 @@ void EventHandler::poll(uInt64 time)
 void EventHandler::handleTextEvent(char text)
 {
   // Text events are only used in GUI mode
-  if(myOverlay != nullptr)
+  if(myOverlay)
     myOverlay->handleTextEvent(text);
 }
 
@@ -567,7 +555,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state)
         handleEvent(myKeyTable[key][kEmulationMode], state);
       break;
     default:
-      if(myOverlay != nullptr)
+      if(myOverlay)
         myOverlay->handleKeyEvent(key, mod, state);
       break;
   }
@@ -635,7 +623,7 @@ void EventHandler::handleJoyEvent(int stick, int button, uInt8 state)
       // Determine which mode we're in, then send the event to the appropriate place
       if(myState == S_EMULATE)
         handleEvent(joy->btnTable[button][kEmulationMode], state);
-      else if(myOverlay != nullptr)
+      else if(myOverlay)
         myOverlay->handleJoyEvent(stick, button, state);
       break;  // Regular button
 
@@ -738,7 +726,7 @@ void EventHandler::handleJoyAxisEvent(int stick, int axis, int value)
           }
         }
       }
-      else if(myOverlay != nullptr)
+      else if(myOverlay)
       {
         // First, clamp the values to simulate digital input
         // (the only thing that the underlying code understands)
@@ -779,7 +767,7 @@ void EventHandler::handleJoyAxisEvent(int stick, int axis, int value)
       // enum; subtracting four gives us Controller 0 and 1
       if(axis < 2)
         myEvent.set(SA_Axis[joy->type-4][axis], value);
-      break;  // 26000daptor axis
+      break;  // 2600-daptor axis
     default:
       break;
   }
@@ -805,7 +793,7 @@ void EventHandler::handleJoyHatEvent(int stick, int hat, int value)
     handleEvent(joy->hatTable[hat][EVENT_HATLEFT][kEmulationMode],
                 value & EVENT_HATLEFT_M);
   }
-  else if(myOverlay != nullptr)
+  else if(myOverlay)
   {
     if(value == EVENT_HATCENTER_M)
       myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATCENTER);
@@ -1154,8 +1142,7 @@ void EventHandler::setActionMappings(EventMode mode)
   for(int i = 0; i < listsize; ++i)
   {
     Event::Type event = list[i].event;
-    free(list[i].key);  list[i].key = nullptr;
-    list[i].key = strdup("None");
+    list[i].key = "None";
     string key = "";
     for(int j = 0; j < KBDK_LAST; ++j)   // key mapping
     {
@@ -1262,10 +1249,7 @@ void EventHandler::setActionMappings(EventMode mode)
       key = prepend + ", " + key;
 
     if(key != "")
-    {
-      free(list[i].key);  list[i].key = nullptr;
-      list[i].key = strdup(key.c_str());
-    }
+      list[i].key = key;
   }
 }
 
@@ -2088,131 +2072,131 @@ uInt32 EventHandler::resetEventsCallback(uInt32 interval, void* param)
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 EventHandler::ActionList EventHandler::ourEmulActionList[kEmulActionListSize] = {
-  { Event::ConsoleSelect,          "Select",                   0, true  },
-  { Event::ConsoleReset,           "Reset",                    0, true  },
-  { Event::ConsoleColor,           "Color TV",                 0, true  },
-  { Event::ConsoleBlackWhite,      "Black & White TV",         0, true  },
-  { Event::ConsoleColorToggle,     "Swap Color / B&W TV",      0, true  },
-  { Event::ConsoleLeftDiffA,       "P0 Difficulty A",          0, true  },
-  { Event::ConsoleLeftDiffB,       "P0 Difficulty B",          0, true  },
-  { Event::ConsoleLeftDiffToggle,  "P0 Swap Difficulty",       0, true  },
-  { Event::ConsoleRightDiffA,      "P1 Difficulty A",          0, true  },
-  { Event::ConsoleRightDiffB,      "P1 Difficulty B",          0, true  },
-  { Event::ConsoleRightDiffToggle, "P1 Swap Difficulty",       0, true  },
-  { Event::SaveState,              "Save State",               0, false },
-  { Event::ChangeState,            "Change State",             0, false },
-  { Event::LoadState,              "Load State",               0, false },
-  { Event::TakeSnapshot,           "Snapshot",                 0, false },
-  { Event::Fry,                    "Fry cartridge",            0, false },
-  { Event::VolumeDecrease,         "Decrease volume",          0, false },
-  { Event::VolumeIncrease,         "Increase volume",          0, false },
-  { Event::PauseMode,              "Pause",                    0, false },
-  { Event::MenuMode,               "Enter options menu mode",  0, false },
-  { Event::CmdMenuMode,            "Toggle command menu mode", 0, false },
-  { Event::DebuggerMode,           "Toggle debugger mode",     0, false },
-  { Event::LauncherMode,           "Enter ROM launcher",       0, false },
-  { Event::Quit,                   "Quit",                     0, false },
-
-  { Event::JoystickZeroUp,      "P0 Joystick Up",              0, true  },
-  { Event::JoystickZeroDown,    "P0 Joystick Down",            0, true  },
-  { Event::JoystickZeroLeft,    "P0 Joystick Left",            0, true  },
-  { Event::JoystickZeroRight,   "P0 Joystick Right",           0, true  },
-  { Event::JoystickZeroFire,    "P0 Joystick Fire",            0, true  },
-  { Event::JoystickZeroFire5,   "P0 Booster Top Trigger",      0, true  },
-  { Event::JoystickZeroFire9,   "P0 Booster Handle Grip",      0, true  },
-
-  { Event::JoystickOneUp,       "P1 Joystick Up",              0, true  },
-  { Event::JoystickOneDown,     "P1 Joystick Down",            0, true  },
-  { Event::JoystickOneLeft,     "P1 Joystick Left",            0, true  },
-  { Event::JoystickOneRight,    "P1 Joystick Right",           0, true  },
-  { Event::JoystickOneFire,     "P1 Joystick Fire",            0, true  },
-  { Event::JoystickOneFire5,    "P1 Booster Top Trigger",      0, true  },
-  { Event::JoystickOneFire9,    "P1 Booster Handle Grip",      0, true  },
-
-  { Event::PaddleZeroAnalog,    "Paddle 0 Analog",             0, true  },
-  { Event::PaddleZeroDecrease,  "Paddle 0 Decrease",           0, true  },
-  { Event::PaddleZeroIncrease,  "Paddle 0 Increase",           0, true  },
-  { Event::PaddleZeroFire,      "Paddle 0 Fire",               0, true  },
-
-  { Event::PaddleOneAnalog,     "Paddle 1 Analog",             0, true  },
-  { Event::PaddleOneDecrease,   "Paddle 1 Decrease",           0, true  },
-  { Event::PaddleOneIncrease,   "Paddle 1 Increase",           0, true  },
-  { Event::PaddleOneFire,       "Paddle 1 Fire",               0, true  },
-
-  { Event::PaddleTwoAnalog,     "Paddle 2 Analog",             0, true  },
-  { Event::PaddleTwoDecrease,   "Paddle 2 Decrease",           0, true  },
-  { Event::PaddleTwoIncrease,   "Paddle 2 Increase",           0, true  },
-  { Event::PaddleTwoFire,       "Paddle 2 Fire",               0, true  },
-
-  { Event::PaddleThreeAnalog,   "Paddle 3 Analog",             0, true  },
-  { Event::PaddleThreeDecrease, "Paddle 3 Decrease",           0, true  },
-  { Event::PaddleThreeIncrease, "Paddle 3 Increase",           0, true  },
-  { Event::PaddleThreeFire,     "Paddle 3 Fire",               0, true  },
-
-  { Event::KeyboardZero1,       "P0 Keyboard 1",               0, true  },
-  { Event::KeyboardZero2,       "P0 Keyboard 2",               0, true  },
-  { Event::KeyboardZero3,       "P0 Keyboard 3",               0, true  },
-  { Event::KeyboardZero4,       "P0 Keyboard 4",               0, true  },
-  { Event::KeyboardZero5,       "P0 Keyboard 5",               0, true  },
-  { Event::KeyboardZero6,       "P0 Keyboard 6",               0, true  },
-  { Event::KeyboardZero7,       "P0 Keyboard 7",               0, true  },
-  { Event::KeyboardZero8,       "P0 Keyboard 8",               0, true  },
-  { Event::KeyboardZero9,       "P0 Keyboard 9",               0, true  },
-  { Event::KeyboardZeroStar,    "P0 Keyboard *",               0, true  },
-  { Event::KeyboardZero0,       "P0 Keyboard 0",               0, true  },
-  { Event::KeyboardZeroPound,   "P0 Keyboard #",               0, true  },
-
-  { Event::KeyboardOne1,        "P1 Keyboard 1",               0, true  },
-  { Event::KeyboardOne2,        "P1 Keyboard 2",               0, true  },
-  { Event::KeyboardOne3,        "P1 Keyboard 3",               0, true  },
-  { Event::KeyboardOne4,        "P1 Keyboard 4",               0, true  },
-  { Event::KeyboardOne5,        "P1 Keyboard 5",               0, true  },
-  { Event::KeyboardOne6,        "P1 Keyboard 6",               0, true  },
-  { Event::KeyboardOne7,        "P1 Keyboard 7",               0, true  },
-  { Event::KeyboardOne8,        "P1 Keyboard 8",               0, true  },
-  { Event::KeyboardOne9,        "P1 Keyboard 9",               0, true  },
-  { Event::KeyboardOneStar,     "P1 Keyboard *",               0, true  },
-  { Event::KeyboardOne0,        "P1 Keyboard 0",               0, true  },
-  { Event::KeyboardOnePound,    "P1 Keyboard #",               0, true  },
-
-  { Event::Combo1,              "Combo 1",                     0, false },
-  { Event::Combo2,              "Combo 2",                     0, false },
-  { Event::Combo3,              "Combo 3",                     0, false },
-  { Event::Combo4,              "Combo 4",                     0, false },
-  { Event::Combo5,              "Combo 5",                     0, false },
-  { Event::Combo6,              "Combo 6",                     0, false },
-  { Event::Combo7,              "Combo 7",                     0, false },
-  { Event::Combo8,              "Combo 8",                     0, false },
-  { Event::Combo9,              "Combo 9",                     0, false },
-  { Event::Combo10,             "Combo 10",                    0, false },
-  { Event::Combo11,             "Combo 11",                    0, false },
-  { Event::Combo12,             "Combo 12",                    0, false },
-  { Event::Combo13,             "Combo 13",                    0, false },
-  { Event::Combo14,             "Combo 14",                    0, false },
-  { Event::Combo15,             "Combo 15",                    0, false },
-  { Event::Combo16,             "Combo 16",                    0, false }
+  { Event::ConsoleSelect,          "Select",                   "", true  },
+  { Event::ConsoleReset,           "Reset",                    "", true  },
+  { Event::ConsoleColor,           "Color TV",                 "", true  },
+  { Event::ConsoleBlackWhite,      "Black & White TV",         "", true  },
+  { Event::ConsoleColorToggle,     "Swap Color / B&W TV",      "", true  },
+  { Event::ConsoleLeftDiffA,       "P0 Difficulty A",          "", true  },
+  { Event::ConsoleLeftDiffB,       "P0 Difficulty B",          "", true  },
+  { Event::ConsoleLeftDiffToggle,  "P0 Swap Difficulty",       "", true  },
+  { Event::ConsoleRightDiffA,      "P1 Difficulty A",          "", true  },
+  { Event::ConsoleRightDiffB,      "P1 Difficulty B",          "", true  },
+  { Event::ConsoleRightDiffToggle, "P1 Swap Difficulty",       "", true  },
+  { Event::SaveState,              "Save State",               "", false },
+  { Event::ChangeState,            "Change State",             "", false },
+  { Event::LoadState,              "Load State",               "", false },
+  { Event::TakeSnapshot,           "Snapshot",                 "", false },
+  { Event::Fry,                    "Fry cartridge",            "", false },
+  { Event::VolumeDecrease,         "Decrease volume",          "", false },
+  { Event::VolumeIncrease,         "Increase volume",          "", false },
+  { Event::PauseMode,              "Pause",                    "", false },
+  { Event::MenuMode,               "Enter options menu mode",  "", false },
+  { Event::CmdMenuMode,            "Toggle command menu mode", "", false },
+  { Event::DebuggerMode,           "Toggle debugger mode",     "", false },
+  { Event::LauncherMode,           "Enter ROM launcher",       "", false },
+  { Event::Quit,                   "Quit",                     "", false },
+
+  { Event::JoystickZeroUp,      "P0 Joystick Up",              "", true  },
+  { Event::JoystickZeroDown,    "P0 Joystick Down",            "", true  },
+  { Event::JoystickZeroLeft,    "P0 Joystick Left",            "", true  },
+  { Event::JoystickZeroRight,   "P0 Joystick Right",           "", true  },
+  { Event::JoystickZeroFire,    "P0 Joystick Fire",            "", true  },
+  { Event::JoystickZeroFire5,   "P0 Booster Top Trigger",      "", true  },
+  { Event::JoystickZeroFire9,   "P0 Booster Handle Grip",      "", true  },
+
+  { Event::JoystickOneUp,       "P1 Joystick Up",              "", true  },
+  { Event::JoystickOneDown,     "P1 Joystick Down",            "", true  },
+  { Event::JoystickOneLeft,     "P1 Joystick Left",            "", true  },
+  { Event::JoystickOneRight,    "P1 Joystick Right",           "", true  },
+  { Event::JoystickOneFire,     "P1 Joystick Fire",            "", true  },
+  { Event::JoystickOneFire5,    "P1 Booster Top Trigger",      "", true  },
+  { Event::JoystickOneFire9,    "P1 Booster Handle Grip",      "", true  },
+
+  { Event::PaddleZeroAnalog,    "Paddle 0 Analog",             "", true  },
+  { Event::PaddleZeroDecrease,  "Paddle 0 Decrease",           "", true  },
+  { Event::PaddleZeroIncrease,  "Paddle 0 Increase",           "", true  },
+  { Event::PaddleZeroFire,      "Paddle 0 Fire",               "", true  },
+
+  { Event::PaddleOneAnalog,     "Paddle 1 Analog",             "", true  },
+  { Event::PaddleOneDecrease,   "Paddle 1 Decrease",           "", true  },
+  { Event::PaddleOneIncrease,   "Paddle 1 Increase",           "", true  },
+  { Event::PaddleOneFire,       "Paddle 1 Fire",               "", true  },
+
+  { Event::PaddleTwoAnalog,     "Paddle 2 Analog",             "", true  },
+  { Event::PaddleTwoDecrease,   "Paddle 2 Decrease",           "", true  },
+  { Event::PaddleTwoIncrease,   "Paddle 2 Increase",           "", true  },
+  { Event::PaddleTwoFire,       "Paddle 2 Fire",               "", true  },
+
+  { Event::PaddleThreeAnalog,   "Paddle 3 Analog",             "", true  },
+  { Event::PaddleThreeDecrease, "Paddle 3 Decrease",           "", true  },
+  { Event::PaddleThreeIncrease, "Paddle 3 Increase",           "", true  },
+  { Event::PaddleThreeFire,     "Paddle 3 Fire",               "", true  },
+
+  { Event::KeyboardZero1,       "P0 Keyboard 1",               "", true  },
+  { Event::KeyboardZero2,       "P0 Keyboard 2",               "", true  },
+  { Event::KeyboardZero3,       "P0 Keyboard 3",               "", true  },
+  { Event::KeyboardZero4,       "P0 Keyboard 4",               "", true  },
+  { Event::KeyboardZero5,       "P0 Keyboard 5",               "", true  },
+  { Event::KeyboardZero6,       "P0 Keyboard 6",               "", true  },
+  { Event::KeyboardZero7,       "P0 Keyboard 7",               "", true  },
+  { Event::KeyboardZero8,       "P0 Keyboard 8",               "", true  },
+  { Event::KeyboardZero9,       "P0 Keyboard 9",               "", true  },
+  { Event::KeyboardZeroStar,    "P0 Keyboard *",               "", true  },
+  { Event::KeyboardZero0,       "P0 Keyboard 0",               "", true  },
+  { Event::KeyboardZeroPound,   "P0 Keyboard #",               "", true  },
+
+  { Event::KeyboardOne1,        "P1 Keyboard 1",               "", true  },
+  { Event::KeyboardOne2,        "P1 Keyboard 2",               "", true  },
+  { Event::KeyboardOne3,        "P1 Keyboard 3",               "", true  },
+  { Event::KeyboardOne4,        "P1 Keyboard 4",               "", true  },
+  { Event::KeyboardOne5,        "P1 Keyboard 5",               "", true  },
+  { Event::KeyboardOne6,        "P1 Keyboard 6",               "", true  },
+  { Event::KeyboardOne7,        "P1 Keyboard 7",               "", true  },
+  { Event::KeyboardOne8,        "P1 Keyboard 8",               "", true  },
+  { Event::KeyboardOne9,        "P1 Keyboard 9",               "", true  },
+  { Event::KeyboardOneStar,     "P1 Keyboard *",               "", true  },
+  { Event::KeyboardOne0,        "P1 Keyboard 0",               "", true  },
+  { Event::KeyboardOnePound,    "P1 Keyboard #",               "", true  },
+
+  { Event::Combo1,              "Combo 1",                     "", false },
+  { Event::Combo2,              "Combo 2",                     "", false },
+  { Event::Combo3,              "Combo 3",                     "", false },
+  { Event::Combo4,              "Combo 4",                     "", false },
+  { Event::Combo5,              "Combo 5",                     "", false },
+  { Event::Combo6,              "Combo 6",                     "", false },
+  { Event::Combo7,              "Combo 7",                     "", false },
+  { Event::Combo8,              "Combo 8",                     "", false },
+  { Event::Combo9,              "Combo 9",                     "", false },
+  { Event::Combo10,             "Combo 10",                    "", false },
+  { Event::Combo11,             "Combo 11",                    "", false },
+  { Event::Combo12,             "Combo 12",                    "", false },
+  { Event::Combo13,             "Combo 13",                    "", false },
+  { Event::Combo14,             "Combo 14",                    "", false },
+  { Event::Combo15,             "Combo 15",                    "", false },
+  { Event::Combo16,             "Combo 16",                    "", false }
 };
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 EventHandler::ActionList EventHandler::ourMenuActionList[kMenuActionListSize] = {
-  { Event::UIUp,        "Move Up",              0, false },
-  { Event::UIDown,      "Move Down",            0, false },
-  { Event::UILeft,      "Move Left",            0, false },
-  { Event::UIRight,     "Move Right",           0, false },
+  { Event::UIUp,        "Move Up",              "", false },
+  { Event::UIDown,      "Move Down",            "", false },
+  { Event::UILeft,      "Move Left",            "", false },
+  { Event::UIRight,     "Move Right",           "", false },
 
-  { Event::UIHome,      "Home",                 0, false },
-  { Event::UIEnd,       "End",                  0, false },
-  { Event::UIPgUp,      "Page Up",              0, false },
-  { Event::UIPgDown,    "Page Down",            0, false },
+  { Event::UIHome,      "Home",                 "", false },
+  { Event::UIEnd,       "End",                  "", false },
+  { Event::UIPgUp,      "Page Up",              "", false },
+  { Event::UIPgDown,    "Page Down",            "", false },
 
-  { Event::UIOK,        "OK",                   0, false },
-  { Event::UICancel,    "Cancel",               0, false },
-  { Event::UISelect,    "Select item",          0, false },
+  { Event::UIOK,        "OK",                   "", false },
+  { Event::UICancel,    "Cancel",               "", false },
+  { Event::UISelect,    "Select item",          "", false },
 
-  { Event::UINavPrev,   "Previous object",      0, false },
-  { Event::UINavNext,   "Next object",          0, false },
+  { Event::UINavPrev,   "Previous object",      "", false },
+  { Event::UINavNext,   "Next object",          "", false },
 
-  { Event::UIPrevDir,   "Parent directory",     0, false }
+  { Event::UIPrevDir,   "Parent directory",     "", false }
 };
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx
index f4c0691..60cf178 100644
--- a/src/emucore/EventHandler.hxx
+++ b/src/emucore/EventHandler.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: EventHandler.hxx 3239 2015-12-29 19:22:46Z stephena $
+// $Id: EventHandler.hxx 3270 2016-01-31 03:42:23Z stephena $
 //============================================================================
 
 #ifndef EVENTHANDLER_HXX
@@ -26,10 +26,10 @@ class Console;
 class OSystem;
 class DialogContainer;
 class EventMappingWidget;
-class MouseControl;
 
 #include "Event.hxx"
 #include "StellaKeys.hxx"
+#include "MouseControl.hxx"
 #include "Variant.hxx"
 #include "bspf.hxx"
 
@@ -76,7 +76,7 @@ enum EventMode {
   mapping can take place.
 
   @author  Stephen Anthony
-  @version $Id: EventHandler.hxx 3239 2015-12-29 19:22:46Z stephena $
+  @version $Id: EventHandler.hxx 3270 2016-01-31 03:42:23Z stephena $
 */
 class EventHandler
 {
@@ -85,11 +85,7 @@ class EventHandler
       Create a new event handler object
     */
     EventHandler(OSystem& osystem);
-
-    /**
-      Destructor
-    */
-    virtual ~EventHandler();
+    virtual ~EventHandler() = default;
 
     // Enumeration representing the different states of operation
     enum State {
@@ -541,8 +537,8 @@ class EventHandler
     // Structure used for action menu items
     struct ActionList {
       Event::Type event;
-      const char* action;
-      char* key;
+      string action;
+      string key;
       bool allow_combo;
     };
 
diff --git a/src/emucore/EventJoyHandler.cxx b/src/emucore/EventJoyHandler.cxx
index 7ab8317..f3716d6 100644
--- a/src/emucore/EventJoyHandler.cxx
+++ b/src/emucore/EventJoyHandler.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: EventJoyHandler.cxx 3239 2015-12-29 19:22:46Z stephena $
+// $Id: EventJoyHandler.cxx 3273 2016-02-06 21:06:23Z stephena $
 //============================================================================
 
 #include <sstream>
@@ -317,13 +317,9 @@ bool EventHandler::JoystickHandler::add(StellaJoystick* stick)
     // we append ' #x', where 'x' increases consecutively
     int count = 0;
     for(const auto& i: myDatabase)
-    {
       if(BSPF_startsWithIgnoreCase(i.first, stick->name) && i.second.joy)
-      {
         ++count;
-        break;
-      }
-    }
+
     if(count > 0)
     {
       ostringstream name;
diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx
index d47f195..50a6c40 100644
--- a/src/emucore/FrameBuffer.cxx
+++ b/src/emucore/FrameBuffer.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: FrameBuffer.cxx 3240 2015-12-29 21:28:10Z stephena $
+// $Id: FrameBuffer.cxx 3271 2016-01-31 03:57:08Z stephena $
 //============================================================================
 
 #include <algorithm>
@@ -820,12 +820,6 @@ FrameBuffer::VideoModeList::VideoModeList()
 }
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-FrameBuffer::VideoModeList::~VideoModeList()
-{
-  clear();
-}
-
-// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 void FrameBuffer::VideoModeList::add(const VideoMode& mode)
 {
   myModeList.emplace_back(mode);
diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx
index 2241ed9..017977b 100644
--- a/src/emucore/FrameBuffer.hxx
+++ b/src/emucore/FrameBuffer.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: FrameBuffer.hxx 3258 2016-01-23 22:56:16Z stephena $
+// $Id: FrameBuffer.hxx 3271 2016-01-31 03:57:08Z stephena $
 //============================================================================
 
 #ifndef FRAMEBUFFER_HXX
@@ -126,7 +126,7 @@ class VideoMode
   into FBSurfaces), are in turn drawn here as well.
 
   @author  Stephen Anthony
-  @version $Id: FrameBuffer.hxx 3258 2016-01-23 22:56:16Z stephena $
+  @version $Id: FrameBuffer.hxx 3271 2016-01-31 03:57:08Z stephena $
 */
 class FrameBuffer
 {
@@ -443,8 +443,6 @@ class FrameBuffer
     {
       public:
         VideoModeList();
-        ~VideoModeList();
-
         VideoModeList(const VideoModeList&) = default;
         VideoModeList& operator=(const VideoModeList&) = default;
 
diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx
index cb07389..417de2c 100644
--- a/src/emucore/Settings.cxx
+++ b/src/emucore/Settings.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: Settings.cxx 3247 2015-12-30 23:57:54Z stephena $
+// $Id: Settings.cxx 3277 2016-02-12 14:28:30Z stephena $
 //============================================================================
 
 #include <cassert>
@@ -59,6 +59,7 @@ Settings::Settings(OSystem& osystem)
   setInternal("tv.scanlines", "25");
   setInternal("tv.scaninter", "true");
   setInternal("tv.jitter", "false");
+  setInternal("tv.jitter_recovery", "10");
   // TV options when using 'custom' mode
   setInternal("tv.contrast", "0.0");
   setInternal("tv.brightness", "0.0");
@@ -277,6 +278,9 @@ void Settings::validate()
   i = getInt("tv.filter");
   if(i < 0 || i > 5)  setInternal("tv.filter", "0");
 
+  i = getInt("tv.jitter_recovery");
+  if(i < 1 || i > 20)  setInternal("tv.jitter_recovery", "10");
+
 #ifdef SOUND_SUPPORT
   i = getInt("volume");
   if(i < 0 || i > 100)    setInternal("volume", "100");
@@ -370,6 +374,8 @@ void Settings::usage() const
     << "  -tv.filter    <0-5>          Set TV effects off (0) or to specified mode (1-5)\n"
     << "  -tv.scanlines <0-100>        Set scanline intensity to percentage (0 disables completely)\n"
     << "  -tv.scaninter <1|0>          Enable interpolated (smooth) scanlines\n"
+    << "  -tv.jitter    <1|0>          Enable TV jitter effect\n"
+    << "  -tv.jitter_recovery <1-20>   Set recovery time for TV jitter effect\n"
     << "  -tv.contrast    <value>      Set TV effects custom contrast to value 1.0 - 1.0\n"
     << "  -tv.brightness  <value>      Set TV effects custom brightness to value 1.0 - 1.0\n"
     << "  -tv.hue         <value>      Set TV effects custom hue to value 1.0 - 1.0\n"
diff --git a/src/emucore/TIA.cxx b/src/emucore/TIA.cxx
index f9b7b4c..0f84a47 100644
--- a/src/emucore/TIA.cxx
+++ b/src/emucore/TIA.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: TIA.cxx 3261 2016-01-25 17:28:49Z stephena $
+// $Id: TIA.cxx 3276 2016-02-12 14:23:40Z stephena $
 //============================================================================
 
 #include <cassert>
@@ -39,7 +39,6 @@
 #include "TIA.hxx"
 
 #define HBLANK 68
-
 #define CLAMP_POS(reg) if(reg < 0) { reg += 160; }  reg %= 160;
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -128,7 +127,8 @@ void TIA::initialize()
 
   myBitsEnabled = myCollisionsEnabled = true;
   myJitterEnabled = mySettings.getBool("tv.jitter");
-  myNextFrameJitter = myCurrentFrameJitter = 0;
+  myJitterRecoveryFactor = mySettings.getInt("tv.jitter_recovery");
+  myNextFrameJitter = myCurrentFrameJitter = myJitterRecovery = 0;
   
   // Make sure all TIA bits are enabled
   enableBits(true);
@@ -646,7 +646,11 @@ inline void TIA::endFrame()
   if(myJitterEnabled && myFrameCounter > 3)
   {
     // Set the jitter amount for the current frame
-    myCurrentFrameJitter = myNextFrameJitter * 160;
+    myCurrentFrameJitter = (myNextFrameJitter + myJitterRecovery *
+                            myJitterRecoveryFactor) * 160;
+
+    if(myJitterRecovery < 0)       myJitterRecovery++;
+    else if (myJitterRecovery > 0) myJitterRecovery--;
 
     // Calculate the jitter amount for the next frame.
     // Jitter amount of a frame depends upon the difference
@@ -655,23 +659,55 @@ inline void TIA::endFrame()
 
     if(myNextFrameJitter < -1)
     {
-      myNextFrameJitter = (myNextFrameJitter-1) / 2;
-
-      // Make sure currentFrameBuffer() doesn't return a pointer that
-      // results in memory being accessed outside of the 160*320 bytes
-      // allocated for the frame buffer
-      if(myNextFrameJitter < -Int32(myFrameYStart))
-        myNextFrameJitter = myFrameYStart;
+      if(myNextFrameJitter / myJitterRecoveryFactor < myJitterRecovery)
+      {
+        myJitterRecovery = myNextFrameJitter / myJitterRecoveryFactor;
+        myNextFrameJitter = 0;
+
+        // Make sure currentFrameBuffer() doesn't return a pointer that
+        // results in memory being accessed outside of the 160*320 bytes
+        // allocated for the frame buffer
+        if(myJitterRecovery * myJitterRecoveryFactor < -Int32(myFrameYStart))
+          myJitterRecovery = myFrameYStart / myJitterRecoveryFactor;
+      }
+      else
+      {
+        myNextFrameJitter = (myNextFrameJitter-1) / 2;
+
+        // Make sure currentFrameBuffer() doesn't return a pointer that
+        // results in memory being accessed outside of the 160*320 bytes
+        // allocated for the frame buffer
+        if(myNextFrameJitter + myJitterRecovery * myJitterRecoveryFactor <
+           -Int32(myFrameYStart))
+          myNextFrameJitter = myFrameYStart;
+      }
     }
     else if(myNextFrameJitter > 1)
     {
-      myNextFrameJitter = (myNextFrameJitter+1) / 2;
-
-      // Make sure currentFrameBuffer() doesn't return a pointer that
-      // results in memory being accessed outside of the 160*320 bytes
-      // allocated for the frame buffer
-      if(myNextFrameJitter > 320 - Int32(myFrameYStart) - Int32(myFrameHeight))
-        myNextFrameJitter = 320 - myFrameYStart - myFrameHeight;
+      if (myNextFrameJitter / myJitterRecoveryFactor > myJitterRecovery)
+      {
+        myJitterRecovery = myNextFrameJitter / myJitterRecoveryFactor;
+        myNextFrameJitter = 0;
+
+        // Make sure currentFrameBuffer() doesn't return a pointer that
+        // results in memory being accessed outside of the 160*320 bytes
+        // allocated for the frame buffer
+        if(myJitterRecovery * myJitterRecoveryFactor >
+           320 - Int32(myFrameYStart) - Int32(myFrameHeight))
+          myJitterRecovery = (320 - myFrameYStart - myFrameHeight) /
+                              myJitterRecoveryFactor;
+      }
+      else
+      {
+        myNextFrameJitter = (myNextFrameJitter+1) / 2;
+
+        // Make sure currentFrameBuffer() doesn't return a pointer that
+        // results in memory being accessed outside of the 160*320 bytes
+        // allocated for the frame buffer
+        if(myNextFrameJitter + myJitterRecovery * myJitterRecoveryFactor >
+           320 - Int32(myFrameYStart) - Int32(myFrameHeight))
+          myNextFrameJitter = 320 - myFrameYStart - myFrameHeight;
+      }
     }
     else
       myNextFrameJitter = 0;
diff --git a/src/emucore/TIA.hxx b/src/emucore/TIA.hxx
index 0ee0dc3..cd13b6a 100644
--- a/src/emucore/TIA.hxx
+++ b/src/emucore/TIA.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: TIA.hxx 3258 2016-01-23 22:56:16Z stephena $
+// $Id: TIA.hxx 3276 2016-02-12 14:23:40Z stephena $
 //============================================================================
 
 #ifndef TIA_HXX
@@ -41,7 +41,7 @@ class Sound;
   be displayed on screen.
 
   @author  Bradford W. Mott
-  @version $Id: TIA.hxx 3258 2016-01-23 22:56:16Z stephena $
+  @version $Id: TIA.hxx 3276 2016-02-12 14:23:40Z stephena $
 */
 class TIA : public Device
 {
@@ -314,7 +314,8 @@ class TIA : public Device
     bool driveUnusedPinsRandom(uInt8 mode = 2);
 
     /**
-      Enables/disable/toggle 'scanline jittering' mode.
+      Enables/disable/toggle 'scanline jittering' mode, and set the
+      recovery 'factor'.
 
       @param mode  1/0 indicates on/off, otherwise flip from
                    its current state
@@ -322,6 +323,7 @@ class TIA : public Device
       @return  Whether the mode was enabled or disabled
     */
     bool toggleJitter(uInt8 mode = 2);
+    void setJitterRecoveryFactor(Int32 f) { myJitterRecoveryFactor = f; }
 
 #ifdef DEBUGGER_SUPPORT
     /**
@@ -634,6 +636,9 @@ class TIA : public Device
   
     // Jitter amount for the current frame
     Int32 myCurrentFrameJitter;
+
+    // Large jitter values will take multiple frames to recover from
+    Int32 myJitterRecovery, myJitterRecoveryFactor;
   
   private:
     // Following constructors and assignment operators not supported
diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro
index de9bdf2..3251f84 100644
--- a/src/emucore/stella.pro
+++ b/src/emucore/stella.pro
@@ -938,6 +938,7 @@
 "Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop"
 "Cartridge.ModelNo" "720111-1A, 03205"
 "Cartridge.Name" "Fathom (1983) (Imagic)"
+"Cartridge.Note" "AKA Scuba"
 "Display.Phosphor" "YES"
 ""
 
@@ -1372,6 +1373,12 @@
 "Cartridge.Name" "Seaquest (Dinatronic)"
 ""
 
+"Cartridge.MD5" "10c8cfd8c37522f11d47540ff024e5f9"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.ModelNo" "C 3016"
+"Cartridge.Name" "Demon Attack (Canal 3)"
+""
+
 "Cartridge.MD5" "10eae73a07b3da044b72473d8d366267"
 "Cartridge.Manufacturer" "Funvision - Fund. Int'l Co."
 "Cartridge.Name" "Karate (1982) (Funvision) (PAL)"
@@ -1500,6 +1507,11 @@
 "Cartridge.Name" "World End (1983) (Home Vision) (PAL)"
 ""
 
+"Cartridge.MD5" "1323c45d660f5a5b6d5ea45c6c4cbe4a"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Enduro (Canal 3)"
+""
+
 "Cartridge.MD5" "133456269a03e3fdae6cddd65754c50d"
 "Cartridge.Manufacturer" "Tigervision - Teldec"
 "Cartridge.ModelNo" "7-006 - 3.60008 VG"
@@ -1592,6 +1604,11 @@
 "Cartridge.Rarity" "Hack"
 ""
 
+"Cartridge.MD5" "13ccc692f111d52fec75d83df16192e2"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Fishing Derby (Canal 3)"
+""
+
 "Cartridge.MD5" "13d8326bf5648db4dafce45d25e62ddd"
 "Cartridge.Name" "Atari Logo Demo 2 (PD)"
 ""
@@ -2531,7 +2548,6 @@
 "Cartridge.Manufacturer" "Atari, Eric Manghise, Joseph Tung"
 "Cartridge.ModelNo" "CX2640"
 "Cartridge.Name" "RealSports Baseball (1982) (Atari) (Prototype)"
-"Cartridge.Note" "AKA Foxbat"
 "Cartridge.Rarity" "Prototype"
 "Display.YStart" "30"
 ""
@@ -4361,7 +4377,7 @@
 ""
 
 "Cartridge.MD5" "36edef446ab4c2395666efc672b92ed0"
-"Cartridge.Manufacturer" "Atari - Axlon"
+"Cartridge.Manufacturer" "Atari - Axlon, John Vifian"
 "Cartridge.ModelNo" "CX26168"
 "Cartridge.Name" "Off the Wall (1989) (Atari) (PAL)"
 ""
@@ -4803,6 +4819,13 @@
 "Cartridge.Note" "AKA Chopper Command"
 ""
 
+"Cartridge.MD5" "3c7a7b3a0a7e6319b2fa0f923ef6c9af"
+"Cartridge.Manufacturer" "Atari, Joe Gaucher"
+"Cartridge.Name" "Racer (1982) (Atari) (Prototype)"
+"Cartridge.Note" "ROM must be started in bank 0"
+"Cartridge.Rarity" "Prototype"
+""
+
 "Cartridge.MD5" "3c7a96978f52b2b15426cdd50f2c4048"
 "Cartridge.Name" "Overhead Adventure Demo 3 (PD)"
 ""
@@ -4817,6 +4840,7 @@
 "Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn"
 "Cartridge.ModelNo" "1002"
 "Cartridge.Name" "Cosmic Creeps (1982) (Telesys)"
+"Cartridge.Note" "AKA Space Maze, Spaze Maze"
 "Display.Phosphor" "YES"
 ""
 
@@ -5707,6 +5731,7 @@
 "Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop"
 "Cartridge.ModelNo" "720111-2A, 13205"
 "Cartridge.Name" "Fathom (1983) (Imagic) (PAL)"
+"Cartridge.Note" "AKA Scuba"
 "Display.Phosphor" "YES"
 ""
 
@@ -5755,6 +5780,17 @@
 "Cartridge.Rarity" "Prototype"
 ""
 
+"Cartridge.MD5" "4892b85c248131d6a42c66a4163a40d0"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Tac-Scan (Canal 3)"
+"Cartridge.Note" "Uses the Paddle Controllers"
+"Console.SwapPorts" "YES"
+"Controller.Left" "PADDLES"
+"Controller.SwapPaddles" "YES"
+"Controller.MouseAxis" "AUTO 60"
+"Display.Height" "215"
+""
+
 "Cartridge.MD5" "48bcf2c5a8c80f18b24c55db96845472"
 "Cartridge.Manufacturer" "Activision, John Van Ryzin - Ariola"
 "Cartridge.ModelNo" "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720"
@@ -6268,6 +6304,12 @@
 "Cartridge.Name" "Super Action Pak - Pitfall, Barnstorming, Grand Prix, Laser Blast (1988) (HES) (PAL)"
 ""
 
+"Cartridge.MD5" "4f32b24869d8c1310fecf039c6424db6"
+"Cartridge.Manufacturer" "U.S. Games Corporation, Todd Marshall"
+"Cartridge.Name" "3-D Zapper (12-15-82) (U.S. Games) (Prototype)"
+"Cartridge.Rarity" "Prototype"
+""
+
 "Cartridge.MD5" "4f618c2429138e0280969193ed6c107e"
 "Cartridge.Manufacturer" "Activision, Alan Miller"
 "Cartridge.ModelNo" "AZ-028, AG-028-04"
@@ -6394,6 +6436,12 @@
 "Cartridge.Name" "Sky Jinks (1982) (Activision) (PAL)"
 ""
 
+"Cartridge.MD5" "50c7edc9f9dc0369abcdab3b4efeb5e9"
+"Cartridge.Manufacturer" "U.S. Games Corporation, Todd Marshall"
+"Cartridge.Name" "3-D Zapper (U.S. Games) (Prototype)"
+"Cartridge.Rarity" "Prototype"
+""
+
 "Cartridge.MD5" "50ef88f9a5e0e1e6b86e175362a27fdb"
 "Cartridge.Name" "Multi-Sprite Game V2.4 (Piero Cavina) (PD)"
 ""
@@ -7237,6 +7285,11 @@
 "Cartridge.Note" "AKA Chopper Command"
 ""
 
+"Cartridge.MD5" "5c19f6da638c4c7c1f98d09e63df43e4"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Cosmic Ark (Canal 3)"
+""
+
 "Cartridge.MD5" "5c1b1aa78b7609d43c5144c3b3b60adf"
 "Cartridge.Name" "Demo Image Series #8 - Two Marios (Different Interlacing) (27-02-2003) (AD)"
 ""
@@ -7337,6 +7390,11 @@
 "Cartridge.Name" "Pole Position (Tron)"
 ""
 
+"Cartridge.MD5" "5dae540347cf0a559962d62604ecf750"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Freeway (Canal 3)"
+""
+
 "Cartridge.MD5" "5db9e5bf663cad6bf159bc395f6ead53"
 "Cartridge.Manufacturer" "Goliath - Hot Shot"
 "Cartridge.ModelNo" "83-212"
@@ -7465,6 +7523,14 @@
 "Cartridge.Rarity" "Uncommon"
 ""
 
+"Cartridge.MD5" "5f560837396387455c9dcb05cdd4b053"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Eggomania (Canal 3)"
+"Cartridge.Note" "Uses the Paddle Controllers"
+"Controller.Left" "PADDLES"
+"Controller.MouseAxis" "AUTO 60"
+""
+
 "Cartridge.MD5" "5f681403b1051a0822344f467b05a94d"
 "Cartridge.Manufacturer" "Atari, Howard Scott Warshaw - Sears"
 "Cartridge.ModelNo" "CX2655 - 49-75167"
@@ -8792,6 +8858,11 @@
 "Display.YStart" "30"
 ""
 
+"Cartridge.MD5" "6ed6bda5c42b2eb7a21c54e5b3ace3e3"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Ice Hockey (Canal 3)"
+""
+
 "Cartridge.MD5" "6efe876168e2d45d4719b6a61355e5fe"
 "Cartridge.Manufacturer" "Bit Corporation"
 "Cartridge.ModelNo" "PG207"
@@ -9376,6 +9447,7 @@
 "Cartridge.Manufacturer" "Atari, Howard Scott Warshaw - Sears"
 "Cartridge.ModelNo" "CX2655 - 49-75167"
 "Cartridge.Name" "Yars' Revenge (1982) (Atari) (PAL) [a]"
+"Cartridge.Note" "ROM must be started in bank 0"
 "Display.Phosphor" "YES"
 ""
 
@@ -9383,6 +9455,7 @@
 "Cartridge.Manufacturer" "Atari, Greg Easter, Mimi Nyden"
 "Cartridge.ModelNo" "CX26107"
 "Cartridge.Name" "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)"
+"Cartridge.Note" "ROM must be started in bank 0"
 "Cartridge.Rarity" "Prototype"
 ""
 
@@ -10259,6 +10332,13 @@
 "Cartridge.Name" "California Games (1988) (Epyx) (PAL)"
 ""
 
+"Cartridge.MD5" "807841df228ee8aab0a06ee639ce5a8a"
+"Cartridge.Manufacturer" "Coleco, Michael Green, Anthony R. Henderson, Gary Littleton"
+"Cartridge.ModelNo" "2455"
+"Cartridge.Name" "Turbo (1982) (Coleco) (Prototype)"
+"Cartridge.Note" "Prototype"
+""
+
 "Cartridge.MD5" "807a8ff6216b00d52aba2dfea5d8d860"
 "Cartridge.Manufacturer" "John Payson"
 "Cartridge.Name" "Strat-O-Gems Deluxe (2005) (J. Payson)"
@@ -12074,7 +12154,7 @@
 ""
 
 "Cartridge.MD5" "98f63949e656ff309cefa672146dc1b8"
-"Cartridge.Manufacturer" "Atari - Axlon"
+"Cartridge.Manufacturer" "Atari - Axlon, John Vifian"
 "Cartridge.ModelNo" "CX26168"
 "Cartridge.Name" "Off the Wall (1989) (Atari)"
 ""
@@ -12086,6 +12166,7 @@
 "Cartridge.MD5" "9905f9f4706223dadee84f6867ede8e3"
 "Cartridge.Manufacturer" "HES"
 "Cartridge.Name" "Challenge (HES) (PAL)"
+"Cartridge.Note" "ROM must be started in bank 0"
 ""
 
 "Cartridge.MD5" "9912d06eea42200a198dd3e2be18c601"
@@ -12976,6 +13057,7 @@
 "Cartridge.Manufacturer" "Carrere Video, Sylvia Day, Henry Will IV - Teldec"
 "Cartridge.ModelNo" "USC2001"
 "Cartridge.Name" "Gopher (1983) (Carrere Video) (PAL)"
+"Cartridge.Note" "AKA Vossicht Whlmaus!"
 ""
 
 "Cartridge.MD5" "a5855d73d304d83ef07dde03e379619f"
@@ -13652,6 +13734,13 @@
 "Controller.MouseAxis" "01 50"
 ""
 
+"Cartridge.MD5" "af6f3e9718bccfcd8afb421f96561a34"
+"Cartridge.Manufacturer" "Atari, Tod Frye"
+"Cartridge.ModelNo" "CX2695"
+"Cartridge.Name" "Xevious (11-08-1984) (Atari) (Prototype)"
+"Cartridge.Rarity" "Prototype"
+""
+
 "Cartridge.MD5" "afb3bc45c6a82739cc82582127cd96e6"
 "Cartridge.Manufacturer" "Atari, John Howard Palevich"
 "Cartridge.ModelNo" "CX26151, CX26151P"
@@ -14539,6 +14628,11 @@
 "Cartridge.Name" "Sky Demo (PD)"
 ""
 
+"Cartridge.MD5" "bcb31f22856b0028c00d12f0e4c0a952"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Thunderground (Canal 3)"
+""
+
 "Cartridge.MD5" "bccb4e2cfad5efc93f6d55dc992118ce"
 "Cartridge.Manufacturer" "Activision, Carol Shaw"
 "Cartridge.ModelNo" "AX-020, AX-020-04"
@@ -15341,7 +15435,6 @@
 "Cartridge.Manufacturer" "Atari, Eric Manghise, Joseph Tung"
 "Cartridge.ModelNo" "CX2640"
 "Cartridge.Name" "RealSports Baseball (07-09-1982) (Atari) (Prototype)"
-"Cartridge.Note" "AKA Foxbat"
 "Cartridge.Rarity" "Prototype"
 "Display.YStart" "30"
 ""
@@ -15413,6 +15506,7 @@
 "Cartridge.Manufacturer" "Bit Corporation"
 "Cartridge.ModelNo" "PGP210"
 "Cartridge.Name" "Ice Hockey (4 Game in One Light Green) (1983) (BitCorp) (PAL)"
+"Cartridge.Note" "AKA Hockey, Hockey"
 ""
 
 "Cartridge.MD5" "c7e43ad79c5e5c029d9f5ffde23e32cf"
@@ -16047,6 +16141,11 @@
 "Cartridge.Note" "AKA Super Basketball"
 ""
 
+"Cartridge.MD5" "cfce5596a7e8ca13529e9804cad693ef"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Tennis (Canal 3)"
+""
+
 "Cartridge.MD5" "cfd6a8b23d12b0462baf6a05ef347cd8"
 "Cartridge.Manufacturer" "Activision, Larry Kaplan"
 "Cartridge.ModelNo" "AX-006"
@@ -16115,7 +16214,7 @@
 "Cartridge.Sound" "STEREO"
 "Controller.Left" "PADDLES"
 "Controller.Right" "PADDLES"
-"Controller.MouseAxis" "01 50"
+"Controller.MouseAxis" "AUTO 55"
 ""
 
 "Cartridge.MD5" "d010e3dfe7366e47561c088079a59439"
@@ -17710,6 +17809,7 @@
 "Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn"
 "Cartridge.ModelNo" "1002"
 "Cartridge.Name" "Cosmic Creeps (1982) (Telesys) (PAL)"
+"Cartridge.Note" "AKA Space Maze, Spaze Maze"
 "Display.Phosphor" "YES"
 ""
 
@@ -18649,6 +18749,12 @@
 "Cartridge.Name" "My Golf (CCE) (PAL)"
 ""
 
+"Cartridge.MD5" "ee8027d554d14c8d0b86f94737d2fdcc"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "Yars' Revenge (Canal 3)"
+"Display.Phosphor" "YES"
+""
+
 "Cartridge.MD5" "ee84bdc5dae268e227e407c7b5e6b6b7"
 "Cartridge.Name" "Marilyn Monroe Demo (PD)"
 ""
@@ -18864,6 +18970,11 @@
 "Cartridge.Name" "Escape from the Mindmaster (Preview) (1982) (Arcadia)"
 ""
 
+"Cartridge.MD5" "f11cfab087fcbd930ab8b0becc5b2e5a"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.Name" "River Raid (Canal 3)"
+""
+
 "Cartridge.MD5" "f12afbffa080dd3b2801dd14d4837cf6"
 "Cartridge.Manufacturer" "Atari, Michael Kosaka, Peter C. Niday, Robert Vieira"
 "Cartridge.ModelNo" "CX26110"
@@ -18999,6 +19110,12 @@
 "Controller.Right" "KEYBOARD"
 ""
 
+"Cartridge.MD5" "f28c07767b3e90a2689ade5b5e305874"
+"Cartridge.Manufacturer" "Canal 3 - Intellivision"
+"Cartridge.ModelNo" "C 3014"
+"Cartridge.Name" "Keystone Kapers (Canal 3)"
+""
+
 "Cartridge.MD5" "f2d40c70cf3e1d03bc112796315888d9"
 "Cartridge.Manufacturer" "Atari, Michael Callahan, Preston Stuart"
 "Cartridge.ModelNo" "CX26103"
@@ -19490,7 +19607,7 @@
 "Cartridge.Sound" "STEREO"
 "Controller.Left" "PADDLES"
 "Controller.Right" "PADDLES"
-"Controller.MouseAxis" "01 50"
+"Controller.MouseAxis" "AUTO 55"
 ""
 
 "Cartridge.MD5" "f802fa61011dd9eb6f80b271bac479d0"
@@ -20192,3 +20309,10 @@
 "Display.YStart" "28"
 ""
 
+"Cartridge.MD5" "b50ae55aac93fbed258bc5a873edd2cb"
+"Cartridge.Manufacturer" "Recompile"
+"Cartridge.Name" "E.T. The Extra-Terrestrial (Recompile) (Hack)"
+"Cartridge.Note" "www.neocomputer.org/projects/et"
+"Cartridge.Rarity" "Hack"
+""
+
diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx
index 8fabcb1..72e13c6 100644
--- a/src/gui/VideoDialog.cxx
+++ b/src/gui/VideoDialog.cxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: VideoDialog.cxx 3243 2015-12-29 23:45:21Z stephena $
+// $Id: VideoDialog.cxx 3279 2016-02-13 01:21:28Z stephena $
 //============================================================================
 
 #include <sstream>
@@ -217,7 +217,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
 
   // Custom adjustables (using macro voodoo)
   xpos += 8; ypos += 4;
-  int orig_ypos = ypos;
   pwidth = lwidth;
   lwidth = font.getStringWidth("Saturation: ");
 
@@ -245,7 +244,18 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
   CREATE_CUSTOM_SLIDERS(Bleed, "Bleeding: ");
 
   xpos += myTVContrast->getWidth() + myTVContrastLabel->getWidth() + 20;
-  ypos = orig_ypos;
+  ypos = 8;
+
+  // TV jitter effect
+  myTVJitter = new CheckboxWidget(myTab, font, xpos, ypos,
+                                  "Jitter/Roll effect", kTVJitterChanged);
+  wid.push_back(myTVJitter);
+  ypos += lineHeight;
+  lwidth = font.getStringWidth("Intensity: ");
+  pwidth = font.getMaxCharWidth() * 6;
+  CREATE_CUSTOM_SLIDERS(JitterRec, "Recovery: ");
+  myTVJitterRec->setMinValue(1); myTVJitterRec->setMaxValue(20);
+  ypos += 4;
 
   // Scanline intensity and interpolation
   myTVScanLabel = 
@@ -254,8 +264,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
   ypos += lineHeight;
 
   xpos += 20;
-  lwidth = font.getStringWidth("Intensity: ");
-  pwidth = font.getMaxCharWidth() * 6;
   CREATE_CUSTOM_SLIDERS(ScanIntense, "Intensity: ");
 
   myTVScanInterpolate = new CheckboxWidget(myTab, font, xpos, ypos,
@@ -273,7 +281,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent,
   wid.push_back(myClone ## obj);                                       \
   ypos += lineHeight + 10
 
-  ypos += lineHeight;
+  ypos += 4;
   CREATE_CLONE_BUTTON(Composite, "Clone Composite");
   CREATE_CLONE_BUTTON(Svideo, "Clone S-Video");
   CREATE_CLONE_BUTTON(RGB, "Clone RGB");
@@ -370,6 +378,11 @@ void VideoDialog::loadConfig()
   // TV Custom adjustables
   loadTVAdjustables(NTSCFilter::PRESET_CUSTOM);
 
+  // TV jitter
+  myTVJitterRec->setValue(instance().settings().getInt("tv.jitter_recovery"));
+  myTVJitterRecLabel->setLabel(instance().settings().getString("tv.jitter_recovery"));
+  handleTVJitterChange(instance().settings().getBool("tv.jitter"));
+
   // TV scanline intensity and interpolation
   myTVScanIntense->setValue(instance().settings().getInt("tv.scanlines"));
   myTVScanIntenseLabel->setLabel(instance().settings().getString("tv.scanlines"));
@@ -456,6 +469,15 @@ void VideoDialog::saveConfig()
   adj.bleed       = myTVBleed->getValue();
   instance().frameBuffer().tiaSurface().ntsc().setCustomAdjustables(adj);
 
+  // TV jitter
+  instance().settings().setValue("tv.jitter", myTVJitter->getState());
+  instance().settings().setValue("tv.jitter_recovery", myTVJitterRecLabel->getLabel());
+  if(instance().hasConsole())
+  {
+    instance().console().tia().toggleJitter(myTVJitter->getState() ? 1 : 0);
+    instance().console().tia().setJitterRecoveryFactor(myTVJitterRec->getValue());
+  }
+
   // TV scanline intensity and interpolation
   instance().settings().setValue("tv.scanlines", myTVScanIntenseLabel->getLabel());
   instance().settings().setValue("tv.scaninter", myTVScanInterpolate->getState());
@@ -505,6 +527,11 @@ void VideoDialog::setDefaults()
       // Make sure that mutually-exclusive items are not enabled at the same time
       handleTVModeChange(NTSCFilter::PRESET_OFF);
       loadTVAdjustables(NTSCFilter::PRESET_CUSTOM);
+
+      // TV jitter
+      myTVJitterRec->setValue(10);
+      myTVJitterRecLabel->setLabel("10");
+      handleTVJitterChange(false);
       break;
     }
   }
@@ -553,6 +580,14 @@ void VideoDialog::handleTVModeChange(NTSCFilter::Preset preset)
 }
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+void VideoDialog::handleTVJitterChange(bool enable)
+{
+  myTVJitter->setState(enable);
+  myTVJitterRec->setEnabled(enable);
+  myTVJitterRecLabel->setEnabled(enable);
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 void VideoDialog::loadTVAdjustables(NTSCFilter::Preset preset)
 {
   NTSCFilter::Adjustable adj;
@@ -635,7 +670,10 @@ void VideoDialog::handleCommand(CommandSender* sender, int cmd,
       break;
     case kTVScanIntenseChanged:  myTVScanIntenseLabel->setValue(myTVScanIntense->getValue());
       break;
-
+    case kTVJitterChanged:  handleTVJitterChange(myTVJitter->getState());
+      break;
+    case kTVJitterRecChanged:  myTVJitterRecLabel->setValue(myTVJitterRec->getValue());
+      break;
     case kCloneCompositeCmd: loadTVAdjustables(NTSCFilter::PRESET_COMPOSITE);
       break;
     case kCloneSvideoCmd: loadTVAdjustables(NTSCFilter::PRESET_SVIDEO);
diff --git a/src/gui/VideoDialog.hxx b/src/gui/VideoDialog.hxx
index 0ec2fcb..5603a91 100644
--- a/src/gui/VideoDialog.hxx
+++ b/src/gui/VideoDialog.hxx
@@ -14,7 +14,7 @@
 // See the file "License.txt" for information on usage and redistribution of
 // this file, and for a DISCLAIMER OF ALL WARRANTIES.
 //
-// $Id: VideoDialog.hxx 3243 2015-12-29 23:45:21Z stephena $
+// $Id: VideoDialog.hxx 3279 2016-02-13 01:21:28Z stephena $
 //============================================================================
 
 #ifndef VIDEO_DIALOG_HXX
@@ -46,6 +46,7 @@ class VideoDialog : public Dialog
 
     void handleFullscreenChange(bool enable);
     void handleTVModeChange(NTSCFilter::Preset);
+    void handleTVJitterChange(bool enable);
     void loadTVAdjustables(NTSCFilter::Preset preset);
     void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
 
@@ -109,6 +110,11 @@ class VideoDialog : public Dialog
     ButtonWidget*     myCloneBad;
     ButtonWidget*     myCloneCustom;
 
+    // TV jitter effects
+    CheckboxWidget*   myTVJitter;
+    SliderWidget*     myTVJitterRec;
+    StaticTextWidget* myTVJitterRecLabel;
+
     enum {
       kNAspectRatioChanged = 'VDan',
       kPAspectRatioChanged = 'VDap',
@@ -127,6 +133,9 @@ class VideoDialog : public Dialog
       kTVGammaChanged      = 'TVga',
       kTVScanIntenseChanged= 'TVsc',
 
+      kTVJitterChanged     = 'TVjt',
+      kTVJitterRecChanged  = 'TVjr',
+
       kCloneCompositeCmd   = 'CLcp',
       kCloneSvideoCmd      = 'CLsv',
       kCloneRGBCmd         = 'CLrb',
diff --git a/src/macosx/Info-Stella.plist b/src/macosx/Info-Stella.plist
index 0c007e8..620bd8b 100644
--- a/src/macosx/Info-Stella.plist
+++ b/src/macosx/Info-Stella.plist
@@ -53,7 +53,7 @@
 	<key>CFBundleSignature</key>
 	<string>StLa</string>
 	<key>CFBundleVersion</key>
-	<string>4.7</string>
+	<string>4.7.1</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.games</string>
 	<key>LSMinimumSystemVersionByArchitecture</key>
diff --git a/src/macosx/stella.xcodeproj/project.pbxproj b/src/macosx/stella.xcodeproj/project.pbxproj
index f059d27..cc020f5 100644
--- a/src/macosx/stella.xcodeproj/project.pbxproj
+++ b/src/macosx/stella.xcodeproj/project.pbxproj
@@ -2526,7 +2526,8 @@
 				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				COPY_PHASE_STRIP = YES;
+				CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
+				COPY_PHASE_STRIP = NO;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				ENABLE_TESTABILITY = YES;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -2565,6 +2566,8 @@
 				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
+				COPY_PHASE_STRIP = NO;
 				FRAMEWORK_SEARCH_PATHS = (
 					.,
 					"$(HOME)/Library/Frameworks",
@@ -2600,6 +2603,8 @@
 				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
+				COPY_PHASE_STRIP = NO;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				FRAMEWORK_SEARCH_PATHS = /Library/Frameworks;
 				GCC_ENABLE_CPP_RTTI = NO;
diff --git a/src/tools/evdev-joystick/80-stelladaptor-joystick.rules b/src/tools/evdev-joystick/80-stelladaptor-joystick.rules
new file mode 100644
index 0000000..6a54707
--- /dev/null
+++ b/src/tools/evdev-joystick/80-stelladaptor-joystick.rules
@@ -0,0 +1,8 @@
+# Stelladaptor (Pixels Past / Stelladaptor 2600-to-USB Interface)
+KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="beef", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
+
+# 2600-daptor (Microchip Technology Inc. / 2600-daptor)
+KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="fa1d", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
+
+# 2600-daptor II (Microchip Technology Inc. / 2600-daptor II)
+KERNEL=="event*", NAME="input/%k", ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f947", ACTION=="add", RUN+="/usr/local/bin/evdev-joystick --e /dev/input/%k --d 0"
diff --git a/src/tools/evdev-joystick/License.txt b/src/tools/evdev-joystick/License.txt
new file mode 100644
index 0000000..4189933
--- /dev/null
+++ b/src/tools/evdev-joystick/License.txt
@@ -0,0 +1,339 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                      59 Temple Place, Suite 330, Boston, MA 02111 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/src/tools/evdev-joystick/Makefile b/src/tools/evdev-joystick/Makefile
new file mode 100644
index 0000000..2e87814
--- /dev/null
+++ b/src/tools/evdev-joystick/Makefile
@@ -0,0 +1,11 @@
+all : evdev-joystick
+
+evdev-joystick: evdev-joystick.c
+	gcc -Wall -O2 -o evdev-joystick evdev-joystick.c
+
+install: evdev-joystick 80-stelladaptor-joystick.rules
+	install -s evdev-joystick /usr/local/bin/
+	install -m 644 80-stelladaptor-joystick.rules /etc/udev/rules.d/
+
+clean:
+	rm -rf evdev-joystick
diff --git a/src/tools/evdev-joystick/Readme.txt b/src/tools/evdev-joystick/Readme.txt
new file mode 100644
index 0000000..c9eebe5
--- /dev/null
+++ b/src/tools/evdev-joystick/Readme.txt
@@ -0,0 +1,83 @@
+EVDEV-JOYSTICK
+--------------
+
+This program is based on G25manage, located at:
+  https://github.com/VDrift/vdrift/tree/master/tools/G25manage
+
+It is developed by Stephen Anthony, and released under the GPL/v2.
+
+evdev-joystick is used to set the deadzone for Linux 'evdev' joystick devices.
+Currently, other than G25manage there is no other standalone program available
+to perform such calibration.  This program was originally developed for Stella
+(stella.sf.net), an Atari 2600 emulator, and as such much of this document
+refers to Stella.  The program itself can be used to calibrate any joystick
+for any application, though, and is not specific to Stella.
+
+
+Short Explanation (Stella users with Stelladaptor, 2600-daptor, etc.)
+-----------------
+
+1)  Decompress the archive
+2)  Build the application by typing 'make'
+3)  Install it by typing 'sudo make install'
+4)  Unplug your 'daptor device, re-plug them, and play a game.
+
+
+Long Explanation (For the curious, or if something doesn't work, etc.)
+----------------
+
+1)  Decompress the archive
+2)  Build the application by typing 'make'
+
+3)  Type './evdev-joystick --l'.  For me, it produces output as follows:
+
+/dev/input/by-id/usb-Microsoft_Inc._Controller_101F9B0-event-joystick
+/dev/input/by-id/usb-Microchip_Technology_Inc._2600-daptor_II-event-joystick
+/dev/input/by-id/usb-RetroUSB.com_SNES_RetroPort-event-joystick
+
+4)  Make note of the name of the device.  For 2600-daptor II users, this
+    would be:
+
+/dev/input/by-id/usb-Microchip_Technology_Inc._2600-daptor_II-event-joystick
+
+5)  Check the current deadzone (known as 'flatness') by typing:
+      'evdev-joystick --s <NAME_OF_DEVICE>'
+    Again, for me, this will output the following:
+
+  Absolute axis 0x00 (0) (X Axis) (min: 0, max: 4095, flatness: 128 (=0.00%), fuzz: 15)
+  Absolute axis 0x01 (1) (Y Axis) (min: 0, max: 4095, flatness: 128 (=0.00%), fuzz: 15)
+  Absolute axis 0x02 (2) (Z Axis) (min: 0, max: 15, flatness: 0 (=0.00%), fuzz: 0)
+
+6)  Notice that the flatness/deadzone for axes 0 & 1 is 128.
+
+7)  Now, we change the deadzone by typing 'evdev-joystick --s <NAME_OF_DEVICE> --d 0'
+
+8)  Now check the current deadzone again by typing:
+      'evdev-joystick --s <NAME_OF_DEVICE>'
+
+  Absolute axis 0x00 (0) (X Axis) (min: 0, max: 4095, flatness: 0 (=0.00%), fuzz: 15)
+  Absolute axis 0x01 (1) (Y Axis) (min: 0, max: 4095, flatness: 0 (=0.00%), fuzz: 15)
+  Absolute axis 0x02 (2) (Z Axis) (min: 0, max: 15, flatness: 0 (=0.00%), fuzz: 0)
+
+9)  Note that the 'flatness' has changed to 0?  If so, then the program is
+    working as intended.
+
+10) Note that there are other options to the program.  You can change the
+    'fuzz' value, change attributes for only certain axis, etc.  See the
+    options by typing 'evdev-joystick'.
+
+11) Once you're certain that the application is working, type 'sudo make install'
+    to install it.
+
+
+RULES File
+----------
+
+Included in the archive is a udev .rules file that will automatically run
+evdev-joystick with the correct parameters for a Stelladaptor, 2600-daptor,
+and 2600-daptor II.  If you have another joystick you wish to modify,
+simply add the proper entry to the .rules file.  Note that it is necessary
+to add all joysticks (where you want to change the deadzone) to this file,
+since the settings are lost when the device is unplugged and plugged in again.
+When using a .rules file, the system will automatically re-run evdev-joystick
+and set your deadzone values again.
diff --git a/src/tools/evdev-joystick/evdev-joystick.c b/src/tools/evdev-joystick/evdev-joystick.c
new file mode 100644
index 0000000..d935215
--- /dev/null
+++ b/src/tools/evdev-joystick/evdev-joystick.c
@@ -0,0 +1,390 @@
+/**
+  This program is based on G25manage, located at:
+    https://github.com/VDrift/vdrift/tree/master/tools/G25manage
+
+  This code is released under the GPLv2, and modified from the
+  original by Stephen Anthony (stephena at users.sf.net).
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdint.h>
+#include <string.h>
+#include <dirent.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <asm/types.h>
+#include <fcntl.h>
+
+#include <linux/input.h>
+
+/* this macro is used to tell if "bit" is set in "array"
+ * it selects a byte from the array, and does a boolean AND 
+ * operation with a byte that only has the relevant bit set. 
+ * eg. to check for the 12th bit, we do (array[1] & 1<<4)
+ */
+#define test_bit(bit, array)    (array[bit/8] & (1<<(bit%8)))
+
+// The default location for evdev devices in Linux
+#define EVDEV_DIR "/dev/input/by-id/"
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+void help()
+{
+  printf("%s","Usage:\n\n"
+    "  --help, --h              The message you're now reading\n"
+    "  --listdevs, --l          List all joystick devices found\n"
+    "  --showcal, --s [path]    Show current calibration for joystick device\n"
+    "  --evdev, --e [path]      Set the joystick device to modify\n"
+    "  --deadzone, --d [val]    Change deadzone for current joystick\n"
+    "  --fuzz, --f [val]        Change fuzz for current joystick\n"
+    "  --axis, --a [val]        The axis to modify for current joystick (by default, all axes)\n"
+    "\n"
+    "To see calibration information: \n"
+    "  evdev-joystick [ --s /path/to/event/device/file ]\n"
+    "\n"
+    "To set the deadzone values:\n"
+    "  evdev-joystick [ --e /path/to/event/device/file --d deadzone_value [ --a axis_index ] ]\n"
+    "\n"
+    "Example:\n"
+    "\n"
+    "I want to see the calibration values of my event managed joystick:\n"
+    "  evdev-joystick --s /dev/input/event6\n"
+    "\n"
+    "Supported Absolute axes:\n"
+    "  Absolute axis 0x00 (0) (X Axis) (min: 0, max: 16383, flatness: 1023 (=6.24%), fuzz: 63)\n"
+    "  Absolute axis 0x01 (1) (Y Axis) (min: 0, max: 255, flatness: 15 (=5.88%), fuzz: 0)\n"
+    "  Absolute axis 0x02 (2) (Z Axis) (min: 0, max: 255, flatness: 15 (=5.88%), fuzz: 0)\n"
+    "  Absolute axis 0x05 (5) (Z Rate Axis) (min: 0, max: 255, flatness: 15 (=5.88%), fuzz: 0)\n"
+    "  Absolute axis 0x10 (16) (Hat zero, x axis) (min: -1, max: 1, flatness: 0 (=0.00%), fuzz: 0)\n"
+    "  Absolute axis 0x11 (17) (Hat zero, y axis) (min: -1, max: 1, flatness: 0 (=0.00%), fuzz: 0)\n"
+    "\n"
+    "I want to get rid of the deadzone on all axes on my joystick:\n"
+    "  evdev-joystick --e /dev/input/event6 --d 0\n"
+    "\n");
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+void listDevices()
+{
+  DIR* dirp = opendir(EVDEV_DIR);
+  struct dirent* dp;
+
+  if(dirp == NULL)
+    return;
+
+  // Loop over dir entries using readdir
+  int len = strlen("event-joystick");
+  while((dp = readdir(dirp)) != NULL)
+  {
+    // Only select names that end in 'event-joystick'
+    int devlen = strlen(dp->d_name);
+    if(devlen >= len)
+    {
+      const char* start = dp->d_name + devlen - len;
+      if(strncmp(start, "event-joystick", len) == 0)
+        printf("%s%s\n", EVDEV_DIR, dp->d_name);
+    }
+  }
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+void printAxisType(int i)
+{
+  switch(i)
+  {
+    case ABS_X :        printf(" (X Axis) ");             break;
+    case ABS_Y :        printf(" (Y Axis) ");             break;
+    case ABS_Z :        printf(" (Z Axis) ");             break;
+    case ABS_RX :       printf(" (X Rate Axis) ");        break;
+    case ABS_RY :       printf(" (Y Rate Axis) ");        break;
+    case ABS_RZ :       printf(" (Z Rate Axis) ");        break;
+    case ABS_THROTTLE : printf(" (Throttle) ");           break;
+    case ABS_RUDDER :   printf(" (Rudder) ");             break;
+    case ABS_WHEEL :    printf(" (Wheel) ");              break;
+    case ABS_GAS :      printf(" (Accelerator) ");        break;
+    case ABS_BRAKE :    printf(" (Brake) ");              break;
+    case ABS_HAT0X :    printf(" (Hat zero, x axis) ");   break;
+    case ABS_HAT0Y :    printf(" (Hat zero, y axis) ");   break;
+    case ABS_HAT1X :    printf(" (Hat one, x axis) ");    break;
+    case ABS_HAT1Y :    printf(" (Hat one, y axis) ");    break;
+    case ABS_HAT2X :    printf(" (Hat two, x axis) ");    break;
+    case ABS_HAT2Y :    printf(" (Hat two, y axis) ");    break;
+    case ABS_HAT3X :    printf(" (Hat three, x axis) ");  break;
+    case ABS_HAT3Y :    printf(" (Hat three, y axis) ");  break;
+    case ABS_PRESSURE : printf(" (Pressure) ");           break;
+    case ABS_DISTANCE : printf(" (Distance) ");           break;
+    case ABS_TILT_X :   printf(" (Tilt, X axis) ");       break;
+    case ABS_TILT_Y :   printf(" (Tilt, Y axis) ");       break;
+    case ABS_MISC :     printf(" (Miscellaneous) ");      break;
+    default:            printf(" (Unknown absolute feature) ");
+  }
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+int showCalibration(const char* evdev)
+{
+  int fd = -1, axisindex;
+  uint8_t abs_bitmask[ABS_MAX/8 + 1];
+  float percent_deadzone;
+  struct input_absinfo abs_features;
+
+  if((fd = open(evdev, O_RDONLY)) < 0)
+  {
+    perror("evdev open");
+    return 1;
+  }
+
+  memset(abs_bitmask, 0, sizeof(abs_bitmask));
+  if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(abs_bitmask)), abs_bitmask) < 0)
+    perror("evdev ioctl");
+
+  printf("Supported Absolute axes:\n");
+
+  for(axisindex = 0; axisindex < ABS_MAX; ++axisindex)
+  {
+    if(test_bit(axisindex, abs_bitmask))
+    {
+      // This means that the bit is set in the axes list
+      printf("  Absolute axis 0x%02x (%d)", axisindex, axisindex);
+      printAxisType(axisindex);
+
+      if(ioctl(fd, EVIOCGABS(axisindex), &abs_features))
+        perror("evdev EVIOCGABS ioctl");
+
+      percent_deadzone = (float)abs_features.flat * 100 / (float)abs_features.maximum;
+      printf("(min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
+        abs_features.minimum, abs_features.maximum, abs_features.flat,
+        percent_deadzone, abs_features.fuzz);
+    }
+  }
+
+  close(fd);
+  return 0;
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+int setDeadzoneAndFuzz(const char* evdev, int axisindex,
+                       __s32 deadzonevalue, __s32 fuzzvalue)
+{
+  int fd = -1;
+  uint8_t abs_bitmask[ABS_MAX/8 + 1];
+  float percent_deadzone;
+  struct input_absinfo abs_features;
+
+  if ((fd = open(evdev, O_RDONLY)) < 0)
+  {
+    perror("evdev open");
+    return 1;
+  }
+
+  memset(abs_bitmask, 0, sizeof(abs_bitmask));
+  if(ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(abs_bitmask)), abs_bitmask) < 0)
+    perror("evdev ioctl");
+
+  int axis_first = 0, axis_last = ABS_MAX;
+  if(axisindex >= 0 && axisindex < ABS_MAX)
+  {
+    axis_first = axisindex;
+    axis_last = axisindex + 1;
+  }
+
+  for(axisindex = axis_first; axisindex < axis_last; ++axisindex)
+  {
+    if(test_bit(axisindex, abs_bitmask))
+    {
+      /* this means that the bit is set in the axes list */
+      printf("  Absolute axis 0x%02x (%d)", axisindex, axisindex);
+      printAxisType(axisindex);
+
+      if(ioctl(fd, EVIOCGABS(axisindex), &abs_features))
+      {
+        perror("evdev EVIOCGABS ioctl");
+        return 1;
+      }
+
+      if(deadzonevalue != -1)
+      {
+        if(deadzonevalue < abs_features.minimum ||
+           deadzonevalue > abs_features.maximum )
+        {
+          printf("Deadzone value must be between %d and %d for this axis, "
+                 "value requested : %d\n",
+            abs_features.minimum, abs_features.maximum, deadzonevalue);
+        }
+
+        printf("Setting deadzone value to : %d\n", deadzonevalue);
+        abs_features.flat = deadzonevalue;
+      }
+
+      if(fuzzvalue != -1)
+      {
+        if(fuzzvalue < abs_features.minimum ||
+           fuzzvalue > abs_features.maximum )
+        {
+          printf("Fuzz value must be between %d and %d for this axis, "
+                 "value requested : %d\n",
+            abs_features.minimum, abs_features.maximum, fuzzvalue);
+        }
+
+        printf("Setting fuzz value to : %d\n", fuzzvalue);
+        abs_features.fuzz = fuzzvalue;
+      }
+
+      if(ioctl(fd, EVIOCSABS(axisindex), &abs_features))
+      {
+        perror("evdev EVIOCSABS ioctl");
+        return 1;
+      }
+      if(ioctl(fd, EVIOCGABS(axisindex), &abs_features))
+      {
+        perror("evdev EVIOCGABS ioctl");
+        return 1;
+      }
+      percent_deadzone = (float)abs_features.flat * 100 / (float)abs_features.maximum;
+      printf("    (min: %d, max: %d, flatness: %d (=%.2f%%), fuzz: %d)\n",
+        abs_features.minimum, abs_features.maximum, abs_features.flat,
+        percent_deadzone, abs_features.fuzz);
+    }
+  }
+
+  close(fd);
+  return 0;
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+int main(int argc, char* argv[])
+{
+  char* evdevice = NULL;
+  int c, axisindex = -1;
+  __s32 flat = -1, fuzz = -1;
+
+  // Show help by default
+  if(argc == 1)
+  {
+    help();
+    exit(0);
+  }
+
+  while(1)
+  {
+    static struct option long_options[] =
+    {
+      { "help",     no_argument,       0, 'h' },
+      { "listdevs", no_argument,       0, 'l' },
+      { "showcal",  required_argument, 0, 's' },
+      { "evdev",    required_argument, 0, 'e' },
+      { "deadzone", required_argument, 0, 'd' },
+      { "fuzz",     required_argument, 0, 'f' },
+      { "axis",     required_argument, 0, 'a' },
+      { 0, 0, 0, 0 }
+    };
+    // getopt_long stores the option index here
+    int option_index = 0;
+
+    c = getopt_long(argc, argv, "h:l:s:e:d:f:a:", long_options, &option_index);
+
+    // Detect the end of the options
+    if(c == -1)
+      break;
+
+    switch(c)
+    {
+      case 0:
+        // If this option set a flag, do nothing else now.
+        if(long_options[option_index].flag != 0)
+          break;
+        printf("option %s", long_options[option_index].name);
+        if(optarg)
+          printf(" with arg %s", optarg);
+        printf("\n");
+        break;
+
+      case 'h':
+        help();
+        break;
+
+      case 'l':
+        listDevices();
+        break;
+
+      case 's':
+        evdevice = optarg;
+        showCalibration(evdevice);
+        break;
+
+      case 'e':
+        evdevice = optarg;
+        printf("Event device file: %s\n", evdevice);
+        break;
+
+      case 'd':
+        flat = atoi(optarg);
+        printf("New dead zone value: %d\n", flat);
+        break;
+
+      case 'f':
+        fuzz = atoi(optarg);
+        printf("New fuzz value: %d\n", fuzz);
+        break;
+
+      case 'a':
+        axisindex = atoi(optarg);
+        printf("Axis index to deal with: %d\n", axisindex);
+        break;
+
+      case '?':
+        // getopt_long already printed an error message.
+        break;
+
+      default:
+        abort();
+    }
+  }
+
+  // Print any remaining command line arguments (not options).
+  if(optind < argc)
+  {
+    printf("non-option ARGV-elements: ");
+    while(optind < argc)
+      printf("%s ", argv[optind++]);
+    putchar('\n');
+  }
+
+  if(flat != -1 || fuzz != -1)
+  {
+    if(evdevice == NULL)
+    {
+      printf( "You must specify the event device for your joystick\n" );
+      exit(1);
+    }
+    else
+    {
+      if(axisindex == -1)
+      {
+        if(flat != -1)
+          printf( "Trying to set all axes deadzone to: %d\n", flat);
+        if(fuzz != -1)
+          printf( "Trying to set all axes fuzz to: %d\n", fuzz);
+      }
+      else
+      {
+        if(flat != -1)
+          printf( "Trying to set axis %d deadzone to: %d\n", axisindex, flat);
+        if(fuzz != -1)
+          printf( "Trying to set axis %d fuzz to: %d\n", axisindex, fuzz);
+      }
+
+      setDeadzoneAndFuzz(evdevice, axisindex, flat, fuzz);
+    }
+  }
+
+  exit(0);
+}
diff --git a/src/unix/stella.spec b/src/unix/stella.spec
index c4a36c5..9262c8c 100644
--- a/src/unix/stella.spec
+++ b/src/unix/stella.spec
@@ -1,5 +1,5 @@
 %define name    stella
-%define version 4.7
+%define version 4.7.1
 %define rel     1
 
 %define enable_sound 1
@@ -101,6 +101,9 @@ rm -rf $RPM_BUILD_DIR/%{name}-%{version}
 %_datadir/icons/large/%{name}.png
 
 %changelog
+* Sat Feb 13 2016 Stephen Anthony <stephena at users.sf.net> 4.7.1-1
+- Version 4.7.1 release
+
 * Mon Jan 25 2016 Stephen Anthony <stephena at users.sf.net> 4.7-1
 - Version 4.7 release
 
diff --git a/src/windows/SDL-2.0.3_Alt-Beep.diff b/src/windows/SDL-2.0.3_Alt-Beep.diff
deleted file mode 100644
index 7337082..0000000
--- a/src/windows/SDL-2.0.3_Alt-Beep.diff
+++ /dev/null
@@ -1,29 +0,0 @@
---- SDL_windowsevents.c.orig	2014-03-16 00:01:43.000000000 -0230
-+++ SDL_windowsevents.c	2014-09-07 17:51:51.983290900 -0230
-@@ -765,19 +765,23 @@
-         }
-         return (1);
- 
--#if defined(SC_SCREENSAVE) || defined(SC_MONITORPOWER)
-     case WM_SYSCOMMAND:
-         {
-+            /* Disable beep on Alt-key press */
-+            if ((wParam & 0xFFF0) == SC_KEYMENU) {
-+                return (0);
-+            }
-+#if defined(SC_SCREENSAVE) || defined(SC_MONITORPOWER)
-             /* Don't start the screensaver or blank the monitor in fullscreen apps */
--            if ((wParam & 0xFFF0) == SC_SCREENSAVE ||
-+            else if ((wParam & 0xFFF0) == SC_SCREENSAVE ||
-                 (wParam & 0xFFF0) == SC_MONITORPOWER) {
-                 if (SDL_GetVideoDevice()->suspend_screensaver) {
-                     return (0);
-                 }
-             }
-+#endif /* System has screensaver support */
-         }
-         break;
--#endif /* System has screensaver support */
- 
-     case WM_CLOSE:
-         {
diff --git a/src/windows/stella.rc b/src/windows/stella.rc
index 5c0728f..daed07e 100755
--- a/src/windows/stella.rc
+++ b/src/windows/stella.rc
@@ -36,8 +36,8 @@ IDI_ICON                ICON                    "stella.ico"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 4,7,0,0
- PRODUCTVERSION 4,7,0,0
+ FILEVERSION 4,7,1,0
+ PRODUCTVERSION 4,7,1,0
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -55,12 +55,12 @@ BEGIN
             VALUE "Comments", "The multi-platform Atari 2600 emulator.  Stella is released under the GPLv2."
             VALUE "CompanyName", "The Stella Team (http://stella.sourceforge.net)"
             VALUE "FileDescription", "Stella"
-            VALUE "FileVersion", "4.7"
+            VALUE "FileVersion", "4.7.1"
             VALUE "InternalName", "Stella"
             VALUE "LegalCopyright", "Copyright (C) 1995-2016 The Stella Team"
             VALUE "OriginalFilename", "Stella.exe"
             VALUE "ProductName", "Stella"
-            VALUE "ProductVersion", "4.7"
+            VALUE "ProductVersion", "4.7.1"
         END
     END
     BLOCK "VarFileInfo"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/stella.git



More information about the Pkg-games-commits mailing list