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 },