From deeace8b2f1cf31388b08e1223d1757427c9288a Mon Sep 17 00:00:00 2001 From: Souryo Date: Sat, 23 Jan 2016 21:33:28 -0500 Subject: [PATCH] Mapper 207 (TaitoX1005 with different mirroring) support --- Core/MapperFactory.cpp | 3 ++- Core/TaitoX1005.h | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp index d49f2d5e..c56efd31 100644 --- a/Core/MapperFactory.cpp +++ b/Core/MapperFactory.cpp @@ -138,7 +138,7 @@ BaseMapper* MapperFactory::GetMapperFromID(ROMLoader &romLoader) case 77: return new IremLrog017(); case 78: return new JalecoJf16(romLoader.GetSubMapper() == 3); case 79: return new Nina03_06(false); - case 80: return new TaitoX1005(); + case 80: return new TaitoX1005(false); case 87: return new JalecoJfxx(false); case 88: return new Namco108_88(); case 89: return new Sunsoft89(); @@ -179,6 +179,7 @@ BaseMapper* MapperFactory::GetMapperFromID(ROMLoader &romLoader) case 203: return new Mapper203(); case 205: return new MMC3_205(); case 206: return new Namco108(); + case 207: return new TaitoX1005(true); case 225: return new Mapper225(); case 230: return new Mapper230(); case 231: return new Mapper231(); diff --git a/Core/TaitoX1005.h b/Core/TaitoX1005.h index aeab4230..6083f6b8 100644 --- a/Core/TaitoX1005.h +++ b/Core/TaitoX1005.h @@ -5,6 +5,7 @@ class TaitoX1005 : public BaseMapper { private: + bool _alternateMirroring; uint8_t _ramPermission; void UpdateRamAccess() @@ -44,10 +45,18 @@ protected: case 0x7EF0: SelectCHRPage(0, value); SelectCHRPage(1, value + 1); + if(_alternateMirroring) { + SetPpuMemoryMapping(0x2000, 0x23FF, GetNametable(value >> 7)); + SetPpuMemoryMapping(0x2400, 0x27FF, GetNametable(value >> 7)); + } break; case 0x7EF1: SelectCHRPage(2, value ); SelectCHRPage(3, value + 1); + if(_alternateMirroring) { + SetPpuMemoryMapping(0x2800, 0x2BFF, GetNametable(value >> 7)); + SetPpuMemoryMapping(0x2C00, 0x2FFF, GetNametable(value >> 7)); + } break; case 0x7EF2: SelectCHRPage(4, value); break; @@ -56,7 +65,9 @@ protected: case 0x7EF5: SelectCHRPage(7, value); break; case 0x7EF6: case 0x7EF7: - SetMirroringType((value & 0x01) == 0x01 ? MirroringType::Vertical : MirroringType::Horizontal); + if(!_alternateMirroring) { + SetMirroringType((value & 0x01) == 0x01 ? MirroringType::Vertical : MirroringType::Horizontal); + } break; case 0x7EF8: case 0x7EF9: @@ -87,4 +98,10 @@ protected: UpdateRamAccess(); } } + +public: + TaitoX1005(bool alternateMirroring) : _alternateMirroring(alternateMirroring) + { + + } }; \ No newline at end of file