diff --git a/Core/Bmc80013B.h b/Core/Bmc80013B.h
new file mode 100644
index 00000000..eeed7380
--- /dev/null
+++ b/Core/Bmc80013B.h
@@ -0,0 +1,54 @@
+#pragma once
+#include "stdafx.h"
+#include "BaseMapper.h"
+
+class Bmc80013B : public BaseMapper
+{
+private:
+ uint8_t _regs[2];
+ uint8_t _mode;
+
+protected:
+ uint16_t GetPRGPageSize() override { return 0x4000; }
+ uint16_t GetCHRPageSize() override { return 0x2000; }
+
+ void InitMapper() override
+ {
+ SelectCHRPage(0, 0);
+ }
+
+ void Reset(bool softReset) override
+ {
+ _regs[0] = _regs[1] = _mode = 0;
+ UpdateState();
+ }
+
+ void StreamState(bool saving) override
+ {
+ Stream(_regs[0], _regs[1], _mode);
+ }
+
+ void UpdateState()
+ {
+ if(_mode & 0x02) {
+ SelectPRGPage(0, (_regs[0] & 0x0F) | (_regs[1] & 0x70));
+ } else {
+ SelectPRGPage(0, _regs[0] & 0x03);
+ }
+
+ SelectPRGPage(1, _regs[1] & 0x7F);
+ SetMirroringType(_regs[0] & 0x10 ? MirroringType::Vertical : MirroringType::Horizontal);
+ }
+
+ void WriteRegister(uint16_t addr, uint8_t value) override
+ {
+ uint8_t reg = (addr >> 13) & 0x03;
+ if(reg == 0) {
+ _regs[0] = value;
+ } else {
+ _regs[1] = value;
+ _mode = reg;
+ }
+ UpdateState();
+ }
+};
\ No newline at end of file
diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index c87c90a6..2a3616f1 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 32b03349..e2ee7995 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -1393,6 +1393,9 @@
Nes\Mappers\Unif
+
+ Nes\Mappers\Unif
+
diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp
index e3bea16a..9d8480f4 100644
--- a/Core/MapperFactory.cpp
+++ b/Core/MapperFactory.cpp
@@ -19,13 +19,14 @@
#include "Bmc11160.h"
#include "Bmc12in1.h"
#include "Bmc51.h"
-#include "Bmc8157.h"
#include "Bmc63.h"
#include "Bmc64in1NoRepeat.h"
#include "Bmc70in1.h"
#include "Bmc190in1.h"
#include "Bmc235.h"
#include "Bmc255.h"
+#include "Bmc8157.h"
+#include "Bmc80013B.h"
#include "Bmc810544CA1.h"
#include "Bmc830118C.h"
#include "Bmc8in1.h"
@@ -528,6 +529,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case UnifBoards::Bmc190in1: return new Bmc190in1();
case UnifBoards::Bmc810544CA1: return new Bmc810544CA1();
case UnifBoards::Bmc830118C: return new Bmc830118C();
+ case UnifBoards::Bmc80013B: return new Bmc80013B();
case UnifBoards::Bmc8157: return new Bmc8157();
case UnifBoards::Bmc8in1: return new Bmc8in1();
case UnifBoards::BmcF15: return new MMC3_BmcF15();
diff --git a/Core/UnifBoards.h b/Core/UnifBoards.h
index bd12c5fc..40629480 100644
--- a/Core/UnifBoards.h
+++ b/Core/UnifBoards.h
@@ -59,5 +59,6 @@ namespace UnifBoards {
UnlD1038,
Sachen9602,
Unl158B,
+ Bmc80013B,
};
}
\ No newline at end of file
diff --git a/Core/UnifLoader.cpp b/Core/UnifLoader.cpp
index 15129996..c9ace664 100644
--- a/Core/UnifLoader.cpp
+++ b/Core/UnifLoader.cpp
@@ -154,5 +154,6 @@ std::unordered_map UnifLoader::_boardMappings = std::unordered_map<
{ "RT-01", UnifBoards::Rt01 },
{ "81-01-31-C", UnifBoards::UnknownBoard },
{ "8-IN-1", UnifBoards::Bmc8in1 },
- { "WS", UnifBoards::Super40in1Ws }
+ { "WS", UnifBoards::Super40in1Ws },
+ { "80013-B", UnifBoards::Bmc80013B },
};
\ No newline at end of file