UNIF: Added support for BMC 8-in-1 board

This commit is contained in:
Sour 2018-06-16 18:36:59 -04:00
parent 261828c5a3
commit 8c40a4616b
6 changed files with 54 additions and 1 deletions

46
Core/Bmc8in1.h Normal file
View file

@ -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);
}
}
};

View file

@ -518,6 +518,7 @@
<ClInclude Include="BaseSoundManager.h" />
<ClInclude Include="BatteryManager.h" />
<ClInclude Include="BattleBox.h" />
<ClInclude Include="Bmc8in1.h" />
<ClInclude Include="ControlDeviceState.h" />
<ClInclude Include="DrawScreenBufferCommand.h" />
<ClInclude Include="FdsSystemActionManager.h" />

View file

@ -1375,6 +1375,9 @@
<ClInclude Include="ServerInformationMessage.h">
<Filter>NetPlay\Messages</Filter>
</ClInclude>
<ClInclude Include="Bmc8in1.h">
<Filter>Nes\Mappers\Unif</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">

View file

@ -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();

View file

@ -39,6 +39,7 @@ namespace UnifBoards {
Bmc12in1,
Bmc64in1NoRepeat,
Bmc810544CA1,
Bmc8in1,
BmcF15,
Lh10,
Ks7037,

View file

@ -153,6 +153,6 @@ std::unordered_map<string, int> 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 }
};