summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSNBeast <snburchett@gmail.com>2021-07-08 20:17:54 -0400
committerSNBeast <snburchett@gmail.com>2021-07-08 20:17:54 -0400
commitd30bc8b08414a6a564b1d3fb9ba7b49eaa972844 (patch)
tree864dd6213bf2be8a351a4ec06ef7bbd87a383e8b
parent79d007487abb2706c42f2d01d74c8d8a41e6ac43 (diff)
Decompile unk_02022450.s
-rw-r--r--arm9/asm/unk_02022450.s94
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/83/asm/module_83.s2
-rw-r--r--arm9/src/game_init.c3
-rw-r--r--arm9/src/unk_02022450.c43
-rw-r--r--include/unk_02022450.h7
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