From 12cb8c07cab6e75b4011ef344edcb1a4a761c635 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 28 May 2024 21:10:41 +0200 Subject: [PATCH] added WF8 detection and test ROMs (cherry picked from commit 28050d5d9cfa502b4f0214c2b9e322a36dc0c4bf) --- src/emucore/CartDetector.cxx | 16 ++++++++++++++++ src/emucore/CartDetector.hxx | 5 +++++ ...murf - Rescue in Gargamel's Castle (WF8).bin | Bin 0 -> 8192 bytes test/roms/bankswitching/WF8/Zaxxon (WF8).bin | Bin 0 -> 8192 bytes 4 files changed, 21 insertions(+) create mode 100644 test/roms/bankswitching/WF8/Smurf - Rescue in Gargamel's Castle (WF8).bin create mode 100644 test/roms/bankswitching/WF8/Zaxxon (WF8).bin diff --git a/src/emucore/CartDetector.cxx b/src/emucore/CartDetector.cxx index 73165d12b..49d797579 100755 --- a/src/emucore/CartDetector.cxx +++ b/src/emucore/CartDetector.cxx @@ -90,6 +90,8 @@ Bankswitch::Type CartDetector::autodetectType(const ByteBuffer& image, size_t si type = Bankswitch::Type::_FC; else if(isProbably03E0(image, size)) type = Bankswitch::Type::_03E0; + else if (isProbablyWF8(image, size)) + type = Bankswitch::Type::_WF8; else type = Bankswitch::Type::_F8; } @@ -826,6 +828,20 @@ bool CartDetector::isProbablyWD(const ByteBuffer& image, size_t size) return searchForBytes(image, size, signature[0], 3); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool CartDetector::isProbablyWF8(const ByteBuffer& image, size_t size) +{ + // WF8 cart bankswitching for certain Coleco white lable ROMs, switches to + // - bank 0 by writing D3 = 0 + // - bank 1 by writing D3 = 1 + // into 0xfff8 + static constexpr uInt8 sig[] = { + 0xa9, 0x04, 0x8d, 0xf8, 0xff + }; + + return searchForBytes(image, size, sig, sizeof(sig)); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool CartDetector::isProbablyX07(const ByteBuffer& image, size_t size) { diff --git a/src/emucore/CartDetector.hxx b/src/emucore/CartDetector.hxx index ff5db3d16..6c471eced 100644 --- a/src/emucore/CartDetector.hxx +++ b/src/emucore/CartDetector.hxx @@ -241,6 +241,11 @@ class CartDetector */ static bool isProbablyWD(const ByteBuffer& image, size_t size); + /** + Returns true if the image is probably a Coleco (white label) WF8 bankswitching cartridge + */ + static bool isProbablyWF8(const ByteBuffer& image, size_t size); + /** Returns true if the image is probably an X07 bankswitching cartridge */ diff --git a/test/roms/bankswitching/WF8/Smurf - Rescue in Gargamel's Castle (WF8).bin b/test/roms/bankswitching/WF8/Smurf - Rescue in Gargamel's Castle (WF8).bin new file mode 100644 index 0000000000000000000000000000000000000000..5bf4e858ee96a9d12ac1947b8841e792b28cd123 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/test/roms/bankswitching/WF8/Zaxxon (WF8).bin b/test/roms/bankswitching/WF8/Zaxxon (WF8).bin new file mode 100644 index 0000000000000000000000000000000000000000..330cb825fdfa60ced5a60e8568d3e7b0eff3a820 GIT binary patch literal 8192 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 literal 0 HcmV?d00001