UNIF HP898F board support

This commit is contained in:
Souryo 2016-11-10 16:57:19 -05:00
parent eeffa162e1
commit 1111399978
7 changed files with 194 additions and 155 deletions

View file

@ -446,6 +446,7 @@
<ClInclude Include="HdVideoFilter.h" />
<ClInclude Include="Henggedianzi177.h" />
<ClInclude Include="Henggedianzi179.h" />
<ClInclude Include="Hp898f.h" />
<ClInclude Include="iNesLoader.h" />
<ClInclude Include="IremH3001.h" />
<ClInclude Include="IremLrog017.h" />
@ -678,6 +679,7 @@
<ClInclude Include="Txc22211B.h" />
<ClInclude Include="Txc22211C.h" />
<ClInclude Include="TxSRom.h" />
<ClInclude Include="UnifBoards.h" />
<ClInclude Include="UnifLoader.h" />
<ClInclude Include="VideoHud.h" />
<ClInclude Include="VideoRenderer.h" />

View file

@ -1027,6 +1027,12 @@
<ClInclude Include="Rt01.h">
<Filter>Nes\Mappers\Unif</Filter>
</ClInclude>
<ClInclude Include="Hp898f.h">
<Filter>Nes\Mappers\Unif</Filter>
</ClInclude>
<ClInclude Include="UnifBoards.h">
<Filter>Nes\Mappers\Unif</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">

45
Core/Hp898f.h Normal file
View file

@ -0,0 +1,45 @@
#pragma once
#include "stdafx.h"
#include "BaseMapper.h"
class Hp898f : public BaseMapper
{
private:
uint8_t _regs[2];
protected:
uint16_t GetPRGPageSize() override { return 0x4000; }
uint16_t GetCHRPageSize() override { return 0x2000; }
uint16_t RegisterStartAddress() override { return 0x6000; }
uint16_t RegisterEndAddress() override { return 0xFFFF; }
void InitMapper() override
{
_regs[0] = _regs[1] = 0;
UpdateState();
}
void StreamState(bool saving) override
{
BaseMapper::StreamState(saving);
Stream(_regs[0], _regs[1]);
}
void UpdateState()
{
uint8_t prgReg = (_regs[1] >> 3) & 7;
uint8_t prgMask = (_regs[1] >> 4) & 4;
SelectCHRPage(0, (((_regs[0] >> 4) & 0x07) & ~(((_regs[0] & 0x01) << 2) | (_regs[0] & 0x02))));
SelectPRGPage(0, prgReg & (~prgMask));
SelectPRGPage(1, prgReg | prgMask);
SetMirroringType(_regs[1] & 0x80 ? MirroringType::Vertical : MirroringType::Horizontal);
}
void WriteRegister(uint16_t addr, uint8_t value) override
{
if((addr & 0x6000) == 0x6000) {
_regs[(addr & 0x04) >> 2] = value;
UpdateState();
}
}
};

View file

