diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2021-12-24 20:31:54 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-24 20:31:54 -0700 |
| commit | b7f8765d72d62571a95e0e65ce455151892df831 (patch) | |
| tree | 684f265c2ea20e7cac6b714637779a9cf7bb50a5 /src/crash_screen.c | |
| parent | 782c9f0d3c8f4e7211df2d56290b5653a650ef45 (diff) | |
Decomped more crash_screen, code_80280650, fixed import shortcut (#115)
* Decomped more crash_screen, code_80280650, fixed import shortcut
Diffstat (limited to 'src/crash_screen.c')
| -rw-r--r-- | src/crash_screen.c | 148 |
1 files changed, 76 insertions, 72 deletions
diff --git a/src/crash_screen.c b/src/crash_screen.c index 437404037..e2e8b3238 100644 --- a/src/crash_screen.c +++ b/src/crash_screen.c @@ -15,7 +15,7 @@ void crash_screen_draw_info(uint_ptr arg0, void *arg1); // static void crash_screen_draw_square(uint_ptr arg0); // static void create_debug_thread(); // static void func_800040C0(s32 arg0, s32 arg1, s32 arg2, u32 arg3); // static -void func_800046AC(s32 arg0); // static +void crash_screen_set_framebuffer(s32 arg0); // static void *get_faulted_thread(); // static void start_debug_thread(); // static void thread9_crash_screen(s32 arg0); // static @@ -31,6 +31,23 @@ extern s32 D_80162D60; extern void *D_80162D64; */ + + +OSThread D_80162790; +ALIGNED8 u8 gDebugThreadStack[0x400]; +OSMesgQueue D_80162D40; +OSMesg D_80162D58; +uintptr_t pFramebuffer; +s32 D_80162D60; +void *D_80162D64; + +extern void osSetEventMesg(OSEvent, OSMesgQueue *, OSMesg); +extern s32 osRecvMesg(OSMesgQueue *, OSMesg *, s32); +extern void read_controllers(); + +extern struct Controller *D_800DC4BC; + + u32 D_800DC670 = 0; u8 crashScreenFont[][8] = { @@ -284,58 +301,69 @@ loop_3: GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen_draw_info.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -void *__osGetCurrFaultedThread(); /* extern */ +OSThread *get_faulted_thread(void) { + OSThread *thread; -void *get_faulted_thread(void) { - s32 temp_v0_2; - void *temp_v0; - void *temp_v1; - s32 phi_v0; - void *phi_v1; - - temp_v0 = __osGetCurrFaultedThread(); - phi_v1 = temp_v0; - if (temp_v0->unk4 != -1) { - phi_v0 = temp_v0->unk4; -loop_2: - if ((phi_v0 > 0) && (phi_v0 < 0x80) && ((phi_v1->unk12 & 3) != 0)) { - return phi_v1; + thread = __osGetCurrFaultedThread(); + while (thread->priority != -1) { + if (thread->priority > OS_PRIORITY_IDLE && thread->priority <= OS_PRIORITY_APPMAX + && (thread->flags & 3) != 0) { + return thread; } - temp_v1 = phi_v1->unkC; - temp_v0_2 = temp_v1->unk4; - phi_v0 = temp_v0_2; - phi_v1 = temp_v1; - if (temp_v0_2 == -1) { - goto block_7; - } - goto loop_2; + thread = thread->tlnext; } -block_7: return NULL; } -#else -GLOBAL_ASM("asm/non_matchings/crash_screen/get_faulted_thread.s") -#endif #ifdef MIPS_TO_C //generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -? crash_screen_draw_info(s32, s32); /* extern */ -? crash_screen_draw_square(s32); /* extern */ -s32 get_faulted_thread(); /* extern */ -? osRecvMesg(? *, ? *, ?); /* extern */ -? osSetEventMesg(?, ? *, ?); /* extern */ -? read_controllers(); /* extern */ -extern void *D_800DC4BC; -extern s32 D_800DC670; -extern ? D_800DC6FC; -extern ? D_80162D40; -extern s32 D_80162D60; -extern s32 D_80162D64; -extern s32 pFramebuffer; -void thread9_crash_screen(s32 arg0) { +//OSThread *get_faulted_thread(); +void crash_screen_draw_square(s32, void*); +void crash_screen_draw_info(s32, void*); + +void thread9_crash_screen(UNUSED s32 arg0) { + OSMesg mesg; + OSThread *thread; + //s32 pad[2]; + u16 temp_v0_2; + + osSetEventMesg(OS_EVENT_FAULT, &D_80162D40, (OSMesg) 16); + osSetEventMesg(OS_EVENT_CPU_BREAK, &D_80162D40, (OSMesg) 16); + D_80162D60 = 0; + loop_1: + do { + do { + osRecvMesg(&D_80162D40, &mesg, 1); + thread = get_faulted_thread(); + } while (thread == NULL); + + if (D_800DC670 == 0) { + crash_screen_draw_square(pFramebuffer, D_80162D64); + do { + //temp_v0_2 = D_800DC4BC->buttonPressed; + //loop_4: + do { + read_controllers(); + } + while (temp_v0_2 == 0); + //if (temp_v0_2 == 0) { + //goto loop_4; + //} + //temp_v1 = D_80162D60; + //} while (thread == NULL); + if (temp_v0_2 == D_800DC6FC[D_80162D60]) { + D_80162D60++; + } else { + D_80162D60 = 0; + } + } while (D_800DC6FC[D_80162D60] != 0xFFFF); + crash_screen_draw_info(pFramebuffer, D_80162D64); + } +} while (D_800DC670 >= 5); + D_800DC670++; + goto loop_1; + /* ? sp44; s32 temp_v0; s32 temp_v1; @@ -374,47 +402,23 @@ loop_4: } D_800DC670 += 1; goto loop_1; + */ } #else GLOBAL_ASM("asm/non_matchings/crash_screen/thread9_crash_screen.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -extern s32 pFramebuffer; - -void func_800046AC(s32 arg0) { +void crash_screen_set_framebuffer(s32 arg0) { pFramebuffer = arg0; } -#else -GLOBAL_ASM("asm/non_matchings/crash_screen/func_800046AC.s") -#endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -? osCreateMesgQueue(? *, ? *, ?); /* extern */ -? osCreateThread(? *, ?, ? *, ?, ? *, s32); /* extern */ -extern ? D_80162790; -extern ? D_80162D40; -extern ? D_80162D58; -extern ? thread9_crash_screen; +extern void thread9_crash_screen(); void create_debug_thread(void) { osCreateMesgQueue(&D_80162D40, &D_80162D58, 1); - osCreateThread(&D_80162790, 9, &thread9_crash_screen, 0, &D_80162D40, 0x7F); + osCreateThread((OSThread *) &D_80162790, 9, (void *)thread9_crash_screen, 0, &D_80162D40, 0x7F); } -#else -GLOBAL_ASM("asm/non_matchings/crash_screen/create_debug_thread.s") -#endif - -#ifdef MIPS_TO_C -//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -? osStartThread(? *); /* extern */ -extern ? D_80162790; void start_debug_thread(void) { osStartThread(&D_80162790); } -#else -GLOBAL_ASM("asm/non_matchings/crash_screen/start_debug_thread.s") -#endif |
