From 11e8b0d12694822c8c13e2c0f53d4d577703df4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 15 Mar 2025 17:40:54 +0100 Subject: [PATCH] ImDebugger: Allow browsing memory tags in the memory views --- UI/ImDebugger/ImDebugger.cpp | 43 +++++++++++++++++++++++++----------- UI/ImDebugger/ImDebugger.h | 1 + 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/UI/ImDebugger/ImDebugger.cpp b/UI/ImDebugger/ImDebugger.cpp index a215f32927..dadf583bee 100644 --- a/UI/ImDebugger/ImDebugger.cpp +++ b/UI/ImDebugger/ImDebugger.cpp @@ -10,6 +10,7 @@ #include "Common/Log/LogManager.h" #include "Core/Config.h" #include "Core/System.h" +#include "Core/Debugger/MemBlockInfo.h" #include "Core/RetroAchievements.h" #include "Core/Core.h" #include "Core/Debugger/DebugInterface.h" @@ -21,7 +22,6 @@ #include "Core/FileSystems/MetaFileSystem.h" #include "Core/Debugger/SymbolMap.h" #include "Core/MemMap.h" -#include "Core/System.h" #include "Core/HLE/HLE.h" #include "Core/HLE/SocketManager.h" #include "Core/HLE/NetInetConstants.h" @@ -1852,21 +1852,38 @@ void ImMemWindow::Draw(MIPSDebugInterface *mipsDebug, ImConfig &cfg, ImControl & ImVec2 size(0, -ImGui::GetFrameHeightWithSpacing()); + auto node = [&](const char *title, uint32_t start, uint32_t len) { + if (ImGui::TreeNode(title)) { + if (ImGui::Selectable("(start)", cfg.selectedMemoryBlock == start)) { + cfg.selectedMemoryBlock = start; + GotoAddr(start); + } + const std::vector info = FindMemInfo(start, len); + for (auto &iter : info) { + ImGui::PushID(iter.start); + if (ImGui::Selectable(iter.tag.c_str(), cfg.selectedMemoryBlock == iter.start)) { + cfg.selectedMemoryBlock = iter.start; + GotoAddr(iter.start); + } + ImGui::PopID(); + } + const u32 end = start + len; + if (ImGui::Selectable("(end)", cfg.selectedMemoryBlock == end)) { + cfg.selectedMemoryBlock = end; + GotoAddr(end); + } + ImGui::TreePop(); + } + }; + // Main views - list of interesting addresses to the left, memory view to the right. if (ImGui::BeginChild("addr_list", ImVec2(200.0f, size.y), ImGuiChildFlags_ResizeX)) { - if (ImGui::Selectable("Scratch")) { - GotoAddr(0x00010000); - } - if (ImGui::Selectable("Kernel RAM")) { - GotoAddr(0x08000000); - } - if (ImGui::Selectable("User RAM")) { - GotoAddr(0x08800000); - } - if (ImGui::Selectable("VRAM")) { - GotoAddr(0x04000000); - } + node("Scratch", 0x00010000, 0x00004000); + node("Kernel RAM", 0x08000000, 0x00800000); + node("User RAM" , 0x08800000, 0x01800000); + node("VRAM", 0x04000000, 0x00200000); } + ImGui::EndChild(); ImGui::SameLine(); diff --git a/UI/ImDebugger/ImDebugger.h b/UI/ImDebugger/ImDebugger.h index 8559166441..e3bc32773e 100644 --- a/UI/ImDebugger/ImDebugger.h +++ b/UI/ImDebugger/ImDebugger.h @@ -164,6 +164,7 @@ struct ImConfig { int selectedBreakpoint = -1; int selectedMemCheck = -1; int selectedAtracCtx = 0; + u32 selectedMemoryBlock = 0; uint64_t selectedTexAddr = 0; bool realtimePixelPreview = false;