@ -2,6 +2,8 @@
#include "MessageManager.h"
#include "MapperFactory.h"
#include "RomLoader.h"
#include "UnifBoards.h"
#include "A65AS.h"
#include "Action53.h"
#include "ActionEnterprises.h"
@ -37,6 +39,7 @@
#include "GxRom.h"
#include "Henggedianzi177.h"
#include "Henggedianzi179.h"
#include "Hp898f.h"
#include "IremG101.h"
#include "IremH3001.h"
#include "IremLrog017.h"
@ -236,34 +239,6 @@ Supported mappers:
-----------------------------------------------------------------
*/
const uint16_t MapperFactory::FdsMapperID;
const uint16_t MapperFactory::NsfMapperID;
const uint16_t MapperFactory::UnknownBoard;
const uint16_t MapperFactory::UnifA65AS;
const uint16_t MapperFactory::UnifAx5705;
const uint16_t MapperFactory::UnifBmc70in1;
const uint16_t MapperFactory::UnifBmc70in1B;
const uint16_t MapperFactory::UnifBmc190in1;
const uint16_t MapperFactory::UnifBs5;
const uint16_t MapperFactory::UnifCc21;
const uint16_t MapperFactory::UnifCoolboy;
const uint16_t MapperFactory::UnifDreamTech01;
const uint16_t MapperFactory::UnifEdu2000;
const uint16_t MapperFactory::UnifGhostbusters63in1;
const uint16_t MapperFactory::UnifGs2004;
const uint16_t MapperFactory::UnifGs2013;
const uint16_t MapperFactory::UnifKof97;
const uint16_t MapperFactory::UnifKs7016;
const uint16_t MapperFactory::UnifMalee;
const uint16_t MapperFactory::UnifNovelDiamond;
const uint16_t MapperFactory::UnifRt01;
const uint16_t MapperFactory::UnifStreetHeroes;
const uint16_t MapperFactory::UnifSmb2j;
const uint16_t MapperFactory::UnifSuper24in1Sc03;
const uint16_t MapperFactory::UnifSuper40in1Ws;
const uint16_t MapperFactory::UnifT262;
const uint16_t MapperFactory::UnifTf1201;
BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
{
#ifdef _DEBUG
@ -491,30 +466,31 @@ BaseMapper* MapperFactory::GetMapperFromID(RomData &romData)
case 254: return new MMC3_254();
case 255: return new Bmc255();
case MapperFactory::UnifA65AS: return new A65AS();
case MapperFactory::UnifAx5705: return new Ax5705();
case MapperFactory::UnifBmc70in1: return new Bmc70in1();
case MapperFactory::UnifBmc70in1B: return new Bmc70in1();
case MapperFactory::UnifBmc190in1: return new Bmc190in1();
case MapperFactory::UnifBs5: return new Bs5();
case MapperFactory::UnifCc21: return new Cc21();
case MapperFactory::UnifCoolboy: return new MMC3_Coolboy();
case MapperFactory::UnifDreamTech01: return new DreamTech01();
case MapperFactory::UnifEdu2000: return new Edu2000();
case MapperFactory::UnifGhostbusters63in1: return new Ghostbusters63in1();
case MapperFactory::UnifGs2004: return new Gs2004();
case MapperFactory::UnifGs2013: return new Gs2013();
case MapperFactory::UnifKof97: return new MMC3_Kof97();
case MapperFactory::UnifKs7016: return new Kaiser7016();
case MapperFactory::UnifMalee: return new Malee();
case MapperFactory::UnifNovelDiamond: return new NovelDiamond();
case MapperFactory::UnifRt01: return new Rt01();
case MapperFactory::UnifSmb2j: return new Smb2j();
case MapperFactory::UnifStreetHeroes: return new MMC3_StreetHeroes();
case MapperFactory::UnifSuper24in1Sc03: return new MMC3_Super24in1Sc03();
case MapperFactory::UnifSuper40in1Ws: return new Super40in1Ws();
case MapperFactory::UnifT262: return new T262();
case MapperFactory::UnifTf1201: return new Tf1201();
case UnifBoards::A65AS: return new A65AS();
case UnifBoards::Ax5705: return new Ax5705();
case UnifBoards::Bmc70in1: return new Bmc70in1();
case UnifBoards::Bmc70in1B: return new Bmc70in1();
case UnifBoards::Bmc190in1: return new Bmc190in1();
case UnifBoards::Bs5: return new Bs5();
case UnifBoards::Cc21: return new Cc21();
case UnifBoards::Coolboy: return new MMC3_Coolboy();
case UnifBoards::DreamTech01: return new DreamTech01();
case UnifBoards::Edu2000: return new Edu2000();
case UnifBoards::Ghostbusters63in1: return new Ghostbusters63in1();
case UnifBoards::Gs2004: return new Gs2004();
case UnifBoards::Gs2013: return new Gs2013();
case UnifBoards::Hp898f: return new Hp898f();
case UnifBoards::Kof97: return new MMC3_Kof97();
case UnifBoards::Ks7016: return new Kaiser7016();
case UnifBoards::Malee: return new Malee();
case UnifBoards::NovelDiamond: return new NovelDiamond();
case UnifBoards::Rt01: return new Rt01();
case UnifBoards::Smb2j: return new Smb2j();
case UnifBoards::StreetHeroes: return new MMC3_StreetHeroes();
case UnifBoards::Super24in1Sc03: return new MMC3_Super24in1Sc03();
case UnifBoards::Super40in1Ws: return new Super40in1Ws();
case UnifBoards::T262: return new T262();
case UnifBoards::Tf1201: return new Tf1201();
case MapperFactory::NsfMapperID: return new NsfMapper();
case MapperFactory::FdsMapperID: return new FDS();

View file

@ -11,31 +11,6 @@ class MapperFactory
public:
static const uint16_t FdsMapperID = 65535;
static const uint16_t NsfMapperID = 65534;
static const uint16_t UnknownBoard = 65533;
static const uint16_t UnifTf1201 = 65532;
static const uint16_t UnifCoolboy = 65531;
static const uint16_t UnifSmb2j = 65530;
static const uint16_t UnifMalee = 65529;
static const uint16_t UnifStreetHeroes = 65528;
static const uint16_t UnifDreamTech01 = 65527;
static const uint16_t UnifEdu2000 = 65526;
static const uint16_t UnifGs2013 = 65525;
static const uint16_t UnifGs2004 = 65524;
static const uint16_t UnifNovelDiamond = 65523;
static const uint16_t UnifKof97 = 65522;
static const uint16_t UnifT262 = 65521;
static const uint16_t UnifA65AS = 65520;
static const uint16_t UnifBs5 = 65519;
static const uint16_t UnifBmc190in1 = 65518;
static const uint16_t UnifGhostbusters63in1 = 65517;
static const uint16_t UnifBmc70in1 = 65516;
static const uint16_t UnifBmc70in1B = 65515;
static const uint16_t UnifAx5705 = 65514;
static const uint16_t UnifSuper24in1Sc03 = 65513;
static const uint16_t UnifSuper40in1Ws = 65512;
static const uint16_t UnifCc21 = 65511;
static const uint16_t UnifKs7016 = 65510;
static const uint16_t UnifRt01 = 65509;
static shared_ptr<BaseMapper> InitializeFromFile(string romFilename, stringstream *filestream, string ipsFilename, int32_t archiveFileIndex);
};

