Skip to content

Commit dfea8fa

Browse files
joevtdingusdev
authored andcommitted
debugger: Show register values during stepping.
So you don't need to use regs after every instruction.
1 parent 07f781b commit dfea8fa

1 file changed

Lines changed: 42 additions & 7 deletions

File tree

debugger/debugger.cpp

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -425,21 +425,54 @@ static void patch_mem(string& params) {
425425
}
426426
}
427427

428+
static uint32_t disasm(PPCDisasmContext &ctx) {
429+
ctx.instr_code = READ_DWORD_BE_A(mmu_translate_imem(ctx.instr_addr));
430+
cout << COUT08X << ctx.instr_addr;
431+
cout << ": " << COUT08X << ctx.instr_code;
432+
cout << " " << disassemble_single(&ctx) << setfill(' ') << right << dec;
433+
return ctx.instr_addr;
434+
}
435+
428436
static uint32_t disasm(uint32_t count, uint32_t address) {
429437
PPCDisasmContext ctx;
430-
431438
ctx.instr_addr = address;
432439
ctx.simplified = true;
433-
434440
for (int i = 0; power_on && i < count; i++) {
435-
ctx.instr_code = READ_DWORD_BE_A(mmu_translate_imem(ctx.instr_addr));
436-
cout << COUT08X << ctx.instr_addr;
437-
cout << ": " << COUT08X << ctx.instr_code;
438-
cout << " " << disassemble_single(&ctx) << setfill(' ') << right << endl;
441+
disasm(ctx);
442+
cout << endl;
439443
}
440444
return ctx.instr_addr;
441445
}
442446

447+
static void disasm_in(PPCDisasmContext &ctx, uint32_t address) {
448+
ctx.instr_addr = address;
449+
ctx.simplified = true;
450+
disasm(ctx);
451+
if (ctx.regs_in.size() > 0 || ctx.regs_out.size() > 0) {
452+
if (ctx.instr_str.length() < 28)
453+
cout << setw(28 - (int)ctx.instr_str.length()) << " ";
454+
cout << " ;";
455+
if (ctx.regs_in.size() > 0) {
456+
cout << " in{" << COUTX;
457+
for (auto & reg_name : ctx.regs_in) {
458+
cout << " " << reg_name << ":" << get_reg(reg_name);
459+
}
460+
cout << " }" << dec;
461+
}
462+
}
463+
}
464+
465+
static void disasm_out(PPCDisasmContext &ctx) {
466+
if (ctx.regs_out.size() > 0) {
467+
cout << " out{" << COUTX;
468+
for (auto & reg_name : ctx.regs_out) {
469+
cout << " " << reg_name << ":" << get_reg(reg_name);
470+
}
471+
cout << " }" << dec;
472+
}
473+
cout << endl;
474+
}
475+
443476
static void print_gprs() {
444477
string reg_name;
445478
int i;
@@ -765,8 +798,10 @@ void DppcDebugger::enter_debugger() {
765798
}
766799
for (; --count >= 0;) {
767800
addr = ppc_state.pc;
768-
disasm(1, addr);
801+
PPCDisasmContext ctx;
802+
disasm_in(ctx, addr);
769803
ppc_exec_single();
804+
disasm_out(ctx);
770805
}
771806
}
772807
} else if (cmd == "next" || cmd == "ni") {

0 commit comments

Comments
 (0)