diff options
author | SNBeast <snburchett@gmail.com> | 2021-07-08 20:17:54 -0400 |
---|---|---|
committer | SNBeast <snburchett@gmail.com> | 2021-07-08 20:17:54 -0400 |
commit | d30bc8b08414a6a564b1d3fb9ba7b49eaa972844 (patch) | |
tree | 864dd6213bf2be8a351a4ec06ef7bbd87a383e8b | |
parent | 79d007487abb2706c42f2d01d74c8d8a41e6ac43 (diff) |
Decompile unk_02022450.s
-rw-r--r-- | arm9/asm/unk_02022450.s | 94 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/modules/83/asm/module_83.s | 2 | ||||
-rw-r--r-- | arm9/src/game_init.c | 3 | ||||
-rw-r--r-- | arm9/src/unk_02022450.c | 43 | ||||
-rw-r--r-- | include/unk_02022450.h | 7 |
6 files changed, 53 insertions, 98 deletions
diff --git a/arm9/asm/unk_02022450.s b/arm9/asm/unk_02022450.s deleted file mode 100644 index fd6aacb5..00000000 --- a/arm9/asm/unk_02022450.s +++ /dev/null @@ -1,94 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .section .rodata - - .global UNK_020EE6D4 -UNK_020EE6D4: ; 0x020EE6D4 - .asciz "rom" - - .text - - thumb_func_start FUN_02022450 -FUN_02022450: ; 0x02022450 - push {r3, lr} - bl FS_IsAvailable - cmp r0, #0x0 - bne _02022460 - bl OS_Terminate - pop {r3, pc} -_02022460: - ldr r0, _020224BC ; =0x027FF00C - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _0202248A - bl CARD_Init - mov r2, #0x16 - ldr r0, _020224C0 ; =0x027FFE00 - ldr r1, _020224C4 ; =0x027FF000 - lsl r2, r2, #0x4 - bl MI_CpuCopy8 - mov r2, #0x16 - ldr r0, _020224C0 ; =0x027FFE00 - ldr r1, _020224C8 ; =0x027FFA80 - lsl r2, r2, #0x4 - bl MI_CpuCopy8 - ldr r1, _020224CC ; =0x4A414441 - ldr r0, _020224BC ; =0x027FF00C - str r1, [r0, #0x0] -_0202248A: - ldr r0, _020224D0 ; =UNK_020EE6D4 - mov r1, #0x3 - bl FS_FindArchive - ldr r1, _020224C4 ; =0x027FF000 - ldr r2, [r1, #0x48] - str r2, [r0, #0x2c] - ldr r2, [r1, #0x4c] - str r2, [r0, #0x30] - ldr r2, [r1, #0x40] - str r2, [r0, #0x34] - ldr r2, [r1, #0x44] - str r2, [r0, #0x38] - ldr r2, [r1, #0xc] - ldr r0, _020224CC ; =0x4A414441 - cmp r2, r0 - bne _020224B4 - ldrh r1, [r1, #0x10] - ldr r0, _020224D4 ; =0x00003130 - cmp r1, r0 - beq _020224B8 -_020224B4: - bl OS_Terminate -_020224B8: - pop {r3, pc} - nop -_020224BC: .word 0x027FF00C -_020224C0: .word 0x027FFE00 -_020224C4: .word 0x027FF000 -_020224C8: .word 0x027FFA80 -_020224CC: .word 0x4A414441 -_020224D0: .word UNK_020EE6D4 -_020224D4: .word 0x00003130 - - thumb_func_start FUN_020224D8 -FUN_020224D8: ; 0x020224D8 - push {r4, lr} - sub sp, #0x48 - add r4, r0, #0x0 - add r0, sp, #0x0 - bl FS_InitFile - add r0, sp, #0x0 - add r1, r4, #0x0 - bl FS_OpenFile - cmp r0, #0x0 - beq _020224FC - ldr r1, [sp, #0x24] - ldr r0, _02022500 ; =0x027FFC2C - str r1, [r0, #0x0] - mov r0, #0x0 - bl OS_ResetSystem -_020224FC: - add sp, #0x48 - pop {r4, pc} - .balign 4 -_02022500: .word 0x027FFC2C diff --git a/arm9/global.inc b/arm9/global.inc index da12b3fd..53b4556c 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1425,7 +1425,7 @@ .extern FUN_02022318 .extern FUN_020223BC .extern FUN_02022450 -.extern FUN_020224D8 +.extern Reset_To_File .extern FUN_02022504 .extern GetStoragePCPointer .extern FUN_0202251C diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index d58de0be..06fa49b6 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -2334,7 +2334,7 @@ _0222E7F8: pop {r3, pc} _0222E802: ldr r0, _0222E840 ; =MOD83_0223A8C4 - bl FUN_020224D8 + bl Reset_To_File pop {r3, pc} _0222E80A: bl FUN_0200541C diff --git a/arm9/src/game_init.c b/arm9/src/game_init.c index 1c6098ea..020d4b75 100644 --- a/arm9/src/game_init.c +++ b/arm9/src/game_init.c @@ -7,6 +7,7 @@ #include "MWC_string.h" #include "tp.h" #include "unk_0201B4E8.h" +#include "unk_02022450.h" #include "game_init.h" #include "registers.h" #include "heap.h" @@ -14,8 +15,6 @@ #pragma thumb on -extern void FUN_02022450(void); - typedef volatile struct { u8 sys_and_irq_stack[0x3F80]; diff --git a/arm9/src/unk_02022450.c b/arm9/src/unk_02022450.c new file mode 100644 index 00000000..2c69342c --- /dev/null +++ b/arm9/src/unk_02022450.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "FS_file.h" +#include "OS_terminate_proc.h" +#include "CARD_rom.h" +#include "MI_memory.h" + +#include "unk_02022450.h" + +static const char string_saying_rom[] = "rom"; + +THUMB_FUNC void FUN_02022450 () { + if (!FS_IsAvailable()) { + OS_Terminate(); + } + else { + if (!*(u32*)0x027FF00C) { + CARD_Init(); + MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FF000, 22 * 16); + MI_CpuCopy8((u8*)0x027FFE00, (u8*)0x027FFA80, 22 * 16); + *(u32*)0x027FF00C = 0x4A414441; + } + FSArchive * const r0 = FS_FindArchive(string_saying_rom, 3); + u32 *r1 = (u32*)0x027FF000; + r0->fat = r1[18]; + r0->fat_size = r1[19]; + r0->fnt = r1[16]; + r0->fnt_size = r1[17]; + if (*(u32*)0x027FF00C != 0x4A414441 || *(u16*)0x027FF010 != 0x3130) { + OS_Terminate(); + } + } + return; +} + +THUMB_FUNC void Reset_To_File (const char* path) { + FSFile file; + FS_InitFile(&file); + if (FS_OpenFile(&file, path)) { + *(u32*)HW_ROM_BASE_OFFSET_BUF = file.prop.file.top; + OS_ResetSystem(0); + } + return; +} diff --git a/include/unk_02022450.h b/include/unk_02022450.h new file mode 100644 index 00000000..6228cc74 --- /dev/null +++ b/include/unk_02022450.h @@ -0,0 +1,7 @@ +#ifndef POKEDIAMOND_UNK_02022450_H +#define POKEDIAMOND_UNK_02022450_H + +void FUN_02022450(); +void Reset_To_File(const char* path); + +#endif //POKEDIAMOND_UNK_02022450_H |