summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-11-01 23:10:27 +0100
committerGitHub <noreply@github.com>2020-11-01 23:10:27 +0100
commit1c1410976dd661f0fffa736c19fe62b54b4f6e4e (patch)
tree64c2a6003822c1ab59f04ae70ef5ce8b8a21b894
parent584260c2b3d07d56fcdcbbb0c72b141555000aeb (diff)
parent87a52afbb4b9a2cb8c29bde3078e9800198df084 (diff)
Merge pull request #301 from red031000/master
decompile MOD59_Init
-rw-r--r--CMakeLists.txt2
-rw-r--r--arm9/arm9.lsf5
-rw-r--r--arm9/asm/unk_02087A6C.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/59/asm/mod59_021D74E0_asm.s (renamed from arm9/modules/59/asm/mod59_021D74E0.s)63
-rw-r--r--arm9/modules/59/include/mod59_021D74E0.h32
-rw-r--r--arm9/modules/59/src/mod59_021D74E0_src.c29
-rw-r--r--arm9/src/overlay_manager.c (renamed from arm9/src/unk_02006234.c)9
-rw-r--r--include/main.h2
-rw-r--r--include/overlay_manager.h14
10 files changed, 83 insertions, 77 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c6a38a91..dc3f7fcc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -16,7 +16,7 @@ add_compile_options(-fms-extensions)
file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_SOURCE_DIR} "*.c" "*.cpp")
add_executable(PokeDiamond ${SOURCES})
-target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/63/include arm9/modules/05/include)
+target_include_directories(PokeDiamond PRIVATE include include-mw arm9/lib/include arm7/lib/include arm9/modules/05/include arm9/modules/59/include arm9/modules/63/include)
add_executable(calcrom .travis/calcrom/calcrom.cpp)
target_include_directories(calcrom PRIVATE /usr/local/include)
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index d3eb80a0..fd44aa0d 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -19,7 +19,7 @@ Static arm9
Object unk_02005CFC.o
Object poke_overlay.o
Object unk_020061E8.o
- Object unk_02006234.o
+ Object overlay_manager.o
Object filesystem.o
Object unk_02006864.o
Object unk_02006D98.o
@@ -940,7 +940,8 @@ Overlay MODULE_59
{
##Rowan's intro##
After arm9
- Object mod59_021D74E0.o
+ Object mod59_021D74E0_src.o
+ Object mod59_021D74E0_asm.o
Object mod59_021D9868.o
}
diff --git a/arm9/asm/unk_02087A6C.s b/arm9/asm/unk_02087A6C.s
index d51eab43..b343ac2c 100644
--- a/arm9/asm/unk_02087A6C.s
+++ b/arm9/asm/unk_02087A6C.s
@@ -5,7 +5,7 @@
.global UNK_020FD144
UNK_020FD144: ; 0x020FD144
- .word MOD59_021D74E0, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
+ .word MOD59_Init, MOD59_021D7564, MOD59_021D76C0, SDK_OVERLAY_MODULE_59_ID
.text
diff --git a/arm9/global.inc b/arm9/global.inc
index 83745bec..ba5cc7bf 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -7467,7 +7467,7 @@
.extern MOD58_021D9A20
.extern MOD58_021D9B8C
.extern MOD58_021D9BF0
-.extern MOD59_021D74E0
+.extern MOD59_Init
.extern MOD59_021D7564
.extern MOD59_021D76C0
.extern MOD59_021D9868
diff --git a/arm9/modules/59/asm/mod59_021D74E0.s b/arm9/modules/59/asm/mod59_021D74E0_asm.s
index abc37879..8358f768 100644
--- a/arm9/modules/59/asm/mod59_021D74E0.s
+++ b/arm9/modules/59/asm/mod59_021D74E0_asm.s
@@ -3,69 +3,6 @@
.section .text
.balign 4, 0
- thumb_func_start MOD59_021D74E0
-MOD59_021D74E0: ; 0x021D74E0
- push {r3, r4, r5, lr}
- mov r2, #1
- add r5, r0, #0
- mov r0, #3
- mov r1, #0x52
- lsl r2, r2, #0x12
- bl FUN_0201681C
- add r0, r5, #0
- mov r1, #0xb4
- mov r2, #0x52
- bl OverlayManager_CreateAndGetData
- mov r1, #0
- mov r2, #0xb4
- add r4, r0, #0
- bl memset
- mov r0, #0x52
- str r0, [r4]
- add r0, r5, #0
- bl OverlayManager_GetField18
- ldr r0, [r0, #8]
- str r0, [r4, #4]
- bl Sav2_PlayerData_GetOptionsAddr
- mov r1, #0
- str r0, [r4, #8]
- str r1, [r4, #0xc]
- str r1, [r4, #0x10]
- str r1, [r4, #0x14]
- ldr r0, [r4, #8]
- add r2, r1, #0
- str r0, [sp]
- mov r0, #0x52
- mov r3, #7
- bl FUN_02077A84
- str r0, [r4, #0x70]
- ldr r0, [r4, #8]
- mov r1, #3
- str r0, [sp]
- mov r0, #0x52
- mov r2, #0
- mov r3, #7
- bl FUN_02077A84
- str r0, [r4, #0x74]
- add r0, r4, #0
- mov r1, #0
- add r0, #0x88
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x89
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x8a
- strb r1, [r0]
- add r0, r4, #0
- add r0, #0x8b
- strb r1, [r0]
- add r4, #0x90
- str r1, [r4]
- mov r0, #1
- pop {r3, r4, r5, pc}
- thumb_func_end MOD59_021D74E0
-
thumb_func_start MOD59_021D7564
MOD59_021D7564: ; 0x021D7564
push {r3, r4, r5, r6, lr}
diff --git a/arm9/modules/59/include/mod59_021D74E0.h b/arm9/modules/59/include/mod59_021D74E0.h
new file mode 100644
index 00000000..9342913d
--- /dev/null
+++ b/arm9/modules/59/include/mod59_021D74E0.h
@@ -0,0 +1,32 @@
+#ifndef POKEDIAMOND_MOD59_021D74E0_H
+#define POKEDIAMOND_MOD59_021D74E0_H
+
+#include "nitro/types.h"
+#include "options.h"
+#include "save_block_2.h"
+#include "main.h"
+
+typedef struct MOD59_OverlayData
+{
+ u32 heap_id;
+ struct SaveBlock2 *sav2;
+ struct Options *options;
+ u32 Unk0C;
+ u32 Unk10;
+ u32 Unk14;
+ u8 padding[0x58];
+ u32 Unk70;
+ u32 Unk74;
+ u8 padding2[0x10];
+ u8 Unk88;
+ u8 Unk89;
+ u8 Unk8A;
+ u8 Unk8B;
+ u8 padding3[4];
+ u32 Unk90;
+ //TODO pad to 0xb4
+} MOD59_OverlayData;
+
+BOOL MOD59_Init(struct UnkStruct_02006234 *param0);
+
+#endif //POKEDIAMOND_MOD59_021D74E0_H
diff --git a/arm9/modules/59/src/mod59_021D74E0_src.c b/arm9/modules/59/src/mod59_021D74E0_src.c
new file mode 100644
index 00000000..9fccfd95
--- /dev/null
+++ b/arm9/modules/59/src/mod59_021D74E0_src.c
@@ -0,0 +1,29 @@
+#include "global.h"
+#include "player_data.h"
+#include "overlay_manager.h"
+#include "mod59_021D74E0.h"
+
+extern void FUN_0201681C(u32 param0, u32 heap_id, u32 param2);
+extern u32 FUN_02077A84(u32 heap_id, u32 param1, u32 param2, u32 param3, struct Options *options);
+
+THUMB_FUNC BOOL MOD59_Init(struct UnkStruct_02006234 *param0)
+{
+ //note: 0xb4 is likely the overlay data struct size, once struct is padded replace with sizeof
+ FUN_0201681C(3, 0x52, 1 << 18);
+ MOD59_OverlayData *data = (MOD59_OverlayData *) OverlayManager_CreateAndGetData(param0, 0xb4, 0x52);
+ (void)memset((void *)data, 0, 0xb4);
+
+ data->heap_id = 0x52;
+ int *field18 = OverlayManager_GetField18(param0);
+ data->sav2 = (struct SaveBlock2 *)field18[2]; //?
+ data->options = Sav2_PlayerData_GetOptionsAddr(data->sav2);
+ data->Unk14 = data->Unk10 = data->Unk0C = 0;
+ data->Unk70 = FUN_02077A84(0x52, 0, 0, 7, data->options);
+ data->Unk74 = FUN_02077A84(0x52, 3, 0, 7, data->options);
+ data->Unk88 = 0;
+ data->Unk89 = 0;
+ data->Unk8A = 0;
+ data->Unk8B = 0;
+ data->Unk90 = 0;
+ return TRUE;
+}
diff --git a/arm9/src/unk_02006234.c b/arm9/src/overlay_manager.c
index a493311d..a59e15ac 100644
--- a/arm9/src/unk_02006234.c
+++ b/arm9/src/overlay_manager.c
@@ -2,14 +2,7 @@
#include "main.h"
#include "poke_overlay.h"
#include "heap.h"
-
-struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id); //todo header?
-void OverlayManager_delete(struct UnkStruct_02006234 * a0);
-void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id);
-void * OverlayManager_GetData(struct UnkStruct_02006234 * a0);
-void OverlayManager_FreeData(struct UnkStruct_02006234 * a0);
-int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0);
-BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0);
+#include "overlay_manager.h"
THUMB_FUNC struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id)
{
diff --git a/include/main.h b/include/main.h
index 499861a8..d40e22f9 100644
--- a/include/main.h
+++ b/include/main.h
@@ -22,7 +22,7 @@ struct UnkStruct_02006234
u32 unk14;
int * unk18;
void * unk1C;
- u32 unk20;
+ struct SaveBlock2 * unk20;
u32 unk24;
};
diff --git a/include/overlay_manager.h b/include/overlay_manager.h
new file mode 100644
index 00000000..c189ed3c
--- /dev/null
+++ b/include/overlay_manager.h
@@ -0,0 +1,14 @@
+#ifndef POKEDIAMOND_OVERLAY_MANAGER_H
+#define POKEDIAMOND_OVERLAY_MANAGER_H
+
+#include "nitro/types.h"
+
+struct UnkStruct_02006234 * OverlayManager_new(struct Unk21DBE18 * ovly_mgr, int * a1, u32 heap_id);
+void OverlayManager_delete(struct UnkStruct_02006234 * a0);
+void * OverlayManager_CreateAndGetData(struct UnkStruct_02006234 * a0, u32 size, u32 heap_id);
+void * OverlayManager_GetData(struct UnkStruct_02006234 * a0);
+void OverlayManager_FreeData(struct UnkStruct_02006234 * a0);
+int * OverlayManager_GetField18(struct UnkStruct_02006234 * a0);
+BOOL OverlayManager_Run(struct UnkStruct_02006234 * a0);
+
+#endif //POKEDIAMOND_OVERLAY_MANAGER_H