mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
46 lines
1.3 KiB
C++
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;
|
|
}
|