2019-03-28 17:47:43 -04:00
|
|
|
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "DebugTypes.h"
|
|
|
|
|
|
|
|
class Debugger;
|
|
|
|
class MemoryManager;
|
2019-04-07 14:38:22 -04:00
|
|
|
class Spc;
|
2019-07-25 22:22:09 -04:00
|
|
|
class Console;
|
|
|
|
class Sa1;
|
2019-03-28 17:47:43 -04:00
|
|
|
|
|
|
|
class MemoryAccessCounter
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
vector<uint32_t> _readCounts[(int)SnesMemoryType::Register];
|
|
|
|
vector<uint32_t> _writeCounts[(int)SnesMemoryType::Register];
|
|
|
|
vector<uint32_t> _execCounts[(int)SnesMemoryType::Register];
|
|
|
|
|
|
|
|
vector<uint64_t> _readStamps[(int)SnesMemoryType::Register];
|
|
|
|
vector<uint64_t> _writeStamps[(int)SnesMemoryType::Register];
|
|
|
|
vector<uint64_t> _execStamps[(int)SnesMemoryType::Register];
|
|
|
|
|
|
|
|
vector<bool> _uninitReads[(int)SnesMemoryType::Register];
|
|
|
|
|
|
|
|
Debugger* _debugger;
|
|
|
|
MemoryManager* _memoryManager;
|
2019-04-07 14:38:22 -04:00
|
|
|
Spc* _spc;
|
2019-07-25 22:22:09 -04:00
|
|
|
Sa1* _sa1;
|
2019-03-28 17:47:43 -04:00
|
|
|
|
|
|
|
vector<uint32_t>& GetCountArray(MemoryOperationType operationType, SnesMemoryType memType);
|
|
|
|
vector<uint64_t>& GetStampArray(MemoryOperationType operationType, SnesMemoryType memType);
|
|
|
|
bool IsAddressUninitialized(AddressInfo &addressInfo);
|
|
|
|
|
|
|
|
public:
|
2019-07-25 22:22:09 -04:00
|
|
|
MemoryAccessCounter(Debugger *debugger, Console *console);
|
2019-03-28 17:47:43 -04:00
|
|
|
|
|
|
|
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[]);
|
|
|
|
};
|