Mesen/Core/MMC3_245.h

42 lines
981 B
C++

#pragma once
#include "stdafx.h"
#include "MMC3.h"
class MMC3_245 : public MMC3
{
protected:
virtual void UpdateState() override
{
MMC3::UpdateState();
if(HasChrRam()) {
if(_chrMode) {
SelectChrPage4x(0, 4);
SelectChrPage4x(1, 0);
} else {
SelectChrPage4x(0, 0);
SelectChrPage4x(1, 4);
}
}
}
virtual void UpdatePrgMapping() override
{
uint8_t orValue = _registers[0] & 0x02 ? 0x40 : 0x00;
_registers[6] = (_registers[6] & 0x3F) | orValue;
_registers[7] = (_registers[7] & 0x3F) | orValue;
uint16_t lastPageInBlock = (GetPRGPageCount() >= 0x40 ? (0x3F | orValue) : -1);
if(_prgMode == 0) {
SelectPRGPage(0, _registers[6]);
SelectPRGPage(1, _registers[7]);
SelectPRGPage(2, lastPageInBlock - 1);
SelectPRGPage(3, lastPageInBlock);
} else if(_prgMode == 1) {
SelectPRGPage(0, lastPageInBlock - 1);
SelectPRGPage(1, _registers[7]);
SelectPRGPage(2, _registers[6]);
SelectPRGPage(3, lastPageInBlock);
}
}
};