From 87a52afbb4b9a2cb8c29bde3078e9800198df084 Mon Sep 17 00:00:00 2001 From: red031000 Date: Sun, 1 Nov 2020 21:53:36 +0000 Subject: [PATCH] decompile MOD59_Init --- CMakeLists.txt | 2 +- arm9/arm9.lsf | 5 +- arm9/asm/unk_02087A6C.s | 2 +- arm9/global.inc | 2 +- ...{mod59_021D74E0.s => mod59_021D74E0_asm.s} | 63 ------------------- arm9/modules/59/include/mod59_021D74E0.h | 32 ++++++++++ arm9/modules/59/src/mod59_021D74E0_src.c | 29 +++++++++ .../src/{unk_02006234.c => overlay_manager.c} | 9 +-- include/main.h | 2 +- include/overlay_manager.h | 14 +++++ 10 files changed, 83 insertions(+), 77 deletions(-) rename arm9/modules/59/asm/{mod59_021D74E0.s => mod59_021D74E0_asm.s} (98%) create mode 100644 arm9/modules/59/include/mod59_021D74E0.h create mode 100644 arm9/modules/59/src/mod59_021D74E0_src.c rename arm9/src/{unk_02006234.c => overlay_manager.c} (78%) create mode 100644 include/overlay_manager.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c6a38a910..dc3f7fcce 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 d3eb80a06..fd44aa0d6 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 d51eab432..b343ac2c4 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 83745becf..ba5cc7bf4 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 similarity index 98% rename from arm9/modules/59/asm/mod59_021D74E0.s rename to arm9/modules/59/asm/mod59_021D74E0_asm.s index abc37879f..8358f7688 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 000000000..9342913da --- /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 000000000..9fccfd954 --- /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 similarity index 78% rename from arm9/src/unk_02006234.c rename to arm9/src/overlay_manager.c index a493311de..a59e15ac7 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 499861a8b..d40e22f94 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 000000000..c189ed3c5 --- /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