diff --git a/Core/Debugger.cpp b/Core/Debugger.cpp index d3a0c38b..13dd7402 100644 --- a/Core/Debugger.cpp +++ b/Core/Debugger.cpp @@ -778,11 +778,6 @@ void Debugger::SetPpuViewerScanlineCycle(int32_t scanline, int32_t cycle) _ppuViewerCycle = cycle; } -int Debugger::GetMemorySize(DebugMemoryType memoryType) -{ - return _mapper->GetMemorySize(memoryType); -} - void Debugger::SetLastFramePpuScroll(uint16_t x, uint16_t y) { if(Debugger::Instance) { diff --git a/Core/Debugger.h b/Core/Debugger.h index ec402b87..0c34b35a 100644 --- a/Core/Debugger.h +++ b/Core/Debugger.h @@ -181,8 +181,6 @@ public: static bool IsEnabled(); static void BreakIfDebugging(); - int GetMemorySize(DebugMemoryType memoryType); - void SetFreezeState(uint16_t address, bool frozen); void GetFreezeState(uint16_t startAddress, uint16_t length, bool* freezeState); diff --git a/Core/MemoryAccessCounter.cpp b/Core/MemoryAccessCounter.cpp index b39e6381..cea3cb7a 100644 --- a/Core/MemoryAccessCounter.cpp +++ b/Core/MemoryAccessCounter.cpp @@ -3,12 +3,19 @@ #include "Console.h" #include "DebugBreakHelper.h" #include "Debugger.h" +#include "MemoryDumper.h" MemoryAccessCounter::MemoryAccessCounter(Debugger* debugger) { _debugger = debugger; - int memorySizes[4] = { 0x2000, _debugger->GetMemorySize(DebugMemoryType::PrgRom), _debugger->GetMemorySize(DebugMemoryType::WorkRam), _debugger->GetMemorySize(DebugMemoryType::SaveRam) }; + uint32_t memorySizes[4] = { + 0x2000, + _debugger->GetMemoryDumper()->GetMemorySize(DebugMemoryType::PrgRom), + _debugger->GetMemoryDumper()->GetMemorySize(DebugMemoryType::WorkRam), + _debugger->GetMemoryDumper()->GetMemorySize(DebugMemoryType::SaveRam) + }; + for(int i = 0; i < 4; i++) { _readCounts[i].insert(_readCounts[i].end(), memorySizes[i], 0); _writeCounts[i].insert(_writeCounts[i].end(), memorySizes[i], 0); diff --git a/Core/MemoryDumper.cpp b/Core/MemoryDumper.cpp index 316070a2..44e957db 100644 --- a/Core/MemoryDumper.cpp +++ b/Core/MemoryDumper.cpp @@ -44,6 +44,25 @@ void MemoryDumper::SetMemoryState(DebugMemoryType type, uint8_t *buffer) } } +uint32_t MemoryDumper::GetMemorySize(DebugMemoryType type) +{ + switch(type) { + case DebugMemoryType::CpuMemory: return 0x10000; + case DebugMemoryType::PpuMemory: return 0x4000; + case DebugMemoryType::PaletteMemory: return 0x20; + case DebugMemoryType::SpriteMemory: return 0x100; + case DebugMemoryType::SecondarySpriteMemory: return 0x20; + case DebugMemoryType::InternalRam: return 0x800; + case DebugMemoryType::PrgRom: + case DebugMemoryType::ChrRom: + case DebugMemoryType::ChrRam: + case DebugMemoryType::WorkRam: + case DebugMemoryType::SaveRam: + return _mapper->GetMemorySize(type); + } + return 0; +} + uint32_t MemoryDumper::GetMemoryState(DebugMemoryType type, uint8_t *buffer) { switch(type) { diff --git a/Core/MemoryDumper.h b/Core/MemoryDumper.h index 9efe4e55..e76de189 100644 --- a/Core/MemoryDumper.h +++ b/Core/MemoryDumper.h @@ -22,6 +22,7 @@ private: public: MemoryDumper(shared_ptr ppu, shared_ptr memoryManager, shared_ptr mapper, shared_ptr codeDataLogger, Debugger *debugger, shared_ptr disassembler); + uint32_t GetMemorySize(DebugMemoryType type); uint32_t GetMemoryState(DebugMemoryType type, uint8_t *buffer); void GetNametable(int nametableIndex, uint32_t* frameBuffer, uint8_t* tileData, uint8_t* paletteData); void GetChrBank(int bankIndex, uint32_t* frameBuffer, uint8_t palette, bool largeSprites, CdlHighlightType highlightType); diff --git a/Core/Profiler.cpp b/Core/Profiler.cpp index 51e37745..d58a21d1 100644 --- a/Core/Profiler.cpp +++ b/Core/Profiler.cpp @@ -2,6 +2,7 @@ #include "Profiler.h" #include "DebugBreakHelper.h" #include "Debugger.h" +#include "MemoryDumper.h" Profiler::Profiler(Debugger * debugger) { @@ -11,7 +12,7 @@ Profiler::Profiler(Debugger * debugger) _currentCycleCount = 0; _currentInstruction = 0; - int size = _debugger->GetMemorySize(DebugMemoryType::PrgRom); + int size = _debugger->GetMemoryDumper()->GetMemorySize(DebugMemoryType::PrgRom); _resetFunctionIndex = size; _inMemoryFunctionIndex = size + 1; _currentFunction = _resetFunctionIndex; diff --git a/GUI.NET/InteropEmu.cs b/GUI.NET/InteropEmu.cs index 463d12be..ada02427 100644 --- a/GUI.NET/InteropEmu.cs +++ b/GUI.NET/InteropEmu.cs @@ -275,7 +275,7 @@ namespace Mesen.GUI [DllImport(DLLPath, EntryPoint = "DebugGetMemoryState")] private static extern UInt32 DebugGetMemoryStateWrapper(DebugMemoryType type, IntPtr buffer); public static byte[] DebugGetMemoryState(DebugMemoryType type) { - byte[] buffer = new byte[10485760]; //10mb buffer + byte[] buffer = new byte[InteropEmu.DebugGetMemorySize(type)]; GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); try { UInt32 memorySize = InteropEmu.DebugGetMemoryStateWrapper(type, handle.AddrOfPinnedObject()); diff --git a/InteropDLL/DebugWrapper.cpp b/InteropDLL/DebugWrapper.cpp index 8964509d..934ca8e1 100644 --- a/InteropDLL/DebugWrapper.cpp +++ b/InteropDLL/DebugWrapper.cpp @@ -51,9 +51,10 @@ extern "C" DllExport void __stdcall DebugSetPpuViewerScanlineCycle(int32_t scanline, int32_t cycle) { return GetDebugger()->SetPpuViewerScanlineCycle(scanline, cycle); } DllExport void __stdcall DebugSetNextStatement(uint16_t addr) { GetDebugger()->SetNextStatement(addr); } - DllExport void __stdcall DebugSetMemoryState(uint32_t type, uint8_t *buffer) { GetDebugger()->GetMemoryDumper()->SetMemoryState((DebugMemoryType)type, buffer); } + DllExport void __stdcall DebugSetMemoryState(DebugMemoryType type, uint8_t *buffer) { GetDebugger()->GetMemoryDumper()->SetMemoryState(type, buffer); } - DllExport uint32_t __stdcall DebugGetMemoryState(uint32_t type, uint8_t *buffer) { return GetDebugger()->GetMemoryDumper()->GetMemoryState((DebugMemoryType)type, buffer); } + DllExport uint32_t __stdcall DebugGetMemorySize(DebugMemoryType type) { return GetDebugger()->GetMemoryDumper()->GetMemorySize(type); } + DllExport uint32_t __stdcall DebugGetMemoryState(DebugMemoryType type, uint8_t *buffer) { return GetDebugger()->GetMemoryDumper()->GetMemoryState(type, buffer); } DllExport void __stdcall DebugGetNametable(uint32_t nametableIndex, uint32_t *frameBuffer, uint8_t *tileData, uint8_t *attributeData) { GetDebugger()->GetMemoryDumper()->GetNametable(nametableIndex, frameBuffer, tileData, attributeData); } DllExport void __stdcall DebugGetChrBank(uint32_t bankIndex, uint32_t *frameBuffer, uint8_t palette, bool largeSprites, CdlHighlightType highlightType) { GetDebugger()->GetMemoryDumper()->GetChrBank(bankIndex, frameBuffer, palette, largeSprites, highlightType); } DllExport void __stdcall DebugGetSprites(uint32_t *frameBuffer) { GetDebugger()->GetMemoryDumper()->GetSprites(frameBuffer); } @@ -83,7 +84,6 @@ extern "C" DllExport void __stdcall DebugSetMemoryValue(DebugMemoryType type, uint32_t address, uint8_t value) { return GetDebugger()->GetMemoryDumper()->SetMemoryValue(type, address, value); } DllExport void __stdcall DebugSetMemoryValues(DebugMemoryType type, uint32_t address, uint8_t* data, int32_t length) { return GetDebugger()->GetMemoryDumper()->SetMemoryValues(type, address, data, length); } - DllExport int32_t __stdcall DebugGetMemorySize(DebugMemoryType type) { return GetDebugger()->GetMemorySize(type); } DllExport void __stdcall DebugGetMemoryAccessCounts(AddressType memoryType, MemoryOperationType operationType, uint32_t* counts, bool forUninitReads) { GetDebugger()->GetMemoryAccessCounter()->GetAccessCounts(memoryType, operationType, counts, forUninitReads); } DllExport void __stdcall DebugResetMemoryAccessCounts() { GetDebugger()->GetMemoryAccessCounter()->ResetCounts(); } DllExport void __stdcall DebugGetMemoryAccessStamps(uint32_t offset, uint32_t length, DebugMemoryType memoryType, MemoryOperationType operationType, uint32_t* stamps) { GetDebugger()->GetMemoryAccessCounter()->GetAccessStamps(offset, length, memoryType, operationType, stamps); }