#pragma once #include "stdafx.h" #include "DebuggerTypes.h" #include "IMemoryHandler.h" #include class Debugger; class MemoryAccessCounter { private: Debugger* _debugger; vector _readCounts[4]; vector _writeCounts[4]; vector _execCounts[4]; vector _readStamps[4]; vector _writeStamps[4]; vector _execStamps[4]; vector _uninitReads[4]; vector _ppuReadCounts[4]; vector _ppuWriteCounts[4]; vector _ppuReadStamps[4]; vector _ppuWriteStamps[4]; vector& GetCountArray(MemoryOperationType operationType, AddressType addressType); vector& GetStampArray(MemoryOperationType operationType, AddressType addressType); vector& GetPpuCountArray(MemoryOperationType operationType, PpuAddressType addressType); vector& GetPpuStampArray(MemoryOperationType operationType, PpuAddressType addressType); public: MemoryAccessCounter(Debugger* debugger); void ProcessPpuMemoryAccess(PpuAddressTypeInfo &addressInfo, MemoryOperationType operation, uint64_t cpuCycle); bool ProcessMemoryAccess(AddressTypeInfo &addressInfo, MemoryOperationType operation, uint64_t cpuCycle); void ResetCounts(); bool IsAddressUninitialized(AddressTypeInfo &addressInfo); void GetUninitMemoryReads(DebugMemoryType memoryType, int32_t counts[]); void GetNametableChangedData(bool ntChangedData[]); void GetAccessCounts(uint32_t offset, uint32_t length, DebugMemoryType memoryType, MemoryOperationType operationType, int32_t counts[]); void GetAccessStamps(uint32_t offset, uint32_t length, DebugMemoryType memoryType, MemoryOperationType operationType, uint64_t stamps[]); };