@@ -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+
428436static 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+
443476static 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