Mesen/Core/Mapper218.h

35 lines
997 B
C
Raw Normal View History

2016-06-18 22:16:25 +00:00
#pragma once
#include "BaseMapper.h"
class Mapper218 : public BaseMapper
{
protected:
2016-12-18 04:14:47 +00:00
uint16_t GetPRGPageSize() override { return 0x8000; }
uint16_t GetCHRPageSize() override { return 0x2000; }
2016-06-18 22:16:25 +00:00
2016-12-18 04:14:47 +00:00
void InitMapper() override
2016-06-18 22:16:25 +00:00
{
SelectPRGPage(0, 0);
if(GetMirroringType() == MirroringType::FourScreens) {
SetMirroringType(_nesHeader.Byte6 & 0x01 ? MirroringType::ScreenBOnly : MirroringType::ScreenAOnly);
}
}
2016-12-18 04:14:47 +00:00
void SetDefaultNametables(uint8_t* nametableA, uint8_t* nametableB) override
2016-06-18 22:16:25 +00:00
{
BaseMapper::SetDefaultNametables(nametableA, nametableB);
uint16_t mask = 0;
switch(GetMirroringType()) {
case MirroringType::Vertical: mask = 0x400; break;
case MirroringType::Horizontal: mask = 0x800; break;
case MirroringType::ScreenAOnly: mask = 0x1000; break;
case MirroringType::ScreenBOnly: mask = 0x2000; break;
}
for(int i = 0; i < 8; i++) {
SetPpuMemoryMapping(i * 0x400, i * 0x400 + 0x3FF, (i * 0x400) & mask ? GetNametable(1) : GetNametable(0));
}
}
};