Mesen2/Core/SNES/Debugger/SnesCodeDataLogger.h
2023-01-24 18:05:50 -05:00

48 lines
No EOL
1 KiB
C++

#pragma once
#include "Debugger/CodeDataLogger.h"
#include "Debugger/Disassembler.h"
namespace SnesCdlFlags
{
enum SnesCdlFlags : uint8_t
{
IndexMode8 = 0x10,
MemoryMode8 = 0x20,
Gsu = 0x40,
Cx4 = 0x80
};
}
class SnesCodeDataLogger final : public CodeDataLogger
{
private:
uint8_t GetCpuFlags(uint32_t absoluteAddr)
{
return _cdlData[absoluteAddr] & (SnesCdlFlags::MemoryMode8 | SnesCdlFlags::IndexMode8 | SnesCdlFlags::Gsu | SnesCdlFlags::Cx4);
}
CpuType GetCpuType(uint32_t absoluteAddr)
{
if(_cdlData[absoluteAddr] & SnesCdlFlags::Gsu) {
return CpuType::Gsu;
} else if(_cdlData[absoluteAddr] & SnesCdlFlags::Cx4) {
return CpuType::Cx4;
}
return CpuType::Snes;
}
public:
using CodeDataLogger::CodeDataLogger;
void RebuildPrgCache(Disassembler* dis) override
{
AddressInfo addrInfo;
addrInfo.Type = _memType;
for(uint32_t i = 0; i < _memSize; i++) {
if(IsCode(i)) {
addrInfo.Address = (int32_t)i;
i += dis->BuildCache(addrInfo, GetCpuFlags(i), GetCpuType(i)) - 1;
}
}
}
};