diff options
author | red031000 <rubenru09@aol.com> | 2020-11-01 23:10:27 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-01 23:10:27 +0100 |
commit | 1c1410976dd661f0fffa736c19fe62b54b4f6e4e (patch) | |
tree | 64c2a6003822c1ab59f04ae70ef5ce8b8a21b894 | |
parent | 584260c2b3d07d56fcdcbbb0c72b141555000aeb (diff) | |
parent | 87a52afbb4b9a2cb8c29bde3078e9800198df084 (diff) |
Merge pull request #301 from red031000/master
decompile MOD59_Init
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | arm9/arm9.lsf | 5 | ||||
-rw-r--r-- | arm9/asm/unk_02087A6C.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-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.h | 32 | ||||
-rw-r--r-- | arm9/modules/59/src/mod59_021D74E0_src.c | 29 | ||||
-rw-r--r-- | arm9/src/overlay_manager.c (renamed from arm9/src/unk_02006234.c) | 9 | ||||
-rw-r--r-- | include/main.h | 2 | ||||
-rw-r--r-- | include/overlay_manager.h | 14 |
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 |