diff --git a/Core/Bmc8in1.h b/Core/Bmc8in1.h
new file mode 100644
index 00000000..fc0cf66c
--- /dev/null
+++ b/Core/Bmc8in1.h
@@ -0,0 +1,46 @@
+#pragma once
+#include "stdafx.h"
+#include "MMC3.h"
+
+class Bmc8in1 : public MMC3
+{
+private:
+ uint8_t _reg;
+
+protected:
+ void InitMapper() override
+ {
+ _reg = 0;
+ MMC3::InitMapper();
+ }
+
+ void StreamState(bool saving) override
+ {
+ MMC3::StreamState(saving);
+ Stream(_reg);
+ }
+
+ void SelectCHRPage(uint16_t slot, uint16_t page, ChrMemoryType memoryType = ChrMemoryType::Default) override
+ {
+ MMC3::SelectCHRPage(slot, ((_reg & 0x0C) << 5) | (page & 0x7F), memoryType);
+ }
+
+ void SelectPRGPage(uint16_t slot, uint16_t page, PrgMemoryType memoryType = PrgMemoryType::PrgRom) override
+ {
+ if(_reg & 0x10) {
+ MMC3::SelectPRGPage(slot, ((_reg & 0x0C) << 2) | (page & 0x0F));
+ } else {
+ SelectPrgPage4x(0, (_reg & 0x0F) << 2);
+ }
+ }
+
+ void WriteRegister(uint16_t addr, uint8_t value) override
+ {
+ if(addr & 0x1000) {
+ _reg = value;
+ UpdateState();
+ } else {
+ MMC3::WriteRegister(addr, value);
+ }
+ }
+};
\ No newline at end of file
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index 0f202033..0fc59cd8 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -518,6 +518,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index cefa5e79..e65740ce 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -1375,6 +1375,9 @@
NetPlay\Messages
+
+ Nes\Mappers\Unif
+
diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp
index c2e46eea..32c41734 100644
--- a/Core/MapperFactory.cpp
+++ b/Core/MapperFactory.cpp
@@ -26,6 +26,7 @@
#include "Bmc235.h"
#include "Bmc255.h"
#include "Bmc810544CA1.h"
+#include "Bmc8in1.h"
#include "BmcG146.h"
#include "BmcNtd03.h"
#include "BnRom.h"
@@ -521,6 +522,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case UnifBoards::Bmc70in1B: return new Bmc70in1();
case UnifBoards::Bmc190in1: return new Bmc190in1();
case UnifBoards::Bmc810544CA1: return new Bmc810544CA1();
+ case UnifBoards::Bmc8in1: return new Bmc8in1();
case UnifBoards::BmcF15: return new MMC3_BmcF15();
case UnifBoards::BmcG146: return new BmcG146();
case UnifBoards::BmdNtd03: return new BmcNtd03();
diff --git a/Core/UnifBoards.h b/Core/UnifBoards.h
index 484b3427..05dd1f69 100644
--- a/Core/UnifBoards.h
+++ b/Core/UnifBoards.h
@@ -39,6 +39,7 @@ namespace UnifBoards {
Bmc12in1,
Bmc64in1NoRepeat,
Bmc810544CA1,
+ Bmc8in1,
BmcF15,
Lh10,
Ks7037,
diff --git a/Core/UnifLoader.cpp b/Core/UnifLoader.cpp
index 976ec15c..1cca8eb1 100644
--- a/Core/UnifLoader.cpp
+++ b/Core/UnifLoader.cpp
@@ -153,6 +153,6 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "F-15", UnifBoards::BmcF15 },
{ "RT-01", UnifBoards::Rt01 },
{ "81-01-31-C", UnifBoards::UnknownBoard },
- { "8-IN-1", UnifBoards::UnknownBoard },
+ { "8-IN-1", UnifBoards::Bmc8in1 },
{ "WS", UnifBoards::Super40in1Ws }
};
\ No newline at end of file