Debugger: Fixed crash in hex editor when PRG or CHR was larger than 10mb
This commit is contained in:
parent
9775127417
commit
fbc94bee7d
8 changed files with 34 additions and 13 deletions
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -22,6 +22,7 @@ private:
|
|||
public:
|
||||
MemoryDumper(shared_ptr<PPU> ppu, shared_ptr<MemoryManager> memoryManager, shared_ptr<BaseMapper> mapper, shared_ptr<CodeDataLogger> codeDataLogger, Debugger *debugger, shared_ptr<Disassembler> 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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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); }
|
||||
|
|
Loading…
Add table
Reference in a new issue