summaryrefslogtreecommitdiff
path: root/src/crash_screen.c
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2021-12-24 20:31:54 -0700
committerGitHub <noreply@github.com>2021-12-24 20:31:54 -0700
commitb7f8765d72d62571a95e0e65ce455151892df831 (patch)
tree684f265c2ea20e7cac6b714637779a9cf7bb50a5 /src/crash_screen.c
parent782c9f0d3c8f4e7211df2d56290b5653a650ef45 (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.c148
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