diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj index 6b753eff..f67d5be4 100644 --- a/Core/Core.vcxproj +++ b/Core/Core.vcxproj @@ -373,6 +373,7 @@ + diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters index e1e69b77..9fc6303f 100644 --- a/Core/Core.vcxproj.filters +++ b/Core/Core.vcxproj.filters @@ -374,6 +374,9 @@ Nes\Mappers + + Nes\Mappers + diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp index cf353474..111143a4 100644 --- a/Core/MapperFactory.cpp +++ b/Core/MapperFactory.cpp @@ -36,6 +36,7 @@ #include "Nina01.h" #include "Nina03_06.h" #include "NROM.h" +#include "NtdecTc112.h" #include "Sachen_145.h" #include "Sachen_147.h" #include "Sachen_148.h" @@ -112,6 +113,7 @@ BaseMapper* MapperFactory::GetMapperFromID(ROMLoader &romLoader) case 184: return new Sunsoft184(); case 185: return new CNROM(true); case 189: return new MMC3_189(); + case 193: return new NtdecTc112(); case 200: return new Mapper200(); case 206: return new Namco108(); case 231: return new Mapper231(); diff --git a/Core/NtdecTc112.h b/Core/NtdecTc112.h new file mode 100644 index 00000000..dd58d5e5 --- /dev/null +++ b/Core/NtdecTc112.h @@ -0,0 +1,42 @@ +#pragma once +#include "stdafx.h" +#include "BaseMapper.h" + +class NtdecTc112 : public BaseMapper +{ +protected: + virtual uint16_t RegisterStartAddress() { return 0x6000; } + virtual uint16_t RegisterEndAddress() { return 0x7FFF; } + + virtual uint16_t GetPRGPageSize() { return 0x2000; } + virtual uint16_t GetCHRPageSize() { return 0x0800; } + + void InitMapper() + { + SelectPRGPage(1, -3); + SelectPRGPage(2, -2); + SelectPRGPage(3, -1); + } + + void WriteRegister(uint16_t addr, uint8_t value) + { + switch(addr & 0x03){ + case 0: + SelectCHRPage(0, value >> 1); + SelectCHRPage(1, (value >> 1) + 1); + break; + + case 1: + SelectCHRPage(2, value >> 1); + break; + + case 2: + SelectCHRPage(3, value >> 1); + break; + + case 3: + SelectPRGPage(0, value); + break; + } + } +};