From ff9322dee029c62e9ec0f2379574335f5e66c814 Mon Sep 17 00:00:00 2001 From: Sour Date: Sun, 17 Jun 2018 10:28:59 -0400 Subject: [PATCH] UNIF: Added support for BMC-80013-B board --- Core/Bmc80013B.h | 54 +++++++++++++++++++++++++++++++++++++++ Core/Core.vcxproj | 1 + Core/Core.vcxproj.filters | 3 +++ Core/MapperFactory.cpp | 4 ++- Core/UnifBoards.h | 1 + Core/UnifLoader.cpp | 3 ++- 6 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 Core/Bmc80013B.h 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