diff --git a/Changes.txt b/Changes.txt index 4603ade98..a6b34ae41 100644 --- a/Changes.txt +++ b/Changes.txt @@ -38,6 +38,8 @@ * Added limited GameLine Master Module bankswitching support. + * Added 03E0 bankswitching for Brazilian Parker Bros ROMs. + * Added BUS bankswitching support for some older demos. * Fixed broken 7800 pause key support. diff --git a/docs/index.html b/docs/index.html index 575f6c525..f7696d7c0 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4888,6 +4888,7 @@

Emulation Properties

Note: If 'Filter' is checked, only the bankswitching types matching the ROM size are listed. + diff --git a/src/debugger/gui/Cart03E0Widget.cxx b/src/debugger/gui/Cart03E0Widget.cxx new file mode 100644 index 000000000..7d35467d1 --- /dev/null +++ b/src/debugger/gui/Cart03E0Widget.cxx @@ -0,0 +1,74 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2023 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include "Cart03E0.hxx" +#include "Cart03E0Widget.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Cartridge03E0Widget::Cartridge03E0Widget( + GuiObject* boss, const GUI::Font& lfont, const GUI::Font& nfont, + int x, int y, int w, int h, Cartridge03E0& cart) + : CartridgeEnhancedWidget(boss, lfont, nfont, x, y, w, h, cart) +{ + initialize(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string Cartridge03E0Widget::description() +{ + ostringstream info; + + info << "03E0 cartridge,\n eight 1K banks mapped into four segments\n" + << CartridgeEnhancedWidget::description(); + + return info.str(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string Cartridge03E0Widget::romDescription() +{ + ostringstream info; + + for(int seg = 0; seg < 4; ++seg) + { + const uInt16 segmentOffset = seg << 10; // myCart.myBankShift; + + info << "Segment #" << seg << " accessible @ $" + << Common::Base::HEX4 << (ADDR_BASE | segmentOffset) + << " - $" << (ADDR_BASE | (segmentOffset + /*myCart.myBankSize - 1*/ 0x3FF)) << ",\n"; + if (seg < 3) + info << " Hotspots " << hotspotStr(0, seg, true) << " - " << hotspotStr(7, seg, true) << "\n"; + else + info << " Always points to last 1K bank of ROM\n"; + } + info << "Startup banks = 4 / 5 / 6 or undetermined"; + + return info.str(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +string Cartridge03E0Widget::hotspotStr(int bank, int segment, bool noBrackets) +{ + static constexpr uInt16 hotspots[3] = {0x03E0, 0x03D0, 0x03B0}; + ostringstream info; + + info << (noBrackets ? "" : "(") + << "$" << Common::Base::HEX1 << ( hotspots[segment] + bank) + << (noBrackets ? "" : ")"); + + return info.str(); +} diff --git a/src/debugger/gui/Cart03E0Widget.hxx b/src/debugger/gui/Cart03E0Widget.hxx new file mode 100644 index 000000000..eccb9cdf6 --- /dev/null +++ b/src/debugger/gui/Cart03E0Widget.hxx @@ -0,0 +1,54 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2023 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef CARTRIDGE03E0_WIDGET_HXX +#define CARTRIDGE03E0_WIDGET_HXX + +class Cartridge03E0; + +#include "CartEnhancedWidget.hxx" + +class Cartridge03E0Widget : public CartridgeEnhancedWidget +{ + public: + Cartridge03E0Widget(GuiObject* boss, const GUI::Font& lfont, + const GUI::Font& nfont, + int x, int y, int w, int h, + Cartridge03E0& cart); + ~Cartridge03E0Widget() override = default; + + private: + string manufacturer() override { return "Parker Brothers (Brazil Pirate)"; } + + string description() override; + + string romDescription() override; + + string hotspotStr(int bank, int segment, bool noBrackets = false) override; + + uInt16 bankSegs() override { return 3; } + + private: + // Following constructors and assignment operators not supported + Cartridge03E0Widget() = delete; + Cartridge03E0Widget(const Cartridge03E0Widget&) = delete; + Cartridge03E0Widget(Cartridge03E0Widget&&) = delete; + Cartridge03E0Widget& operator=(const Cartridge03E0Widget&) = delete; + Cartridge03E0Widget& operator=(Cartridge03E0Widget&&) = delete; +}; + +#endif diff --git a/src/debugger/gui/CartEnhancedWidget.cxx b/src/debugger/gui/CartEnhancedWidget.cxx index 3cd486d5f..5b82a8a5c 100644 --- a/src/debugger/gui/CartEnhancedWidget.cxx +++ b/src/debugger/gui/CartEnhancedWidget.cxx @@ -270,7 +270,7 @@ string CartridgeEnhancedWidget::bankState() //if(hotspot >= 0x100) if(hotspot != 0 && myHotspotDelta > 0) - buf << " " << hotspotStr(bank, 0, bankSegs() < 3); + buf << " " << hotspotStr(bank, seg, bankSegs() < 3); } } else diff --git a/src/debugger/gui/module.mk b/src/debugger/gui/module.mk index 45ea9b5ae..7742e84f6 100644 --- a/src/debugger/gui/module.mk +++ b/src/debugger/gui/module.mk @@ -6,6 +6,7 @@ MODULE_OBJS := \ src/debugger/gui/AtariVoxWidget.o \ src/debugger/gui/AudioWidget.o \ src/debugger/gui/BoosterWidget.o \ + src/debugger/gui/Cart03E0Widget.o \ src/debugger/gui/Cart0840Widget.o \ src/debugger/gui/Cart0FA0Widget.o \ src/debugger/gui/Cart2KWidget.o \ diff --git a/src/emucore/Bankswitch.cxx b/src/emucore/Bankswitch.cxx index 6c17fca3b..52aec7232 100644 --- a/src/emucore/Bankswitch.cxx +++ b/src/emucore/Bankswitch.cxx @@ -75,6 +75,7 @@ bool Bankswitch::isValidRomName(string_view name, string& ext) constexpr std::array(Bankswitch::Type::NumSchemes)> Bankswitch::BSList = {{ { "AUTO" , "Auto-detect" }, + { "03E0" , "03E0 (8K Braz. Parker Bros)" }, { "0840" , "0840 (8K EconoBanking)" }, { "0FA0" , "0FA0 (8K Fotomania)" }, { "2IN1" , "2in1 Multicart (4-64K)" }, @@ -138,6 +139,7 @@ Bankswitch::BSList = {{ const std::array(Bankswitch::Type::NumSchemes)> Bankswitch::Sizes = {{ { Bankswitch::any_KB, Bankswitch::any_KB }, // _AUTO + { 8_KB, 8_KB }, // _03E0 { 8_KB, 8_KB }, // _0840 { 8_KB, 8_KB }, // _0FA0 { 4_KB, 64_KB }, // _2IN1 @@ -210,6 +212,8 @@ Bankswitch::ExtensionMap Bankswitch::ourExtensions = { { "cu" , Bankswitch::Type::_AUTO }, // All bankswitch types (those that UnoCart and HarmonyCart support have the same name) + { "03E" , Bankswitch::Type::_03E0 }, + { "03E0" , Bankswitch::Type::_03E0 }, { "084" , Bankswitch::Type::_0840 }, { "0840" , Bankswitch::Type::_0840 }, { "0FA" , Bankswitch::Type::_0FA0 }, @@ -288,6 +292,7 @@ Bankswitch::ExtensionMap Bankswitch::ourExtensions = { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bankswitch::NameToTypeMap Bankswitch::ourNameToTypes = { { "AUTO" , Bankswitch::Type::_AUTO }, + { "03E0" , Bankswitch::Type::_03E0 }, { "0840" , Bankswitch::Type::_0840 }, { "0FA0" , Bankswitch::Type::_0FA0 }, { "2IN1" , Bankswitch::Type::_2IN1 }, diff --git a/src/emucore/Bankswitch.hxx b/src/emucore/Bankswitch.hxx index d7eebd9a4..b3e3f7750 100644 --- a/src/emucore/Bankswitch.hxx +++ b/src/emucore/Bankswitch.hxx @@ -38,13 +38,13 @@ class Bankswitch public: // Currently supported bankswitch schemes enum class Type { - _AUTO, _0840, _0FA0, _2IN1, _4IN1, _8IN1, _16IN1, _32IN1, - _64IN1, _128IN1, _2K, _3E, _3EX, _3EP, _3F, _4A50, - _4K, _4KSC, _AR, _BF, _BFSC, _BUS, _CDF, _CM, - _CTY, _CV, _DF, _DFSC, _DPC, _DPCP, _E0, _E7, - _EF, _EFSC, _F0, _F4, _F4SC, _F6, _F6SC, _F8, - _F8SC, _FA, _FA2, _FC, _FE, _GL, _MDM, _MVC, - _SB, _TVBOY, _UA, _UASW, _WD, _WDSW, _X07, + _AUTO, _03E0, _0840, _0FA0, _2IN1, _4IN1, _8IN1, _16IN1, + _32IN1, _64IN1, _128IN1, _2K, _3E, _3EX, _3EP, _3F, + _4A50, _4K, _4KSC, _AR, _BF, _BFSC, _BUS, _CDF, + _CM, _CTY, _CV, _DF, _DFSC, _DPC, _DPCP, _E0, + _E7, _EF, _EFSC, _F0, _F4, _F4SC, _F6, _F6SC, + _F8, _F8SC, _FA, _FA2, _FC, _FE, _GL, _MDM, + _MVC, _SB, _TVBOY, _UA, _UASW, _WD, _WDSW, _X07, #ifdef CUSTOM_ARM _CUSTOM, #endif diff --git a/src/emucore/Cart03E0.cxx b/src/emucore/Cart03E0.cxx new file mode 100644 index 000000000..e6cf12577 --- /dev/null +++ b/src/emucore/Cart03E0.cxx @@ -0,0 +1,113 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2023 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include "System.hxx" +#include "Cart03E0.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Cartridge03E0::Cartridge03E0(const ByteBuffer& image, size_t size, + string_view md5, const Settings& settings, + size_t bsSize) + : CartridgeEnhanced(image, size, md5, settings, bsSize) +{ + myBankShift = BANK_SHIFT; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Cartridge03E0::install(System& system) +{ + CartridgeEnhanced::install(system); + + // Get the page accessing methods for the hot spots since they overlap + // areas within the TIA we'll need to forward requests to the TIA + myHotSpotPageAccess[0] = mySystem->getPageAccess(0x0380); + myHotSpotPageAccess[1] = mySystem->getPageAccess(0x03c0); + + // Set the page accessing methods for the hot spots + const System::PageAccess access(this, System::PageAccessType::READ); + for(uInt16 addr = 0x0380; addr < 0x03FF; addr += System::PAGE_SIZE) + mySystem->setPageAccess(addr, access); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Cartridge03E0::reset() +{ + // Setup segments to some default banks + if(randomStartBank()) + { + bank(mySystem->randGenerator().next() % 8, 0); + bank(mySystem->randGenerator().next() % 8, 1); + bank(mySystem->randGenerator().next() % 8, 2); + } + else + { + bank(4, 0); + bank(5, 1); + bank(6, 2); + } + myBankChanged = true; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool Cartridge03E0::checkSwitchBank(uInt16 address, uInt8) +{ + bool switched = false; + + if((address & 0x10) == 0) + { + bank(address & 0x0007, 0); + switched = true; + } + if((address & 0x20) == 0) + { + bank(address & 0x0007, 1); + switched = true; + } + if((address & 0x40) == 0) + { + bank(address & 0x0007, 2); + switched = true; + } + return switched; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt8 Cartridge03E0::peek(uInt16 address) +{ + checkSwitchBank(address, 0); + + // Because of the way we've set up accessing above, we can only + // get here when the addresses are from 0x380 - 0x3FF + const int hotspot = ((address & 0x40) >> 6); + return myHotSpotPageAccess[hotspot].device->peek(address); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool Cartridge03E0::poke(uInt16 address, uInt8 value) +{ + // Because of the way accessing is set up, we will may get here by + // doing a write to 0x380 - 0x3FF or cart; we ignore the cart write + if(!(address & 0x1000)) + { + checkSwitchBank(address, 0); + + const int hotspot = ((address & 0x40) >> 6); + myHotSpotPageAccess[hotspot].device->poke(address, value); + } + + return false; +} diff --git a/src/emucore/Cart03E0.hxx b/src/emucore/Cart03E0.hxx new file mode 100644 index 000000000..899c23438 --- /dev/null +++ b/src/emucore/Cart03E0.hxx @@ -0,0 +1,137 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2023 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef Cartridge03E0_HXX +#define Cartridge03E0_HXX + +#include "bspf.hxx" +#include "CartEnhanced.hxx" +#include "System.hxx" +#ifdef DEBUGGER_SUPPORT + #include "Cart03e0Widget.hxx" +#endif + +/** + This is the cartridge class for Parker Brothers' 8K games with special + Brazilian bankswitching. In this bankswitching scheme the 2600's 4K + cartridge address space is broken into four 1K segments. + + The desired 1K bank of the ROM is selected as follows: + If A12 == 0, A9 == 1, A8 == 1, A7 == 1 ($0380..$03ff): + A4 == 0 ($03e0) loads the bank number for segment #0 + A5 == 0 ($03d0) loads the bank number for segment #1 + A6 == 0 ($03b0) loads the bank number for segment #2 + Bits A0, A1, A2 determine the bank number (0..7) + + The last 1K segment always points to the last 1K of the ROM image. + + Because of the complexity of this scheme, the cart reports having + only one actual bank, in which pieces of it can be swapped out in + many different ways. + + @author Thomas Jentzsch +*/ +class Cartridge03E0 : public CartridgeEnhanced +{ + friend class Cartridge03E0Widget; + + public: + /** + Create a new cartridge using the specified image + + @param image Pointer to the ROM image + @param size The size of the ROM image + @param md5 The md5sum of the ROM image + @param settings A reference to the various settings (read-only) + @param bsSize The size specified by the bankswitching scheme + */ + Cartridge03E0(const ByteBuffer& image, size_t size, string_view md5, + const Settings& settings, size_t bsSize = 8_KB); + ~Cartridge03E0() override = default; + + public: + /** + Install cartridge in the specified system. Invoked by the system + when the cartridge is attached to it. + + @param system The system the device should install itself in + */ + void install(System& system) override; + + /** + Reset device to its power-on state + */ + void reset() override; + + /** + Get a descriptor for the device name (used in error checking). + + @return The name of the object + */ + string name() const override { return "Cartridge03E0"; } + + #ifdef DEBUGGER_SUPPORT + /** + Get debugger widget responsible for accessing the inner workings + of the cart. + */ + CartDebugWidget* debugWidget(GuiObject* boss, const GUI::Font& lfont, + const GUI::Font& nfont, int x, int y, int w, int h) override + { + return new Cartridge03E0Widget(boss, lfont, nfont, x, y, w, h, *this); + } + #endif + + public: + /** + Get the byte at the specified address. + + @return The byte at the specified address + */ + uInt8 peek(uInt16 address) override; + + /** + Change the byte at the specified address to the given value + + @param address The address where the value should be stored + @param value The value to be stored at the address + @return True if the poke changed the device address space, else false + */ + bool poke(uInt16 address, uInt8 value) override; + + private: + bool checkSwitchBank(uInt16 address, uInt8) override; + + uInt16 hotspot() const override { return 0x0380; } + + private: + // log(ROM bank segment size) / log(2) + static constexpr uInt16 BANK_SHIFT = 10; // = 1K = 0x0400 + + // Previous Device's page access + std::array myHotSpotPageAccess; + + private: + // Following constructors and assignment operators not supported + Cartridge03E0() = delete; + Cartridge03E0(const Cartridge03E0&) = delete; + Cartridge03E0(Cartridge03E0&&) = delete; + Cartridge03E0& operator=(const Cartridge03E0&) = delete; + Cartridge03E0& operator=(Cartridge03E0&&) = delete; +}; + +#endif diff --git a/src/emucore/CartCreator.cxx b/src/emucore/CartCreator.cxx index 111695afe..021cbed2f 100644 --- a/src/emucore/CartCreator.cxx +++ b/src/emucore/CartCreator.cxx @@ -17,6 +17,7 @@ #include "bspf.hxx" #include "Cart.hxx" +#include "Cart03E0.hxx" #include "Cart0840.hxx" #include "Cart0FA0.hxx" #include "Cart2K.hxx" @@ -232,6 +233,8 @@ CartCreator::createFromImage(const ByteBuffer& image, size_t size, // We should know the cart's type by now so let's create it switch(type) { + case Bankswitch::Type::_03E0: + return make_unique(image, size, md5, settings); case Bankswitch::Type::_0840: return make_unique(image, size, md5, settings); case Bankswitch::Type::_0FA0: diff --git a/src/emucore/CartDetector.cxx b/src/emucore/CartDetector.cxx index 1e3b9a4f4..d1f3af5d4 100644 --- a/src/emucore/CartDetector.cxx +++ b/src/emucore/CartDetector.cxx @@ -92,6 +92,8 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si type = Bankswitch::Type::_WD; else if (isProbablyFC(image, size)) type = Bankswitch::Type::_FC; + else if(isProbably03E0(image, size)) + type = Bankswitch::Type::_03E0; else type = Bankswitch::Type::_F8; } @@ -324,6 +326,22 @@ bool CartDetector::isProbablyARM(const ByteBuffer& image, size_t size) return searchForBytes(image, std::min(size, 1_KB), signature[1], 4); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool CartDetector::isProbably03E0(const ByteBuffer& image, size_t size) +{ + // 03E0 cart bankswitching for Brazilian Parker Bros ROMs, switches segment + // 0 into bank 0 by accessing address 0x3E0 using 'LDA $3E0' or 'ORA $3E0'. + static constexpr uInt8 signature[2][4] = { + { 0x0D, 0xE0, 0x03, 0x0D }, // ORA $3E0, ORA (Popeye) + { 0xAD, 0xE0, 0x03, 0xAD } // LDA $3E0, ORA (Montezuma's Revenge) + }; + for(const auto* const sig: signature) + if(searchForBytes(image, size, sig, 4)) + return true; + + return false; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool CartDetector::isProbably0840(const ByteBuffer& image, size_t size) { diff --git a/src/emucore/CartDetector.hxx b/src/emucore/CartDetector.hxx index e2d346f0a..b9ce7a2bc 100644 --- a/src/emucore/CartDetector.hxx +++ b/src/emucore/CartDetector.hxx @@ -86,13 +86,18 @@ class CartDetector */ static bool isProbablyARM(const ByteBuffer& image, size_t size); + /** + Returns true if the image is probably a 03E0 bankswitching cartridge + */ + static bool isProbably03E0(const ByteBuffer& image, size_t size); + /** Returns true if the image is probably a 0840 bankswitching cartridge */ static bool isProbably0840(const ByteBuffer& image, size_t size); /** - Returns true if the image is probably a BRazilian bankswitching cartridge + Returns true if the image is probably a Brazilian 0FA0 bankswitching cartridge */ static bool isProbably0FA0(const ByteBuffer& image, size_t size); diff --git a/src/emucore/CartE0.cxx b/src/emucore/CartE0.cxx index 4fcf5ad40..24bbcb32d 100644 --- a/src/emucore/CartE0.cxx +++ b/src/emucore/CartE0.cxx @@ -67,5 +67,6 @@ bool CartridgeE0::checkSwitchBank(uInt16 address, uInt8) bank(address & 0x0007, 2); return true; } + return false; } diff --git a/src/emucore/module.mk b/src/emucore/module.mk index be23f42ee..38e53273d 100644 --- a/src/emucore/module.mk +++ b/src/emucore/module.mk @@ -9,6 +9,7 @@ MODULE_OBJS := \ src/emucore/CartCreator.o \ src/emucore/CartDetector.o \ src/emucore/CartEnhanced.o \ + src/emucore/Cart03E0.o \ src/emucore/Cart0840.o \ src/emucore/Cart0FA0.o \ src/emucore/Cart2K.o \ diff --git a/src/gui/FileListWidget.cxx b/src/gui/FileListWidget.cxx index 01f2a53e7..205ffe53a 100644 --- a/src/gui/FileListWidget.cxx +++ b/src/gui/FileListWidget.cxx @@ -353,7 +353,7 @@ bool FileListWidget::handleKeyDown(StellaKey key, StellaMod mod) _lastKey = key; _lastMod = mod; if(_quickSelectTime < TimerManager::getTicks() / 1000) _firstMod = mod; - else if(key == KBDK_SPACE) // allow seaching strings with a space without selecting/starting + else if(key == KBDK_SPACE) // allow searching ROMs with a space without selecting/starting handled = true; return handled; diff --git a/src/os/libretro/Makefile.common b/src/os/libretro/Makefile.common index 453f3cf3f..724fd4adb 100644 --- a/src/os/libretro/Makefile.common +++ b/src/os/libretro/Makefile.common @@ -43,6 +43,7 @@ SOURCES_CXX := \ $(CORE_DIR)/emucore/CartCreator.cxx \ $(CORE_DIR)/emucore/CartDetector.cxx \ $(CORE_DIR)/emucore/CartEnhanced.cxx \ + $(CORE_DIR)/emucore/Cart03E0.cxx \ $(CORE_DIR)/emucore/Cart0840.cxx \ $(CORE_DIR)/emucore/Cart0FA0.cxx \ $(CORE_DIR)/emucore/Cart2K.cxx \ diff --git a/src/os/libretro/Stella.vcxproj b/src/os/libretro/Stella.vcxproj index ee90e9f86..c9ba437b3 100644 --- a/src/os/libretro/Stella.vcxproj +++ b/src/os/libretro/Stella.vcxproj @@ -219,6 +219,7 @@ + @@ -382,6 +383,7 @@ + diff --git a/src/os/windows/Stella.vcxproj b/src/os/windows/Stella.vcxproj index d659a040d..8e25f756f 100755 --- a/src/os/windows/Stella.vcxproj +++ b/src/os/windows/Stella.vcxproj @@ -918,6 +918,7 @@ true + true @@ -978,6 +979,7 @@ + @@ -2108,6 +2110,7 @@ true + true @@ -2303,6 +2306,7 @@ + diff --git a/src/os/windows/Stella.vcxproj.filters b/src/os/windows/Stella.vcxproj.filters index 7d3849df5..d75b91f01 100644 --- a/src/os/windows/Stella.vcxproj.filters +++ b/src/os/windows/Stella.vcxproj.filters @@ -1203,6 +1203,12 @@ Source Files\debugger\gui + + Source Files\emucore + + + Source Files\debugger\gui + @@ -2453,6 +2459,12 @@ Header Files\debugger\gui + + Header Files\emucore + + + Header Files\debugger\gui + diff --git a/test/roms/bankswitching/03E0/Montezuma's Revenge (Brazilian Parker Brothers).bin b/test/roms/bankswitching/03E0/Montezuma's Revenge (Brazilian Parker Brothers).bin new file mode 100644 index 000000000..5652d9d67 Binary files /dev/null and b/test/roms/bankswitching/03E0/Montezuma's Revenge (Brazilian Parker Brothers).bin differ diff --git a/test/roms/bankswitching/03E0/Popeye (Brazilian Parker Brothers).bin b/test/roms/bankswitching/03E0/Popeye (Brazilian Parker Brothers).bin new file mode 100644 index 000000000..66703bf59 Binary files /dev/null and b/test/roms/bankswitching/03E0/Popeye (Brazilian Parker Brothers).bin differ
 Type DescriptionFile Extension
(to force type)
03e0 8K Brazilian Parker Bros.03e, .03e0
0840 8K EconoBanking.084, .0840
0FA0 8K Fotomania.0FA, .0FA0
2IN1 ¹4-64K Multicart (2 games).2N1