Mesen-S/Core/Sa1IRamHandler.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

62 lines
1 KiB
C++

#pragma once
#include "stdafx.h"
#include "IMemoryHandler.h"
#include "DebugTypes.h"
class Sa1IRamHandler : public IMemoryHandler
{
private:
uint8_t * _ram;
__forceinline uint8_t InternalRead(uint32_t addr)
{
if(addr & 0x800) {
return 0;
} else {
return _ram[addr & 0x7FF];
}
}
public:
Sa1IRamHandler(uint8_t *ram) : IMemoryHandler(SnesMemoryType::Sa1InternalRam)
{
_ram = ram;
}
uint8_t Read(uint32_t addr) override
{
return InternalRead(addr);
}
uint8_t Peek(uint32_t addr) override
{
return InternalRead(addr);
}
void PeekBlock(uint32_t addr, uint8_t *output) override
{
for(int i = 0; i < 0x1000; i++) {
output[i] = InternalRead(i);
}
}
void Write(uint32_t addr, uint8_t value) override
{
if(!(addr & 0x800)) {
_ram[addr & 0x7FF] = value;
}
}
AddressInfo GetAbsoluteAddress(uint32_t addr) override
{
AddressInfo info;
if(addr & 0x800) {
info.Address = -1;
info.Type = SnesMemoryType::CpuMemory;
} else {
info.Address = (addr & 0x7FF);
info.Type = _memoryType;
}
return info;
}
};