From 187979a2aea974dc0f5e3c4253e83df75011dcaa Mon Sep 17 00:00:00 2001 From: Thomas Jentzsch Date: Fri, 24 Sep 2021 23:38:15 +0200 Subject: [PATCH] added E7 support for 12K ROMs --- src/debugger/gui/CartE7Widget.cxx | 17 +++++++++++++---- src/emucore/CartDetector.cxx | 5 ++++- src/emucore/CartE7.cxx | 8 ++++++++ .../E7/BurgerTime (1983) (M Network) (12K).bin | Bin 0 -> 12288 bytes 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 test/roms/bankswitching/E7/BurgerTime (1983) (M Network) (12K).bin diff --git a/src/debugger/gui/CartE7Widget.cxx b/src/debugger/gui/CartE7Widget.cxx index 3ea134be4..5564adb95 100644 --- a/src/debugger/gui/CartE7Widget.cxx +++ b/src/debugger/gui/CartE7Widget.cxx @@ -30,13 +30,16 @@ CartridgeE7Widget::CartridgeE7Widget( ostringstream info; info << "E7 cartridge, " - << (myCart.romBankCount() == 4 ? "four" : "eight") + << (myCart.romBankCount() == 4 ? "four" + : myCart.romBankCount() == 6 ? "six" : "eight") << " 2K banks ROM + 2K RAM, \n" << " mapped into three segments\n" << "Lower 2K accessible @ $F000 - $F7FF\n" << (myCart.romBankCount() == 4 - ? " ROM banks 0 - 2 (hotspots $FFE4 to $FFE6)\n" - : " ROM Banks 0 - 6 (hotspots $FFE0 to $FFE6)\n") + ? " ROM banks 0 - 2 (hotspots $FFE4 - $FFE6)\n" + : myCart.romBankCount() == 6 + ? " ROM Banks 0 - 4 (hotspots $FFE0/$FFE1\n and $FFE4 - $FFE6)\n" + : " ROM Banks 0 - 6 (hotspots $FFE0 - $FFE6)\n") << " 1K RAM bank 3 (hotspot $FFE7)\n" << " $F400 - $F7FF (R), $F000 - $F3FF (W)\n" << "256B RAM accessible @ $F800 - $F9FF\n" @@ -205,6 +208,10 @@ const char* CartridgeE7Widget::getSpotLower(int idx) static constexpr std::array spot_lower_8K = { "#0 - ROM ($FFE4)", "#1 - ROM ($FFE5)", "#2 - ROM ($FFE6)", "#3 - RAM ($FFE7)" }; + static constexpr std::array spot_lower_12K = { + "#0 - ROM ($FFE0)", "#1 - ROM ($FFE1)", + "#2 - ROM ($FFE4)", "#3 - ROM ($FFE5)", "#4 - ROM ($FFE6)", "#5 - RAM ($FFE7)" + }; static constexpr std::array spot_lower_16K = { "#0 - ROM ($FFE0)", "#1 - ROM ($FFE1)", "#2 - ROM ($FFE2)", "#3 - ROM ($FFE3)", "#4 - ROM ($FFE4)", "#5 - ROM ($FFE5)", "#6 - ROM ($FFE6)", "#7 - RAM ($FFE7)" @@ -212,7 +219,9 @@ const char* CartridgeE7Widget::getSpotLower(int idx) return myCart.romBankCount() == 4 ? spot_lower_8K[idx] - : spot_lower_16K[idx]; + : myCart.romBankCount() == 6 + ? spot_lower_12K[idx] + : spot_lower_16K[idx]; } diff --git a/src/emucore/CartDetector.cxx b/src/emucore/CartDetector.cxx index 95af6a7bd..33d8fbc06 100644 --- a/src/emucore/CartDetector.cxx +++ b/src/emucore/CartDetector.cxx @@ -98,7 +98,10 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si } else if(size == 12_KB) { - type = Bankswitch::Type::_FA; + if(isProbablyE7(image, size)) + type = Bankswitch::Type::_E7; + else + type = Bankswitch::Type::_FA; } else if(size == 16_KB) { diff --git a/src/emucore/CartE7.cxx b/src/emucore/CartE7.cxx index 35d324089..24dbfbcdd 100644 --- a/src/emucore/CartE7.cxx +++ b/src/emucore/CartE7.cxx @@ -115,6 +115,14 @@ void CartridgeE7::checkSwitchBank(uInt16 address) { bank(address & 0x0003); } + else if(romBankCount() == 6 && (address >= 0x0FE0) && (address <= 0x0FE7)) + { + static constexpr std::array banks = { + 0, 1, 0, 1, 2, 3, 4 ,5 + }; + + bank(banks[address & 0x0007]); + } else if(romBankCount() == 8 && (address >= 0x0FE0) && (address <= 0x0FE7)) { bank(address & 0x0007); diff --git a/test/roms/bankswitching/E7/BurgerTime (1983) (M Network) (12K).bin b/test/roms/bankswitching/E7/BurgerTime (1983) (M Network) (12K).bin new file mode 100644 index 0000000000000000000000000000000000000000..e985d854a4a4c0507ed5dc3626ea924ec3081737 GIT binary patch literal 12288 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 c7oT{>VtI0|c~m6mXqTDp9}7