Mesen-S/Core/MemoryAccessCounter.h

55 lines
1.1 KiB
C
Raw Normal View History

#pragma once
#include "stdafx.h"
#include "DebugTypes.h"
class Debugger;
class MemoryManager;
class Spc;
class Console;
class Sa1;
2019-07-30 22:34:52 -04:00
class Gsu;
2020-02-24 22:00:52 -05:00
class Cx4;
class Gameboy;
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;
};
class MemoryAccessCounter
{
private:
vector<AddressCounters> _counters[(int)SnesMemoryType::Register];
Debugger* _debugger;
MemoryManager* _memoryManager;
Spc* _spc;
Sa1* _sa1;
2019-07-30 22:34:52 -04:00
Gsu* _gsu;
2020-02-24 22:00:52 -05:00
Cx4* _cx4;
Gameboy* _gameboy;
bool IsAddressUninitialized(AddressInfo &addressInfo);
public:
MemoryAccessCounter(Debugger *debugger, Console *console);
uint64_t GetReadCount(AddressInfo& addressInfo);
bool ProcessMemoryRead(AddressInfo& addressInfo, uint64_t masterClock);
void ProcessMemoryWrite(AddressInfo& addressInfo, uint64_t masterClock);
void ProcessMemoryExec(AddressInfo& addressInfo, uint64_t masterClock);
void ResetCounts();
void GetAccessCounts(uint32_t offset, uint32_t length, SnesMemoryType memoryType, AddressCounters counts[]);
};