Fixed bug in loading RGBA PNG images; Stella can only handle RGB data.

Also, fixed a potential future bug where Stella can't handle paletted
images.  Basically, the error handling is now more robust.

Minor rework of the CartF8 class; it now looks the ROM MD5 directly and
decides if it's a 'special' ROM.

Several updates to the built-in properties database, including better
support for each game in the 8-in-1 ROM image.

Fixed crash in TIA handling of the playfield mask; it could cause a 
segfault under certain circumstances.

Fixed bug in prune_snapshots script; it now properly handles directory
names containing spaces in both Linux and OSX (and probably Windows as
well, but this hasn't been tested).

Updated built-in PNG library to the latest version (1.4.3).


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2066 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-07-10 17:12:45 +00:00
parent 8bf546ce1d
commit 3e7662c478
17 changed files with 219 additions and 231 deletions

View File

@ -77,9 +77,23 @@ bool PNGLibrary::readImage(const FrameBuffer& fb, FBSurface& surface)
// byte into separate bytes (useful for paletted and grayscale images). // byte into separate bytes (useful for paletted and grayscale images).
png_set_packing(png_ptr); png_set_packing(png_ptr);
// Greyscale mode not supported // Only normal RBG(A) images are supported (without the alpha channel)
if(color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) if(color_type == PNG_COLOR_TYPE_RGBA)
{
png_set_strip_alpha(png_ptr);
}
else if(color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
readImageERROR("Greyscale PNG images not supported"); readImageERROR("Greyscale PNG images not supported");
}
else if(color_type == PNG_COLOR_TYPE_PALETTE)
{
readImageERROR("Paletted PNG images not supported");
}
else if(color_type != PNG_COLOR_TYPE_RGB)
{
readImageERROR("Unknown format in PNG image");
}
// Create space for the entire image (3 bytes per pixel in RGB format) // Create space for the entire image (3 bytes per pixel in RGB format)
ipitch = iwidth * 3; ipitch = iwidth * 3;

View File

@ -65,18 +65,6 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size, string& md5,
Cartridge* cartridge = 0; Cartridge* cartridge = 0;
string type = dtype; string type = dtype;
// First consider the ROMs that are special and don't have a properties entry
// Hopefully this list will be very small
if(md5 == "bc24440b59092559a1ec26055fd1270e" ||
md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" ||
md5 == "9905f9f4706223dadee84f6867ede8e3")
{
// These two ROMs are normal 8K images, except they must be initialized
// from the opposite bank compared to normal ones
type = "F8 swapped";
dtype = type;
}
// Collect some info about the ROM // Collect some info about the ROM
ostringstream buf; ostringstream buf;
@ -181,9 +169,7 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size, string& md5,
else if(type == "F6SC") else if(type == "F6SC")
cartridge = new CartridgeF6SC(image); cartridge = new CartridgeF6SC(image);
else if(type == "F8") else if(type == "F8")
cartridge = new CartridgeF8(image); cartridge = new CartridgeF8(image, md5);
else if(type == "F8 swapped")
cartridge = new CartridgeF8(image, true);
else if(type == "F8SC") else if(type == "F8SC")
cartridge = new CartridgeF8SC(image); cartridge = new CartridgeF8SC(image);
else if(type == "FA" || type == "FASC") else if(type == "FA" || type == "FASC")

View File

@ -24,14 +24,19 @@
#include "CartF8.hxx" #include "CartF8.hxx"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CartridgeF8::CartridgeF8(const uInt8* image, bool startlow) CartridgeF8::CartridgeF8(const uInt8* image, const string& md5)
{ {
// Copy the ROM image into my buffer // Copy the ROM image into my buffer
memcpy(myImage, image, 8192); memcpy(myImage, image, 8192);
// Normally bank 1 is the reset bank, unless we're dealing with ROMs // Normally bank 1 is the reset bank, unless we're dealing with ROMs
// that have been incorrectly created with banks in the opposite order // that have been incorrectly created with banks in the opposite order
myStartBank = startlow ? 0 : 1; myStartBank =
(md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a]
md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge
md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White
md5 == "9905f9f4706223dadee84f6867ede8e3") // Challenge
? 0 : 1;
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

View File

@ -38,10 +38,10 @@ class CartridgeF8 : public Cartridge
/** /**
Create a new cartridge using the specified image Create a new cartridge using the specified image
@param image Pointer to the ROM image @param image Pointer to the ROM image
@param startlow Whether to use the lower or upper bank for startup @param md5 MD5sum of the ROM image
*/ */
CartridgeF8(const uInt8* image, bool startlow = false); CartridgeF8(const uInt8* image, const string& md5);
/** /**
Destructor Destructor

View File

@ -27,7 +27,7 @@
regenerated and the application recompiled. regenerated and the application recompiled.
*/ */
#define DEF_PROPS_SIZE 3249 #define DEF_PROPS_SIZE 3240
static const char* DefProps[DEF_PROPS_SIZE][20] = { static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -609,7 +609,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "2d1cf85fbc732856bf76470cd4060f4a", "", "", "Daredevil (V1) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d1cf85fbc732856bf76470cd4060f4a", "", "", "Daredevil (V1) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d2c5f0761e609e3c5228766f446f7f8", "Atari - Axlon, Nolan Bushnell, Steve DeFrisco", "CX26170, CX26170P", "Secret Quest (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d2c5f0761e609e3c5228766f446f7f8", "Atari - Axlon, Nolan Bushnell, Steve DeFrisco", "CX26170, CX26170P", "Secret Quest (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d405da70af82b20a6b3ecc3d1d2c4ec", "Genus", "", "Pitfall (Genus)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d405da70af82b20a6b3ecc3d1d2c4ec", "Genus", "", "Pitfall (Genus)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d44e2d3894f49f36f7416605d72842c", "Nukey Shay", "", "ROL Out (20040908) (refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "2d69a5f23784f1c2230143292a073b53", "", "", "Qb (Fixed background animation) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2d69a5f23784f1c2230143292a073b53", "", "", "Qb (Fixed background animation) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -687,7 +686,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "32f4e47a71601ab06cfb59e1c6a0b846", "Ed Federmeyer", "", "Sound X (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32f4e47a71601ab06cfb59e1c6a0b846", "Ed Federmeyer", "", "Sound X (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3316ee2f887e9cb9b54dd23c5b98c3e2", "", "", "Texas Golf (miniature Gold Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3316ee2f887e9cb9b54dd23c5b98c3e2", "", "", "Texas Golf (miniature Gold Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "331938989f0f33ca39c10af4c09ff640", "Zach Matley", "", "Combat - Tank AI (19-04-2003) (Zach Matley)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "331938989f0f33ca39c10af4c09ff640", "Zach Matley", "", "Combat - Tank AI (19-04-2003) (Zach Matley)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "331c04841bccd3f8210dcced9602ccda", "Nukey Shay", "", "ROL Out (20040911) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "332f01fd18e99c6584f61aa45ee7791e", "", "", "X'Mission (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "YES", "" }, { "332f01fd18e99c6584f61aa45ee7791e", "", "", "X'Mission (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "0", "", "YES", "" },
{ "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers, Robert Jaeger", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers, Robert Jaeger", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3349fbd01dde378b31f72bd8dc793dc5", "", "", "Greeting Cart (RSIDDALL) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3349fbd01dde378b31f72bd8dc793dc5", "", "", "Greeting Cart (RSIDDALL) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -715,7 +713,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "350e0f7b562ec5e457b3f5af013648db", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (06-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "350e0f7b562ec5e457b3f5af013648db", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (06-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "35163b56f4a692a232ae96ad3e23310f", "Retroactive", "", "Qb (2.12) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "35163b56f4a692a232ae96ad3e23310f", "Retroactive", "", "Qb (2.12) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "3556e125681aea864e17b09f3f3b2a75", "", "", "Incoming (2 Player Demo) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3556e125681aea864e17b09f3f3b2a75", "", "", "Incoming (2 Player Demo) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "35689035629ce0a6c4e274123de79b55", "", "", "Breakout - Breakaway IV (1978) (Atari) [o3]", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "3576037c9281656655fa114a835be553", "Starpath Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1 of 4) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3576037c9281656655fa114a835be553", "Starpath Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1 of 4) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3577e19714921912685bb0e32ddf943c", "TechnoVision", "TVS1003", "Pharaoh's Curse (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3577e19714921912685bb0e32ddf943c", "TechnoVision", "TVS1003", "Pharaoh's Curse (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "35ae903dff7389755ad4a07f2fb7400c", "", "", "Colored Wall Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "35ae903dff7389755ad4a07f2fb7400c", "", "", "Colored Wall Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -769,7 +766,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "393948436d1f4cc3192410bb918f9724", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "393948436d1f4cc3192410bb918f9724", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation", "VC1012", "M.A.D. (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation", "VC1012", "M.A.D. (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "30", "230", "", "" }, { "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "30", "230", "", "" },
{ "395f46cb2bf49cecb88fdc070b8ca6bc", "", "", "Breakout - Breakaway IV (1978) (Atari) [t1][o1]", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "YES", "", "", "", "", "" }, { "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "YES", "", "", "", "", "" },
{ "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "39a6a5a2e1f6297cceaa48bb03af02e9", "", "", "Pitfall 2 Plus (Hack)", "Hack of Pitfall 2", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "39a6a5a2e1f6297cceaa48bb03af02e9", "", "", "Pitfall 2 Plus (Hack)", "Hack of Pitfall 2", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -902,6 +898,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "42e8d67213227dee01e72c788712c002", "", "", "Greeting Cart Amy in thong (SnailSoft)(PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "42e8d67213227dee01e72c788712c002", "", "", "Greeting Cart Amy in thong (SnailSoft)(PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "4311a4115fb7bc68477c96cf44cebacf", "", "", "Challenge (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "14", "240", "", "" }, { "4311a4115fb7bc68477c96cf44cebacf", "", "", "Challenge (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "14", "240", "", "" },
{ "4326edb70ff20d0ee5ba58fa5cb09d60", "Atari - GCC, Kevin Osborn", "CX2689", "Kangaroo (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4326edb70ff20d0ee5ba58fa5cb09d60", "Atari - GCC, Kevin Osborn", "CX2689", "Kangaroo (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "435fd469f088468c4d66be6b5204d887", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "438968a26b7cfe14a499f5bbbbf844db", "", "", "Raft Rider (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "438968a26b7cfe14a499f5bbbbf844db", "", "", "Raft Rider (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "43adf60ebdd6b5a0fae21594ecf17154", "Jone Yuan Telephonic Enterprise Co", "", "Stampede (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43adf60ebdd6b5a0fae21594ecf17154", "Jone Yuan Telephonic Enterprise Co", "", "Stampede (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "43c7eb836378b1b3df6788d908940b59", "", "", "Death Derby (2LK_16) (24-03-2003) (Glenn Saunders)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43c7eb836378b1b3df6788d908940b59", "", "", "Death Derby (2LK_16) (24-03-2003) (Glenn Saunders)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1531,6 +1528,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "75e276ba12dc4504659481c31345703a", "Starpath Corporation, Kevin Norman", "AR-4103", "Killer Satellites (1983) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75e276ba12dc4504659481c31345703a", "Starpath Corporation, Kevin Norman", "AR-4103", "Killer Satellites (1983) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75e8d8b9e9c5c67c2226dbfd77dcfa7d", "", "", "2600 Digital Clock (V b1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75e8d8b9e9c5c67c2226dbfd77dcfa7d", "", "", "2600 Digital Clock (V b1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "75ea128ba96ac6db8edf54b071027c4e", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "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", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "7608abdfd9b26f4a0ecec18b232bea54", "Atari", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "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)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7623a639a6fffdb246775fe2eabc8d01", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1844,7 +1842,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "8ed73106e2f42f91447fb90b6f0ea4a4", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8ed73106e2f42f91447fb90b6f0ea4a4", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "8ee3f64dc0f349adc893fe93df5245d8", "", "", "Euchre (20-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8ee3f64dc0f349adc893fe93df5245d8", "", "", "Euchre (20-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f33bce5ba1053dcf4cea9c1c69981e4", "", "", "Jawbreaker (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f33bce5ba1053dcf4cea9c1c69981e4", "", "", "Jawbreaker (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f39cd5973b07dfdd12baca1ebd8d722", "Nukey Shay", "", "ROL Out (20040908) (old) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "8f53a3b925f0fd961d9b8c4d46ee6755", "", "", "Astrowar (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f53a3b925f0fd961d9b8c4d46ee6755", "", "", "Astrowar (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "8f5ac5139419c5d49bacc296e342a247", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "" }, { "8f5ac5139419c5d49bacc296e342a247", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "" },
{ "8f60551db6d1535ef0030f155018c738", "", "", "Space War (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f60551db6d1535ef0030f155018c738", "", "", "Space War (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -1865,7 +1862,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "90ccf4f30a5ad8c801090b388ddd5613", "Starpath Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90ccf4f30a5ad8c801090b388ddd5613", "Starpath Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90d77e966793754ab4312c47b42900b1", "Imagic, Brad Stewart", "720105-2A, IA3400P, EIX-005-04I", "Fire Fighter (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90d77e966793754ab4312c47b42900b1", "Imagic, Brad Stewart", "720105-2A, IA3400P, EIX-005-04I", "Fire Fighter (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90f502cbf4438a95f69f848cef36eb64", "Digitel", "", "River Raid II (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90f502cbf4438a95f69f848cef36eb64", "Digitel", "", "River Raid II (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "90f67b7c34f3a71159e14f69777721b5", "Nukey Shay", "", "ROL Out (20040908) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "910dd9bf98cc5bc080943e5128b15bf5", "", "", "Gunfight 2600 - Improved AI (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "910dd9bf98cc5bc080943e5128b15bf5", "", "", "Gunfight 2600 - Improved AI (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "91191666186117f5bf78b40623d79039", "Gray Games & AtariAge", "", "E.T. Book Cart (PAL)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "23", "280", "YES", "55" }, { "91191666186117f5bf78b40623d79039", "Gray Games & AtariAge", "", "E.T. Book Cart (PAL)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "23", "280", "YES", "55" },
{ "911d385ee0805ff5b8f96c5a63da7de5", "Hozer Video Games", "", "Jammed (V0.1) (Demo) (2001) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "24", "", "", "" }, { "911d385ee0805ff5b8f96c5a63da7de5", "Hozer Video Games", "", "Jammed (V0.1) (Demo) (2001) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "24", "", "", "" },
@ -2507,7 +2503,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "c7e43ad79c5e5c029d9f5ffde23e32cf", "", "", "PAL-NTSC Detector (15-11-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7e43ad79c5e5c029d9f5ffde23e32cf", "", "", "PAL-NTSC Detector (15-11-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c7eab66576696e11e3c11ffff92e13cc", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7eab66576696e11e3c11ffff92e13cc", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c7f13ef38f61ee2367ada94fdcc6d206", "Parker Brothers, Joe Gaucher", "PB5370", "Popeye (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c7f13ef38f61ee2367ada94fdcc6d206", "Parker Brothers, Joe Gaucher", "PB5370", "Popeye (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "c81f28ca03c4ed87d3deeb1967f1fdc9", "Nukey Shay", "", "ROL Out (refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "c82ec00335cbb4b74494aecf31608fa1", "CCE", "", "E.T. - The Extra-Terrestrial (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c82ec00335cbb4b74494aecf31608fa1", "CCE", "", "E.T. - The Extra-Terrestrial (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c830f6ae7ee58bcc2a6712fb33e92d55", "Atari, Carla Meninsky", "CX2687", "Tempest (01-05-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c830f6ae7ee58bcc2a6712fb33e92d55", "Atari, Carla Meninsky", "CX2687", "Tempest (01-05-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "c866c995c0d2ca7d017fef0fc0c2e268", "Retroactive", "", "Qb (2.00) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c866c995c0d2ca7d017fef0fc0c2e268", "Retroactive", "", "Qb (2.00) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -2617,7 +2612,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d05e371765929bf5d39c91c6ea189bec", "", "", "Death Derby (v0005 New Build) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d05e371765929bf5d39c91c6ea189bec", "", "", "Death Derby (v0005 New Build) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d071d2ec86b9d52b585cc0382480b351", "UA Limited", "", "Cat Trax (1983) (UA Limited) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "30", "", "YES", "" }, { "d071d2ec86b9d52b585cc0382480b351", "UA Limited", "", "Cat Trax (1983) (UA Limited) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "30", "", "YES", "" },
{ "d075aed43841901ab67bd3aead549808", "Nukey Shay", "", "ROL Out (20040909) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "d078674afdf24a4547b4b32890fdc614", "Jone Yuan Telephonic Enterprise Co", "", "Laser Blast (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d078674afdf24a4547b4b32890fdc614", "Jone Yuan Telephonic Enterprise Co", "", "Laser Blast (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "d078d25873c5b99f78fa267245a2af02", "Sega - Beck-Tech", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "d078d25873c5b99f78fa267245a2af02", "Sega - Beck-Tech", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" },
{ "d08fccfbebaa531c4a4fa7359393a0a9", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d08fccfbebaa531c4a4fa7359393a0a9", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2813,7 +2807,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "deb39482e77f984d4ce73be9fd8adabd", "Activision, David Lubar", "AK-048-04", "River Raid II (1988) (Activision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "deb39482e77f984d4ce73be9fd8adabd", "Activision, David Lubar", "AK-048-04", "River Raid II (1988) (Activision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ded26e1cb17f875a9c17515c900f9933", "", "", "Space Treat (29-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ded26e1cb17f875a9c17515c900f9933", "", "", "Space Treat (29-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "df2745d585238780101df812d00b49f4", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp)", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, { "df2745d585238780101df812d00b49f4", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp)", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" },
{ "df27b8ea679bc748a719d5171cb5255d", "Nukey Shay", "", "ROL Out Easy (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "df3e6a9b6927cf59b7afb626f6fd7eea", "", "", "Tuby Bird (208 in 1) (Unknown) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df3e6a9b6927cf59b7afb626f6fd7eea", "", "", "Tuby Bird (208 in 1) (Unknown) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "df40af244a8d68b492bfba9e97dea4d6", "Franklin Cruz", "", "Asteroids 2 (Franlin Cruz) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "df40af244a8d68b492bfba9e97dea4d6", "Franklin Cruz", "", "Asteroids 2 (Franlin Cruz) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "df4aea767cdf6a3f138255092e84d713", "", "", "Image - Samantha Fox (Colour) (09-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df4aea767cdf6a3f138255092e84d713", "", "", "Image - Samantha Fox (Colour) (09-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2885,6 +2878,7 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "e363e467f605537f3777ad33e74e113a", "Atari, Bob Whitehead - Sears", "CX2603 - 99803, 49-75601", "Star Ship (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e363e467f605537f3777ad33e74e113a", "Atari, Bob Whitehead - Sears", "CX2603 - 99803, 49-75601", "Star Ship (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e377c3af4f54a51b85efe37d4b7029e6", "20th Century Fox Video Games, Steve Beck", "11035", "Save the Whales (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "25", "215", "", "" }, { "e377c3af4f54a51b85efe37d4b7029e6", "20th Century Fox Video Games, Steve Beck", "11035", "Save the Whales (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "25", "215", "", "" },
{ "e37c8055d70979af354251ebe9f1b7dd", "HES", "", "Mega Funpak - Gorf, P. Patrol, Pacman, Skeet Shoot (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e37c8055d70979af354251ebe9f1b7dd", "HES", "", "Mega Funpak - Gorf, P. Patrol, Pacman, Skeet Shoot (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e38dc1f81a02e325562cd285123f579b", "Atari - GCC, Mike Feinstein", "CX2681, CX2681P", "Battlezone (1983) (Atari) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e39843c56b7a4a08b18fa7949ec3ee6b", "", "", "Joshua Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e39843c56b7a4a08b18fa7949ec3ee6b", "", "", "Joshua Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e39a13b13dc82c5fdbfbbfd55ba1230e", "", "", "Analog Clock (Additional Frame Info) (V0.0) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e39a13b13dc82c5fdbfbbfd55ba1230e", "", "", "Analog Clock (Additional Frame Info) (V0.0) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e3c0451d29dad724231bc5818ec4bae0", "", "", "Single-Scanline Positioning Demo 1 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e3c0451d29dad724231bc5818ec4bae0", "", "", "Single-Scanline Positioning Demo 1 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -2973,7 +2967,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "e9cb18770a41a16de63b124c1e8bd493", "Parker Brothers, Joe Gaucher", "931519", "Popeye (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e9cb18770a41a16de63b124c1e8bd493", "Parker Brothers, Joe Gaucher", "931519", "Popeye (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
{ "e9e646f730b8400cd5da08c849ef3e3b", "Tron", "", "Enduro (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e9e646f730b8400cd5da08c849ef3e3b", "Tron", "", "Enduro (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e9e6ad30549a6e2cd89fe93b7691d447", "Atari, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e9e6ad30549a6e2cd89fe93b7691d447", "Atari, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "e9f953bc7bc1c20539470e70bf876a44", "Nukey Shay", "", "ROL Out (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "ea38fcfc06ad87a0aed1a3d1588744e4", "Atari, Tod Frye", "CX26122", "Sinistar (1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ea38fcfc06ad87a0aed1a3d1588744e4", "Atari, Tod Frye", "CX26122", "Sinistar (1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ea6d40db5498d6386571a76df448aa4c", "", "", "Vertical Playfield Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ea6d40db5498d6386571a76df448aa4c", "", "", "Vertical Playfield Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "ea7e25ade3fe68f5b786ee0aa82b1fe5", "", "", "Galatic (208 in 1) (Unknown) (PAL)", "AKA Challenge of.... Nexar, The", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ea7e25ade3fe68f5b786ee0aa82b1fe5", "", "", "Galatic (208 in 1) (Unknown) (PAL)", "AKA Challenge of.... Nexar, The", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
@ -3123,7 +3116,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "f53f81fae276d72dbdba7064786a8266", "", "", "Death Derby (v0011) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f53f81fae276d72dbdba7064786a8266", "", "", "Death Derby (v0011) (2001) (Glenn Saunders) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f542b5d0193a3959b54f3c4c803ba242", "Atari, Tom Rudadahl - Sears", "CX2634 - 49-75121", "Golf (1980) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f542b5d0193a3959b54f3c4c803ba242", "Atari, Tom Rudadahl - Sears", "CX2634 - 49-75121", "Golf (1980) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5445b52999e229e3789c39e7ee99947", "Atari, Jim Huether", "CX26163P", "Flag Capture (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f5445b52999e229e3789c39e7ee99947", "Atari, Jim Huether", "CX26163P", "Flag Capture (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f559afa10ba5cb5a20994e6f3ab82531", "Nukey Shay", "", "ROL Out (20040908) (refill older) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "f5a2f6efa33a3e5541bc680e9dc31d5b", "Suntek", "SS-022", "Motocross (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f5a2f6efa33a3e5541bc680e9dc31d5b", "Suntek", "SS-022", "Motocross (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5a3e051730d45fea518f2e8b926565b", "Robby", "", "Keystone Kapers (Robby)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f5a3e051730d45fea518f2e8b926565b", "Robby", "", "Keystone Kapers (Robby)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "f5aa6bd10f662199c42e43863a30106c", "", "", "Music Kit (V1.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f5aa6bd10f662199c42e43863a30106c", "", "", "Music Kit (V1.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" },
@ -3258,7 +3250,6 @@ static const char* DefProps[DEF_PROPS_SIZE][20] = {
{ "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "" }, { "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "" },
{ "fe67087f9c22655ce519616fc6c6ef4d", "Atari, Robert Neve", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe67087f9c22655ce519616fc6c6ef4d", "Atari, Robert Neve", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe6abc0f63e31e2646c9c600926b5b7f", "Atari", "CX26137", "4 in 1 (02-19-1987) (Atari) (Prototype)", "Home Run, Canyon Bomber, Sky Diver, Night Driver", "Prototype", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe6abc0f63e31e2646c9c600926b5b7f", "Atari", "CX26137", "4 in 1 (02-19-1987) (Atari) (Prototype)", "Home Run, Canyon Bomber, Sky Diver, Night Driver", "Prototype", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe6e73303e108bbda284b5d2a8a849ea", "Nukey Shay", "", "ROL Out (20040908) (always refill) (Nukey Shay) (Hack)", "Hack of Breakout", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "" },
{ "fe870018332a0221eb59fb18b0c6bccc", "", "", "Incoming (08-11-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe870018332a0221eb59fb18b0c6bccc", "", "", "Incoming (08-11-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
{ "fe940ab8eaa07e4db801f1728e391dbd", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "24", "", "YES", "" }, { "fe940ab8eaa07e4db801f1728e391dbd", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "24", "", "YES", "" },
{ "fe9ae625d924b54c9f8a14ac9a0f6c6d", "BG Dodson", "", "High Bid! (BG Dodson) (Hack)", "Hack of Pepsi Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe9ae625d924b54c9f8a14ac9a0f6c6d", "BG Dodson", "", "High Bid! (BG Dodson) (Hack)", "Hack of Pepsi Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },

View File

@ -205,6 +205,13 @@ void TIA::reset()
myMaximumNumberOfScanlines = 342; myMaximumNumberOfScanlines = 342;
} }
myCurrentP0Mask = &TIATables::PxMask[0][0][0][0];
myCurrentP1Mask = &TIATables::PxMask[0][0][0][0];
myCurrentM0Mask = &TIATables::MxMask[0][0][0][0];
myCurrentM1Mask = &TIATables::MxMask[0][0][0][0];
myCurrentBLMask = &TIATables::BLMask[0][0][0];
myCurrentPFMask = TIATables::PFMask[0];
// Recalculate the size of the display // Recalculate the size of the display
frameReset(); frameReset();
} }

View File

@ -1588,6 +1588,12 @@
"Cartridge.Name" "Marauder (1982) (Tigervision)" "Cartridge.Name" "Marauder (1982) (Tigervision)"
"" ""
"Cartridge.MD5" "435fd469f088468c4d66be6b5204d887"
"Cartridge.Manufacturer" "Atari - GCC"
"Cartridge.ModelNo" "CX2680, CX2680P"
"Cartridge.Name" "RealSports Tennis (1983) (Atari) (PAL) [a]"
""
"Cartridge.MD5" "13aa1f9ac4249947e4af61319d9a08f2" "Cartridge.MD5" "13aa1f9ac4249947e4af61319d9a08f2"
"Cartridge.Manufacturer" "Atari - GCC" "Cartridge.Manufacturer" "Atari - GCC"
"Cartridge.ModelNo" "CX2680, CX2680P" "Cartridge.ModelNo" "CX2680, CX2680P"
@ -2599,6 +2605,12 @@
"Cartridge.Name" "Battlezone (1983) (Atari) (PAL) [a]" "Cartridge.Name" "Battlezone (1983) (Atari) (PAL) [a]"
"" ""
"Cartridge.MD5" "e38dc1f81a02e325562cd285123f579b"
"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein"
"Cartridge.ModelNo" "CX2681, CX2681P"
"Cartridge.Name" "Battlezone (1983) (Atari) (PAL) [a1]"
""
"Cartridge.MD5" "21d2c435bcccde7792d82844b3cf60f4" "Cartridge.MD5" "21d2c435bcccde7792d82844b3cf60f4"
"Cartridge.Manufacturer" "Atari - GCC, Doug Macrae" "Cartridge.Manufacturer" "Atari - GCC, Doug Macrae"
"Cartridge.ModelNo" "CX2677, CX2677P" "Cartridge.ModelNo" "CX2677, CX2677P"
@ -17583,6 +17595,13 @@
"Display.Phosphor" "YES" "Display.Phosphor" "YES"
"" ""
"Cartridge.MD5" "75ea60884c05ba496473c23a58edf12f"
"Cartridge.Manufacturer" "Atari, Howard Scott Warshaw - Sears"
"Cartridge.ModelNo" "CX2655 - 49-75167"
"Cartridge.Name" "Yars' Revenge (1982) (Atari) (PAL) [a]"
"Display.Phosphor" "YES"
""
"Cartridge.MD5" "e932f44fad2a66b6d5faec9addec208e" "Cartridge.MD5" "e932f44fad2a66b6d5faec9addec208e"
"Cartridge.Name" "Atari Logo Demo 1 (PD)" "Cartridge.Name" "Atari Logo Demo 1 (PD)"
"" ""
@ -19452,16 +19471,6 @@
"Cartridge.Type" "2IN1" "Cartridge.Type" "2IN1"
"" ""
"Cartridge.MD5" "35689035629ce0a6c4e274123de79b55"
"Cartridge.Name" "Breakout - Breakaway IV (1978) (Atari) [o3]"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "395f46cb2bf49cecb88fdc070b8ca6bc"
"Cartridge.Name" "Breakout - Breakaway IV (1978) (Atari) [t1][o1]"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "d42fc569dc779ff1c81ba232f8cf5baf" "Cartridge.MD5" "d42fc569dc779ff1c81ba232f8cf5baf"
"Cartridge.Manufacturer" "neotokeo2001" "Cartridge.Manufacturer" "neotokeo2001"
"Cartridge.Name" "Burger King Kaboom! (Hack) [a1]" "Cartridge.Name" "Burger King Kaboom! (Hack) [a1]"
@ -19525,86 +19534,6 @@
"Controller.Left" "PADDLES" "Controller.Left" "PADDLES"
"" ""
"Cartridge.MD5" "fe6e73303e108bbda284b5d2a8a849ea"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (always refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "90f67b7c34f3a71159e14f69777721b5"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "8f39cd5973b07dfdd12baca1ebd8d722"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (old) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "2d44e2d3894f49f36f7416605d72842c"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "f559afa10ba5cb5a20994e6f3ab82531"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040908) (refill older) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "d075aed43841901ab67bd3aead549808"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040909) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "331c04841bccd3f8210dcced9602ccda"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (20040911) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "df27b8ea679bc748a719d5171cb5255d"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out Easy (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "e9f953bc7bc1c20539470e70bf876a44"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "c81f28ca03c4ed87d3deeb1967f1fdc9"
"Cartridge.Manufacturer" "Nukey Shay"
"Cartridge.Name" "ROL Out (refill) (Nukey Shay) (Hack)"
"Cartridge.Note" "Hack of Breakout"
"Cartridge.Rarity" "Hack"
"Controller.Left" "PADDLES"
""
"Cartridge.MD5" "81073d0377a2badef8d5e74fc44fc323" "Cartridge.MD5" "81073d0377a2badef8d5e74fc44fc323"
"Cartridge.Manufacturer" "Thomas Jentzsch" "Cartridge.Manufacturer" "Thomas Jentzsch"
"Cartridge.Name" "Sadoom (TJ) (PAL60) (Hack)" "Cartridge.Name" "Sadoom (TJ) (PAL60) (Hack)"

View File

@ -512,20 +512,17 @@ row_callback(png_structp png_ptr, png_bytep new_row,
* shown below: * shown below:
*/ */
/* Check if row_num is in bounds. */ /* Get pointer to corresponding row in our
if ((row_num >= 0) && (row_num < height)) * PNG read buffer.
{ */
/* Get pointer to corresponding row in our png_bytep old_row = ((png_bytep *)our_data)[row_num];
* PNG read buffer.
*/ /* If both rows are allocated then copy the new row
png_bytep old_row = ((png_bytep *)our_data)[row_num]; * data to the corresponding row data.
*/
if ((old_row != NULL) && (new_row != NULL))
png_progressive_combine_row(png_ptr, old_row, new_row);
/* If both rows are allocated then copy the new row
* data to the corresponding row data.
*/
if ((old_row != NULL) && (new_row != NULL))
png_progressive_combine_row(png_ptr, old_row, new_row);
}
/* /*
* The rows and passes are called in order, so you don't really * The rows and passes are called in order, so you don't really
* need the row_num and pass, but I'm supplying them because it * need the row_num and pass, but I'm supplying them because it

View File

@ -17,7 +17,7 @@
#include "pngpriv.h" #include "pngpriv.h"
/* Generate a compiler error if there is an old png.h in the search path. */ /* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_4_2 Your_png_h_is_not_version_1_4_2; typedef version_1_4_3 Your_png_h_is_not_version_1_4_3;
/* Version information for C files. This had better match the version /* Version information for C files. This had better match the version
* string defined in png.h. * string defined in png.h.
@ -551,13 +551,13 @@ png_get_copyright(png_structp png_ptr)
#else #else
#ifdef __STDC__ #ifdef __STDC__
return ((png_charp) PNG_STRING_NEWLINE \ return ((png_charp) PNG_STRING_NEWLINE \
"libpng version 1.4.2 - May 6, 2010" PNG_STRING_NEWLINE \ "libpng version 1.4.3 - June 26, 2010" PNG_STRING_NEWLINE \
"Copyright (c) 1998-2010 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ "Copyright (c) 1998-2010 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
PNG_STRING_NEWLINE); PNG_STRING_NEWLINE);
#else #else
return ((png_charp) "libpng version 1.4.2 - May 6, 2010\ return ((png_charp) "libpng version 1.4.3 - June 26, 2010\
Copyright (c) 1998-2010 Glenn Randers-Pehrson\ Copyright (c) 1998-2010 Glenn Randers-Pehrson\
Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1996-1997 Andreas Dilger\
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."); Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.");

View File

@ -1,7 +1,7 @@
/* png.h - header file for PNG reference library /* png.h - header file for PNG reference library
* *
* libpng version 1.4.2 - May 6, 2010 * libpng version 1.4.3 - June 26, 2010
* Copyright (c) 1998-2010 Glenn Randers-Pehrson * Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -11,7 +11,7 @@
* Authors and maintainers: * Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.4.2 - May 6, 2010: Glenn * libpng versions 0.97, January 1998, through 1.4.3 - June 26, 2010: Glenn
* See also "Contributing Authors", below. * See also "Contributing Authors", below.
* *
* Note about libpng version numbers: * Note about libpng version numbers:
@ -142,6 +142,9 @@
* 1.4.2beta01 14 10402 14.so.14.2[.0] * 1.4.2beta01 14 10402 14.so.14.2[.0]
* 1.4.2rc02-06 14 10402 14.so.14.2[.0] * 1.4.2rc02-06 14 10402 14.so.14.2[.0]
* 1.4.2 14 10402 14.so.14.2[.0] * 1.4.2 14 10402 14.so.14.2[.0]
* 1.4.3beta01-05 14 10403 14.so.14.3[.0]
* 1.4.3rc01-03 14 10403 14.so.14.3[.0]
* 1.4.3 14 10403 14.so.14.3[.0]
* *
* Henceforth the source version will match the shared-library major * Henceforth the source version will match the shared-library major
* and minor numbers; the shared-library major version number will be * and minor numbers; the shared-library major version number will be
@ -173,7 +176,7 @@
* *
* This code is released under the libpng license. * This code is released under the libpng license.
* *
* libpng versions 1.2.6, August 15, 2004, through 1.4.2, May 6, 2010, are * libpng versions 1.2.6, August 15, 2004, through 1.4.3, June 26, 2010, are
* Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are * Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are
* distributed according to the same disclaimer and license as libpng-1.2.5 * distributed according to the same disclaimer and license as libpng-1.2.5
* with the following individual added to the list of Contributing Authors: * with the following individual added to the list of Contributing Authors:
@ -285,13 +288,13 @@
* Y2K compliance in libpng: * Y2K compliance in libpng:
* ========================= * =========================
* *
* May 6, 2010 * June 26, 2010
* *
* Since the PNG Development group is an ad-hoc body, we can't make * Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration. * an official declaration.
* *
* This is your unofficial assurance that libpng from version 0.71 and * This is your unofficial assurance that libpng from version 0.71 and
* upward through 1.4.2 are Y2K compliant. It is my belief that earlier * upward through 1.4.3 are Y2K compliant. It is my belief that earlier
* versions were also Y2K compliant. * versions were also Y2K compliant.
* *
* Libpng only has three year fields. One is a 2-byte unsigned integer * Libpng only has three year fields. One is a 2-byte unsigned integer
@ -347,9 +350,9 @@
*/ */
/* Version information for png.h - this should match the version in png.c */ /* Version information for png.h - this should match the version in png.c */
#define PNG_LIBPNG_VER_STRING "1.4.2" #define PNG_LIBPNG_VER_STRING "1.4.3"
#define PNG_HEADER_VERSION_STRING \ #define PNG_HEADER_VERSION_STRING \
" libpng version 1.4.2 - May 6, 2010\n" " libpng version 1.4.3 - June 26, 2010\n"
#define PNG_LIBPNG_VER_SONUM 14 #define PNG_LIBPNG_VER_SONUM 14
#define PNG_LIBPNG_VER_DLLNUM 14 #define PNG_LIBPNG_VER_DLLNUM 14
@ -357,7 +360,7 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 4 #define PNG_LIBPNG_VER_MINOR 4
#define PNG_LIBPNG_VER_RELEASE 2 #define PNG_LIBPNG_VER_RELEASE 3
/* This should match the numeric part of the final component of /* This should match the numeric part of the final component of
* PNG_LIBPNG_VER_STRING, omitting any leading zero: * PNG_LIBPNG_VER_STRING, omitting any leading zero:
*/ */
@ -387,7 +390,7 @@
* version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.0 was mis-numbered 100 instead of 10000). From
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
*/ */
#define PNG_LIBPNG_VER 10402 /* 1.4.2 */ #define PNG_LIBPNG_VER 10403 /* 1.4.3 */
#ifndef PNG_VERSION_INFO_ONLY #ifndef PNG_VERSION_INFO_ONLY
/* Include the compression library's header */ /* Include the compression library's header */
@ -1471,7 +1474,7 @@ struct png_struct_def
/* This triggers a compiler error in png.c, if png.c and png.h /* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number. * do not agree upon the version number.
*/ */
typedef png_structp version_1_4_2; typedef png_structp version_1_4_3;
typedef png_struct FAR * FAR * png_structpp; typedef png_struct FAR * FAR * png_structpp;

View File

@ -1,7 +1,7 @@
/* pngconf.h - machine configurable file for libpng /* pngconf.h - machine configurable file for libpng
* *
* libpng version 1.4.2 - May 6, 2010 * libpng version 1.4.3 - June 26, 2010
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2010 Glenn Randers-Pehrson * Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -50,15 +50,6 @@
# include "pngusr.h" # include "pngusr.h"
#endif #endif
/*
* Added by stephena - 2010/06/17
*
* Disable parts of the library that we know Stella will never use.
*/
#define PNG_NO_MNG_FEATURES
#define PNG_NO_PROGRESSIVE_READ
#define PNG_PROGRESSIVE_READ_NOT_SUPPORTED
/* /*
* If you create a private DLL you need to define in "pngusr.h" the followings: * If you create a private DLL you need to define in "pngusr.h" the followings:
* #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of * #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
@ -78,6 +69,15 @@
* - PNG_USER_VERSIONINFO_LEGALTRADEMARKS * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
*/ */
/*
* Added by stephena - 2010/06/17
*
* Disable parts of the library that we know Stella will never use.
*/
#define PNG_NO_MNG_FEATURES
#define PNG_NO_PROGRESSIVE_READ
#define PNG_PROGRESSIVE_READ_NOT_SUPPORTED
#ifdef __STDC__ #ifdef __STDC__
# ifdef SPECIALBUILD # ifdef SPECIALBUILD
# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\ # pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD)\

View File

@ -1,7 +1,7 @@
/* pngpread.c - read a png file in push mode /* pngpread.c - read a png file in push mode
* *
* Last changed in libpng 1.4.1 [February 25, 2010] * Last changed in libpng 1.4.3 [June 26, 2010]
* Copyright (c) 1998-2010 Glenn Randers-Pehrson * Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -779,8 +779,7 @@ png_push_read_IDAT(png_structp png_ptr)
png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size); png_calculate_crc(png_ptr, png_ptr->save_buffer_ptr, save_size);
if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)) png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
png_process_IDAT_data(png_ptr, png_ptr->save_buffer_ptr, save_size);
png_ptr->idat_size -= save_size; png_ptr->idat_size -= save_size;
png_ptr->buffer_size -= save_size; png_ptr->buffer_size -= save_size;
@ -803,8 +802,8 @@ png_push_read_IDAT(png_structp png_ptr)
save_size = png_ptr->current_buffer_size; save_size = png_ptr->current_buffer_size;
png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size); png_calculate_crc(png_ptr, png_ptr->current_buffer_ptr, save_size);
if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size); png_process_IDAT_data(png_ptr, png_ptr->current_buffer_ptr, save_size);
png_ptr->idat_size -= save_size; png_ptr->idat_size -= save_size;
png_ptr->buffer_size -= save_size; png_ptr->buffer_size -= save_size;
@ -829,62 +828,101 @@ void /* PRIVATE */
png_process_IDAT_data(png_structp png_ptr, png_bytep buffer, png_process_IDAT_data(png_structp png_ptr, png_bytep buffer,
png_size_t buffer_length) png_size_t buffer_length)
{ {
int ret; /* The caller checks for a non-zero buffer length. */
if (!(buffer_length > 0) || buffer == NULL)
if ((png_ptr->flags & PNG_FLAG_ZLIB_FINISHED) && buffer_length) png_error(png_ptr, "No IDAT data (internal error)");
png_benign_error(png_ptr, "Extra compression data");
/* This routine must process all the data it has been given
* before returning, calling the row callback as required to
* handle the uncompressed results.
*/
png_ptr->zstream.next_in = buffer; png_ptr->zstream.next_in = buffer;
png_ptr->zstream.avail_in = (uInt)buffer_length; png_ptr->zstream.avail_in = (uInt)buffer_length;
for (;;)
/* Keep going until the decompressed data is all processed
* or the stream marked as finished.
*/
while (png_ptr->zstream.avail_in > 0 &&
!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
{ {
ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH); int ret;
if (ret != Z_OK)
/* We have data for zlib, but we must check that zlib
* has somewhere to put the results. It doesn't matter
* if we don't expect any results -- it may be the input
* data is just the LZ end code.
*/
if (!(png_ptr->zstream.avail_out > 0))
{ {
if (ret == Z_STREAM_END)
{
if (png_ptr->zstream.avail_in)
png_benign_error(png_ptr, "Extra compressed data");
if (!(png_ptr->zstream.avail_out))
{
png_push_process_row(png_ptr);
}
png_ptr->mode |= PNG_AFTER_IDAT;
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
break;
}
else if (ret == Z_BUF_ERROR)
break;
else
png_error(png_ptr, "Decompression Error");
}
if (!(png_ptr->zstream.avail_out))
{
if ((
#ifdef PNG_READ_INTERLACING_SUPPORTED
png_ptr->interlaced && png_ptr->pass > 6) ||
(!png_ptr->interlaced &&
#endif
png_ptr->row_number == png_ptr->num_rows))
{
if (png_ptr->zstream.avail_in)
png_warning(png_ptr, "Too much data in IDAT chunks");
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
break;
}
png_push_process_row(png_ptr);
png_ptr->zstream.avail_out = png_ptr->zstream.avail_out =
(uInt) PNG_ROWBYTES(png_ptr->pixel_depth, (uInt) PNG_ROWBYTES(png_ptr->pixel_depth,
png_ptr->iwidth) + 1; png_ptr->iwidth) + 1;
png_ptr->zstream.next_out = png_ptr->row_buf; png_ptr->zstream.next_out = png_ptr->row_buf;
} }
else /* Using Z_SYNC_FLUSH here means that an unterminated
break; * LZ stream can still be handled (a stream with a missing
* end code), otherwise (Z_NO_FLUSH) a future zlib
* implementation might defer output and, therefore,
* change the current behavior. (See comments in inflate.c
* for why this doesn't happen at present with zlib 1.2.5.)
*/
ret = inflate(&png_ptr->zstream, Z_SYNC_FLUSH);
/* Check for any failure before proceeding. */
if (ret != Z_OK && ret != Z_STREAM_END)
{
/* Terminate the decompression. */
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
/* This may be a truncated stream (missing or
* damaged end code). Treat that as a warning.
*/
if (png_ptr->row_number >= png_ptr->num_rows ||
png_ptr->pass > 6)
png_warning(png_ptr, "Truncated compressed data in IDAT");
else
png_error(png_ptr, "Decompression error in IDAT");
/* Skip the check on unprocessed input */
return;
}
/* Did inflate output any data? */
if (png_ptr->zstream.next_out != png_ptr->row_buf)
{
/* Is this unexpected data after the last row?
* If it is, artificially terminate the LZ output
* here.
*/
if (png_ptr->row_number >= png_ptr->num_rows ||
png_ptr->pass > 6)
{
/* Extra data. */
png_warning(png_ptr, "Extra compressed data in IDAT");
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
/* Do no more processing; skip the unprocessed
* input check below.
*/
return;
}
/* Do we have a complete row? */
if (png_ptr->zstream.avail_out == 0)
png_push_process_row(png_ptr);
}
/* And check for the end of the stream. */
if (ret == Z_STREAM_END)
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
} }
/* All the data should have been processed, if anything
* is left at this point we have bytes of IDAT data
* after the zlib end code.
*/
if (png_ptr->zstream.avail_in > 0)
png_warning(png_ptr, "Extra compression data");
} }
void /* PRIVATE */ void /* PRIVATE */
@ -900,8 +938,8 @@ png_push_process_row(png_structp png_ptr)
png_ptr->row_info.width); png_ptr->row_info.width);
png_read_filter_row(png_ptr, &(png_ptr->row_info), png_read_filter_row(png_ptr, &(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->prev_row + 1, png_ptr->row_buf + 1, png_ptr->prev_row + 1,
(int)(png_ptr->row_buf[0])); (int)(png_ptr->row_buf[0]));
png_memcpy(png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1); png_memcpy(png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1);
@ -915,7 +953,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass < 6) if (png_ptr->pass < 6)
/* old interface (pre-1.0.9): /* old interface (pre-1.0.9):
png_do_read_interlace(&(png_ptr->row_info), png_do_read_interlace(&(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
*/ */
png_do_read_interlace(png_ptr); png_do_read_interlace(png_ptr);
@ -950,7 +988,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass == 6 && png_ptr->height <= 4) if (png_ptr->pass == 6 && png_ptr->height <= 4)
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
@ -990,7 +1028,7 @@ png_push_process_row(png_structp png_ptr)
for (i = 0; i < 4 && png_ptr->pass == 2; i++) for (i = 0; i < 4 && png_ptr->pass == 2; i++)
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
@ -1040,13 +1078,13 @@ png_push_process_row(png_structp png_ptr)
for (i = 0; i < 2 && png_ptr->pass == 4; i++) for (i = 0; i < 2 && png_ptr->pass == 4; i++)
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 6) /* Pass 5 might be empty */ if (png_ptr->pass == 6) /* Pass 5 might be empty */
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
@ -1065,7 +1103,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass == 6) /* Skip top generated row */ if (png_ptr->pass == 6) /* Skip top generated row */
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
@ -1079,7 +1117,7 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->pass != 6) if (png_ptr->pass != 6)
break; break;
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
} }
@ -1391,7 +1429,7 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
tmp = text; tmp = text;
text = (png_charp)png_malloc(png_ptr, text_size + text = (png_charp)png_malloc(png_ptr, text_size +
(png_ptr->zbuf_size (png_ptr->zbuf_size
- png_ptr->zstream.avail_out + 1)); - png_ptr->zstream.avail_out + 1));
png_memcpy(text, tmp, text_size); png_memcpy(text, tmp, text_size);
@ -1613,7 +1651,7 @@ png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32
} }
#endif #endif
png_memcpy((png_charp)png_ptr->unknown_chunk.name, png_memcpy((png_charp)png_ptr->unknown_chunk.name,
(png_charp)png_ptr->chunk_name, (png_charp)png_ptr->chunk_name,
png_sizeof(png_ptr->unknown_chunk.name)); png_sizeof(png_ptr->unknown_chunk.name));
png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name) - 1] png_ptr->unknown_chunk.name[png_sizeof(png_ptr->unknown_chunk.name) - 1]
= '\0'; = '\0';

View File

@ -1,7 +1,7 @@
/* pngpriv.h - private declarations for use inside libpng /* pngpriv.h - private declarations for use inside libpng
* *
* libpng version 1.4.2 - May 6, 2010 * libpng version 1.4.3 - June 26, 2010
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2010 Glenn Randers-Pehrson * Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngrutil.c - utilities to read a PNG file /* pngrutil.c - utilities to read a PNG file
* *
* Last changed in libpng 1.4.1 [February 25, 2010] * Last changed in libpng 1.4.3 [June 26, 2010]
* Copyright (c) 1998-2010 Glenn Randers-Pehrson * Copyright (c) 1998-2010 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -254,7 +254,7 @@ png_inflate(png_structp png_ptr, const png_byte *data, png_size_t size,
* buffer if available. * buffer if available.
*/ */
{ {
const char *msg; PNG_CONST char *msg;
if (png_ptr->zstream.msg != 0) if (png_ptr->zstream.msg != 0)
msg = png_ptr->zstream.msg; msg = png_ptr->zstream.msg;
else else
@ -326,8 +326,10 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
if (png_ptr->user_chunk_malloc_max && if (png_ptr->user_chunk_malloc_max &&
(prefix_size + expanded_size >= png_ptr->user_chunk_malloc_max - 1)) (prefix_size + expanded_size >= png_ptr->user_chunk_malloc_max - 1))
#else #else
# ifdef PNG_USER_CHUNK_MALLOC_MAX
if ((PNG_USER_CHUNK_MALLOC_MAX > 0) && if ((PNG_USER_CHUNK_MALLOC_MAX > 0) &&
prefix_size + expanded_size >= PNG_USER_CHUNK_MALLOC_MAX - 1) prefix_size + expanded_size >= PNG_USER_CHUNK_MALLOC_MAX - 1)
# endif
#endif #endif
png_warning(png_ptr, "Exceeded size limit while expanding chunk"); png_warning(png_ptr, "Exceeded size limit while expanding chunk");
@ -363,7 +365,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
*newlength = prefix_size + expanded_size; *newlength = prefix_size + expanded_size;
return; /* The success return! */ return; /* The success return! */
} }
png_warning(png_ptr, "png_inflate logic error"); png_warning(png_ptr, "png_inflate logic error");
png_free(png_ptr, text); png_free(png_ptr, text);
} }
@ -1811,6 +1813,7 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (png_ptr->chunkdata == NULL) if (png_ptr->chunkdata == NULL)
{ {
png_warning(png_ptr, "Out of memory while processing sCAL chunk"); png_warning(png_ptr, "Out of memory while processing sCAL chunk");
png_crc_finish(png_ptr, length);
return; return;
} }
slength = (png_size_t)length; slength = (png_size_t)length;
@ -1832,6 +1835,8 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (*vp) if (*vp)
{ {
png_warning(png_ptr, "malformed width string in sCAL chunk"); png_warning(png_ptr, "malformed width string in sCAL chunk");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
return; return;
} }
#else #else
@ -1840,6 +1845,8 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (swidth == NULL) if (swidth == NULL)
{ {
png_warning(png_ptr, "Out of memory while processing sCAL chunk width"); png_warning(png_ptr, "Out of memory while processing sCAL chunk width");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
return; return;
} }
png_memcpy(swidth, ep, png_strlen(ep)); png_memcpy(swidth, ep, png_strlen(ep));
@ -1853,8 +1860,7 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (png_ptr->chunkdata + slength < ep) if (png_ptr->chunkdata + slength < ep)
{ {
png_warning(png_ptr, "Truncated sCAL chunk"); png_warning(png_ptr, "Truncated sCAL chunk");
#if defined(PNG_FIXED_POINT_SUPPORTED) && \ #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
!defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth); png_free(png_ptr, swidth);
#endif #endif
png_free(png_ptr, png_ptr->chunkdata); png_free(png_ptr, png_ptr->chunkdata);
@ -1867,6 +1873,11 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (*vp) if (*vp)
{ {
png_warning(png_ptr, "malformed height string in sCAL chunk"); png_warning(png_ptr, "malformed height string in sCAL chunk");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth);
#endif
return; return;
} }
#else #else
@ -1875,6 +1886,11 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (sheight == NULL) if (sheight == NULL)
{ {
png_warning(png_ptr, "Out of memory while processing sCAL chunk height"); png_warning(png_ptr, "Out of memory while processing sCAL chunk height");
png_free(png_ptr, png_ptr->chunkdata);
png_ptr->chunkdata = NULL;
#if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
png_free(png_ptr, swidth);
#endif
return; return;
} }
png_memcpy(sheight, ep, png_strlen(ep)); png_memcpy(sheight, ep, png_strlen(ep));

View File

@ -1627,4 +1627,4 @@ main(int argc, char *argv[])
} }
/* Generate a compiler error if there is an old png.h in the search path. */ /* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_4_2 your_png_h_is_not_version_1_4_2; typedef version_1_4_3 your_png_h_is_not_version_1_4_3;

View File

@ -2106,7 +2106,7 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
png_uint_32 row_bytes = row_info->rowbytes; png_uint_32 row_bytes = row_info->rowbytes;
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED #ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
int num_p_filters = (int)png_ptr->num_prev_filters; int num_p_filters = (int)png_ptr->num_prev_filters;
#endif #endif
png_debug(1, "in png_write_find_filter"); png_debug(1, "in png_write_find_filter");
@ -2116,7 +2116,7 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
/* These will never be selected so we need not test them. */ /* These will never be selected so we need not test them. */
filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH); filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH);
} }
#endif #endif
/* Find out how many bytes offset each pixel is */ /* Find out how many bytes offset each pixel is */
bpp = (row_info->pixel_depth + 7) >> 3; bpp = (row_info->pixel_depth + 7) >> 3;

View File

@ -28,7 +28,9 @@ close(INFILE);
# Get all snapshot files from the actual directory (second commandline arg) # Get all snapshot files from the actual directory (second commandline arg)
# We use a hashmap to get constant lookup time # We use a hashmap to get constant lookup time
my @files = <"$ARGV[1]/*">; opendir(SNAPDIR, $ARGV[1]) or die "Directory '$ARGV[1]' not found\n";
my @files = grep !/^\.\.?$/, readdir SNAPDIR;
close(SNAPDIR);
foreach $file (@files) foreach $file (@files)
{ {
($base,$path,$type) = fileparse($file); ($base,$path,$type) = fileparse($file);