debugger: Show register values during stepping.

So you don't need to use regs after every instruction.
This commit is contained in:
joevt authored and dingusdev committed 2026-03-31 07:55:21 -07:00
1 parent 07f781bf56
commit dfea8fa2cd
1 file changed
+42 -7
+42 -7
View File
@@ -425,21 +425,54 @@ static void patch_mem(string& params) {
}
}
static uint32_t disasm(PPCDisasmContext &ctx) {
ctx.instr_code = READ_DWORD_BE_A(mmu_translate_imem(ctx.instr_addr));
cout << COUT08X << ctx.instr_addr;
cout << ": " << COUT08X << ctx.instr_code;
cout << " " << disassemble_single(&ctx) << setfill(' ') << right << dec;
return ctx.instr_addr;
}
static uint32_t disasm(uint32_t count, uint32_t address) {
PPCDisasmContext ctx;
ctx.instr_addr = address;
ctx.simplified = true;
for (int i = 0; power_on && i < count; i++) {
ctx.instr_code = READ_DWORD_BE_A(mmu_translate_imem(ctx.instr_addr));
cout << COUT08X << ctx.instr_addr;
cout << ": " << COUT08X << ctx.instr_code;
cout << " " << disassemble_single(&ctx) << setfill(' ') << right << endl;
disasm(ctx);
cout << endl;
}
return ctx.instr_addr;
}
static void disasm_in(PPCDisasmContext &ctx, uint32_t address) {
ctx.instr_addr = address;
ctx.simplified = true;
disasm(ctx);
if (ctx.regs_in.size() > 0 || ctx.regs_out.size() > 0) {
if (ctx.instr_str.length() < 28)
cout << setw(28 - (int)ctx.instr_str.length()) << " ";
cout << " ;";
if (ctx.regs_in.size() > 0) {
cout << " in{" << COUTX;
for (auto & reg_name : ctx.regs_in) {
cout << " " << reg_name << ":" << get_reg(reg_name);
}
cout << " }" << dec;
}
}
}
static void disasm_out(PPCDisasmContext &ctx) {
if (ctx.regs_out.size() > 0) {
cout << " out{" << COUTX;
for (auto & reg_name : ctx.regs_out) {
cout << " " << reg_name << ":" << get_reg(reg_name);
}
cout << " }" << dec;
}
cout << endl;
}
static void print_gprs() {
string reg_name;
int i;
@@ -765,8 +798,10 @@ void DppcDebugger::enter_debugger() {
}
for (; --count >= 0;) {
addr = ppc_state.pc;
disasm(1, addr);
PPCDisasmContext ctx;
disasm_in(ctx, addr);
ppc_exec_single();
disasm_out(ctx);
}
}
} else if (cmd == "next" || cmd == "ni") {