From ec1b7b3b577a47a4cfe257676628896143abb077 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Thu, 1 May 2025 08:13:02 +0200 Subject: [PATCH 1/3] Reduced code-duplication in register wnd --- src/debugger/window/registers_wnd.cpp | 136 +++++++++++--------------- 1 file changed, 59 insertions(+), 77 deletions(-) diff --git a/src/debugger/window/registers_wnd.cpp b/src/debugger/window/registers_wnd.cpp index 9f92f857..e9af8afe 100644 --- a/src/debugger/window/registers_wnd.cpp +++ b/src/debugger/window/registers_wnd.cpp @@ -19,6 +19,20 @@ static const char* s_regLookup[] = { }; // clang-format on +struct FlagDef { + const char* name; + const char* displayName; + CpuFlg_ flagType; +}; + +static const FlagDef s_flagDefs[] = { + {"Z", "Z:", CpuFlg_Z}, + {"C", "C:", CpuFlg_C}, + {"N", "N:", CpuFlg_N}, + {"V", "V:", CpuFlg_V}, + {"X", "X:", CpuFlg_X} +}; + void RegistersView::drawContent() { Debugger* dbg = getDbg(); VM* vm = dbg->vm; @@ -29,114 +43,82 @@ void RegistersView::drawContent() { eastl::fixed_string stVal, stCmd, stId; - auto editCommonRegVal = [&](uint32_t reg_val, uint32_t reg_nr) { + auto displayRegName = [](const char* name) { + ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); + ImGui::Text("%s", name); + ImGui::PopStyleColor(); + }; + + auto editRegisterValue = [&](uint32_t reg_val, const char* reg_name) { stVal.sprintf("%08X", reg_val); - stId.assign("##") += reg_nr; + stId.assign("##") += reg_name; ImGui::SetNextItemWidth(ImGui::GetColumnWidth()); ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegValue)); if (ImGui::InputText(stId.c_str(), &stVal, ImGuiInputTextFlags_EnterReturnsTrue)) { - stCmd.sprintf("r %s %s", s_regLookup[reg_nr], stVal.c_str()); + stCmd.sprintf("r %s %s", reg_name, stVal.c_str()); dbg->execConsoleCmd(stCmd.c_str()); } ImGui::PopStyleColor(); }; + auto editFlagValue = [&](const char* flag_name, uint32_t flag_val) { + stVal.sprintf("%01X", flag_val); + stId.assign("##") += flag_name; + ImGui::SetNextItemWidth(ImGui::GetColumnWidth()); + if (ImGui::InputText(stId.c_str(), &stVal, ImGuiInputTextFlags_EnterReturnsTrue)) { + stCmd.sprintf("r %s %s", flag_name, stVal.c_str()); + dbg->execConsoleCmd(stCmd.c_str()); + } + }; + int flags = ImGuiTableFlags_RowBg | ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_ScrollY; if (ImGui::BeginTable("##registers", 4, flags, ImVec2(0, 0))) { + // Draw A and D registers side by side for (int i = 0; i < 8; ++i) { ImGui::TableNextRow(); - ImGui::TableNextColumn(); - // Ax col - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("A%d", i); - ImGui::PopStyleColor(); + // A registers ImGui::TableNextColumn(); - editCommonRegVal(cpu->getRegA(i), REG_A + 8); + displayRegName(s_regLookup[REG_A + i]); ImGui::TableNextColumn(); + editRegisterValue(cpu->getRegA(i), s_regLookup[REG_A + i]); - // Dx col - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("D%d", i); - ImGui::PopStyleColor(); + // D registers ImGui::TableNextColumn(); - editCommonRegVal(cpu->getRegD(i), REG_D + i); - // ImGui::TableNextColumn(); - } - - { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - - // PC - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("##PC"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - editCommonRegVal(cpu->getPC(), REG_PC); - ImGui::TableNextColumn(); - - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("IMASK"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - ImGui::Text("%i", cpu->getIntMask()); + displayRegName(s_regLookup[REG_D + i]); ImGui::TableNextColumn(); + editRegisterValue(cpu->getRegD(i), s_regLookup[REG_D + i]); } - // + // PC and IMASK row ImGui::TableNextRow(); ImGui::TableNextColumn(); - - auto editFlagsRegVal = [&](const char* flg_name, uint32_t reg_val) { - stVal.sprintf("%01X", reg_val); - stId.assign("##") += flg_name; - ImGui::SetNextItemWidth(ImGui::GetColumnWidth()); - if (ImGui::InputText(stId.c_str(), &stVal, ImGuiInputTextFlags_EnterReturnsTrue)) { - stCmd.sprintf("r %s %s", flg_name, stVal.c_str()); - dbg->execConsoleCmd(stCmd.c_str()); - } - }; - - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("Z:"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - editFlagsRegVal("Z", cpu->getFlg(CpuFlg_Z)); + displayRegName("PC"); ImGui::TableNextColumn(); - - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("C:"); - ImGui::PopStyleColor(); + editRegisterValue(cpu->getPC(), s_regLookup[REG_PC]); ImGui::TableNextColumn(); - editFlagsRegVal("C", cpu->getFlg(CpuFlg_C)); - ImGui::TableNextColumn(); - - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("N:"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - editFlagsRegVal("N", cpu->getFlg(CpuFlg_N)); - ImGui::TableNextColumn(); - - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("V:"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - editFlagsRegVal("V", cpu->getFlg(CpuFlg_V)); + displayRegName("IMASK"); ImGui::TableNextColumn(); + ImGui::Text("%i", cpu->getIntMask()); + + // CPU flags + const int flagCount = sizeof(s_flagDefs) / sizeof(s_flagDefs[0]); + for (int i = 0; i < flagCount; i++) { + // Create a new row for every even index (0, 2, 4...) + if (i % 2 == 0) { + ImGui::TableNextRow(); + } - ImGui::PushStyleColor(ImGuiCol_Text, uiGetColorU(UiStyle::RegistersWnd_RegName)); - ImGui::Text("X:"); - ImGui::PopStyleColor(); - ImGui::TableNextColumn(); - editFlagsRegVal("X", cpu->getFlg(CpuFlg_X)); - ImGui::TableNextColumn(); + ImGui::TableNextColumn(); + displayRegName(s_flagDefs[i].displayName); + ImGui::TableNextColumn(); + editFlagValue(s_flagDefs[i].name, cpu->getFlg(s_flagDefs[i].flagType)); + } ImGui::EndTable(); } } }; // namespace window -}; // namespace qd +}; // namespace qd \ No newline at end of file From 5b0a3125d22b91cd5ae5e822e76be4cdb59897ec Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Thu, 1 May 2025 08:16:09 +0200 Subject: [PATCH 2/3] Fixed so clang-format ignores the cpu-flags table --- src/debugger/window/registers_wnd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/debugger/window/registers_wnd.cpp b/src/debugger/window/registers_wnd.cpp index e9af8afe..e80ef34e 100644 --- a/src/debugger/window/registers_wnd.cpp +++ b/src/debugger/window/registers_wnd.cpp @@ -25,6 +25,7 @@ struct FlagDef { CpuFlg_ flagType; }; +// clang-format off static const FlagDef s_flagDefs[] = { {"Z", "Z:", CpuFlg_Z}, {"C", "C:", CpuFlg_C}, @@ -32,6 +33,7 @@ static const FlagDef s_flagDefs[] = { {"V", "V:", CpuFlg_V}, {"X", "X:", CpuFlg_X} }; +// clang-format on void RegistersView::drawContent() { Debugger* dbg = getDbg(); From b1df33a8e6edb664f62e354a991d2c5b409cb039 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Thu, 1 May 2025 08:20:38 +0200 Subject: [PATCH 3/3] Format fix --- src/debugger/action_mgr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/debugger/action_mgr.h b/src/debugger/action_mgr.h index 7db42ef5..3a371fef 100644 --- a/src/debugger/action_mgr.h +++ b/src/debugger/action_mgr.h @@ -61,7 +61,7 @@ class Base { bool mCompDone = false; public: - Base(action::ActionCreator* /*cp*/, uint32_t comp_id) : mCompId(comp_id) {}; + Base(action::ActionCreator* /*cp*/, uint32_t comp_id) : mCompId(comp_id){}; virtual EFlow applyMsgProc(action::msg::Base* /*msg*/) { return EFlow::NO_RESULT; }