From 3ca571fdd8cb7c8373c17a4dbadc7c3e43d4d16e Mon Sep 17 00:00:00 2001 From: stephena Date: Tue, 10 Jan 2006 20:37:00 +0000 Subject: [PATCH] More work on the phosphor effect. It's now configurable from the commandline. Two new CL arguments have been added (but these might change): 1) -pp : sets the new 'Display.Phoshor' property 2) -ppblend <0-100>: sets the amount to blend in phosphor mode Note that if 'pp' isn't set, then it won't matter what 'ppblend' is set to, since phosphor won't be used at all. Some performance tweaks are still required, and software mode isn't yet supported. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@949 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/common/FrameBufferGL.cxx | 93 ++++++++++++++++++--------- stella/src/common/FrameBufferGL.hxx | 9 ++- stella/src/common/FrameBufferSoft.cxx | 11 +++- stella/src/common/FrameBufferSoft.hxx | 9 ++- stella/src/emucore/Console.cxx | 8 ++- stella/src/emucore/FrameBuffer.cxx | 41 +++++++----- stella/src/emucore/FrameBuffer.hxx | 15 ++++- stella/src/emucore/PropsSet.cxx | 4 +- stella/src/emucore/Settings.cxx | 9 ++- stella/src/emucore/stella.pro | 84 ------------------------ 10 files changed, 142 insertions(+), 141 deletions(-) diff --git a/stella/src/common/FrameBufferGL.cxx b/stella/src/common/FrameBufferGL.cxx index ccaa89538..46de9ea86 100644 --- a/stella/src/common/FrameBufferGL.cxx +++ b/stella/src/common/FrameBufferGL.cxx @@ -13,11 +13,9 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.cxx,v 1.45 2006-01-10 02:22:38 stephena Exp $ +// $Id: FrameBufferGL.cxx,v 1.46 2006-01-10 20:37:00 stephena Exp $ //============================================================================ -//#define USE_PHOSPHOR - #ifdef DISPLAY_OPENGL #include @@ -222,37 +220,60 @@ void FrameBufferGL::drawMediaSource() uInt32 height = mediasrc.height(); uInt16* buffer = (uInt16*) myTexture->pixels; - register uInt32 y; - for(y = 0; y < height; ++y ) + // TODO - is this fast enough? + register uInt32 x, y; + switch((int)myUsePhosphor) // use switch/case, since we'll eventually have filters { - const uInt32 bufofsY = y * width; - const uInt32 screenofsY = y * myTexture->w; - - register uInt32 x; - for(x = 0; x < width; ++x ) - { - const uInt32 bufofs = bufofsY + x; - uInt8 v = currentFrame[bufofs]; - uInt8 w = previousFrame[bufofs]; - -#ifndef USE_PHOSPHOR - if(v != w || theRedrawTIAIndicator) -#endif + case 0: + for(y = 0; y < height; ++y ) { - // If we ever get to this point, we know the current and previous - // buffers differ. In that case, make sure the changes are - // are drawn in postFrameUpdate() - theRedrawTIAIndicator = true; + const uInt32 bufofsY = y * width; + const uInt32 screenofsY = y * myTexture->w; - // x << 1 is times 2 ( doubling width ) - const uInt32 pos = screenofsY + (x << 1); -#ifdef USE_PHOSPHOR - buffer[pos] = buffer[pos+1] = (uInt16) myAvgPalette[v][w]; -#else - buffer[pos] = buffer[pos+1] = (uInt16) myPalette[v]; -#endif + for(x = 0; x < width; ++x ) + { + const uInt32 bufofs = bufofsY + x; + uInt8 v = currentFrame[bufofs]; + uInt8 w = previousFrame[bufofs]; + + if(v != w || theRedrawTIAIndicator) + { + // If we ever get to this point, we know the current and previous + // buffers differ. In that case, make sure the changes are + // are drawn in postFrameUpdate() + theRedrawTIAIndicator = true; + + // x << 1 is times 2 ( doubling width ) + const uInt32 pos = screenofsY + (x << 1); + buffer[pos] = buffer[pos+1] = (uInt16) myPalette[v]; + } + } } - } + break; + + case 1: // TODO - profile this, maybe we can get rid of mult's? + for(y = 0; y < height; ++y ) + { + const uInt32 bufofsY = y * width; + const uInt32 screenofsY = y * myTexture->w; + + for(x = 0; x < width; ++x ) + { + const uInt32 bufofs = bufofsY + x; + uInt8 v = currentFrame[bufofs]; + uInt8 w = previousFrame[bufofs]; + + // If we ever get to this point, we know the current and previous + // buffers differ. In that case, make sure the changes are + // are drawn in postFrameUpdate() + theRedrawTIAIndicator = true; + + // x << 1 is times 2 ( doubling width ) + const uInt32 pos = screenofsY + (x << 1); + buffer[pos] = buffer[pos+1] = (uInt16) myAvgPalette[v][w]; + } + } + break; } } @@ -444,6 +465,18 @@ void FrameBufferGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) myDirtyFlag = true; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBufferGL::enablePhosphor(bool enable) +{ + myUsePhosphor = enable; + myPhosphorBlend = myOSystem->settings().getInt("ppblend"); + +cerr << "phosphor effect: " << (myUsePhosphor ? "yes" : "no") << endl + << "phosphor amount: " << myPhosphorBlend << endl << endl; + + // FIXME - change rendering method +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool FrameBufferGL::createTextures() { diff --git a/stella/src/common/FrameBufferGL.hxx b/stella/src/common/FrameBufferGL.hxx index 3ef30c205..ccb34d345 100644 --- a/stella/src/common/FrameBufferGL.hxx +++ b/stella/src/common/FrameBufferGL.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.hxx,v 1.25 2005-10-09 17:31:47 stephena Exp $ +// $Id: FrameBufferGL.hxx,v 1.26 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_GL_HXX @@ -37,7 +37,7 @@ class GUI::Font; This class implements an SDL OpenGL framebuffer. @author Stephen Anthony - @version $Id: FrameBufferGL.hxx,v 1.25 2005-10-09 17:31:47 stephena Exp $ + @version $Id: FrameBufferGL.hxx,v 1.26 2006-01-10 20:37:00 stephena Exp $ */ class FrameBufferGL : public FrameBuffer { @@ -188,6 +188,11 @@ class FrameBufferGL : public FrameBuffer */ virtual void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h); + /** + Enable/disable phosphor effect + */ + virtual void enablePhosphor(bool enable); + private: bool createTextures(); diff --git a/stella/src/common/FrameBufferSoft.cxx b/stella/src/common/FrameBufferSoft.cxx index a183bae37..27d8a2580 100644 --- a/stella/src/common/FrameBufferSoft.cxx +++ b/stella/src/common/FrameBufferSoft.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.cxx,v 1.39 2005-10-18 18:49:46 stephena Exp $ +// $Id: FrameBufferSoft.cxx,v 1.40 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #include @@ -482,6 +482,15 @@ void FrameBufferSoft::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) // << "x=" << temp.x << ", y=" << temp.y << ", w=" << temp.w << ", h=" << temp.h << endl; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBufferSoft::enablePhosphor(bool enable) +{ + // FIXME - implement for software mode +// myUsePhosphor = enable; +// myPhosphorBlend = blend; +} + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RectList::RectList(Uint32 size) { diff --git a/stella/src/common/FrameBufferSoft.hxx b/stella/src/common/FrameBufferSoft.hxx index 0f558a3f2..8cf083033 100644 --- a/stella/src/common/FrameBufferSoft.hxx +++ b/stella/src/common/FrameBufferSoft.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.hxx,v 1.25 2005-10-09 17:31:47 stephena Exp $ +// $Id: FrameBufferSoft.hxx,v 1.26 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_SOFT_HXX @@ -35,7 +35,7 @@ class RectList; This class implements an SDL software framebuffer. @author Stephen Anthony - @version $Id: FrameBufferSoft.hxx,v 1.25 2005-10-09 17:31:47 stephena Exp $ + @version $Id: FrameBufferSoft.hxx,v 1.26 2006-01-10 20:37:00 stephena Exp $ */ class FrameBufferSoft : public FrameBuffer { @@ -186,6 +186,11 @@ class FrameBufferSoft : public FrameBuffer */ virtual void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h); + /** + Enable/disable phosphor effect + */ + virtual void enablePhosphor(bool enable); + protected: // Used in the dirty update of the SDL surface RectList* myRectList; diff --git a/stella/src/emucore/Console.cxx b/stella/src/emucore/Console.cxx index 5c3b23cc0..6ef790cfb 100644 --- a/stella/src/emucore/Console.cxx +++ b/stella/src/emucore/Console.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Console.cxx,v 1.79 2006-01-08 02:28:03 stephena Exp $ +// $Id: Console.cxx,v 1.80 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #include @@ -385,6 +385,8 @@ void Console::initializeVideo() myOSystem->frameBuffer().initialize(title, myMediaSource->width() << 1, myMediaSource->height()); + bool enable = myProperties.get("Display.Phosphor", true) == "YES"; + myOSystem->frameBuffer().enablePhosphor(enable); setPalette(); } @@ -669,6 +671,10 @@ void Console::setDeveloperProperties() if(s != "") myProperties.set("Display.Height", s); + s = settings.getString("pp"); + if(s != "") + myProperties.set("Display.Phosphor", s); + s = settings.getString("hmove"); if(s != "") myProperties.set("Emulation.HmoveBlanks", s); diff --git a/stella/src/emucore/FrameBuffer.cxx b/stella/src/emucore/FrameBuffer.cxx index 73ce448c3..63bcd6224 100644 --- a/stella/src/emucore/FrameBuffer.cxx +++ b/stella/src/emucore/FrameBuffer.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.cxx,v 1.70 2006-01-10 02:09:34 stephena Exp $ +// $Id: FrameBuffer.cxx,v 1.71 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #include @@ -50,6 +50,8 @@ FrameBuffer::FrameBuffer(OSystem* osystem) theZoomLevel(2), theMaxZoomLevel(2), theAspectRatio(1.0), + myUsePhosphor(false), + myPhosphorBlend(77), myFrameRate(0), myPauseStatus(false), myMessageTime(0), @@ -120,8 +122,14 @@ void FrameBuffer::initialize(const string& title, uInt32 width, uInt32 height, initSubsystem(); // Set emulation palette if a console exists + // Used when entering/exiting debugger +#ifdef DEVELOPER_SUPPORT if(&myOSystem->console()) + { + enablePhosphor(myOSystem->console().properties().get("Display.Phosphor", true) == "YES"); setPalette(myOSystem->console().mediaSource().palette()); + } +#endif // Enable unicode so we can see translated key events // (lowercase vs. uppercase characters) @@ -269,22 +277,25 @@ void FrameBuffer::setPalette(const uInt32* palette) } // Set palette for phosphor effect - for(i = 0; i < 256; ++i) + if(myUsePhosphor) { - for(j = 0; j < 256; ++j) + for(i = 0; i < 256; ++i) { - uInt8 ri = (uInt8) ((palette[i] & 0x00ff0000) >> 16); - uInt8 gi = (uInt8) ((palette[i] & 0x0000ff00) >> 8); - uInt8 bi = (uInt8) (palette[i] & 0x000000ff); - uInt8 rj = (uInt8) ((palette[j] & 0x00ff0000) >> 16); - uInt8 gj = (uInt8) ((palette[j] & 0x0000ff00) >> 8); - uInt8 bj = (uInt8) (palette[j] & 0x000000ff); + for(j = 0; j < 256; ++j) + { + uInt8 ri = (uInt8) ((palette[i] & 0x00ff0000) >> 16); + uInt8 gi = (uInt8) ((palette[i] & 0x0000ff00) >> 8); + uInt8 bi = (uInt8) (palette[i] & 0x000000ff); + uInt8 rj = (uInt8) ((palette[j] & 0x00ff0000) >> 16); + uInt8 gj = (uInt8) ((palette[j] & 0x0000ff00) >> 8); + uInt8 bj = (uInt8) (palette[j] & 0x000000ff); - Uint8 r = (Uint8) getPhosphor(ri, rj); - Uint8 g = (Uint8) getPhosphor(gi, gj); - Uint8 b = (Uint8) getPhosphor(bi, bj); + Uint8 r = (Uint8) getPhosphor(ri, rj); + Uint8 g = (Uint8) getPhosphor(gi, gj); + Uint8 b = (Uint8) getPhosphor(bi, bj); - myAvgPalette[i][j] = mapRGB(r, g, b); + myAvgPalette[i][j] = mapRGB(r, g, b); + } } } @@ -650,12 +661,10 @@ void FrameBuffer::drawString(const GUI::Font* font, const string& s, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt8 FrameBuffer::getPhosphor(uInt8 c1, uInt8 c2) { -int PHOSPHOR = 77; // FIXME - make this configurable - if(c2 > c1) SWAP(c1, c2); - return ((c1 - c2) * PHOSPHOR)/100 + c2; + return ((c1 - c2) * myPhosphorBlend)/100 + c2; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/emucore/FrameBuffer.hxx b/stella/src/emucore/FrameBuffer.hxx index 487b11a58..267d1aa9a 100644 --- a/stella/src/emucore/FrameBuffer.hxx +++ b/stella/src/emucore/FrameBuffer.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.hxx,v 1.61 2006-01-10 02:09:34 stephena Exp $ +// $Id: FrameBuffer.hxx,v 1.62 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_HXX @@ -51,7 +51,7 @@ enum FrameStyle { All GUI elements (ala ScummVM) are drawn here as well. @author Stephen Anthony - @version $Id: FrameBuffer.hxx,v 1.61 2006-01-10 02:09:34 stephena Exp $ + @version $Id: FrameBuffer.hxx,v 1.62 2006-01-10 20:37:00 stephena Exp $ */ class FrameBuffer { @@ -393,6 +393,11 @@ class FrameBuffer */ virtual void addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) = 0; + /** + Enable/disable phosphor effect + */ + virtual void enablePhosphor(bool enable) = 0; + protected: // The parent system for the framebuffer OSystem* myOSystem; @@ -439,6 +444,12 @@ class FrameBuffer // Use dirty updates (SDL_UpdateRects instead of SDL_UpdateRect) bool myUseDirtyRects; + // Use phosphor effect (aka no flicker on 30Hz screens) + bool myUsePhosphor; + + // Amount to blend when using phosphor effect + int myPhosphorBlend; + // Table of RGB values for GUI elements static const uInt8 ourGUIColors[kNumColors-256][3]; diff --git a/stella/src/emucore/PropsSet.cxx b/stella/src/emucore/PropsSet.cxx index a7ebdff4a..861f7cbca 100644 --- a/stella/src/emucore/PropsSet.cxx +++ b/stella/src/emucore/PropsSet.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: PropsSet.cxx,v 1.15 2006-01-08 02:28:03 stephena Exp $ +// $Id: PropsSet.cxx,v 1.16 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #include @@ -232,8 +232,8 @@ const Properties& PropertiesSet::defaultProperties() ourDefaultProperties.set("Display.Width", "160"); ourDefaultProperties.set("Display.YStart", "34"); ourDefaultProperties.set("Display.Height", "210"); + ourDefaultProperties.set("Display.Phosphor", "No"); - ourDefaultProperties.set("Emulation.CPU", "Auto-detect"); ourDefaultProperties.set("Emulation.HmoveBlanks", "Yes"); return ourDefaultProperties; diff --git a/stella/src/emucore/Settings.cxx b/stella/src/emucore/Settings.cxx index 0c9035164..e12b00479 100644 --- a/stella/src/emucore/Settings.cxx +++ b/stella/src/emucore/Settings.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Settings.cxx,v 1.73 2006-01-09 16:50:01 stephena Exp $ +// $Id: Settings.cxx,v 1.74 2006-01-10 20:37:00 stephena Exp $ //============================================================================ #include @@ -40,6 +40,7 @@ Settings::Settings(OSystem* osystem) // Now fill it with options that are common to all versions of Stella set("video", "soft"); set("dirtyrects", "true"); + set("ppblend", "77"); set("gl_filter", "nearest"); set("gl_aspect", "2.0"); @@ -252,6 +253,10 @@ void Settings::validate() if(s != "standard" && s != "original" && s != "z26") set("palette", "standard"); + i = getInt("ppblend"); + if(i < 0) set("ppblend", "0"); + if(i > 100) set("ppblend", "100"); + s = getString("romname"); if(s != "romname" && s != "md5sum") set("ssname", "romname"); @@ -289,6 +294,7 @@ void Settings::usage() << " standard|\n" << " z26>\n" << " -framerate Display the given number of frames per second\n" + << " -ppblend Set blending for phosphor effect, if enabled (0-100)\n" << endl #ifdef SOUND_SUPPORT << " -sound <1|0> Enable sound generation\n" @@ -345,6 +351,7 @@ void Settings::usage() << " -ystart Sets the 'Display.YStart' property\n" << " -width Sets the 'Display.Width' property\n" << " -height Sets the 'Display.Height' property\n" + << " -pp Sets the 'Display.Phosphor' property\n" << " -hmove Sets the 'Emulation.HmoveBlanks' property\n" #endif << endl; diff --git a/stella/src/emucore/stella.pro b/stella/src/emucore/stella.pro index b7f01a4fa..7ff422717 100644 --- a/stella/src/emucore/stella.pro +++ b/stella/src/emucore/stella.pro @@ -177,7 +177,6 @@ "Controller.Left" "Paddles" "Controller.Right" "Paddles" "Display.Height" "192" -"Emulation.CPU" "High" "" "Cartridge.MD5" "01297d9b450455dd716db9658efb2fae" @@ -383,7 +382,6 @@ "Cartridge.Rarity" "Rare" "Cartridge.Type" "AR" "Display.YStart" "30" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -808,7 +806,6 @@ "Controller.Right" "Paddles" "Display.Format" "PAL" "Display.Height" "205" -"Emulation.CPU" "High" "Display.YStart" "55" "" @@ -1089,7 +1086,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "33" -"Emulation.CPU" "High" "" "Cartridge.MD5" "0b577e63b0c64f9779f315dca8967587" @@ -1381,7 +1377,6 @@ "Controller.Left" "Paddles" "Controller.Right" "Paddles" "Display.Format" "PAL" -"Emulation.CPU" "High" "Display.YStart" "50" "" @@ -1686,7 +1681,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "12bca8305d5ab8ea51fe1cfd95d7ab0e" @@ -2595,7 +2589,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "35" -"Emulation.CPU" "High" "" "Cartridge.MD5" "1e1817d9cbcc3ba75043b7db4e6c228f" @@ -2671,7 +2664,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -3320,7 +3312,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "56" -"Emulation.CPU" "High" "" "Cartridge.MD5" "26f4f8b098609164effef7809e0121e1" @@ -3390,7 +3381,6 @@ "Display.Format" "PAL" "Display.Height" "200" "Display.YStart" "38" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -3813,7 +3803,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "2c9fadd510509cc7f28f1ccba931855f" @@ -3873,7 +3862,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "2d9e5d8d083b6367eda880e80dfdfaeb" @@ -3961,7 +3949,6 @@ "Display.Height" "198" "Display.Width" "152" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "2e82a1628ef6c735c0ab8fa92927e9b0" @@ -4328,7 +4315,6 @@ "Cartridge.Manufacturer" "CCE" "Display.Height" "190" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "32ecb5a652eb73d287e883eea751d99c" @@ -4512,7 +4498,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -4676,7 +4661,6 @@ "Controller.Left" "Paddles" "Controller.Right" "Paddles" "Display.Height" "192" -"Emulation.CPU" "High" "" "Cartridge.MD5" "36edef446ab4c2395666efc672b92ed0" @@ -4777,7 +4761,6 @@ "Display.Width" "136" "Display.XStart" "8" "Display.YStart" "32" -"Emulation.CPU" "High" "" "Cartridge.MD5" "3856b9425cc0185ed770376a62af0282" @@ -5884,7 +5867,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "468f2dec984f3d4114ea84f05edf82b6" @@ -6285,7 +6267,6 @@ "Cartridge.Type" "AR" "Display.Height" "200" "Display.YStart" "38" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -6340,7 +6321,6 @@ "Cartridge.ModelNo" "AR-4302" "Cartridge.Rarity" "Extremely Rare" "Cartridge.Type" "AR" -"Emulation.CPU" "High" "Display.YStart" "25" "" @@ -6371,7 +6351,6 @@ "Cartridge.Rarity" "Rare" "Cartridge.Type" "AR" "Display.YStart" "30" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -6859,7 +6838,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "35" -"Emulation.CPU" "High" "" "Cartridge.MD5" "52b448757081fd9fabf859f4e2f91f6b" @@ -7011,7 +6989,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "35" -"Emulation.CPU" "High" "" "Cartridge.MD5" "5494b9ee403d9757f0fd1f749e80214a" @@ -7127,7 +7104,6 @@ "Cartridge.Rarity" "Common" "Display.Height" "190" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "568371fbae6f5e5b936af80031cd8888" @@ -7413,7 +7389,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "5b6f5bcbbde42fc77d0bdb3146693565" @@ -7654,7 +7629,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "5eeb81292992e057b290a5cd196f155d" @@ -7737,7 +7711,6 @@ "Cartridge.Rarity" "Common" "Display.Height" "190" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "5f708ca39627697e859d1c53f8d8d7d2" @@ -7794,7 +7767,6 @@ "Display.Width" "152" "Display.XStart" "4" "Display.YStart" "32" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -8108,7 +8080,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -8364,7 +8335,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "66bc1bef269ea59033928bac2d1d81e6" @@ -8380,7 +8350,6 @@ "Display.Width" "136" "Display.XStart" "8" "Display.YStart" "32" -"Emulation.CPU" "High" "" "Cartridge.MD5" "66b92ede655b73b402ecd1f4d8cd9c50" @@ -8465,7 +8434,6 @@ "Display.Width" "136" "Display.XStart" "8" "Display.YStart" "32" -"Emulation.CPU" "High" "" "Cartridge.MD5" "67cf913d1df0bf2d7ae668060d0b6694" @@ -8608,7 +8576,6 @@ "Cartridge.Rarity" "Rare" "Cartridge.Type" "AR" "Display.YStart" "30" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -9024,7 +8991,6 @@ "Cartridge.Type" "AR" "Controller.Left" "Paddles" "Controller.Right" "Paddles" -"Emulation.CPU" "High" "" "Cartridge.MD5" "6e7ed74082f39ad4166c823765a59909" @@ -9229,7 +9195,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "71464c54da46adae9447926fdbfc1abe" @@ -9361,7 +9326,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "56" -"Emulation.CPU" "High" "" "Cartridge.MD5" "724613effaf7743cbcd695fab469c2a8" @@ -9551,7 +9515,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "56" -"Emulation.CPU" "High" "" "Cartridge.MD5" "74f623833429d35341b7a84bc09793c0" @@ -9595,7 +9558,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "75511bb694662301c9e71df645f4b5a7" @@ -9659,7 +9621,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "52" -"Emulation.CPU" "High" "" "Cartridge.MD5" "75b22fdf632d76e246433db1ebccd3c4" @@ -9750,7 +9711,6 @@ "Display.Format" "PAL" "Display.Height" "200" "Display.YStart" "38" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -9828,7 +9788,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "77cd9a9dd810ce8042bdb9d40e256dfe" @@ -10016,7 +9975,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -10045,7 +10003,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "" "Cartridge.MD5" "7a64b5a6e90619c6aacf244cdd7502f8" @@ -10173,7 +10130,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "64" -"Emulation.CPU" "High" "" "Cartridge.MD5" "7b79beb378d1b4471def90ceccf413de" @@ -10330,7 +10286,6 @@ "Cartridge.Rarity" "Extremely Rare" "Cartridge.Type" "AR" "Display.Format" "PAL" -"Emulation.CPU" "High" "Display.YStart" "50" "" @@ -10350,7 +10305,6 @@ "Cartridge.Type" "AR" "Display.Width" "144" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "7e464186ba384069582d9f0c141f7491" @@ -10591,7 +10545,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -11404,7 +11357,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "60" -"Emulation.CPU" "High" "" "Cartridge.MD5" "8c103a79b007a2fd5af602334937b4e1" @@ -11812,7 +11764,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "90b1799dddb8bf748ee286d22e609480" @@ -12584,7 +12535,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a5b7f420ca6cc1384da0fed523920d8e" @@ -12989,7 +12939,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -13213,7 +13162,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a2eb84cfeed55acd7fece7fefdc83fbb" @@ -13246,7 +13194,6 @@ "Display.Width" "136" "Display.XStart" "8" "Display.YStart" "52" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a3b9d2be822eab07e7f4b10593fb5eaa" @@ -13293,7 +13240,6 @@ "Cartridge.Type" "AR" "Display.Width" "144" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a47878a760f5fa3aa99f95c3fdc70a0b" @@ -13453,7 +13399,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "53" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a68a396ff1f3b311712f6bdf05dcefab" @@ -13513,7 +13458,6 @@ "Display.Height" "198" "Display.Width" "152" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "a7cf2b9afdbb3a161bf418dbcf0321dc" @@ -13766,7 +13710,6 @@ "Controller.Left" "Paddles" "Controller.Right" "Paddles" "Display.Height" "192" -"Emulation.CPU" "High" "" "Cartridge.MD5" "aad91be0bf78d33d29758876d999848a" @@ -14178,7 +14121,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "afe88aae81d99e0947c0cfb687b16251" @@ -14481,7 +14423,6 @@ "Cartridge.Type" "AR" "Display.Height" "200" "Display.YStart" "38" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -14530,7 +14471,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "64" -"Emulation.CPU" "High" "" "Cartridge.MD5" "b59417d083b0be2d49a7d93769880a4b" @@ -14548,7 +14488,6 @@ "Display.Format" "PAL" "Display.Height" "190" "Display.YStart" "43" -"Emulation.CPU" "High" "" "Cartridge.MD5" "b6812eaf87127f043e78f91f2028f9f4" @@ -14662,7 +14601,6 @@ "Cartridge.Type" "AR" "Display.Format" "PAL" "Display.YStart" "40" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -15612,7 +15550,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "c47244f5557ae12c61e8e01c140e2173" @@ -15843,7 +15780,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "33" -"Emulation.CPU" "High" "" "Cartridge.MD5" "c745487828a1a6a743488ecebc55ad44" @@ -16263,7 +16199,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -16368,7 +16303,6 @@ "Display.Height" "198" "Display.Width" "152" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "cd6b3dff86a55a4a6d23007ee360ea0e" @@ -16396,7 +16330,6 @@ "Display.Width" "136" "Display.XStart" "8" "Display.YStart" "52" -"Emulation.CPU" "High" "" "Cartridge.MD5" "cd9fea12051e414a6dfe17052067da8e" @@ -16741,7 +16674,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -17018,7 +16950,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "d536a84d4e1f170305e17f7078296a50" @@ -17031,7 +16962,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "d4aa89e96d2902692f5c45f36903d336" @@ -17712,7 +17642,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "ddd1efc1862cd3eb3baf4cba81ff5050" @@ -18148,7 +18077,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "64" -"Emulation.CPU" "High" "" "Cartridge.MD5" "e2b682f6e6d76b35c180c7d847e93b4f" @@ -18352,7 +18280,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "38" -"Emulation.CPU" "High" "" "Cartridge.MD5" "e505bd8e59e31aaed20718d47b15c61b" @@ -18389,7 +18316,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "e556e07cc06c803f2955986f53ef63ed" @@ -18646,7 +18572,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "33" -"Emulation.CPU" "High" "" "Cartridge.MD5" "e88340f5bd2f03e2e9ce5ecfa9c644f5" @@ -18921,7 +18846,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "64" -"Emulation.CPU" "High" "" "Cartridge.MD5" "eb9f8b84c193d9d93a58fca112aa39ed" @@ -19225,7 +19149,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -19360,7 +19283,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "39" -"Emulation.CPU" "High" "" "Cartridge.MD5" "f1127ade54037236e75a133b1dfc389d" @@ -19373,7 +19295,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "" "Cartridge.MD5" "f10e3f45fb01416c87e5835ab270b53a" @@ -19734,7 +19655,6 @@ "Display.Width" "152" "Display.XStart" "8" "Display.YStart" "33" -"Emulation.CPU" "High" "" "Cartridge.MD5" "f5a2f6efa33a3e5541bc680e9dc31d5b" @@ -20339,7 +20259,6 @@ "Display.Height" "198" "Display.Width" "152" "Display.XStart" "8" -"Emulation.CPU" "High" "" "Cartridge.MD5" "fb27afe896e7c928089307b32e5642ee" @@ -20374,7 +20293,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "59" -"Emulation.CPU" "High" "" "Cartridge.MD5" "fb91dfc36cddaa54b09924ae8fd96199" @@ -20526,7 +20444,6 @@ "Display.Width" "144" "Display.XStart" "8" "Display.YStart" "36" -"Emulation.CPU" "High" "Emulation.HmoveBlanks" "No" "" @@ -20664,7 +20581,6 @@ "Controller.Left" "Paddles" "Controller.Right" "Paddles" "Display.Format" "PAL" -"Emulation.CPU" "High" "Display.YStart" "50" ""