diff --git a/Changes.txt b/Changes.txt index 52c5b707f..e60af34b7 100644 --- a/Changes.txt +++ b/Changes.txt @@ -137,6 +137,8 @@ * Fixed WD bankswitching + * Added FC bankswitching for Amiga's Power Play Arcade Video Game Album + * Auto-detection of bankswitch scheme by file extension now includes more human-readable formats (not restricted to DOS 3-char length). See the documentation for the new names. diff --git a/docs/index.html b/docs/index.html index c10fc79fc..227dc6e2b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3665,7 +3665,7 @@ Ms Pac-Man (Stella extended codes): 4A50 ²64K 4A50 + ram .4A5, .4A50 4K 4K Atari .4K 4KSC CPUWIZ 4K + ram .4KS, .4KSC - AR Supercharger .AR + AR ²Supercharger .AR BF CPUWIZ 256K .BF BFSC CPUWIZ 256K + ram.BFS, .BFSC BUS Experimental.BUS @@ -3693,12 +3693,13 @@ Ms Pac-Man (Stella extended codes): F8SC 8K Atari + ram .F8S, .F8SC FA CBS RAM Plus .FA FA2 CBS RAM Plus 24/28K .FA2 + FC Amiga Power Play Aracde 16/32K .FC FE 8K Decathlon .FE MDM Menu Driven Megacart .MDM SB 128-256k SUPERbanking .SB UA 8K UA Ltd. .UA UASW 8K UA Ltd. (swapped banks).UASW - WD Wickstead Design .WD + WD Wickstead Design (Pink Panther) .WD X07 ¹64K AtariAge .X07 diff --git a/src/debugger/gui/module.mk b/src/debugger/gui/module.mk index b719e8a73..d80408a60 100644 --- a/src/debugger/gui/module.mk +++ b/src/debugger/gui/module.mk @@ -44,6 +44,7 @@ MODULE_OBJS := \ src/debugger/gui/CartF8Widget.o \ src/debugger/gui/CartFA2Widget.o \ src/debugger/gui/CartFAWidget.o \ + src/debugger/gui/CartFCWidget.o \ src/debugger/gui/CartFEWidget.o \ src/debugger/gui/CartMDMWidget.o \ src/debugger/gui/CartRamWidget.o \ diff --git a/src/emucore/Bankswitch.cxx b/src/emucore/Bankswitch.cxx index 340633aa8..d95013e5d 100644 --- a/src/emucore/Bankswitch.cxx +++ b/src/emucore/Bankswitch.cxx @@ -131,6 +131,7 @@ Bankswitch::Description Bankswitch::BSList[int(Bankswitch::Type::NumSchemes)] = { "F8SC" , "F8SC (8K Atari + ram)" }, { "FA" , "FA (CBS RAM Plus)" }, { "FA2" , "FA2 (CBS RAM Plus 24/28K)" }, + { "FC" , "FC (32K Amiga)" }, { "FE" , "FE (8K Decathlon)" }, { "MDM" , "MDM (Menu Driven Megacart)" }, { "SB" , "SB (128-256K SUPERbank)" }, @@ -217,6 +218,7 @@ Bankswitch::ExtensionMap Bankswitch::ourExtensions = { { "F8SC" , Bankswitch::Type::_F8SC }, { "FA" , Bankswitch::Type::_FA }, { "FA2" , Bankswitch::Type::_FA2 }, + { "FC" , Bankswitch::Type::_FC }, { "FE" , Bankswitch::Type::_FE }, { "MDM" , Bankswitch::Type::_MDM }, { "SB" , Bankswitch::Type::_SB }, @@ -273,6 +275,7 @@ Bankswitch::NameToTypeMap Bankswitch::ourNameToTypes = { { "F8SC" , Bankswitch::Type::_F8SC }, { "FA" , Bankswitch::Type::_FA }, { "FA2" , Bankswitch::Type::_FA2 }, + { "FC" , Bankswitch::Type::_FC }, { "FE" , Bankswitch::Type::_FE }, { "MDM" , Bankswitch::Type::_MDM }, { "SB" , Bankswitch::Type::_SB }, diff --git a/src/emucore/Bankswitch.hxx b/src/emucore/Bankswitch.hxx index a55d5da77..d0aa0502f 100644 --- a/src/emucore/Bankswitch.hxx +++ b/src/emucore/Bankswitch.hxx @@ -44,8 +44,8 @@ class Bankswitch _CM, _CTY, _CV, _CVP, _DASH, _DF, _DFSC, _DPC, _DPCP, _E0, _E7, _E78K, _EF, _EFSC, _F0, _F4, _F4SC, _F6, _F6SC, _F8, _F8SC, - _FA, _FA2, _FE, _MDM, _SB, _UA, _UASW, - _WD, _WDSW, _X07, + _FA, _FA2, _FC, _FE, _MDM, _SB, _UA, + _UASW, _WD, _WDSW, _X07, #ifdef CUSTOM_ARM _CUSTOM, #endif diff --git a/src/emucore/CartDetector.cxx b/src/emucore/CartDetector.cxx index 0b9fedffb..e1b8b5cfc 100644 --- a/src/emucore/CartDetector.cxx +++ b/src/emucore/CartDetector.cxx @@ -53,6 +53,7 @@ #include "CartF8SC.hxx" #include "CartFA.hxx" #include "CartFA2.hxx" +#include "CartFC.hxx" #include "CartFE.hxx" #include "CartMDM.hxx" #include "CartSB.hxx" @@ -316,6 +317,8 @@ CartDetector::createFromImage(const ByteBuffer& image, size_t size, Bankswitch:: return make_unique(image, size, md5, settings); case Bankswitch::Type::_FA2: return make_unique(image, size, md5, settings); + case Bankswitch::Type::_FC: + return make_unique(image, size, md5, settings); case Bankswitch::Type::_FE: return make_unique(image, size, md5, settings); case Bankswitch::Type::_MDM: @@ -419,6 +422,8 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si type = Bankswitch::Type::_F6SC; else if(isProbablyE7(image, size)) type = Bankswitch::Type::_E7; + else if (isProbablyFC(image, size)) + type = Bankswitch::Type::_FC; else if(isProbably3E(image, size)) type = Bankswitch::Type::_3E; /* no known 16K 3F ROMS @@ -457,6 +462,8 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si type = Bankswitch::Type::_DPCP; else if(isProbablyFA2(image, size)) type = Bankswitch::Type::_FA2; + else if (isProbablyFC(image, size)) + type = Bankswitch::Type::_FC; else type = Bankswitch::Type::_F4; } @@ -925,6 +932,17 @@ bool CartDetector::isProbablyFA2(const ByteBuffer& image, size_t) return true; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool CartDetector::isProbablyFC(const ByteBuffer& image, size_t size) +{ + // FC bankswitching uses consecutive writes to 3 hotspots + uInt8 signature[6] = { + 0x8e, 0xf8, 0xff, 0x8c, 0xf9, 0xff // STX $FFF8, STY $FFF9 + }; + return (searchForBytes(image.get(), size, signature, 6, 1)); +} + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool CartDetector::isProbablyFE(const ByteBuffer& image, size_t size) { diff --git a/src/emucore/CartDetector.hxx b/src/emucore/CartDetector.hxx index 8f0c580bc..f077e3ef4 100644 --- a/src/emucore/CartDetector.hxx +++ b/src/emucore/CartDetector.hxx @@ -225,6 +225,11 @@ class CartDetector */ static bool isProbablyFA2(const ByteBuffer& image, size_t size); + /** + Returns true if the image is probably an FC bankswitching cartridge + */ + static bool isProbablyFC(const ByteBuffer& image, size_t size); + /** Returns true if the image is probably an FE bankswitching cartridge */ diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 6d784356d..9950ab815 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -1319,7 +1319,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6076b187a5d8ea7a2a05111c19b5d5cd", "", "", "Fu Kung! (V0.14) (01-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60a61da9b2f43dd7e13a5093ec41a53d", "VentureVision, Dan Oliver", "VV2001", "Rescue Terra I (1982) (VentureVision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60bbd425cb7214ddb9f9a31948e91ecb", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "60cd61a2dfccb0e2736434f9792c1672", "Amiga - Video Soft, Frank Ellis, Jerry Lawson", "2110", "3-D Havoc (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "60cd61a2dfccb0e2736434f9792c1672", "Amiga - Video Soft, Frank Ellis, Jerry Lawson", "2110", "3-D Havoc (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "60d304582d33e2957b73eb300a7495bb", "", "", "Jam Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60e0ea3cbe0913d39803477945e9e5ec", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "", "PADDLES_IAXDR", "PADDLES_IAXDR", "YES", "AUTO 60", "", "", "", "" }, { "613abf596c304ef6dbd8f3351920c37a", "", "", "Boring Pac-Man (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "33", "", "" }, @@ -2816,7 +2816,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d4aa89e96d2902692f5c45f36903d336", "", "", "Euchre (NTSC) (Erik Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d4c590ccfb611a73b3331359700c01a3", "", "", "Sprite Movement Demo 2 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d541b20eae221a8ee321375e5971e766", "Arcadia Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d54cd41ecfd59e4b72d2c086152b9a75", "Amiga", "1110", "Power Play Arcade Video Game Album (1983) (Amiga) (Prototype)", "Ghost Attack, Genesis, Havoc", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d54cd41ecfd59e4b72d2c086152b9a75", "Amiga - Video Soft - Michael K. Glass, Jerry Lawson", "1110", "Power Play Arcade Video Game Album (1983) (Amiga) (Prototype)", "3-D Ghost Attack only (3-D Genesis & 3-D Havoc missing in ROM)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d5618464dbdc2981f6aa8b955828eeb4", "CCE", "C-829", "Megamania (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d563ba38151b8204c9f5c9f58e781455", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d573089534ca596e64efef474be7b6bc", "Parker Brothers, John Emerson", "931511", "Action Force (1983) (Parker Bros) (PAL) [a]", "AKA G.I. Joe - Cobra Strike", "", "", "", "", "", "", "", "", "", "", "", "01 55", "", "", "", "" }, @@ -3395,7 +3395,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fc9c1652fe3a2cade6188f4d3692481f", "Andrew Davies", "", "Andrew Davies early notBoulderDash demo (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fca4a5be1251927027f2c24774a02160", "Activision, John Van Ryzin", "AZ-036-04", "H.E.R.O. (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fcbbd0a407d3ff7bf857b8a399280ea1", "ZiMAG - Emag - Vidco", "GN-070", "Mysterious Thief, A (1983) (ZiMAG) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "fcbdf405f0fc2027b0ea45bb5af94c1a", "Amiga - Video Soft, Michael K. Glass, Jerry Lawson", "", "3-D Ghost Attack (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fcbdf405f0fc2027b0ea45bb5af94c1a", "Amiga - Video Soft, Michael K. Glass, Jerry Lawson", "", "3-D Ghost Attack (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fcea12625c071ddc49f4e409f4038c60", "Fabrizio Zavagli", "", "Balls! (16-09-2002) (Fabrizio Zavagli)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fcf8e306f6615f74feba5cb25550038c", "", "", "Blue Dot Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd0e5148162e8ec6719445d559f018a9", "Activision, Steve Cartwright - Ariola", "EAX-022, EAX-022-04I - 711 022-720", "Seaquest (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/module.mk b/src/emucore/module.mk index 0448ec58a..7fd311126 100644 --- a/src/emucore/module.mk +++ b/src/emucore/module.mk @@ -43,6 +43,7 @@ MODULE_OBJS := \ src/emucore/CartF8SC.o \ src/emucore/CartFA.o \ src/emucore/CartFA2.o \ + src/emucore/CartFC.o \ src/emucore/CartFE.o \ src/emucore/CartMDM.o \ src/emucore/CartSB.o \ diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 2f150812c..eb68a666f 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -7937,6 +7937,7 @@ "Cart.ModelNo" "2110" "Cart.Name" "3-D Havoc (1983) (Amiga) (Prototype)" "Cart.Rarity" "Prototype" +"Display.Phosphor" "YES" "" "Cart.MD5" "60d304582d33e2957b73eb300a7495bb" @@ -17086,11 +17087,12 @@ "" "Cart.MD5" "d54cd41ecfd59e4b72d2c086152b9a75" -"Cart.Manufacturer" "Amiga" +"Cart.Manufacturer" "Amiga - Video Soft - Michael K. Glass, Jerry Lawson" "Cart.ModelNo" "1110" "Cart.Name" "Power Play Arcade Video Game Album (1983) (Amiga) (Prototype)" -"Cart.Note" "Ghost Attack, Genesis, Havoc" +"Cart.Note" "3-D Ghost Attack only (3-D Genesis & 3-D Havoc missing in ROM)" "Cart.Rarity" "Prototype" +"Display.Phosphor" "YES" "" "Cart.MD5" "d5618464dbdc2981f6aa8b955828eeb4" @@ -20605,6 +20607,7 @@ "Cart.Manufacturer" "Amiga - Video Soft, Michael K. Glass, Jerry Lawson" "Cart.Name" "3-D Ghost Attack (1983) (Amiga) (Prototype)" "Cart.Rarity" "Prototype" +"Display.Phosphor" "YES" "" "Cart.MD5" "fcea12625c071ddc49f4e409f4038c60" diff --git a/src/windows/Stella.vcxproj.filters b/src/windows/Stella.vcxproj.filters index d6c4176b9..355943090 100644 --- a/src/windows/Stella.vcxproj.filters +++ b/src/windows/Stella.vcxproj.filters @@ -981,6 +981,12 @@ Source Files\debugger + + Source Files\emucore + + + Source Files\debugger + @@ -2003,6 +2009,12 @@ Header Files\debugger + + Header Files\emucore + + + Header Files\debugger +