Mesen-S/Core/CpuBwRamHandler.h
Sour 6539b92502 SA-1: Fixed timing regressions
Memory handlers did not have the _memoryType value set, which caused some memory accesses to be much faster than expected
2020-03-01 18:24:33 -05:00

53 lines
1 KiB
C++

#pragma once
#include "stdafx.h"
#include "IMemoryHandler.h"
#include "Sa1Cpu.h"
#include "Sa1Types.h"
#include "Sa1.h"
//Manages BWRAM access from the SNES CPU
//Returns conversion result when char conversion type 1 is enabled
class CpuBwRamHandler : public IMemoryHandler
{
private:
IMemoryHandler * _handler;
Sa1State* _state;
Sa1* _sa1;
public:
CpuBwRamHandler(IMemoryHandler* handler, Sa1State* state, Sa1* sa1) : IMemoryHandler(handler->GetMemoryType())
{
_handler = handler;
_sa1 = sa1;
_state = state;
}
uint8_t Read(uint32_t addr) override
{
if(_state->CharConvDmaActive) {
return _sa1->ReadCharConvertType1(addr);
} else {
return _handler->Read(addr);
}
}
uint8_t Peek(uint32_t addr) override
{
return Read(addr);
}
void PeekBlock(uint32_t addr, uint8_t *output) override
{
_handler->PeekBlock(addr, output);
}
void Write(uint32_t addr, uint8_t value) override
{
_handler->Write(addr, value);
}
AddressInfo GetAbsoluteAddress(uint32_t address) override
{
return _handler->GetAbsoluteAddress(address);
}
};