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);