2016-12-01 19:38:48 -05:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "DebuggerTypes.h"
|
|
|
|
#include "IMemoryHandler.h"
|
|
|
|
#include <unordered_set>
|
2016-12-09 00:02:56 -05:00
|
|
|
class Debugger;
|
2016-12-01 19:38:48 -05:00
|
|
|
|
2020-02-14 21:40:50 -05:00
|
|
|
struct AddressCounters
|
|
|
|
{
|
|
|
|
uint32_t Address;
|
|
|
|
uint32_t ReadCount;
|
|
|
|
uint64_t ReadStamp;
|
|
|
|
bool UninitRead;
|
|
|
|
uint32_t WriteCount;
|
|
|
|
uint64_t WriteStamp;
|
|
|
|
uint32_t ExecCount;
|
|
|
|
uint64_t ExecStamp;
|
|
|
|
};
|
|
|
|
|
2016-12-01 19:38:48 -05:00
|
|
|
class MemoryAccessCounter
|
|
|
|
{
|
|
|
|
private:
|
2016-12-09 00:02:56 -05:00
|
|
|
Debugger* _debugger;
|
2020-02-14 21:40:50 -05:00
|
|
|
|
|
|
|
vector<AddressCounters> _counters[4];
|
|
|
|
vector<AddressCounters> _ppuCounters[4];
|
2018-12-24 15:21:21 -05:00
|
|
|
|
2016-12-01 19:38:48 -05:00
|
|
|
public:
|
2016-12-09 00:02:56 -05:00
|
|
|
MemoryAccessCounter(Debugger* debugger);
|
|
|
|
|
2020-02-14 21:40:50 -05:00
|
|
|
void ProcessPpuMemoryRead(PpuAddressTypeInfo& addressInfo, uint64_t cpuCycle);
|
|
|
|
void ProcessPpuMemoryWrite(PpuAddressTypeInfo &addressInfo, uint64_t cpuCycle);
|
|
|
|
bool ProcessMemoryRead(AddressTypeInfo& addressInfo, uint64_t cpuCycle);
|
|
|
|
void ProcessMemoryWrite(AddressTypeInfo& addressInfo, uint64_t cpuCycle);
|
|
|
|
void ProcessMemoryExec(AddressTypeInfo &addressInfo, uint64_t cpuCycle);
|
|
|
|
|
2016-12-01 19:38:48 -05:00
|
|
|
void ResetCounts();
|
2018-12-24 15:21:21 -05:00
|
|
|
|
|
|
|
bool IsAddressUninitialized(AddressTypeInfo &addressInfo);
|
2016-12-01 19:38:48 -05:00
|
|
|
|
2019-01-13 18:32:27 -05:00
|
|
|
void GetNametableChangedData(bool ntChangedData[]);
|
2020-02-14 21:40:50 -05:00
|
|
|
void GetAccessCounts(uint32_t offset, uint32_t length, DebugMemoryType memoryType, AddressCounters counts[]);
|
2016-12-01 19:38:48 -05:00
|
|
|
};
|