mirror of https://github.com/stella-emu/stella.git
Further improvements to '3E' bankswitch autodetection. We're now down
to requiring only 4 entries out of 2722 ROMs where auto-detection fails. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1321 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
03c533e0b9
commit
c4fa58b38f
|
@ -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: Cart.cxx,v 1.32 2007-06-08 12:36:51 stephena Exp $
|
||||
// $Id: Cart.cxx,v 1.33 2007-06-09 23:20:16 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
|
@ -203,6 +203,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
type = "E0";
|
||||
else if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else if(isProbablyUA(image, size))
|
||||
type = "UA";
|
||||
else if(isProbablyFE(image, size))
|
||||
|
@ -230,6 +232,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
type = "E7";
|
||||
else if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else
|
||||
type = "F6";
|
||||
}
|
||||
|
@ -239,6 +243,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
type = "F4SC";
|
||||
else if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else
|
||||
type = "F4";
|
||||
}
|
||||
|
@ -247,6 +253,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
// TODO - autodetect 4A50
|
||||
if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else
|
||||
type = "MB";
|
||||
}
|
||||
|
@ -255,6 +263,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
// TODO - autodetect 4A50
|
||||
if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else
|
||||
type = "MC";
|
||||
}
|
||||
|
@ -262,6 +272,8 @@ string Cartridge::autodetectType(const uInt8* image, uInt32 size)
|
|||
{
|
||||
if(isProbably3F(image, size))
|
||||
type = isProbably3E(image, size) ? "3E" : "3F";
|
||||
else if(isProbably3E(image, size))
|
||||
type = "3E";
|
||||
else
|
||||
type = "4K"; // Most common bankswitching type
|
||||
}
|
||||
|
@ -318,15 +330,17 @@ bool Cartridge::isProbably3F(const uInt8* image, uInt32 size)
|
|||
// We expect it will be present at least 2 times, since there are
|
||||
// at least two banks
|
||||
uInt8 signature[] = { 0x85, 0x3F }; // STA $3F
|
||||
return searchForBytes(image, size, signature, 2) > 2;
|
||||
return searchForBytes(image, size, signature, 2) > 1;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Cartridge::isProbably3E(const uInt8* image, uInt32 size)
|
||||
{
|
||||
// TODO - fix this one, once I find a test ROM
|
||||
uInt8 signature[] = { 0x85, 0x3E };
|
||||
return searchForBytes(image, size, signature, 2) > 2;
|
||||
// 3E cart bankswitching is triggered by storing the bank number
|
||||
// in address 3E using 'STA $3E', commonly followed by an
|
||||
// immediate mode LDA
|
||||
uInt8 signature[] = { 0x85, 0x3E, 0xA9, 0x00 }; // STA $3E; LDA #$00
|
||||
return searchForBytes(image, size, signature, 4) > 0;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -1302,7 +1302,7 @@ static const char* DefProps[2722][21] = {
|
|||
{ "79004f84bdeee78d142e445057883169", "CCE", "", "Planet Patrol (CCE) [!]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "791bc8aceb6b0f4d9990d6062b30adfa", "Activision", "AB-035-04", "Pitfall! (1982) (Activision) (PAL) [!]", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "7926083ad423ed685de3b3a04a914315", "Barry Laws Jr.", "", "Face Invaders 2 by Barry Laws Jr. (Space Invaders Hack)", "Hack of Astroblast (Mattel)", "New Release (Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "792b1d93eb1d8045260c840b0688ec8f", "Kroko", "", "3E Bankswitch Test (TIA @ $00)", "", "", "", "3E", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "792b1d93eb1d8045260c840b0688ec8f", "Kroko", "", "3E Bankswitch Test (TIA @ $00)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "7972e5101fa548b952d852db24ad6060", "Atari", "CX2627 / 6699841", "Human Cannonball (AKA Cannon Man) (1978) (Atari)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "798b8921276eec9e332dfcb47a2dbb17", "", "", "Cookie Monster Munch (1983) (Atari) (PAL) [a1][!]", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" },
|
||||
{ "798cc114f1623c14085868cd3494fe8e", "", "", "Pins Revenge (Atari Freak 1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -1499,7 +1499,7 @@ static const char* DefProps[2722][21] = {
|
|||
{ "8b5b1e3a434ebbdc2c2a49dc68f46360", "", "2451", "Donkey Kong (1983) (CBS Electronics) (PAL) [a1][!]", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "8b7ca29a55432f886cee3d452fb00481", "Starpath", "AR-4201", "Sword of Saros (1983) (Starpath) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "8b81af55cd2ef3c7444d6aec4e3a1c09", "", "", "Dark Mage [b1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "8bbfd951c89cc09c148bfabdefa08bec", "UA Limited", "", "Pleiades (UA Limited)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "8bbfd951c89cc09c148bfabdefa08bec", "UA Limited", "", "Pleiades (UA Limited)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "32", "", "YES", "", "" },
|
||||
{ "8bc0d2052b4f259e7a50a7c771b45241", "Xonox", "", "Tomarc the Barbarian (1983) (Xonox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "24", "", "", "", "" },
|
||||
{ "8bd8f65377023bdb7c5fcf46ddda5d31", "Activision", "AG-019", "Sky Jinks (1982) (Activision) [o1]", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "8bebac614571135933116045204f0f00", "", "", "Missile Command (CX-22 Trackball) (PAL) (2002) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
|
@ -1645,7 +1645,7 @@ static const char* DefProps[2722][21] = {
|
|||
{ "9ab72d3fd2cc1a0c9adb504502579037", "Epyx", "8056100286", "California Games (1988) (Epyx) [!]", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9ad362179c2eea4ea115c7640b4b003e", "Activision", "AX-013", "Barnstorming (1982) (Activision) [p1][!]", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9ad36e699ef6f45d9eb6c4cf90475c9f", "Imagic", "IA3203", "Atlantis (1982) (Imagic) [!]", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9b150a42fc788960fbb4cbe250259ee2", "Kroko", "", "3E Bankswitch Test (TIA @ $40)", "", "", "", "3E", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9b150a42fc788960fbb4cbe250259ee2", "Kroko", "", "3E Bankswitch Test (TIA @ $40)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9b21d8fc78cc4308990d99a4d906ec52", "", "C-838", "Immies & Aggies (CCE)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "18", "223", "", "", "" },
|
||||
{ "9b246683f44c963a50e41d6b485bee77", "", "", "Boring (PAL) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "9bb136b62521c67ac893213e01dd338f", "", "", "Spike's Peak (1983) (Xonox) (PAL) [a1][!]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -1911,7 +1911,7 @@ static const char* DefProps[2722][21] = {
|
|||
{ "b5a1a189601a785bdb2f02a424080412", "Imagic", "IA3410", "Shootin' Gallery (1982) (Imagic)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "29", "", "", "", "" },
|
||||
{ "b5cb9cf6e668ea3f4cc2be00ea70ec3c", "CommaVid", "CM-005", "Mines of Minos (1982) (CommaVid) (PAL) [!]", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "b6166f15720fdf192932f1f76df5b65d", "Amiga", "3130", "Off Your Rocker (1983) (Amiga)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "27", "", "", "", "" },
|
||||
{ "b65d4a38d6047735824ee99684f3515e", "", "", "Megaboy (Brazil) (PAL) [!]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "b65d4a38d6047735824ee99684f3515e", "", "", "Megaboy (Brazil) (PAL) [!]", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "", "" },
|
||||
{ "b676a9b7094e0345a76ef027091d916b", "Video Gems / Thomas Jentzsch", "", "Mission Survive (1983) (NTSC by Thomas Jentzsch)", "", "New Release (Video Format Conversion)", "", "", "", "A", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "b6812eaf87127f043e78f91f2028f9f4", "Simage", "", "Eli's Ladder (Simage)", "", "Unbelievably Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "b6821ac51c4c1dcb283f01be2f047dc1", "", "", "Rubik's Cube 3D Demo (25-11-2002) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
|
|
@ -68,13 +68,11 @@
|
|||
"Cartridge.MD5" "9b150a42fc788960fbb4cbe250259ee2"
|
||||
"Cartridge.Manufacturer" "Kroko"
|
||||
"Cartridge.Name" "3E Bankswitch Test (TIA @ $40)"
|
||||
"Cartridge.Type" "3E"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "792b1d93eb1d8045260c840b0688ec8f"
|
||||
"Cartridge.Manufacturer" "Kroko"
|
||||
"Cartridge.Name" "3E Bankswitch Test (TIA @ $00)"
|
||||
"Cartridge.Type" "3E"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "0685bd0bcb975ceef7041749a5454a48"
|
||||
|
@ -8775,6 +8773,7 @@
|
|||
"Cartridge.Manufacturer" "UA Limited"
|
||||
"Cartridge.Name" "Pleiades (UA Limited)"
|
||||
"Cartridge.Rarity" "Prototype"
|
||||
"Display.YStart" "32"
|
||||
"Display.Phosphor" "YES"
|
||||
""
|
||||
|
||||
|
@ -11144,6 +11143,7 @@
|
|||
|
||||
"Cartridge.MD5" "b65d4a38d6047735824ee99684f3515e"
|
||||
"Cartridge.Name" "Megaboy (Brazil) (PAL) [!]"
|
||||
"Display.YStart" "30"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "b5cb9cf6e668ea3f4cc2be00ea70ec3c"
|
||||
|
|
Loading…
Reference in New Issue