34
Core/UnifBoards.h Normal file
View file

@ -0,0 +1,34 @@
#pragma once
#include "stdafx.h"
namespace UnifBoards {
enum UnifBoards
{
UnknownBoard = 32768,
Tf1201,
Coolboy,
Smb2j,
Malee,
StreetHeroes,
DreamTech01,
Edu2000,
Gs2013,
Gs2004,
NovelDiamond,
Kof97,
T262,
A65AS,
Bs5,
Bmc190in1,
Ghostbusters63in1,
Bmc70in1,
Bmc70in1B,
Ax5705,
Super24in1Sc03,
Super40in1Ws,
Cc21,
Ks7016,
Rt01,
Hp898f,
};
}

View file

@ -2,89 +2,90 @@
#include "stdafx.h"
#include "RomData.h"
#include "GameDatabase.h"
#include "UnifBoards.h"
#include <unordered_map>
class UnifLoader
{
private:
std::unordered_map<string, int> _boardMappings = {
{ "11160", MapperFactory::UnknownBoard },
{ "12-IN-1", MapperFactory::UnknownBoard },
{ "13in1JY110", MapperFactory::UnknownBoard },
{ "190in1", MapperFactory::UnifBmc190in1 },
{ "11160", UnifBoards::UnknownBoard },
{ "12-IN-1", UnifBoards::UnknownBoard },
{ "13in1JY110", UnifBoards::UnknownBoard },
{ "190in1", UnifBoards::Bmc190in1 },
{ "22211", 132 },
{ "3D-BLOCK", MapperFactory::UnknownBoard },
{ "411120-C", MapperFactory::UnknownBoard },
{ "3D-BLOCK", UnifBoards::UnknownBoard },
{ "411120-C", UnifBoards::UnknownBoard },
{ "42in1ResetSwitch", 226 },
{ "43272", MapperFactory::UnknownBoard },
{ "43272", UnifBoards::UnknownBoard },
{ "603-5052", 238 },
{ "64in1NoRepeat", MapperFactory::UnknownBoard },
{ "70in1", MapperFactory::UnifBmc70in1 },
{ "70in1B", MapperFactory::UnifBmc70in1B },
{ "810544-C-A1", MapperFactory::UnknownBoard },
{ "8157", MapperFactory::UnknownBoard },
{ "64in1NoRepeat", UnifBoards::UnknownBoard },
{ "70in1", UnifBoards::Bmc70in1 },
{ "70in1B", UnifBoards::Bmc70in1B },
{ "810544-C-A1", UnifBoards::UnknownBoard },
{ "8157", UnifBoards::UnknownBoard },
{ "8237", 215 },
{ "8237A", MapperFactory::UnknownBoard },
{ "830118C", MapperFactory::UnknownBoard },
{ "A65AS", MapperFactory::UnifA65AS },
{ "AC08", MapperFactory::UnknownBoard },
{ "8237A", UnifBoards::UnknownBoard },
{ "830118C", UnifBoards::UnknownBoard },
{ "A65AS", UnifBoards::A65AS },
{ "AC08", UnifBoards::UnknownBoard },
{ "ANROM", 7 },
{ "AX5705", MapperFactory::UnifAx5705 },
{ "BB", MapperFactory::UnknownBoard },
{ "BS-5", MapperFactory::UnifBs5 },
{ "CC-21", MapperFactory::UnifCc21 },
{ "CITYFIGHT", MapperFactory::UnknownBoard },
{ "COOLBOY", MapperFactory::UnifCoolboy },
{ "10-24-C-A1", MapperFactory::UnknownBoard },
{ "AX5705", UnifBoards::Ax5705 },
{ "BB", UnifBoards::UnknownBoard },
{ "BS-5", UnifBoards::Bs5 },
{ "CC-21", UnifBoards::Cc21 },
{ "CITYFIGHT", UnifBoards::UnknownBoard },
{ "COOLBOY", UnifBoards::Coolboy },
{ "10-24-C-A1", UnifBoards::UnknownBoard },
{ "CNROM", 3 },
{ "CPROM", 13 },
{ "D1038", 60 },
{ "DANCE", MapperFactory::UnknownBoard },
{ "DANCE2000", MapperFactory::UnknownBoard },
{ "DREAMTECH01", MapperFactory::UnifDreamTech01 },
{ "EDU2000", MapperFactory::UnifEdu2000 },
{ "DANCE", UnifBoards::UnknownBoard },
{ "DANCE2000", UnifBoards::UnknownBoard },
{ "DREAMTECH01", UnifBoards::DreamTech01 },
{ "EDU2000", UnifBoards::Edu2000 },
{ "EKROM", 5 },
{ "ELROM", 5 },
{ "ETROM", 5 },
{ "EWROM", 5 },
{ "FK23C", MapperFactory::UnknownBoard },
{ "FK23CA", MapperFactory::UnknownBoard },
{ "FK23C", UnifBoards::UnknownBoard },
{ "FK23CA", UnifBoards::UnknownBoard },
{ "FS304", 162 },
{ "G-146", MapperFactory::UnknownBoard },
{ "G-146", UnifBoards::UnknownBoard },
{ "GK-192", 58 },
{ "GS-2004", MapperFactory::UnifGs2004 },
{ "GS-2013", MapperFactory::UnifGs2013 },
{ "Ghostbusters63in1", MapperFactory::UnifGhostbusters63in1 },
{ "GS-2004", UnifBoards::Gs2004 },
{ "GS-2013", UnifBoards::Gs2013 },
{ "Ghostbusters63in1", UnifBoards::Ghostbusters63in1 },
{ "H2288", 123 },
{ "HKROM", MapperFactory::UnknownBoard },
{ "KOF97", MapperFactory::UnifKof97 },
{ "KONAMI-QTAI", MapperFactory::UnknownBoard },
{ "KS7010", MapperFactory::UnknownBoard },
{ "KS7012", MapperFactory::UnknownBoard },
{ "KS7013B", MapperFactory::UnknownBoard },
{ "KS7016", MapperFactory::UnifKs7016 },
{ "KS7017", MapperFactory::UnknownBoard },
{ "KS7030", MapperFactory::UnknownBoard },
{ "KS7031", MapperFactory::UnknownBoard },
{ "HKROM", UnifBoards::UnknownBoard },
{ "KOF97", UnifBoards::Kof97 },
{ "KONAMI-QTAI", UnifBoards::UnknownBoard },
{ "KS7010", UnifBoards::UnknownBoard },
{ "KS7012", UnifBoards::UnknownBoard },
{ "KS7013B", UnifBoards::UnknownBoard },
{ "KS7016", UnifBoards::Ks7016 },
{ "KS7017", UnifBoards::UnknownBoard },
{ "KS7030", UnifBoards::UnknownBoard },
{ "KS7031", UnifBoards::UnknownBoard },
{ "KS7032", 142 },
{ "KS7037", MapperFactory::UnknownBoard },
{ "KS7057", MapperFactory::UnknownBoard },
{ "LE05", MapperFactory::UnknownBoard },
{ "LH10", MapperFactory::UnknownBoard },
{ "KS7037", UnifBoards::UnknownBoard },
{ "KS7057", UnifBoards::UnknownBoard },
{ "LE05", UnifBoards::UnknownBoard },
{ "LH10", UnifBoards::UnknownBoard },
{ "LH32", 125 },
{ "LH53", MapperFactory::UnknownBoard },
{ "MALISB", MapperFactory::UnknownBoard },
{ "MARIO1-MALEE2", MapperFactory::UnifMalee },
{ "LH53", UnifBoards::UnknownBoard },
{ "MALISB", UnifBoards::UnknownBoard },
{ "MARIO1-MALEE2", UnifBoards::Malee },
{ "MHROM", 66 },
{ "N625092", 221 },
{ "NROM", 0 },
{ "NROM-128", 0 },
{ "NROM-256", 0 },
{ "NTBROM", 68 },
{ "NTD-03", MapperFactory::UnknownBoard },
{ "NovelDiamond9999999in1", MapperFactory::UnifNovelDiamond },
{ "OneBus", MapperFactory::UnknownBoard },
{ "PEC-586", MapperFactory::UnknownBoard },
{ "NTD-03", UnifBoards::UnknownBoard },
{ "NovelDiamond9999999in1", UnifBoards::NovelDiamond },
{ "OneBus", UnifBoards::UnknownBoard },
{ "PEC-586", UnifBoards::UnknownBoard },
{ "RET-CUFROM", 29 },
{ "RROM", 0 },
{ "RROM-128", 0 },
@ -95,7 +96,7 @@ private:
{ "SA-016-1M", 146 },
{ "SA-72007", 145 },
{ "SA-72008", 133 },
{ "SA-9602B", MapperFactory::UnknownBoard },
{ "SA-9602B", UnifBoards::UnknownBoard },
{ "SA-NROM", 143 },
{ "SAROM", 1 },
{ "SBROM", 1 },
@ -103,16 +104,16 @@ private:
{ "SCROM", 1 },
{ "SEROM", 1 },
{ "SGROM", 1 },
{ "SHERO", MapperFactory::UnifStreetHeroes },
{ "SHERO", UnifBoards::StreetHeroes },
{ "SKROM", 1 },
{ "SL12", 116 },
{ "SL1632", 14 },
{ "SL1ROM", 1 },
{ "SLROM", 1 },
{ "SMB2J", MapperFactory::UnifSmb2j },
{ "SMB2J", UnifBoards::Smb2j },
{ "SNROM", 1 },
{ "SOROM", 1 },
{ "SSS-NROM-256", MapperFactory::UnknownBoard },
{ "SSS-NROM-256", UnifBoards::UnknownBoard },
{ "SUNSOFT_UNROM", 93 },
{ "Sachen-74LS374N", 150 },
{ "Sachen-74LS374NA", 243 },
@ -120,17 +121,17 @@ private:
{ "Sachen-8259B", 138 },
{ "Sachen-8259C", 139 },
{ "Sachen-8259D", 137 },
{ "Super24in1SC03", MapperFactory::UnifSuper24in1Sc03 },
{ "Super24in1SC03", UnifBoards::Super24in1Sc03 },
{ "SuperHIK8in1", 45 },
{ "Supervision16in1", 53 },
{ "T-227-1", MapperFactory::UnknownBoard },
{ "T-230", MapperFactory::UnknownBoard },
{ "T-262", MapperFactory::UnifT262 },
{ "T-227-1", UnifBoards::UnknownBoard },
{ "T-230", UnifBoards::UnknownBoard },
{ "T-262", UnifBoards::T262 },
{ "TBROM", 4 },
{ "TC-U01-1.5M", 147 },
{ "TEK90", 90 },
{ "TEROM", 4 },
{ "TF1201", MapperFactory::UnifTf1201 },
{ "TF1201", UnifBoards::Tf1201 },
{ "TFROM", 4 },
{ "TGROM", 4 },
{ "TKROM", 4 },
@ -141,24 +142,24 @@ private:
{ "TR1ROM", 4 },
{ "TSROM", 4 },
{ "TVROM", 4 },
{ "Transformer", MapperFactory::UnknownBoard },
{ "Transformer", UnifBoards::UnknownBoard },
{ "UNROM", 2 },
{ "UNROM-512-8", 30 },
{ "UNROM-512-16", 30 },
{ "UNROM-512-32", 30 },
{ "UOROM", 2 },
{ "VRC7", MapperFactory::UnknownBoard },
{ "YOKO", MapperFactory::UnknownBoard },
{ "SB-2000", MapperFactory::UnknownBoard },
{ "158B", MapperFactory::UnknownBoard },
{ "DRAGONFIGHTER", MapperFactory::UnknownBoard },
{ "EH8813A", MapperFactory::UnknownBoard },
{ "HP898F", MapperFactory::UnknownBoard },
{ "F-15", MapperFactory::UnknownBoard },
{ "RT-01", MapperFactory::UnifRt01 },
{ "81-01-31-C", MapperFactory::UnknownBoard },
{ "8-IN-1", MapperFactory::UnknownBoard },
{ "WS", MapperFactory::UnifSuper40in1Ws }
{ "VRC7", UnifBoards::UnknownBoard },
{ "YOKO", UnifBoards::UnknownBoard },
{ "SB-2000", UnifBoards::UnknownBoard },
{ "158B", UnifBoards::UnknownBoard },
{ "DRAGONFIGHTER", UnifBoards::UnknownBoard },
{ "EH8813A", UnifBoards::UnknownBoard },
{ "HP898F", UnifBoards::Hp898f },
{ "F-15", UnifBoards::UnknownBoard },
{ "RT-01", UnifBoards::Rt01 },
{ "81-01-31-C", UnifBoards::UnknownBoard },
{ "8-IN-1", UnifBoards::UnknownBoard },
{ "WS", UnifBoards::Super40in1Ws }
};
vector<uint8_t> _prgChunks[16];
@ -297,7 +298,7 @@ private:
MessageManager::Log("[UNIF] Error: Unknown board");
return MapperFactory::UnknownBoard;
return UnifBoards::UnknownBoard;
}
public:
@ -353,7 +354,7 @@ public:
GameDatabase::SetGameInfo(romData.Crc32, romData, !EmulationSettings::CheckFlag(EmulationFlags::DisableGameDatabase));
if(romData.MapperID == MapperFactory::UnknownBoard) {
if(romData.MapperID == UnifBoards::UnknownBoard) {
MessageManager::DisplayMessage("Error", "UnsupportedMapper", "UNIF: " + _mapperName);
romData.Error = true;
}