diff --git a/Core/BmcK3046.h b/Core/BmcK3046.h
new file mode 100644
index 00000000..fa732ab4
--- /dev/null
+++ b/Core/BmcK3046.h
@@ -0,0 +1,26 @@
+#pragma once
+#include "stdafx.h"
+#include "BaseMapper.h"
+
+class BmcK3046 : public BaseMapper
+{
+protected:
+ virtual uint16_t GetPRGPageSize() override { return 0x4000; }
+ virtual uint16_t GetCHRPageSize() override { return 0x2000; }
+
+ void InitMapper() override
+ {
+ SelectPRGPage(0, 0);
+ SelectPRGPage(1, 7);
+ SelectCHRPage(0, 0);
+ }
+
+ void WriteRegister(uint16_t addr, uint8_t value) override
+ {
+ uint8_t inner = value & 0x07;
+ uint8_t outer = value & 0x38;
+
+ SelectPRGPage(0, outer | inner);
+ SelectPRGPage(1, outer | 7);
+ }
+};
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 20bc6bdc..5cdae6d2 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -526,6 +526,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index 590a2a3f..bc186139 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -1465,6 +1465,9 @@
Nes\Mappers\Unif
+
+ Nes\Mappers\Unif
+
diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp
index 879284b7..910f6d5a 100644
--- a/Core/MapperFactory.cpp
+++ b/Core/MapperFactory.cpp
@@ -37,6 +37,7 @@
#include "BmcG146.h"
#include "BmcGn45.h"
#include "BmcHpxx.h"
+#include "BmcK3046.h"
#include "BmcNtd03.h"
#include "BnRom.h"
#include "Bs5.h"
@@ -604,7 +605,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 333: return new Bmc8in1(); // + NEWSTAR-GRM070-8IN1
//334
case 335: break; //CTC-09
- case 336: break; //K-3046
+ case 336: return new BmcK3046();
case 337: break; //CTC-12IN1
case 338: break; //SA005-A
case 339: break; //K-3006
diff --git a/Core/UnifLoader.cpp b/Core/UnifLoader.cpp
index 044b4e0a..062ab2cf 100644
--- a/Core/UnifLoader.cpp
+++ b/Core/UnifLoader.cpp
@@ -57,6 +57,7 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "HKROM", 4 },
{ "KOF97", 263 },
{ "KONAMI-QTAI", 190 },
+ { "K-3046", 336 },
{ "KS7010", UnifBoards::UnknownBoard },
{ "KS7012", 346 },
{ "KS7013B", 312 },