Mesen2/Core/NES/HdPacks/HdNesPpu.cpp
2022-09-08 21:29:52 -04:00

46 lines
1.3 KiB
C++

#include "pch.h"
#include "NES/HdPacks/HdNesPpu.h"
#include "NES/NesConsole.h"
#include "NES/HdPacks/HdPackConditions.h"
#include "NES/NesMemoryManager.h"
#include "NES/BaseMapper.h"
#include "NES/HdPacks/HdData.h"
HdNesPpu::HdNesPpu(NesConsole* console, HdPackData* hdData) : NesPpu(console)
{
_hdData = hdData;
_version = _hdData->Version;
_isChrRam = !_console->GetMapper()->HasChrRom();
_screenInfo[0] = new HdScreenInfo(_isChrRam);
_screenInfo[1] = new HdScreenInfo(_isChrRam);
_info = _screenInfo[0];
_forceRemoveSpriteLimit = (_hdData->OptionFlags & (int)HdPackOptions::NoSpriteLimit) != 0;
}
HdNesPpu::~HdNesPpu()
{
delete _screenInfo[0];
delete _screenInfo[1];
}
void* HdNesPpu::OnBeforeSendFrame()
{
HdScreenInfo* info = _info;
info->FrameNumber = _frameCount;
info->WatchedAddressValues.clear();
for(uint32_t address : _hdData->WatchedMemoryAddresses) {
if(address & HdPackBaseMemoryCondition::PpuMemoryMarker) {
if((address & 0x3FFF) >= 0x3F00) {
info->WatchedAddressValues[address] = ReadPaletteRam(address);
} else {
info->WatchedAddressValues[address] = _console->GetMapper()->DebugReadVram(address & 0x3FFF, true);
}
} else {
info->WatchedAddressValues[address] = _console->GetMemoryManager()->DebugRead(address);
}
}
_info = (_info == _screenInfo[0]) ? _screenInfo[1] : _screenInfo[0];
return info;
}