Mesen2/Core/NES/Mappers/Mmc3Variants/MMC3_ChrRam.h
2022-09-08 21:29:52 -04:00

38 lines
929 B
C++

#pragma once
#include "pch.h"
#include "NES/Mappers/Nintendo/MMC3.h"
class MMC3_ChrRam : public MMC3
{
private:
uint16_t _firstRamBank = 0;
uint16_t _lastRamBank = 0;
uint16_t _chrRamSize = 0;
protected:
uint16_t GetChrRamPageSize() override { return 0x400; }
uint32_t GetChrRamSize() override { return _chrRamSize * 0x400; }
void SelectChrPage(uint16_t slot, uint16_t page, ChrMemoryType memoryType = ChrMemoryType::Default) override
{
if(page >= _firstRamBank && page <= _lastRamBank) {
memoryType = ChrMemoryType::ChrRam;
page -= _firstRamBank;
}
MMC3::SelectChrPage(slot, page, memoryType);
}
void Serialize(Serializer& s) override
{
MMC3::Serialize(s);
SV(_firstRamBank);
SV(_lastRamBank);
SV(_chrRamSize);
}
public:
MMC3_ChrRam(uint16_t firstRamBank, uint16_t lastRamBank, uint16_t chrRamSize) : _firstRamBank(firstRamBank), _lastRamBank(lastRamBank), _chrRamSize(chrRamSize)
{
}
};