diff --git a/src/debugger/debugger.cpp b/src/debugger/debugger.cpp index f9e4bb37..67b852c4 100644 --- a/src/debugger/debugger.cpp +++ b/src/debugger/debugger.cpp @@ -220,7 +220,7 @@ static void draw_debugger_window(Debugger* self) { */ DisassemblyView_update(self->d_view, "Dummy"); - RegisterView_update(self->register_view); + RegisterView_update(self->register_view, DisassemblyView_get_selected_registers(self->d_view)); uae_u8* addr = memory_get_real_address(0x00c000000); self->memory_view->draw_window("Memory View", addr, 512 * 1024); diff --git a/src/debugger/disassembly_view.cpp b/src/debugger/disassembly_view.cpp index 2353934e..d47b23ce 100644 --- a/src/debugger/disassembly_view.cpp +++ b/src/debugger/disassembly_view.cpp @@ -174,17 +174,9 @@ static void draw_disassembly(DisassemblyView* self) { const RegisterStringInfo* reg = &detail->regs_write_string_info[reg_id]; ImVec2 start_pos = ImVec2(op_str_start + (reg->offset * text_char_width), p.y); ImVec2 end_pos = ImVec2(start_pos.x + (reg->length * text_char_width), p.y + text_height); - printf("start_pos: %f %f\n", start_pos.x, start_pos.y); - printf("end_pos: %f %f\n", end_pos.x, end_pos.y); draw_list->AddRectFilled(start_pos, end_pos, IM_COL32(127, 0, 0, 127)); } } - - //ImVec2 start_pos = ImVec2(op_str_start, p.y); - //ImVec2 end_pos = ImVec2(start_pos.x + 2.0f * text_char_width, p.y + text_height); - //draw_list->AddRectFilled(start_pos, end_pos, IM_COL32(127, 127, 127, 127)); - - //draw_list->AddRectFilled(p, ImVec2(p.x, p.y + text_height), IM_COL32(127, 127, 127, 127)); ImGui::TableNextColumn(); } @@ -199,69 +191,19 @@ static void draw_disassembly(DisassemblyView* self) { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void DisassemblyView_update(DisassemblyView* self, const char* name) { - //static bool show_demo_window = true; - //ImGui::ShowDemoWindow(&show_demo_window); - static bool open = true; float text_height = ImGui::GetTextLineHeight(); if (ImGui::Begin("Disassembly", &open, ImGuiWindowFlags_NoScrollbar)) { - //ImGui::BeginChild("##scrolling", ImVec2(00.0f, 0.0f), false, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoNav); - //ImDrawList* draw_list = ImGui::GetWindowDrawList(); - //ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0)); - //ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); - - draw_disassembly(self); - - //ImGui::PopStyleVar(2); - - //ImGui::EndChild(); } ImGui::End(); } - - /* - for (size_t j = 0; j < count; j++) { - cs_detail* detail = insn[j].detail; - - printf("--------------------------------------------------------\n"); - - printf("%08llxx %s %s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str); - printf(" read offsets registers: "); - - for (int i = 0; i < detail->regs_read_string_count; i++) { - RegisterStringInfo* reg = &detail->regs_read_string_info[i]; - printf(" %d %d %d |", reg->offset, reg->length, reg->type); - } - - printf("\n"); - printf(" write offsets registers:"); - - for (int i = 0; i < detail->regs_write_string_count; i++) { - RegisterStringInfo* reg = &detail->regs_write_string_info[i]; - printf(" %d %d %d | \n", reg->offset, reg->length, reg->type); - } - - printf("\n"); - printf(" read registers: "); - - for (int i = 0; i < detail->regs_read_count; i++) { - printf(" %d |", detail->regs_read[i]); - } - - printf("\n"); - printf(" write registers: "); - - for (int i = 0; i < detail->regs_write_count; i++) { - printf(" %d |", detail->regs_write[i]); - } - - printf("\n"); - } - */ +SelectedRegisters* DisassemblyView_get_selected_registers(DisassemblyView* self) { + return &s_selected_registers; +} diff --git a/src/debugger/register_view.cpp b/src/debugger/register_view.cpp index 41627ae2..92aaf1ba 100644 --- a/src/debugger/register_view.cpp +++ b/src/debugger/register_view.cpp @@ -1,6 +1,8 @@ #include #include +#include #include "register_view.h" +#include "disassembly_view.h" #include "sysconfig.h" #include "sysdeps.h" #include "options.h" @@ -19,7 +21,17 @@ RegisterView* RegisterView_create() { ////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void RegisterView_update(RegisterView* self) { +static void update_selected_registers(int reg_id, const SelectedRegisters* selected_registers) { + if (selected_registers->read_registers[reg_id]) { + ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, IM_COL32(0, 127, 0, 127)); + } else if (selected_registers->write_registers[reg_id]) { + ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, IM_COL32(127, 0, 0, 127)); + } +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void RegisterView_update(RegisterView* self, const SelectedRegisters* selected_registers) { static bool open = true; ImGuiTableFlags flags = ImGuiTableFlags_Resizable @@ -28,6 +40,8 @@ void RegisterView_update(RegisterView* self) { | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV; + float text_char_width = ImGui::CalcTextSize("F").x; + if (ImGui::Begin("Registers", &open, ImGuiWindowFlags_NoScrollbar)) { if (ImGui::BeginTable("disassembly", 2, flags)) { ImGui::TableSetupColumn("Register"); @@ -36,6 +50,7 @@ void RegisterView_update(RegisterView* self) { for (int i = 0; i < 8; i++) { ImGui::TableNextColumn(); + update_selected_registers(M68K_REG_A0 + i, selected_registers); ImGui::Text("a%d", i); ImGui::TableNextColumn(); ImGui::Text("%08X", m68k_areg(regs, i)); @@ -43,6 +58,7 @@ void RegisterView_update(RegisterView* self) { for (int i = 0; i < 8; i++) { ImGui::TableNextColumn(); + update_selected_registers(M68K_REG_D0 + i, selected_registers); ImGui::Text("d%d", i); ImGui::TableNextColumn(); ImGui::Text("%08X", m68k_dreg(regs, i)); diff --git a/src/debugger/register_view.h b/src/debugger/register_view.h index f71af3a3..753f9f13 100644 --- a/src/debugger/register_view.h +++ b/src/debugger/register_view.h @@ -1,8 +1,9 @@ #pragma once struct RegisterView; +struct SelectedRegisters; RegisterView* RegisterView_create(); -void RegisterView_update(RegisterView* self); +void RegisterView_update(RegisterView* self, const SelectedRegisters* selected_registers); void RegisterView_destroy(RegisterView* self);