From dd4f7d81317b3413e72fab8477caf2ae3ee429c3 Mon Sep 17 00:00:00 2001 From: Souryo Date: Sat, 23 Jan 2016 14:38:54 -0500 Subject: [PATCH] Mapper 112 support --- Core/Core.vcxproj | 1 + Core/Core.vcxproj.filters | 3 +++ Core/Mapper112.h | 52 +++++++++++++++++++++++++++++++++++++++ Core/MapperFactory.cpp | 2 ++ 4 files changed, 58 insertions(+) create mode 100644 Core/Mapper112.h diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj index d90353ac..264aff8a 100644 --- a/Core/Core.vcxproj +++ b/Core/Core.vcxproj @@ -371,6 +371,7 @@ + diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters index 7fe21bab..b171ad67 100644 --- a/Core/Core.vcxproj.filters +++ b/Core/Core.vcxproj.filters @@ -443,6 +443,9 @@ Nes\Mappers + + Nes\Mappers + diff --git a/Core/Mapper112.h b/Core/Mapper112.h new file mode 100644 index 00000000..bb9e7009 --- /dev/null +++ b/Core/Mapper112.h @@ -0,0 +1,52 @@ +#pragma once + +#include "stdafx.h" +#include "MMC3.h" + +class Mapper112 : public MMC3 +{ +private: + uint8_t _currentReg; + +protected: + void InitMapper() + { + MMC3::InitMapper(); + SetMirroringType(MirroringType::Vertical); + } + + void UpdateMirroring() + { + } + + void StreamState(bool saving) + { + MMC3::StreamState(saving); + Stream(_currentReg); + } + + void WriteRegister(uint16_t addr, uint8_t value) + { + switch(addr & 0xE001) { + case 0x8000: + //Adjust register numbers to match MMC3 + _currentReg = value & 0x07; + if(_currentReg >= 2) { + _currentReg -= 2; + } else { + _currentReg += 6; + } + break; + + case 0xA000: + _registers[_currentReg] = value; + break; + + case 0xE000: + SetMirroringType(value & 0x01 ? MirroringType::Horizontal : MirroringType::Vertical); + break; + } + + UpdateState(); + } +}; \ No newline at end of file diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp index 0c81264e..4437eb0c 100644 --- a/Core/MapperFactory.cpp +++ b/Core/MapperFactory.cpp @@ -23,6 +23,7 @@ #include "Mapper61.h" #include "Mapper62.h" #include "Mapper107.h" +#include "Mapper112.h" #include "Mapper200.h" #include "Mapper201.h" #include "Mapper202.h" @@ -139,6 +140,7 @@ BaseMapper* MapperFactory::GetMapperFromID(ROMLoader &romLoader) case 97: return new IremTamS1(); case 101: return new JalecoJfxx(true); case 107: return new Mapper107(); + case 112: return new Mapper112(); case 113: return new Nina03_06(true); case 115: return new MMC3_115(); case 119: return new MMC3_ChrRam(0x40, 0x7F, 8);