diff --git a/src/game/crash_screen.c b/src/game/crash_screen.c index cbc7b62e..5f22f3af 100644 --- a/src/game/crash_screen.c +++ b/src/game/crash_screen.c @@ -290,6 +290,7 @@ void draw_stacktrace(OSThread *thread, UNUSED s32 cause) { } } +extern char *insn_disasm(u32 insn, u32 isPC); static u32 sProgramPosition = 0; void draw_disasm(OSThread *thread) { __OSThreadContext *tc = &thread->context; @@ -307,8 +308,6 @@ void draw_disasm(OSThread *thread) { u32 addr = sProgramPosition + (i * 4); u32 toDisasm = *(u32*)(addr); - - crash_screen_print(30, 35 + (i * 10), "%s", insn_disasm(toDisasm, addr == tc->pc)); } @@ -360,12 +359,11 @@ void draw_crash_screen(OSThread *thread) { crash_screen_draw_rect(25, 8, 270, 12); crash_screen_print(30, 10, "Page:%02d L/Z: Left R: Right", crashPage); - switch (crashPage) - { - case PAGE_CONTEXT: draw_crash_context(thread, cause); break; - case PAGE_LOG: draw_crash_log(); break; - case PAGE_STACKTRACE: draw_stacktrace(thread, cause); break; - case PAGE_DISASM: draw_disasm(thread); break; + switch (crashPage) { + case PAGE_CONTEXT: draw_crash_context(thread, cause); break; + case PAGE_LOG: draw_crash_log(); break; + case PAGE_STACKTRACE: draw_stacktrace(thread, cause); break; + case PAGE_DISASM: draw_disasm(thread); break; } osWritebackDCacheAll(); diff --git a/src/game/insn_disasm.c b/src/game/insn_disasm.c index bb5fb286..337a60a0 100644 --- a/src/game/insn_disasm.c +++ b/src/game/insn_disasm.c @@ -1,4 +1,5 @@ #include +#include #include "macros.h" #include "farcall.h" @@ -94,17 +95,18 @@ char registerMaps[][4] = { char *insn_disasm(InsnData insn, u32 isPC) { char *strp = &insn_as_string[0]; int successful_print = 0; + u32 target; if (insn.d == 0) { // trivial case - if (isPC) + if (isPC) { return "NOP <-- CRASH"; - else + } else { return "NOP"; + } } for (int i = 0; i < ARRAY_COUNT(insn_as_string); i++) insn_as_string[i] = 0; - for (int i = 0; i < ARRAY_COUNT(insn_db); i++) { if (insn.i.opcode != 0 && insn.i.opcode == insn_db[i].opcode) { switch (insn_db[i].arbitraryParam) { @@ -121,7 +123,7 @@ char *insn_disasm(InsnData insn, u32 isPC) { ); break; break; case PARAM_JAL: - u32 target = 0x80000000 | ((insn.d & 0x1FFFFFF) * 4); + target = 0x80000000 | ((insn.d & 0x1FFFFFF) * 4); if ((u32)parse_map != 0x80345678) { strp += sprintf(strp, "%-8s %s", insn_db[i].name, parse_map(target)