From 8f469065b93a2b26024eb77e2531b1b158f20d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 21 Mar 2021 14:30:09 +0100 Subject: almost match --- arm9/arm9.lsf | 1 + arm9/asm/unk_0208A998.s | 283 +------------------------------ arm9/global.inc | 7 + arm9/src/unk_0208A998_c.c | 414 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 423 insertions(+), 282 deletions(-) create mode 100644 arm9/src/unk_0208A998_c.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index ba128605..5dccee2d 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -317,6 +317,7 @@ Static arm9 Object unk_0208A258.o Object unk_0208A300.o Object unk_0208A338.o + Object unk_0208A998_c.o Object unk_0208A998.o ### Third-party libraries ### Object unk_0208AC14.o diff --git a/arm9/asm/unk_0208A998.s b/arm9/asm/unk_0208A998.s index 14a02753..b63ba6d5 100644 --- a/arm9/asm/unk_0208A998.s +++ b/arm9/asm/unk_0208A998.s @@ -5,290 +5,9 @@ .section .rodata - .global UNK_020FF49C -UNK_020FF49C: ; 0x020FF49C - .byte 0x00, 0x03, 0x03, 0x1A, 0x12, 0x01, 0x23, 0x00 - - .global UNK_020FF4A4 -UNK_020FF4A4: ; 0x020FF4A4 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4AC -UNK_020FF4AC: ; 0x020FF4AC - .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4BC -UNK_020FF4BC: ; 0x020FF4BC - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF4D8 -UNK_020FF4D8: ; 0x020FF4D8 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .section .bss - - .global sErrorMessagePrinterLock -sErrorMessagePrinterLock: ; 0x021C8C58 - .space 0x4 - .text - thumb_func_start FUN_0208A998 -FUN_0208A998: ; 0x0208A998 - ldr r3, _0208A9AC ; =0x027E0000 - ldr r1, _0208A9B0 ; =0x00003FF8 - mov r0, #0x1 - ldr r2, [r3, r1] - orr r0, r2 - str r0, [r3, r1] - ldr r3, _0208A9B4 ; =MI_WaitDma - mov r0, #0x3 - bx r3 - nop -_0208A9AC: .word 0x027E0000 -_0208A9B0: .word 0x00003FF8 -_0208A9B4: .word MI_WaitDma - thumb_func_start PrintErrorMessageAndReset -PrintErrorMessageAndReset: ; 0x0208A9B8 - push {r4-r7, lr} - sub sp, #0x24 - ldr r0, _0208ABC8 ; =sErrorMessagePrinterLock - ldr r1, [r0, #0x0] - cmp r1, #0x1 - bne _0208A9C6 - b _0208ABC4 -_0208A9C6: - mov r1, #0x1 - str r1, [r0, #0x0] - mov r0, #0x0 - bl OS_GetInitArenaHi - add r1, r0, #0x0 - mov r0, #0x0 - bl OS_SetArenaHi - mov r0, #0x0 - bl OS_GetInitArenaLo - add r1, r0, #0x0 - mov r0, #0x0 - bl OS_SetArenaLo - mov r1, #0x1 - ldr r0, _0208ABCC ; =UNK_020FF4A4 - add r2, r1, #0x0 - mov r3, #0x0 - bl FUN_020166C8 - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - mov r1, #0x0 - bl FUN_0200E3A0 - mov r0, #0x1 - bl OS_DisableIrqMask - ldr r1, _0208ABD0 ; =FUN_0208A998 - mov r0, #0x1 - bl OS_SetIrqFunction - mov r0, #0x1 - bl OS_EnableIrqMask - mov r0, #0x0 - add r1, r0, #0x0 - bl Main_SetVBlankIntrCB - mov r0, #0x0 - add r1, r0, #0x0 - bl FUN_02015F34 - bl FUN_0201E6D8 - bl FUN_0201E740 - mov r2, #0x1 - lsl r2, r2, #0x1a - ldr r1, [r2, #0x0] - ldr r0, _0208ABD4 ; =0xFFFFE0FF - and r1, r0 - str r1, [r2, #0x0] - ldr r2, _0208ABD8 ; =0x04001000 - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - mov r0, #0x4 - mov r1, #0x8 - bl FUN_0201669C - ldr r0, _0208ABDC ; =gMain + 0x60 - mov r1, #0x0 - strb r1, [r0, #0x5] - bl FUN_0201E7A0 - ldr r3, _0208ABE0 ; =0x04000050 - mov r0, #0x0 - strh r0, [r3, #0x0] - ldr r2, _0208ABE4 ; =0x04001050 - sub r3, #0x50 - strh r0, [r2, #0x0] - ldr r1, [r3, #0x0] - ldr r0, _0208ABE8 ; =0xFFFF1FFF - sub r2, #0x50 - and r1, r0 - str r1, [r3, #0x0] - ldr r1, [r2, #0x0] - and r0, r1 - str r0, [r2, #0x0] - ldr r0, _0208ABEC ; =UNK_020FF4D8 - bl FUN_0201E66C - mov r0, #0x0 - bl FUN_02016B94 - str r0, [sp, #0x10] - ldr r0, _0208ABF0 ; =UNK_020FF4AC - bl FUN_02016BBC - mov r1, #0x0 - ldr r0, [sp, #0x10] - ldr r2, _0208ABF4 ; =UNK_020FF4BC - add r3, r1, #0x0 - bl FUN_02016C18 - ldr r0, [sp, #0x10] - mov r1, #0x0 - bl FUN_02018744 - mov r1, #0x0 - str r1, [sp, #0x0] - ldr r0, [sp, #0x10] - ldr r2, _0208ABF8 ; =0x000001F7 - mov r3, #0x2 - str r1, [sp, #0x4] - bl FUN_0200CB00 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - bl FUN_02002ED0 - mov r0, #0x0 - mov r1, #0x20 - add r2, r0, #0x0 - add r3, r0, #0x0 - bl FUN_02017F18 - ldr r1, _0208ABFC ; =0x00006C21 - mov r0, #0x0 - bl FUN_02017FE4 - ldr r1, _0208ABFC ; =0x00006C21 - mov r0, #0x4 - bl FUN_02017FE4 - mov r0, #0x1 - mov r1, #0x1a - mov r2, #0xc8 - mov r3, #0x0 - bl NewMsgDataFromNarc - str r0, [sp, #0xc] - mov r0, #0x6 - lsl r0, r0, #0x6 - mov r1, #0x0 - bl String_ctor - add r4, r0, #0x0 - bl FUN_0201BD5C - ldr r0, [sp, #0x10] - ldr r2, _0208AC00 ; =UNK_020FF49C - add r1, sp, #0x14 - bl FUN_02019150 - mov r0, #0xd0 - str r0, [sp, #0x0] - mov r0, #0x90 - mov r2, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x14 - mov r1, #0xf - add r3, r2, #0x0 - bl FUN_020196F4 - ldr r2, _0208ABF8 ; =0x000001F7 - add r0, sp, #0x14 - mov r1, #0x0 - mov r3, #0x2 - bl FUN_0200CCA4 - ldr r0, [sp, #0xc] - mov r1, #0x3 - add r2, r4, #0x0 - bl ReadMsgDataIntoString - mov r1, #0x0 - str r1, [sp, #0x0] - str r1, [sp, #0x4] - add r0, sp, #0x14 - add r2, r4, #0x0 - add r3, r1, #0x0 - str r1, [sp, #0x8] - bl AddTextPrinterParameterized - add r0, r4, #0x0 - bl String_dtor - bl FUN_0201E788 - mov r0, #0x0 - bl FUN_0200E394 - mov r0, #0x1 - bl FUN_0200E394 - mov r0, #0x0 - mov r1, #0x3f - mov r2, #0x3 - bl FUN_0200A274 - bl FUN_02032DAC - mov r4, #0x1 -_0208AB58: - bl HandleDSLidAction - bl FUN_0202FB80 - bl FUN_02033678 - cmp r0, #0x0 - bne _0208AB72 - add r0, r4, #0x0 - add r1, r4, #0x0 - bl OS_WaitIrq - b _0208AB58 -_0208AB72: - ldr r5, _0208AC04 ; =0x04000130 - ldr r4, _0208AC08 ; =0x027FFFA8 - ldr r7, _0208AC0C ; =0x00002FFF - mov r6, #0x1 -_0208AB7A: - bl HandleDSLidAction - ldrh r1, [r5, #0x0] - ldrh r0, [r4, #0x0] - orr r1, r0 - ldr r0, _0208AC0C ; =0x00002FFF - eor r0, r1 - and r0, r7 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - tst r0, r6 - bne _0208AB9C - mov r0, #0x1 - add r1, r0, #0x0 - bl OS_WaitIrq - b _0208AB7A -_0208AB9C: - ldr r1, _0208AC10 ; =0x00007FFF - mov r0, #0x0 - bl FUN_0200E3A0 - ldr r1, _0208AC10 ; =0x00007FFF - mov r0, #0x1 - bl FUN_0200E3A0 - add r0, sp, #0x14 - bl FUN_02019178 - ldr r0, [sp, #0xc] - bl DestroyMsgData - ldr r0, [sp, #0x10] - bl FreeToHeap - mov r0, #0x0 - bl OS_ResetSystem -_0208ABC4: - add sp, #0x24 - pop {r4-r7, pc} - .balign 4 -_0208ABC8: .word sErrorMessagePrinterLock -_0208ABCC: .word UNK_020FF4A4 -_0208ABD0: .word FUN_0208A998 -_0208ABD4: .word 0xFFFFE0FF -_0208ABD8: .word 0x04001000 -_0208ABDC: .word gMain + 0x60 -_0208ABE0: .word 0x04000050 -_0208ABE4: .word 0x04001050 -_0208ABE8: .word 0xFFFF1FFF -_0208ABEC: .word UNK_020FF4D8 -_0208ABF0: .word UNK_020FF4AC -_0208ABF4: .word UNK_020FF4BC -_0208ABF8: .word 0x000001F7 -_0208ABFC: .word 0x00006C21 -_0208AC00: .word UNK_020FF49C -_0208AC04: .word 0x04000130 -_0208AC08: .word 0x027FFFA8 -_0208AC0C: .word 0x00002FFF -_0208AC10: .word 0x00007FFF + diff --git a/arm9/global.inc b/arm9/global.inc index 0190b134..c391a7a0 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -8519,3 +8519,10 @@ .extern CARDi_InitCommon .extern MonNotFaintedOrEgg .extern CountAlivePokemon +.extern UNK_020FF49C +.extern UNK_020FF4A4 +.extern UNK_020FF4AC +.extern UNK_020FF4BC +.extern UNK_020FF4D8 +.extern sErrorMessagePrinterLock +.extern FUN_0208A998 diff --git a/arm9/src/unk_0208A998_c.c b/arm9/src/unk_0208A998_c.c new file mode 100644 index 00000000..bbff614b --- /dev/null +++ b/arm9/src/unk_0208A998_c.c @@ -0,0 +1,414 @@ +#include "global.h" +#include "heap.h" +#include "SPI_pm.h" +#include "game_init.h" +#include "msgdata.h" +#include "text.h" + + +const u8 UNK_020FF49C[8] = {0x00, 0x03, 0x03, 0x1a, 0x12, 0x01, 0x23, 0x00}; + +const u8 UNK_020FF4A4[8] = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}; + + + + +const u8 UNK_020FF4AC[16] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00}; + + +const u8 UNK_020FF4BC[28] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + + +const u8 UNK_020FF4D8[40] = { + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +u32 sErrorMessagePrinterLock; + + +extern void FUN_0200E3A0(PMLCDTarget, int); +extern void FUN_0201E6D8(); +extern void FUN_0201E7A0(); +extern void FUN_0201E66C(u32 *param0); +extern u32 FUN_02016B94(u32 param0); +extern void FUN_02016BBC(u32 *param0); +extern void FUN_02016C18(u32 param0, u32 param1, u32 *param2, u32 param3); +extern void FUN_02018744(u32 param0, u32 param1); +extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); +extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); +extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); +extern void FUN_02017FE4(u32 param0, u32 param1); +extern void FUN_02019150(u32 param0, u32 *param1, u32 *param2); +extern void FUN_020196F4(u32 *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); +extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); +extern void FUN_0201E788(); +extern void FUN_0200E394(u32 param0); +extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); +extern void FUN_02032DAC(); +extern BOOL FUN_0202FB80(void); +extern BOOL FUN_02033678(void); +extern void FUN_02019178(u32 *param0); +extern void FUN_0201E740(); + + + + +THUMB_FUNC void FUN_0208A998() { + *(vu32 *)HW_INTR_CHECK_BUF |= 1; + + MI_WaitDma(3); +} + + + + +// thumb_func_start PrintErrorMessageAndReset +// PrintErrorMessageAndReset: ; 0x0208A9B8 +// push {r4-r7, lr} +// sub sp, #0x24 +// ldr r0, _0208ABC8 ; =sErrorMessagePrinterLock +// ldr r1, [r0, #0x0] +// cmp r1, #0x1 +// bne _0208A9C6 +// b _0208ABC4 +// _0208A9C6: +// mov r1, #0x1 +// str r1, [r0, #0x0] +// mov r0, #0x0 +// bl OS_GetInitArenaHi +// add r1, r0, #0x0 +// mov r0, #0x0 +// bl OS_SetArenaHi +// mov r0, #0x0 +// bl OS_GetInitArenaLo +// add r1, r0, #0x0 +// mov r0, #0x0 +// bl OS_SetArenaLo +// mov r1, #0x1 +// ldr r0, _0208ABCC ; =UNK_020FF4A4 +// add r2, r1, #0x0 +// mov r3, #0x0 +// bl FUN_020166C8 +// mov r0, #0x0 +// add r1, r0, #0x0 +// bl FUN_0200E3A0 +// mov r0, #0x1 +// mov r1, #0x0 +// bl FUN_0200E3A0 +// mov r0, #0x1 +// bl OS_DisableIrqMask +// ldr r1, _0208ABD0 ; =FUN_0208A998 +// mov r0, #0x1 +// bl OS_SetIrqFunction +// mov r0, #0x1 +// bl OS_EnableIrqMask +// mov r0, #0x0 +// add r1, r0, #0x0 +// bl Main_SetVBlankIntrCB +// mov r0, #0x0 +// add r1, r0, #0x0 +// bl FUN_02015F34 +// bl FUN_0201E6D8 +// bl FUN_0201E740 +// mov r2, #0x1 +// lsl r2, r2, #0x1a +// ldr r1, [r2, #0x0] +// ldr r0, _0208ABD4 ; =0xFFFFE0FF +// and r1, r0 +// str r1, [r2, #0x0] +// ldr r2, _0208ABD8 ; =0x04001000 +// ldr r1, [r2, #0x0] +// and r0, r1 +// str r0, [r2, #0x0] +// mov r0, #0x4 +// mov r1, #0x8 +// bl FUN_0201669C +// ldr r0, _0208ABDC ; =gMain + 0x60 +// mov r1, #0x0 +// strb r1, [r0, #0x5] +// bl FUN_0201E7A0 +// ldr r3, _0208ABE0 ; =0x04000050 +// mov r0, #0x0 +// strh r0, [r3, #0x0] +// ldr r2, _0208ABE4 ; =0x04001050 +// sub r3, #0x50 +// strh r0, [r2, #0x0] +// ldr r1, [r3, #0x0] +// ldr r0, _0208ABE8 ; =0xFFFF1FFF +// sub r2, #0x50 +// and r1, r0 +// str r1, [r3, #0x0] +// ldr r1, [r2, #0x0] +// and r0, r1 +// str r0, [r2, #0x0] +// ldr r0, _0208ABEC ; =UNK_020FF4D8 +// bl FUN_0201E66C +// mov r0, #0x0 +// bl FUN_02016B94 +// str r0, [sp, #0x10] +// ldr r0, _0208ABF0 ; =UNK_020FF4AC +// bl FUN_02016BBC +// mov r1, #0x0 +// ldr r0, [sp, #0x10] +// ldr r2, _0208ABF4 ; =UNK_020FF4BC +// add r3, r1, #0x0 +// bl FUN_02016C18 +// ldr r0, [sp, #0x10] +// mov r1, #0x0 +// bl FUN_02018744 +// mov r1, #0x0 +// str r1, [sp, #0x0] +// ldr r0, [sp, #0x10] +// ldr r2, _0208ABF8 ; =0x000001F7 +// mov r3, #0x2 +// str r1, [sp, #0x4] +// bl FUN_0200CB00 +// mov r0, #0x0 +// mov r1, #0x20 +// add r2, r0, #0x0 +// bl FUN_02002ED0 +// mov r0, #0x0 +// mov r1, #0x20 +// add r2, r0, #0x0 +// add r3, r0, #0x0 +// bl FUN_02017F18 +// ldr r1, _0208ABFC ; =0x00006C21 +// mov r0, #0x0 +// bl FUN_02017FE4 +// ldr r1, _0208ABFC ; =0x00006C21 +// mov r0, #0x4 +// bl FUN_02017FE4 +// mov r0, #0x1 +// mov r1, #0x1a +// mov r2, #0xc8 +// mov r3, #0x0 +// bl NewMsgDataFromNarc +// str r0, [sp, #0xc] +// mov r0, #0x6 +// lsl r0, r0, #0x6 +// mov r1, #0x0 +// bl String_ctor +// add r4, r0, #0x0 +// bl FUN_0201BD5C +// ldr r0, [sp, #0x10] +// ldr r2, _0208AC00 ; =UNK_020FF49C +// add r1, sp, #0x14 +// bl FUN_02019150 +// mov r0, #0xd0 +// str r0, [sp, #0x0] +// mov r0, #0x90 +// mov r2, #0x0 +// str r0, [sp, #0x4] +// add r0, sp, #0x14 +// mov r1, #0xf +// add r3, r2, #0x0 +// bl FUN_020196F4 +// ldr r2, _0208ABF8 ; =0x000001F7 +// add r0, sp, #0x14 +// mov r1, #0x0 +// mov r3, #0x2 +// bl FUN_0200CCA4 +// ldr r0, [sp, #0xc] +// mov r1, #0x3 +// add r2, r4, #0x0 +// bl ReadMsgDataIntoString +// mov r1, #0x0 +// str r1, [sp, #0x0] +// str r1, [sp, #0x4] +// add r0, sp, #0x14 +// add r2, r4, #0x0 +// add r3, r1, #0x0 +// str r1, [sp, #0x8] +// bl AddTextPrinterParameterized +// add r0, r4, #0x0 +// bl String_dtor +// bl FUN_0201E788 +// mov r0, #0x0 +// bl FUN_0200E394 +// mov r0, #0x1 +// bl FUN_0200E394 +// mov r0, #0x0 +// mov r1, #0x3f +// mov r2, #0x3 +// bl FUN_0200A274 +// bl FUN_02032DAC +// mov r4, #0x1 +// _0208AB58: +// bl HandleDSLidAction +// bl FUN_0202FB80 +// bl FUN_02033678 +// cmp r0, #0x0 +// bne _0208AB72 +// add r0, r4, #0x0 +// add r1, r4, #0x0 +// bl OS_WaitIrq +// b _0208AB58 +// _0208AB72: +// ldr r5, _0208AC04 ; =0x04000130 +// ldr r4, _0208AC08 ; =0x027FFFA8 +// ldr r7, _0208AC0C ; =0x00002FFF +// mov r6, #0x1 +// _0208AB7A: +// bl HandleDSLidAction +// ldrh r1, [r5, #0x0] +// ldrh r0, [r4, #0x0] +// orr r1, r0 +// ldr r0, _0208AC0C ; =0x00002FFF +// eor r0, r1 +// and r0, r7 +// lsl r0, r0, #0x10 +// lsr r0, r0, #0x10 +// tst r0, r6 +// bne _0208AB9C +// mov r0, #0x1 +// add r1, r0, #0x0 +// bl OS_WaitIrq +// b _0208AB7A +// _0208AB9C: +// ldr r1, _0208AC10 ; =0x00007FFF +// mov r0, #0x0 +// bl FUN_0200E3A0 +// ldr r1, _0208AC10 ; =0x00007FFF +// mov r0, #0x1 +// bl FUN_0200E3A0 +// add r0, sp, #0x14 +// bl FUN_02019178 +// ldr r0, [sp, #0xc] +// bl DestroyMsgData +// ldr r0, [sp, #0x10] +// bl FreeToHeap +// mov r0, #0x0 +// bl OS_ResetSystem +// _0208ABC4: +// add sp, #0x24 +// pop {r4-r7, pc} +// .balign 4 +// _0208ABC8: .word sErrorMessagePrinterLock +// _0208ABCC: .word UNK_020FF4A4 +// _0208ABD0: .word FUN_0208A998 +// _0208ABD4: .word 0xFFFFE0FF +// _0208ABD8: .word 0x04001000 +// _0208ABDC: .word gMain + 0x60 +// _0208ABE0: .word 0x04000050 +// _0208ABE4: .word 0x04001050 +// _0208ABE8: .word 0xFFFF1FFF +// _0208ABEC: .word UNK_020FF4D8 +// _0208ABF0: .word UNK_020FF4AC +// _0208ABF4: .word UNK_020FF4BC +// _0208ABF8: .word 0x000001F7 +// _0208ABFC: .word 0x00006C21 +// _0208AC00: .word UNK_020FF49C +// _0208AC04: .word 0x04000130 +// _0208AC08: .word 0x027FFFA8 +// _0208AC0C: .word 0x00002FFF +// _0208AC10: .word 0x00007FFF + +THUMB_FUNC void PrintErrorMessageAndReset() { + + struct StructPrintErrorMessage { + u32 *unk00; + u32 unk04[4]; + } data; + + if (sErrorMessagePrinterLock != 1) { + sErrorMessagePrinterLock = 1; + OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); + OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); + + + FUN_020166C8(UNK_020FF4A4, 1, 1, 0); + FUN_0200E3A0(PM_LCD_TOP,0); + FUN_0200E3A0(PM_LCD_BOTTOM,0); + + OS_DisableIrqMask(1); + OS_SetIrqFunction(1, &FUN_0208A998); + OS_EnableIrqMask(1); + + + Main_SetVBlankIntrCB(NULL, NULL); + + FUN_02015F34(NULL, NULL); + FUN_0201E6D8(); + FUN_0201E740(); + + + reg_GX_DISPCNT &= 0xFFFFE0FF; + reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; + + FUN_0201669C(4, 8); + + + gMain.unk65 = 0; + FUN_0201E7A0(); + + + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= 0xFFFF1FFF; + reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; + + FUN_0201E66C(UNK_020FF4D8); + data.unk00 = FUN_02016B94(0); + FUN_02016BBC(UNK_020FF4AC); + + FUN_02016C18(data.unk00, 0, UNK_020FF4BC, 0); + FUN_02018744(data.unk00, 0); + + FUN_0200CB00(data.unk00, 0, 503, 2, 0, param5); // don't match + + + FUN_02002ED0(0, 0x20, 0); + FUN_02017F18(0, 0x20, 0, 0); + FUN_02017FE4(0, 0x6C21); + FUN_02017FE4(4, 0x6C21); + + struct MsgData *msg_data = NewMsgDataFromNarc(1, 0x1a, 0xc8, 0); + struct String *str = String_ctor(6 << 6, 0); + + FUN_0201BD5C(); + FUN_02019150(data.unk00, data.unk04, UNK_020FF49C); + FUN_020196F4(data.unk04, 15, 0, 0, 0xd0, 0x90); + FUN_0200CCA4(data.unk04, 0, 0x1f7, 2); + + ReadMsgDataIntoString(msg_data, 3, str); + + AddTextPrinterParameterized((u32)data.unk04, 0, (const u16 *)str, 0, 0, 0, NULL); + + String_dtor(str); + FUN_0201E788(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3f, 3); + FUN_02032DAC(); + + lid:HandleDSLidAction(); + FUN_0202FB80(); + if (!FUN_02033678()) { + OS_WaitIrq(1, 1); + goto lid; + } + + + lid2:HandleDSLidAction(); + if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) { + OS_WaitIrq(1,1); + goto lid2; + } + + + FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); + FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); + + FUN_02019178(data.unk04); + + DestroyMsgData(msg_data); + FreeToHeap(data.unk00); + + OS_ResetSystem(0); + } +} \ No newline at end of file -- cgit v1.2.3 From b43341ac3b516d02b07ca8b03b961cceb3026f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 21 Mar 2021 17:31:49 +0100 Subject: match unk_0208A998 --- arm9/arm9.lsf | 1 - arm9/asm/unk_0208A998.s | 13 -- arm9/src/unk_0208A998.c | 146 ++++++++++++++++ arm9/src/unk_0208A998_c.c | 414 ---------------------------------------------- include/unk_0208A998.h | 39 +++++ 5 files changed, 185 insertions(+), 428 deletions(-) delete mode 100644 arm9/asm/unk_0208A998.s create mode 100644 arm9/src/unk_0208A998.c delete mode 100644 arm9/src/unk_0208A998_c.c create mode 100644 include/unk_0208A998.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 7741c6d8..1b6a6d66 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -317,7 +317,6 @@ Static arm9 Object unk_0208A258.o Object unk_0208A300.o Object unk_0208A338.o - Object unk_0208A998_c.o Object unk_0208A998.o ### Third-party libraries ### Object unk_0208AC14.o diff --git a/arm9/asm/unk_0208A998.s b/arm9/asm/unk_0208A998.s deleted file mode 100644 index b63ba6d5..00000000 --- a/arm9/asm/unk_0208A998.s +++ /dev/null @@ -1,13 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern gMain - - .section .rodata - - - .section .bss - .text - - - diff --git a/arm9/src/unk_0208A998.c b/arm9/src/unk_0208A998.c new file mode 100644 index 00000000..2112fbd1 --- /dev/null +++ b/arm9/src/unk_0208A998.c @@ -0,0 +1,146 @@ +#include "unk_0208A998.h" + +const u32 UNK_020FF49C[2] = { 0x1a030300, 0x00230112 }; + +const u32 UNK_020FF4A4[2] = { 0x00020000, 0x00000000 }; + +const struct GraphicsModes UNK_020FF4AC = { mode1 : 1 }; + +const u32 UNK_020FF4BC[7] = { 0x00, 0x00, 0x0800, 0x00, 0x06000001, 0x0100, 0x00 }; + +const struct GraphicsBanks UNK_020FF4D8 = { bg : 3 }; + +u32 sErrorMessagePrinterLock; + +extern void FUN_0200E3A0(PMLCDTarget, int); +extern void FUN_0201E6D8(); +extern void FUN_0201E7A0(); +extern void FUN_0201E66C(const struct GraphicsBanks *banks); +extern u32 *FUN_02016B94(u32 param0); +extern void FUN_02016BBC(const struct GraphicsModes *modes); +extern void FUN_02016C18(u32 *param0, u32 param1, void *param2, u32 param3); +extern void FUN_02018744(u32 *param0, u32 param1); +extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); +extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); +extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); +extern void FUN_02017FE4(u32 param0, u32 param1); +extern void FUN_02019150(u32 *param0, u32 *param1, const u32 *param2); +extern void FUN_020196F4(u32 *, u8, u16, u16, u16, u16); +extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); +extern void FUN_0201E788(); +extern void FUN_0200E394(u32 param0); +extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); +extern BOOL FUN_02032DAC(void); +extern BOOL FUN_0202FB80(void); +extern BOOL FUN_02033678(void); +extern void FUN_02019178(u32 *param0); +extern void FUN_0201E740(); + +THUMB_FUNC void FUN_0208A998() +{ + *(vu32 *)HW_INTR_CHECK_BUF |= 1; + + MI_WaitDma(3); +} + +THUMB_FUNC void PrintErrorMessageAndReset() +{ + + u32 *ptr; + u32 buf[4]; + + if (sErrorMessagePrinterLock != 1) + { + sErrorMessagePrinterLock = 1; + OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); + OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); + + FUN_020166C8((u32 *)UNK_020FF4A4, 1, 1, 0); + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + OS_DisableIrqMask(1); + OS_SetIrqFunction(1, &FUN_0208A998); + OS_EnableIrqMask(1); + + Main_SetVBlankIntrCB(NULL, NULL); + + FUN_02015F34(NULL, NULL); + FUN_0201E6D8(); + FUN_0201E740(); + + reg_GX_DISPCNT &= 0xFFFFE0FF; + reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; + + FUN_0201669C(4, 8); + + gMain.unk65 = 0; + FUN_0201E7A0(); + + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= 0xFFFF1FFF; + reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; + + FUN_0201E66C(&UNK_020FF4D8); + ptr = FUN_02016B94(0); + FUN_02016BBC(&UNK_020FF4AC); + + FUN_02016C18(ptr, 0, UNK_020FF4BC, 0); + FUN_02018744(ptr, 0); + + FUN_0200CB00(ptr, 0, 503, 2, 0, 0); + + FUN_02002ED0(0, 0x20, 0); + FUN_02017F18(0, 0x20, 0, 0); + FUN_02017FE4(0, 0x6C21); + FUN_02017FE4(4, 0x6C21); + + struct MsgData *msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0xc8, 0); + struct String *str = String_ctor(6 << 6, 0); + + FUN_0201BD5C(); + FUN_02019150(ptr, buf, UNK_020FF49C); + FUN_020196F4(buf, 15, 0, 0, 0xd0, 0x90); + FUN_0200CCA4(buf, 0, 0x1f7, 2); + + ReadMsgDataIntoString(msg_data, 3, str); + + AddTextPrinterParameterized((u32)buf, 0, (const u16 *)str, 0, 0, 0, NULL); // wtf + + String_dtor(str); + FUN_0201E788(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3f, 3); + FUN_02032DAC(); + + lid: + HandleDSLidAction(); + FUN_0202FB80(); + if (!FUN_02033678()) + { + OS_WaitIrq(1, 1); + goto lid; + } + + + lid2: + HandleDSLidAction(); + if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) + { + OS_WaitIrq(1, 1); + goto lid2; + } + + FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); + FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); + + FUN_02019178(buf); + + DestroyMsgData(msg_data); + FreeToHeap(ptr); + + OS_ResetSystem(0); + } +} \ No newline at end of file diff --git a/arm9/src/unk_0208A998_c.c b/arm9/src/unk_0208A998_c.c deleted file mode 100644 index bbff614b..00000000 --- a/arm9/src/unk_0208A998_c.c +++ /dev/null @@ -1,414 +0,0 @@ -#include "global.h" -#include "heap.h" -#include "SPI_pm.h" -#include "game_init.h" -#include "msgdata.h" -#include "text.h" - - -const u8 UNK_020FF49C[8] = {0x00, 0x03, 0x03, 0x1a, 0x12, 0x01, 0x23, 0x00}; - -const u8 UNK_020FF4A4[8] = {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}; - - - - -const u8 UNK_020FF4AC[16] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00}; - - -const u8 UNK_020FF4BC[28] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - - -const u8 UNK_020FF4D8[40] = { - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -u32 sErrorMessagePrinterLock; - - -extern void FUN_0200E3A0(PMLCDTarget, int); -extern void FUN_0201E6D8(); -extern void FUN_0201E7A0(); -extern void FUN_0201E66C(u32 *param0); -extern u32 FUN_02016B94(u32 param0); -extern void FUN_02016BBC(u32 *param0); -extern void FUN_02016C18(u32 param0, u32 param1, u32 *param2, u32 param3); -extern void FUN_02018744(u32 param0, u32 param1); -extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); -extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); -extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); -extern void FUN_02017FE4(u32 param0, u32 param1); -extern void FUN_02019150(u32 param0, u32 *param1, u32 *param2); -extern void FUN_020196F4(u32 *param0, u32 param1, u32 param2, u32 param3, u32 param4, u32 param5); -extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); -extern void FUN_0201E788(); -extern void FUN_0200E394(u32 param0); -extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); -extern void FUN_02032DAC(); -extern BOOL FUN_0202FB80(void); -extern BOOL FUN_02033678(void); -extern void FUN_02019178(u32 *param0); -extern void FUN_0201E740(); - - - - -THUMB_FUNC void FUN_0208A998() { - *(vu32 *)HW_INTR_CHECK_BUF |= 1; - - MI_WaitDma(3); -} - - - - -// thumb_func_start PrintErrorMessageAndReset -// PrintErrorMessageAndReset: ; 0x0208A9B8 -// push {r4-r7, lr} -// sub sp, #0x24 -// ldr r0, _0208ABC8 ; =sErrorMessagePrinterLock -// ldr r1, [r0, #0x0] -// cmp r1, #0x1 -// bne _0208A9C6 -// b _0208ABC4 -// _0208A9C6: -// mov r1, #0x1 -// str r1, [r0, #0x0] -// mov r0, #0x0 -// bl OS_GetInitArenaHi -// add r1, r0, #0x0 -// mov r0, #0x0 -// bl OS_SetArenaHi -// mov r0, #0x0 -// bl OS_GetInitArenaLo -// add r1, r0, #0x0 -// mov r0, #0x0 -// bl OS_SetArenaLo -// mov r1, #0x1 -// ldr r0, _0208ABCC ; =UNK_020FF4A4 -// add r2, r1, #0x0 -// mov r3, #0x0 -// bl FUN_020166C8 -// mov r0, #0x0 -// add r1, r0, #0x0 -// bl FUN_0200E3A0 -// mov r0, #0x1 -// mov r1, #0x0 -// bl FUN_0200E3A0 -// mov r0, #0x1 -// bl OS_DisableIrqMask -// ldr r1, _0208ABD0 ; =FUN_0208A998 -// mov r0, #0x1 -// bl OS_SetIrqFunction -// mov r0, #0x1 -// bl OS_EnableIrqMask -// mov r0, #0x0 -// add r1, r0, #0x0 -// bl Main_SetVBlankIntrCB -// mov r0, #0x0 -// add r1, r0, #0x0 -// bl FUN_02015F34 -// bl FUN_0201E6D8 -// bl FUN_0201E740 -// mov r2, #0x1 -// lsl r2, r2, #0x1a -// ldr r1, [r2, #0x0] -// ldr r0, _0208ABD4 ; =0xFFFFE0FF -// and r1, r0 -// str r1, [r2, #0x0] -// ldr r2, _0208ABD8 ; =0x04001000 -// ldr r1, [r2, #0x0] -// and r0, r1 -// str r0, [r2, #0x0] -// mov r0, #0x4 -// mov r1, #0x8 -// bl FUN_0201669C -// ldr r0, _0208ABDC ; =gMain + 0x60 -// mov r1, #0x0 -// strb r1, [r0, #0x5] -// bl FUN_0201E7A0 -// ldr r3, _0208ABE0 ; =0x04000050 -// mov r0, #0x0 -// strh r0, [r3, #0x0] -// ldr r2, _0208ABE4 ; =0x04001050 -// sub r3, #0x50 -// strh r0, [r2, #0x0] -// ldr r1, [r3, #0x0] -// ldr r0, _0208ABE8 ; =0xFFFF1FFF -// sub r2, #0x50 -// and r1, r0 -// str r1, [r3, #0x0] -// ldr r1, [r2, #0x0] -// and r0, r1 -// str r0, [r2, #0x0] -// ldr r0, _0208ABEC ; =UNK_020FF4D8 -// bl FUN_0201E66C -// mov r0, #0x0 -// bl FUN_02016B94 -// str r0, [sp, #0x10] -// ldr r0, _0208ABF0 ; =UNK_020FF4AC -// bl FUN_02016BBC -// mov r1, #0x0 -// ldr r0, [sp, #0x10] -// ldr r2, _0208ABF4 ; =UNK_020FF4BC -// add r3, r1, #0x0 -// bl FUN_02016C18 -// ldr r0, [sp, #0x10] -// mov r1, #0x0 -// bl FUN_02018744 -// mov r1, #0x0 -// str r1, [sp, #0x0] -// ldr r0, [sp, #0x10] -// ldr r2, _0208ABF8 ; =0x000001F7 -// mov r3, #0x2 -// str r1, [sp, #0x4] -// bl FUN_0200CB00 -// mov r0, #0x0 -// mov r1, #0x20 -// add r2, r0, #0x0 -// bl FUN_02002ED0 -// mov r0, #0x0 -// mov r1, #0x20 -// add r2, r0, #0x0 -// add r3, r0, #0x0 -// bl FUN_02017F18 -// ldr r1, _0208ABFC ; =0x00006C21 -// mov r0, #0x0 -// bl FUN_02017FE4 -// ldr r1, _0208ABFC ; =0x00006C21 -// mov r0, #0x4 -// bl FUN_02017FE4 -// mov r0, #0x1 -// mov r1, #0x1a -// mov r2, #0xc8 -// mov r3, #0x0 -// bl NewMsgDataFromNarc -// str r0, [sp, #0xc] -// mov r0, #0x6 -// lsl r0, r0, #0x6 -// mov r1, #0x0 -// bl String_ctor -// add r4, r0, #0x0 -// bl FUN_0201BD5C -// ldr r0, [sp, #0x10] -// ldr r2, _0208AC00 ; =UNK_020FF49C -// add r1, sp, #0x14 -// bl FUN_02019150 -// mov r0, #0xd0 -// str r0, [sp, #0x0] -// mov r0, #0x90 -// mov r2, #0x0 -// str r0, [sp, #0x4] -// add r0, sp, #0x14 -// mov r1, #0xf -// add r3, r2, #0x0 -// bl FUN_020196F4 -// ldr r2, _0208ABF8 ; =0x000001F7 -// add r0, sp, #0x14 -// mov r1, #0x0 -// mov r3, #0x2 -// bl FUN_0200CCA4 -// ldr r0, [sp, #0xc] -// mov r1, #0x3 -// add r2, r4, #0x0 -// bl ReadMsgDataIntoString -// mov r1, #0x0 -// str r1, [sp, #0x0] -// str r1, [sp, #0x4] -// add r0, sp, #0x14 -// add r2, r4, #0x0 -// add r3, r1, #0x0 -// str r1, [sp, #0x8] -// bl AddTextPrinterParameterized -// add r0, r4, #0x0 -// bl String_dtor -// bl FUN_0201E788 -// mov r0, #0x0 -// bl FUN_0200E394 -// mov r0, #0x1 -// bl FUN_0200E394 -// mov r0, #0x0 -// mov r1, #0x3f -// mov r2, #0x3 -// bl FUN_0200A274 -// bl FUN_02032DAC -// mov r4, #0x1 -// _0208AB58: -// bl HandleDSLidAction -// bl FUN_0202FB80 -// bl FUN_02033678 -// cmp r0, #0x0 -// bne _0208AB72 -// add r0, r4, #0x0 -// add r1, r4, #0x0 -// bl OS_WaitIrq -// b _0208AB58 -// _0208AB72: -// ldr r5, _0208AC04 ; =0x04000130 -// ldr r4, _0208AC08 ; =0x027FFFA8 -// ldr r7, _0208AC0C ; =0x00002FFF -// mov r6, #0x1 -// _0208AB7A: -// bl HandleDSLidAction -// ldrh r1, [r5, #0x0] -// ldrh r0, [r4, #0x0] -// orr r1, r0 -// ldr r0, _0208AC0C ; =0x00002FFF -// eor r0, r1 -// and r0, r7 -// lsl r0, r0, #0x10 -// lsr r0, r0, #0x10 -// tst r0, r6 -// bne _0208AB9C -// mov r0, #0x1 -// add r1, r0, #0x0 -// bl OS_WaitIrq -// b _0208AB7A -// _0208AB9C: -// ldr r1, _0208AC10 ; =0x00007FFF -// mov r0, #0x0 -// bl FUN_0200E3A0 -// ldr r1, _0208AC10 ; =0x00007FFF -// mov r0, #0x1 -// bl FUN_0200E3A0 -// add r0, sp, #0x14 -// bl FUN_02019178 -// ldr r0, [sp, #0xc] -// bl DestroyMsgData -// ldr r0, [sp, #0x10] -// bl FreeToHeap -// mov r0, #0x0 -// bl OS_ResetSystem -// _0208ABC4: -// add sp, #0x24 -// pop {r4-r7, pc} -// .balign 4 -// _0208ABC8: .word sErrorMessagePrinterLock -// _0208ABCC: .word UNK_020FF4A4 -// _0208ABD0: .word FUN_0208A998 -// _0208ABD4: .word 0xFFFFE0FF -// _0208ABD8: .word 0x04001000 -// _0208ABDC: .word gMain + 0x60 -// _0208ABE0: .word 0x04000050 -// _0208ABE4: .word 0x04001050 -// _0208ABE8: .word 0xFFFF1FFF -// _0208ABEC: .word UNK_020FF4D8 -// _0208ABF0: .word UNK_020FF4AC -// _0208ABF4: .word UNK_020FF4BC -// _0208ABF8: .word 0x000001F7 -// _0208ABFC: .word 0x00006C21 -// _0208AC00: .word UNK_020FF49C -// _0208AC04: .word 0x04000130 -// _0208AC08: .word 0x027FFFA8 -// _0208AC0C: .word 0x00002FFF -// _0208AC10: .word 0x00007FFF - -THUMB_FUNC void PrintErrorMessageAndReset() { - - struct StructPrintErrorMessage { - u32 *unk00; - u32 unk04[4]; - } data; - - if (sErrorMessagePrinterLock != 1) { - sErrorMessagePrinterLock = 1; - OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); - OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); - - - FUN_020166C8(UNK_020FF4A4, 1, 1, 0); - FUN_0200E3A0(PM_LCD_TOP,0); - FUN_0200E3A0(PM_LCD_BOTTOM,0); - - OS_DisableIrqMask(1); - OS_SetIrqFunction(1, &FUN_0208A998); - OS_EnableIrqMask(1); - - - Main_SetVBlankIntrCB(NULL, NULL); - - FUN_02015F34(NULL, NULL); - FUN_0201E6D8(); - FUN_0201E740(); - - - reg_GX_DISPCNT &= 0xFFFFE0FF; - reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; - - FUN_0201669C(4, 8); - - - gMain.unk65 = 0; - FUN_0201E7A0(); - - - reg_G2_BLDCNT = 0; - reg_G2S_DB_BLDCNT = 0; - reg_GX_DISPCNT &= 0xFFFF1FFF; - reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; - - FUN_0201E66C(UNK_020FF4D8); - data.unk00 = FUN_02016B94(0); - FUN_02016BBC(UNK_020FF4AC); - - FUN_02016C18(data.unk00, 0, UNK_020FF4BC, 0); - FUN_02018744(data.unk00, 0); - - FUN_0200CB00(data.unk00, 0, 503, 2, 0, param5); // don't match - - - FUN_02002ED0(0, 0x20, 0); - FUN_02017F18(0, 0x20, 0, 0); - FUN_02017FE4(0, 0x6C21); - FUN_02017FE4(4, 0x6C21); - - struct MsgData *msg_data = NewMsgDataFromNarc(1, 0x1a, 0xc8, 0); - struct String *str = String_ctor(6 << 6, 0); - - FUN_0201BD5C(); - FUN_02019150(data.unk00, data.unk04, UNK_020FF49C); - FUN_020196F4(data.unk04, 15, 0, 0, 0xd0, 0x90); - FUN_0200CCA4(data.unk04, 0, 0x1f7, 2); - - ReadMsgDataIntoString(msg_data, 3, str); - - AddTextPrinterParameterized((u32)data.unk04, 0, (const u16 *)str, 0, 0, 0, NULL); - - String_dtor(str); - FUN_0201E788(); - FUN_0200E394(0); - FUN_0200E394(1); - FUN_0200A274(0, 0x3f, 3); - FUN_02032DAC(); - - lid:HandleDSLidAction(); - FUN_0202FB80(); - if (!FUN_02033678()) { - OS_WaitIrq(1, 1); - goto lid; - } - - - lid2:HandleDSLidAction(); - if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) { - OS_WaitIrq(1,1); - goto lid2; - } - - - FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); - FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); - - FUN_02019178(data.unk04); - - DestroyMsgData(msg_data); - FreeToHeap(data.unk00); - - OS_ResetSystem(0); - } -} \ No newline at end of file diff --git a/include/unk_0208A998.h b/include/unk_0208A998.h new file mode 100644 index 00000000..a3266398 --- /dev/null +++ b/include/unk_0208A998.h @@ -0,0 +1,39 @@ +#ifndef POKEDIAMOND_ERROR_MESSAGE_RESET_H +#define POKEDIAMOND_ERROR_MESSAGE_RESET_H + +#include "global.h" +#include "heap.h" +#include "SPI_pm.h" +#include "game_init.h" +#include "msgdata.h" +#include "text.h" + + + +struct GraphicsBanks +{ + s32 bg; + s32 bgextpltt; + s32 subbg; + s32 subbgextpltt; + s32 obj; + s32 objextpltt; + s32 subobj; + s32 subobjextpltt; + s32 tex; + s32 pltt; +}; + + +struct GraphicsModes { + u32 mode1; + u32 mode2; + u32 mode3; + u32 mode4; +}; + + +THUMB_FUNC void FUN_0208A998(); +THUMB_FUNC void PrintErrorMessageAndReset(); + +#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H \ No newline at end of file -- cgit v1.2.3 From bd4835f73f7e9f12eb8e3bf6ba2ca70edccd4c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 21 Mar 2021 19:21:39 +0100 Subject: rename --- arm9/arm9.lsf | 2 +- arm9/global.inc | 8 +-- arm9/src/error_message_reset.c | 146 +++++++++++++++++++++++++++++++++++++++++ arm9/src/unk_0208A998.c | 146 ----------------------------------------- include/error_message_reset.h | 39 +++++++++++ include/unk_0208A998.h | 39 ----------- 6 files changed, 187 insertions(+), 193 deletions(-) create mode 100644 arm9/src/error_message_reset.c delete mode 100644 arm9/src/unk_0208A998.c create mode 100644 include/error_message_reset.h delete mode 100644 include/unk_0208A998.h diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 1b6a6d66..9bd6cb07 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -317,7 +317,7 @@ Static arm9 Object unk_0208A258.o Object unk_0208A300.o Object unk_0208A338.o - Object unk_0208A998.o + Object error_message_reset.o ### Third-party libraries ### Object unk_0208AC14.o Object custom_allocator.o diff --git a/arm9/global.inc b/arm9/global.inc index eb2a9be3..d269aed4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -8518,10 +8518,4 @@ .extern CARDi_InitCommon .extern MonNotFaintedOrEgg .extern CountAlivePokemon -.extern UNK_020FF49C -.extern UNK_020FF4A4 -.extern UNK_020FF4AC -.extern UNK_020FF4BC -.extern UNK_020FF4D8 -.extern sErrorMessagePrinterLock -.extern FUN_0208A998 + diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c new file mode 100644 index 00000000..bbab7899 --- /dev/null +++ b/arm9/src/error_message_reset.c @@ -0,0 +1,146 @@ +#include "error_message_reset.h" + +const u32 UNK_020FF49C[2] = { 0x1a030300, 0x00230112 }; + +const u32 UNK_020FF4A4[2] = { 0x00020000, 0x00000000 }; + +const struct GraphicsModes UNK_020FF4AC = { mode1 : 1 }; + +const u32 UNK_020FF4BC[7] = { 0x00, 0x00, 0x0800, 0x00, 0x06000001, 0x0100, 0x00 }; + +const struct GraphicsBanks UNK_020FF4D8 = { bg : 3 }; + +u32 sErrorMessagePrinterLock; + +extern void FUN_0200E3A0(PMLCDTarget, int); +extern void FUN_0201E6D8(); +extern void FUN_0201E7A0(); +extern void FUN_0201E66C(const struct GraphicsBanks *banks); +extern u32 *FUN_02016B94(u32 param0); +extern void FUN_02016BBC(const struct GraphicsModes *modes); +extern void FUN_02016C18(u32 *param0, u32 param1, void *param2, u32 param3); +extern void FUN_02018744(u32 *param0, u32 param1); +extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); +extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); +extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); +extern void FUN_02017FE4(u32 param0, u32 param1); +extern void FUN_02019150(u32 *param0, u32 *param1, const u32 *param2); +extern void FUN_020196F4(u32 *, u8, u16, u16, u16, u16); +extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); +extern void FUN_0201E788(); +extern void FUN_0200E394(u32 param0); +extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); +extern BOOL FUN_02032DAC(void); +extern BOOL FUN_0202FB80(void); +extern BOOL FUN_02033678(void); +extern void FUN_02019178(u32 *param0); +extern void FUN_0201E740(); + +THUMB_FUNC void VBlankHandler() +{ + *(vu32 *)HW_INTR_CHECK_BUF |= 1; + + MI_WaitDma(3); +} + +THUMB_FUNC void PrintErrorMessageAndReset() +{ + + u32 *ptr; + u32 buf[4]; + + if (sErrorMessagePrinterLock != 1) + { + sErrorMessagePrinterLock = 1; + OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); + OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); + + FUN_020166C8((u32 *)UNK_020FF4A4, 1, 1, 0); + FUN_0200E3A0(PM_LCD_TOP, 0); + FUN_0200E3A0(PM_LCD_BOTTOM, 0); + + OS_DisableIrqMask(1); + OS_SetIrqFunction(1, &VBlankHandler); + OS_EnableIrqMask(1); + + Main_SetVBlankIntrCB(NULL, NULL); + + FUN_02015F34(NULL, NULL); + FUN_0201E6D8(); + FUN_0201E740(); + + reg_GX_DISPCNT &= 0xFFFFE0FF; + reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; + + FUN_0201669C(4, 8); + + gMain.unk65 = 0; + FUN_0201E7A0(); + + reg_G2_BLDCNT = 0; + reg_G2S_DB_BLDCNT = 0; + reg_GX_DISPCNT &= 0xFFFF1FFF; + reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; + + FUN_0201E66C(&UNK_020FF4D8); + ptr = FUN_02016B94(0); + FUN_02016BBC(&UNK_020FF4AC); + + FUN_02016C18(ptr, 0, UNK_020FF4BC, 0); + FUN_02018744(ptr, 0); + + FUN_0200CB00(ptr, 0, 503, 2, 0, 0); + + FUN_02002ED0(0, 0x20, 0); + FUN_02017F18(0, 0x20, 0, 0); + FUN_02017FE4(0, 0x6C21); + FUN_02017FE4(4, 0x6C21); + + struct MsgData *msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0xc8, 0); + struct String *str = String_ctor(6 << 6, 0); + + FUN_0201BD5C(); + FUN_02019150(ptr, buf, UNK_020FF49C); + FUN_020196F4(buf, 15, 0, 0, 0xd0, 0x90); + FUN_0200CCA4(buf, 0, 0x1f7, 2); + + ReadMsgDataIntoString(msg_data, 3, str); + + AddTextPrinterParameterized((u32)buf, 0, (const u16 *)str, 0, 0, 0, NULL); // wtf + + String_dtor(str); + FUN_0201E788(); + FUN_0200E394(0); + FUN_0200E394(1); + FUN_0200A274(0, 0x3f, 3); + FUN_02032DAC(); + + lid: + HandleDSLidAction(); + FUN_0202FB80(); + if (!FUN_02033678()) + { + OS_WaitIrq(1, 1); + goto lid; + } + + + lid2: + HandleDSLidAction(); + if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) + { + OS_WaitIrq(1, 1); + goto lid2; + } + + FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); + FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); + + FUN_02019178(buf); + + DestroyMsgData(msg_data); + FreeToHeap(ptr); + + OS_ResetSystem(0); + } +} \ No newline at end of file diff --git a/arm9/src/unk_0208A998.c b/arm9/src/unk_0208A998.c deleted file mode 100644 index 2112fbd1..00000000 --- a/arm9/src/unk_0208A998.c +++ /dev/null @@ -1,146 +0,0 @@ -#include "unk_0208A998.h" - -const u32 UNK_020FF49C[2] = { 0x1a030300, 0x00230112 }; - -const u32 UNK_020FF4A4[2] = { 0x00020000, 0x00000000 }; - -const struct GraphicsModes UNK_020FF4AC = { mode1 : 1 }; - -const u32 UNK_020FF4BC[7] = { 0x00, 0x00, 0x0800, 0x00, 0x06000001, 0x0100, 0x00 }; - -const struct GraphicsBanks UNK_020FF4D8 = { bg : 3 }; - -u32 sErrorMessagePrinterLock; - -extern void FUN_0200E3A0(PMLCDTarget, int); -extern void FUN_0201E6D8(); -extern void FUN_0201E7A0(); -extern void FUN_0201E66C(const struct GraphicsBanks *banks); -extern u32 *FUN_02016B94(u32 param0); -extern void FUN_02016BBC(const struct GraphicsModes *modes); -extern void FUN_02016C18(u32 *param0, u32 param1, void *param2, u32 param3); -extern void FUN_02018744(u32 *param0, u32 param1); -extern void FUN_0200CB00(u32 *param0, u32 param1, u32 param2, u32 param3, u8 param4, u32 param5); -extern void FUN_02002ED0(u32 param0, u32 param1, u32 param2); -extern void FUN_02017F18(u32 param0, u32 param1, u32 param2, u32 param3); -extern void FUN_02017FE4(u32 param0, u32 param1); -extern void FUN_02019150(u32 *param0, u32 *param1, const u32 *param2); -extern void FUN_020196F4(u32 *, u8, u16, u16, u16, u16); -extern void FUN_0200CCA4(u32 *param0, u32 param1, u32 param2, u32 param3); -extern void FUN_0201E788(); -extern void FUN_0200E394(u32 param0); -extern void FUN_0200A274(u32 param0, u32 param1, u32 param2); -extern BOOL FUN_02032DAC(void); -extern BOOL FUN_0202FB80(void); -extern BOOL FUN_02033678(void); -extern void FUN_02019178(u32 *param0); -extern void FUN_0201E740(); - -THUMB_FUNC void FUN_0208A998() -{ - *(vu32 *)HW_INTR_CHECK_BUF |= 1; - - MI_WaitDma(3); -} - -THUMB_FUNC void PrintErrorMessageAndReset() -{ - - u32 *ptr; - u32 buf[4]; - - if (sErrorMessagePrinterLock != 1) - { - sErrorMessagePrinterLock = 1; - OS_SetArenaHi(OS_ARENA_MAIN, OS_GetInitArenaHi(OS_ARENA_MAIN)); - OS_SetArenaLo(OS_ARENA_MAIN, OS_GetInitArenaLo(OS_ARENA_MAIN)); - - FUN_020166C8((u32 *)UNK_020FF4A4, 1, 1, 0); - FUN_0200E3A0(PM_LCD_TOP, 0); - FUN_0200E3A0(PM_LCD_BOTTOM, 0); - - OS_DisableIrqMask(1); - OS_SetIrqFunction(1, &FUN_0208A998); - OS_EnableIrqMask(1); - - Main_SetVBlankIntrCB(NULL, NULL); - - FUN_02015F34(NULL, NULL); - FUN_0201E6D8(); - FUN_0201E740(); - - reg_GX_DISPCNT &= 0xFFFFE0FF; - reg_GXS_DB_DISPCNT &= 0xFFFFE0FF; - - FUN_0201669C(4, 8); - - gMain.unk65 = 0; - FUN_0201E7A0(); - - reg_G2_BLDCNT = 0; - reg_G2S_DB_BLDCNT = 0; - reg_GX_DISPCNT &= 0xFFFF1FFF; - reg_GXS_DB_DISPCNT &= 0xFFFF1FFF; - - FUN_0201E66C(&UNK_020FF4D8); - ptr = FUN_02016B94(0); - FUN_02016BBC(&UNK_020FF4AC); - - FUN_02016C18(ptr, 0, UNK_020FF4BC, 0); - FUN_02018744(ptr, 0); - - FUN_0200CB00(ptr, 0, 503, 2, 0, 0); - - FUN_02002ED0(0, 0x20, 0); - FUN_02017F18(0, 0x20, 0, 0); - FUN_02017FE4(0, 0x6C21); - FUN_02017FE4(4, 0x6C21); - - struct MsgData *msg_data = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0xc8, 0); - struct String *str = String_ctor(6 << 6, 0); - - FUN_0201BD5C(); - FUN_02019150(ptr, buf, UNK_020FF49C); - FUN_020196F4(buf, 15, 0, 0, 0xd0, 0x90); - FUN_0200CCA4(buf, 0, 0x1f7, 2); - - ReadMsgDataIntoString(msg_data, 3, str); - - AddTextPrinterParameterized((u32)buf, 0, (const u16 *)str, 0, 0, 0, NULL); // wtf - - String_dtor(str); - FUN_0201E788(); - FUN_0200E394(0); - FUN_0200E394(1); - FUN_0200A274(0, 0x3f, 3); - FUN_02032DAC(); - - lid: - HandleDSLidAction(); - FUN_0202FB80(); - if (!FUN_02033678()) - { - OS_WaitIrq(1, 1); - goto lid; - } - - - lid2: - HandleDSLidAction(); - if (!((u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ 0x2FFF) & 0x2FFF) & 1)) - { - OS_WaitIrq(1, 1); - goto lid2; - } - - FUN_0200E3A0(PM_LCD_TOP, 0x7FFF); - FUN_0200E3A0(PM_LCD_BOTTOM, 0x7FFF); - - FUN_02019178(buf); - - DestroyMsgData(msg_data); - FreeToHeap(ptr); - - OS_ResetSystem(0); - } -} \ No newline at end of file diff --git a/include/error_message_reset.h b/include/error_message_reset.h new file mode 100644 index 00000000..90e70465 --- /dev/null +++ b/include/error_message_reset.h @@ -0,0 +1,39 @@ +#ifndef POKEDIAMOND_ERROR_MESSAGE_RESET_H +#define POKEDIAMOND_ERROR_MESSAGE_RESET_H + +#include "global.h" +#include "heap.h" +#include "SPI_pm.h" +#include "game_init.h" +#include "msgdata.h" +#include "text.h" + + + +struct GraphicsBanks +{ + s32 bg; + s32 bgextpltt; + s32 subbg; + s32 subbgextpltt; + s32 obj; + s32 objextpltt; + s32 subobj; + s32 subobjextpltt; + s32 tex; + s32 pltt; +}; + + +struct GraphicsModes { + u32 mode1; + u32 mode2; + u32 mode3; + u32 mode4; +}; + + +THUMB_FUNC void VBlankHandler(); +THUMB_FUNC void PrintErrorMessageAndReset(); + +#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H \ No newline at end of file diff --git a/include/unk_0208A998.h b/include/unk_0208A998.h deleted file mode 100644 index a3266398..00000000 --- a/include/unk_0208A998.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef POKEDIAMOND_ERROR_MESSAGE_RESET_H -#define POKEDIAMOND_ERROR_MESSAGE_RESET_H - -#include "global.h" -#include "heap.h" -#include "SPI_pm.h" -#include "game_init.h" -#include "msgdata.h" -#include "text.h" - - - -struct GraphicsBanks -{ - s32 bg; - s32 bgextpltt; - s32 subbg; - s32 subbgextpltt; - s32 obj; - s32 objextpltt; - s32 subobj; - s32 subobjextpltt; - s32 tex; - s32 pltt; -}; - - -struct GraphicsModes { - u32 mode1; - u32 mode2; - u32 mode3; - u32 mode4; -}; - - -THUMB_FUNC void FUN_0208A998(); -THUMB_FUNC void PrintErrorMessageAndReset(); - -#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H \ No newline at end of file -- cgit v1.2.3 From 3c89d769dca2795130747aae4f395fe5fc2ad888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sun, 21 Mar 2021 19:23:10 +0100 Subject: use headers --- arm9/global.inc | 1 - arm9/src/error_handling.c | 2 +- arm9/src/error_message_reset.c | 2 +- arm9/src/heap.c | 2 +- include/error_message_reset.h | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) diff --git a/arm9/global.inc b/arm9/global.inc index d269aed4..337d2c0c 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5478,7 +5478,6 @@ .extern FUN_0208A330 .extern FUN_0208A334 .extern FUN_0208A338 -.extern PrintErrorMessageAndReset .extern FUN_0208AC14 .extern FUN_0208AC58 .extern FUN_0208ACEC diff --git a/arm9/src/error_handling.c b/arm9/src/error_handling.c index 9052773f..a01894f6 100644 --- a/arm9/src/error_handling.c +++ b/arm9/src/error_handling.c @@ -1,8 +1,8 @@ #include "global.h" #include "error_handling.h" +#include "error_message_reset.h" extern u32 FUN_02031810(void); -extern void PrintErrorMessageAndReset(void); THUMB_FUNC void ErrorHandling(void) { diff --git a/arm9/src/error_message_reset.c b/arm9/src/error_message_reset.c index bbab7899..7d1caccb 100644 --- a/arm9/src/error_message_reset.c +++ b/arm9/src/error_message_reset.c @@ -143,4 +143,4 @@ THUMB_FUNC void PrintErrorMessageAndReset() OS_ResetSystem(0); } -} \ No newline at end of file +} diff --git a/arm9/src/heap.c b/arm9/src/heap.c index c27a40c0..84abc834 100644 --- a/arm9/src/heap.c +++ b/arm9/src/heap.c @@ -1,11 +1,11 @@ #include "heap.h" +#include "error_message_reset.h" extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2); extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2); extern void thunk_FUN_020adc8c(); extern void FUN_020ADDF0(void *ptr1, void *ptr2); extern u32 FUN_02031810(void); -extern void PrintErrorMessageAndReset(void); extern u32 FUN_020ADDC8(void *param0); extern void FUN_020AE82C(u32 param0, void *param1, u32 param2); extern u32 FUN_020ADDC0(void *param0); diff --git a/include/error_message_reset.h b/include/error_message_reset.h index 90e70465..d8542df5 100644 --- a/include/error_message_reset.h +++ b/include/error_message_reset.h @@ -36,4 +36,4 @@ struct GraphicsModes { THUMB_FUNC void VBlankHandler(); THUMB_FUNC void PrintErrorMessageAndReset(); -#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H \ No newline at end of file +#endif //POKEDIAMOND_ERROR_MESSAGE_RESET_H -- cgit v1.2.3