Merge pull request #301 from red031000/master

decompile MOD59_Init
This commit is contained in:
red031000
2020-11-01 23:10:27 +01:00
committed by GitHub
10 changed files with 83 additions and 77 deletions
+1 -1
View File
@@ -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)
+3 -2
View File
@@ -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
}
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
@@ -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}
+32
View File
@@ -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
+29
View File
@@ -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;
}
@@ -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)
{
+1 -1
View File
@@ -22,7 +22,7 @@ struct UnkStruct_02006234
u32 unk14;
int * unk18;
void * unk1C;
u32 unk20;
struct SaveBlock2 * unk20;
u32 unk24;
};
+14
View File
@@ -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