#pragma once #include "stdafx.h" #include "DebugTypes.h" class Debugger; class MemoryManager; class MemoryAccessCounter { private: vector _readCounts[(int)SnesMemoryType::Register]; vector _writeCounts[(int)SnesMemoryType::Register]; vector _execCounts[(int)SnesMemoryType::Register]; vector _readStamps[(int)SnesMemoryType::Register]; vector _writeStamps[(int)SnesMemoryType::Register]; vector _execStamps[(int)SnesMemoryType::Register]; vector _uninitReads[(int)SnesMemoryType::Register]; Debugger* _debugger; MemoryManager* _memoryManager; vector& GetCountArray(MemoryOperationType operationType, SnesMemoryType memType); vector& GetStampArray(MemoryOperationType operationType, SnesMemoryType memType); bool IsAddressUninitialized(AddressInfo &addressInfo); public: MemoryAccessCounter(Debugger *debugger, MemoryManager* memoryManager); bool ProcessMemoryAccess(AddressInfo &addressInfo, MemoryOperationType operation, uint64_t masterClock); void ResetCounts(); void GetAccessStamps(uint32_t offset, uint32_t length, SnesMemoryType memoryType, MemoryOperationType operationType, uint64_t stamps[]); void GetAccessCounts(uint32_t offset, uint32_t length, SnesMemoryType memoryType, MemoryOperationType operationType, uint32_t counts[]); void GetUninitMemoryReads(SnesMemoryType memoryType, bool uninitReads[]); };