diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj
index fb6d7417..f6538b31 100644
--- a/Core/Core.vcxproj
+++ b/Core/Core.vcxproj
@@ -558,6 +558,7 @@
+
diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters
index cf64606b..2ec3e9ee 100644
--- a/Core/Core.vcxproj.filters
+++ b/Core/Core.vcxproj.filters
@@ -1078,6 +1078,9 @@
Nes\Mappers\Unif
+
+ Nes\Mappers\Unif
+
diff --git a/Core/MMC3_MaliSB.h b/Core/MMC3_MaliSB.h
new file mode 100644
index 00000000..e1790183
--- /dev/null
+++ b/Core/MMC3_MaliSB.h
@@ -0,0 +1,27 @@
+#pragma once
+#include "stdafx.h"
+#include "MMC3.h"
+
+class MMC3_MaliSB : public MMC3
+{
+protected:
+ void SelectCHRPage(uint16_t slot, uint16_t page, ChrMemoryType memoryType = ChrMemoryType::Default) override
+ {
+ MMC3::SelectCHRPage(slot, (page & 0xDD) | ((page & 0x20) >> 4) | ((page & 0x02) << 4), memoryType);
+ }
+
+ void SelectPRGPage(uint16_t slot, uint16_t page, PrgMemoryType memoryType = PrgMemoryType::PrgRom) override
+ {
+ MMC3::SelectPRGPage(slot, (page & 0x03) | ((page & 0x08) >> 1) | ((page & 0x04) << 1), memoryType);
+ }
+
+ void WriteRegister(uint16_t addr, uint8_t value) override
+ {
+ if(addr >= 0xC000) {
+ addr = (addr & 0xFFFE) | ((addr >> 2) & 0x01) | ((addr >> 3) & 0x01);
+ } else {
+ addr = (addr & 0xFFFE) | ((addr >> 3) & 0x01);
+ }
+ MMC3::WriteRegister(addr, value);
+ }
+};
\ No newline at end of file
diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp
index d41bfdae..b9f1a406 100644
--- a/Core/MapperFactory.cpp
+++ b/Core/MapperFactory.cpp
@@ -158,6 +158,7 @@
#include "MMC3_ChrRam.h"
#include "MMC3_Coolboy.h"
#include "MMC3_Kof97.h"
+#include "MMC3_MaliSB.h"
#include "MMC3_StreetHeroes.h"
#include "MMC3_Super24in1Sc03.h"
#include "MMC4.h"
@@ -513,6 +514,7 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case UnifBoards::Ks7057: return new Kaiser7057();
case UnifBoards::Lh10: return new Lh10();
case UnifBoards::Malee: return new Malee();
+ case UnifBoards::MaliSB: return new MMC3_MaliSB();
case UnifBoards::NovelDiamond: return new NovelDiamond();
case UnifBoards::Rt01: return new Rt01();
case UnifBoards::Smb2j: return new Smb2j();
diff --git a/Core/UnifBoards.h b/Core/UnifBoards.h
index 0871178c..e57a5bcf 100644
--- a/Core/UnifBoards.h
+++ b/Core/UnifBoards.h
@@ -44,5 +44,6 @@ namespace UnifBoards {
Ks7057,
Ks7013B,
Ks7012,
+ MaliSB,
};
}
\ No newline at end of file
diff --git a/Core/UnifLoader.h b/Core/UnifLoader.h
index 9b7a2c07..7a5c5c19 100644
--- a/Core/UnifLoader.h
+++ b/Core/UnifLoader.h
@@ -74,7 +74,7 @@ private:
{ "LH10", UnifBoards::Lh10 },
{ "LH32", 125 },
{ "LH53", UnifBoards::UnknownBoard },
- { "MALISB", UnifBoards::UnknownBoard },
+ { "MALISB", UnifBoards::MaliSB },
{ "MARIO1-MALEE2", UnifBoards::Malee },
{ "MHROM", 66 },
{ "N625092", 221 },