diff --git a/Core/Core.vcxproj b/Core/Core.vcxproj index a57cbae9..d5f24ab3 100644 --- a/Core/Core.vcxproj +++ b/Core/Core.vcxproj @@ -372,6 +372,7 @@ + diff --git a/Core/Core.vcxproj.filters b/Core/Core.vcxproj.filters index 4f2a4fff..a60d5cd8 100644 --- a/Core/Core.vcxproj.filters +++ b/Core/Core.vcxproj.filters @@ -380,6 +380,9 @@ Nes\Mappers + + Nes\Mappers + diff --git a/Core/Mapper58.h b/Core/Mapper58.h new file mode 100644 index 00000000..93d19a94 --- /dev/null +++ b/Core/Mapper58.h @@ -0,0 +1,32 @@ +#pragma once +#include "stdafx.h" +#include "BaseMapper.h" + +class Mapper58 : public BaseMapper +{ +protected: + virtual uint16_t GetPRGPageSize() { return 0x4000; } + virtual uint16_t GetCHRPageSize() { return 0x2000; } + + void InitMapper() + { + SelectPRGPage(0, 0); + SelectPRGPage(1, 1); + SelectCHRPage(0, 0); + } + + void WriteRegister(uint16_t addr, uint8_t value) + { + uint8_t prgBank = addr & 0x07; + if(addr & 0x40) { + SelectPRGPage(0, prgBank); + SelectPRGPage(1, prgBank); + } else { + SelectPRGPage(0, prgBank & 0xFE); + SelectPRGPage(1, (prgBank & 0xFE) + 1); + } + SelectCHRPage(0, (addr >> 3) & 0x07); + + SetMirroringType(addr & 0x80 ? MirroringType::Horizontal : MirroringType::Vertical); + } +}; diff --git a/Core/MapperFactory.cpp b/Core/MapperFactory.cpp index 946e58f5..658f01e4 100644 --- a/Core/MapperFactory.cpp +++ b/Core/MapperFactory.cpp @@ -15,6 +15,7 @@ #include "IremTamS1.h" #include "JalecoJfxx.h" #include "JalecoSs88006.h" +#include "Mapper58.h" #include "Mapper200.h" #include "Mapper231.h" #include "Mapper240.h" @@ -85,6 +86,7 @@ BaseMapper* MapperFactory::GetMapperFromID(ROMLoader &romLoader) case 34: return (romLoader.GetChrSize() > 0) ? (BaseMapper*)new Nina01() : (BaseMapper*)new BnRom(); //BnROM uses CHR RAM (so no CHR rom in the .NES file) case 37: break; case 38: return new UnlPci556(); + case 58: return new Mapper58(); case 66: return new GxRom(); case 70: return new Bandai74161_7432(false); case 71: return new BF909x();