Skip to content

Commit

Permalink
Color registers
Browse files Browse the repository at this point in the history
  • Loading branch information
emoon committed Mar 31, 2024
1 parent 27f5cb7 commit e78d3c1
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 64 deletions.
2 changes: 1 addition & 1 deletion src/debugger/debugger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
64 changes: 3 additions & 61 deletions src/debugger/disassembly_view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand All @@ -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;
}


18 changes: 17 additions & 1 deletion src/debugger/register_view.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include <stdint.h>
#include <dear_imgui/imgui.h>
#include <capstone/m68k.h>
#include "register_view.h"
#include "disassembly_view.h"
#include "sysconfig.h"
#include "sysdeps.h"
#include "options.h"
Expand All @@ -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
Expand All @@ -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");
Expand All @@ -36,13 +50,15 @@ 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));
}

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));
Expand Down
3 changes: 2 additions & 1 deletion src/debugger/register_view.h
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit e78d3c1

Please sign in to comment.