diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-11-01 11:12:39 -0600 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2020-11-01 11:12:39 -0600 |
commit | a0d2d8e9519a7cc9075950c5eec211008fbe0463 (patch) | |
tree | a857d250b33265a3c9f07d67b86b98ce36c559ae | |
parent | 90655520b3593915179c02e91f1d69cf3c26c252 (diff) |
some more work on decomping funcs
-rw-r--r-- | asm/code_8041AD0.s | 297 | ||||
-rw-r--r-- | asm/save.s | 85 | ||||
-rw-r--r-- | src/code_8041AD0.c | 179 | ||||
-rw-r--r-- | src/save_mid.c | 67 |
4 files changed, 245 insertions, 383 deletions
diff --git a/asm/code_8041AD0.s b/asm/code_8041AD0.s index c7ad98b..d33b9a6 100644 --- a/asm/code_8041AD0.s +++ b/asm/code_8041AD0.s @@ -5,303 +5,6 @@ .text - thumb_func_start sub_8041F08 -sub_8041F08: - push {lr} - sub sp, 0x8 - movs r1, 0x2 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x15 - movs r2, 0x1 - movs r3, 0x3 - bl sub_8041550 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_8041F08 - - thumb_func_start nullsub_90 -nullsub_90: - bx lr - thumb_func_end nullsub_90 - - thumb_func_start sub_8041F28 -sub_8041F28: - push {lr} - cmp r1, 0 - bne _08041F3A - movs r1, 0xCA - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _08041F42 -_08041F3A: - ldr r1, _08041F48 - movs r2, 0x1 - bl sub_804151C -_08041F42: - pop {r0} - bx r0 - .align 2, 0 -_08041F48: .4byte 0x00000193 - thumb_func_end sub_8041F28 - - thumb_func_start sub_8041F4C -sub_8041F4C: - push {lr} - cmp r1, 0 - bne _08041F60 - ldr r1, _08041F5C - movs r2, 0x1 - bl sub_804151C - b _08041F68 - .align 2, 0 -_08041F5C: .4byte 0x0000018f -_08041F60: - ldr r1, _08041F6C - movs r2, 0x1 - bl sub_804151C -_08041F68: - pop {r0} - bx r0 - .align 2, 0 -_08041F6C: .4byte 0x00000191 - thumb_func_end sub_8041F4C - - thumb_func_start sub_8041F70 -sub_8041F70: - push {lr} - cmp r1, 0 - bne _08041F84 - ldr r1, _08041F80 - movs r2, 0x1 - bl sub_804151C - b _08041F8E - .align 2, 0 -_08041F80: .4byte 0x000001a9 -_08041F84: - movs r1, 0xC9 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C -_08041F8E: - pop {r0} - bx r0 - thumb_func_end sub_8041F70 - - thumb_func_start sub_8041F94 -sub_8041F94: - push {lr} - cmp r1, 0 - bne _08041FA6 - movs r1, 0xC7 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _08041FB0 -_08041FA6: - movs r1, 0xC8 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C -_08041FB0: - pop {r0} - bx r0 - thumb_func_end sub_8041F94 - - thumb_func_start sub_8041FB4 -sub_8041FB4: - push {lr} - cmp r1, 0 - bne _08041FC8 - ldr r1, _08041FC4 - movs r2, 0x1 - bl sub_804151C - b _08041FD2 - .align 2, 0 -_08041FC4: .4byte 0x000001a9 -_08041FC8: - movs r1, 0xC9 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C -_08041FD2: - pop {r0} - bx r0 - thumb_func_end sub_8041FB4 - - thumb_func_start sub_8041FD8 -sub_8041FD8: - push {lr} - cmp r1, 0 - bne _08041FEA - movs r1, 0xCA - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _08041FF2 -_08041FEA: - ldr r1, _08041FF8 - movs r2, 0x1 - bl sub_804151C -_08041FF2: - pop {r0} - bx r0 - .align 2, 0 -_08041FF8: .4byte 0x00000193 - thumb_func_end sub_8041FD8 - - thumb_func_start sub_8041FFC -sub_8041FFC: - push {lr} - cmp r1, 0 - bne _0804200E - movs r1, 0xC7 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _08042018 -_0804200E: - movs r1, 0xC8 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C -_08042018: - pop {r0} - bx r0 - thumb_func_end sub_8041FFC - - thumb_func_start sub_804201C -sub_804201C: - push {lr} - cmp r1, 0 - bne _08042030 - ldr r1, _0804202C - movs r2, 0x1 - bl sub_804151C - b _08042038 - .align 2, 0 -_0804202C: .4byte 0x0000018f -_08042030: - ldr r1, _0804203C - movs r2, 0x1 - bl sub_804151C -_08042038: - pop {r0} - bx r0 - .align 2, 0 -_0804203C: .4byte 0x00000191 - thumb_func_end sub_804201C - - thumb_func_start sub_8042040 -sub_8042040: - push {lr} - cmp r1, 0 - bne _08042052 - movs r1, 0xC6 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _0804205A -_08042052: - movs r1, 0xD - movs r2, 0x1 - bl sub_804151C -_0804205A: - pop {r0} - bx r0 - thumb_func_end sub_8042040 - - thumb_func_start sub_8042060 -sub_8042060: - push {lr} - cmp r1, 0 - bne _08042074 - ldr r1, _08042070 - movs r2, 0x1 - bl sub_804151C - b _0804207C - .align 2, 0 -_08042070: .4byte 0x0000018d -_08042074: - movs r1, 0xE - movs r2, 0x1 - bl sub_804151C -_0804207C: - pop {r0} - bx r0 - thumb_func_end sub_8042060 - - thumb_func_start sub_8042080 -sub_8042080: - push {lr} - cmp r1, 0 - bne _08042092 - movs r1, 0xC6 - lsls r1, 1 - movs r2, 0x1 - bl sub_804151C - b _0804209A -_08042092: - movs r1, 0xD - movs r2, 0x1 - bl sub_804151C -_0804209A: - pop {r0} - bx r0 - thumb_func_end sub_8042080 - - thumb_func_start sub_80420A0 -sub_80420A0: - push {lr} - ldr r1, _080420B0 - movs r2, 0x1 - bl sub_804151C - pop {r0} - bx r0 - .align 2, 0 -_080420B0: .4byte 0x00000143 - thumb_func_end sub_80420A0 - - thumb_func_start nullsub_91 -nullsub_91: - bx lr - thumb_func_end nullsub_91 - - thumb_func_start sub_80420B8 -sub_80420B8: - push {lr} - movs r1, 0x19 - movs r2, 0x1 - bl sub_804151C - pop {r0} - bx r0 - thumb_func_end sub_80420B8 - - thumb_func_start sub_80420C8 -sub_80420C8: - push {lr} - sub sp, 0x8 - movs r1, 0x2 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x15 - movs r2, 0x1 - movs r3, 0x3 - bl sub_8041550 - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_80420C8 - - thumb_func_start nullsub_92 -nullsub_92: - bx lr - thumb_func_end nullsub_92 - thumb_func_start sub_80420E8 sub_80420E8: push {r4,lr} @@ -188,89 +188,4 @@ _080121CE: bx r1 thumb_func_end sub_801203C - thumb_func_start sub_80121D4 -sub_80121D4: - push {lr} - bl WriteSaveSector - pop {r1} - bx r1 - thumb_func_end sub_80121D4 - - thumb_func_start sub_80121E0 -sub_80121E0: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r6, 0x80 - lsls r6, 4 - adds r0, r6, 0 - movs r1, 0x5 - bl MemoryAlloc - adds r4, r0, 0 - movs r0, 0x1F - str r0, [sp] - str r5, [r4, 0x18] - bl sub_809769C - ldr r0, [r0] - str r0, [r4, 0x1C] - ldr r0, _0801223C - str r0, [r4, 0x14] - bl sub_8011C4C - adds r1, r0, 0 - adds r0, r4, 0x4 - movs r2, 0x10 - bl strncpy - adds r0, r4, 0 - adds r0, 0x20 - movs r1, 0 - bl sub_80958E4 - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl WriteSaveSector - adds r5, r0, 0 - adds r0, r4, 0 - bl MemoryFree - adds r0, r5, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0801223C: .4byte 0x05071412 - thumb_func_end sub_80121E0 - - thumb_func_start sub_8012240 -sub_8012240: - push {r4,r5,lr} - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - movs r1, 0x5 - bl MemoryAlloc - adds r5, r0, 0 - movs r1, 0xFF - movs r2, 0x4 - bl MemoryFill8 - bl sub_8011830 - movs r0, 0x1F - adds r1, r5, 0 - adds r2, r4, 0 - bl WriteFlashData - adds r4, r0, 0 - bl sub_8011854 - adds r0, r5, 0 - bl MemoryFree - cmp r4, 0 - bne _0801227A - movs r0, 0 - b _0801227C -_0801227A: - movs r0, 0x2 -_0801227C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8012240 - .align 2, 0 @ Don't pad with nop. diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index 6cf8ae0..be254ef 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -6,6 +6,13 @@ struct unkStruct_8041D5C u8 *unk70[100]; }; +struct unk_struct_8041F08 +{ + u32 unk0; + u32 unk4; +}; + + extern void sub_803ED30(u8, struct unkStruct_8041D5C *r0, u8, u8); extern void sub_804151C(u32 r0, u32 r1, u8 r2); extern void sub_80421C0(u32 r0, u32 r1); @@ -13,6 +20,8 @@ extern u8 sub_8042768(void); extern void sub_806CDD4(u32 r0, u8, u32); extern u8 sub_8071858(u32, u8); +extern void sub_8041550(u32 r0, u32, u32, u32); + void sub_8041AD0(u32 r0) { @@ -442,3 +451,173 @@ void sub_8041EF8(u32 r0) { sub_804151C(r0, 0xF, 1); } + +void sub_8041F08(u32 r0) +{ + volatile struct unk_struct_8041F08 temp; + temp.unk0 = 2; + temp.unk4 = 0; + sub_8041550(r0, 0x15, 1, 3); +} + +void nullsub_90(void) +{ +} + +void sub_8041F28(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xCA << 1, 1); + } + else + { + sub_804151C(r0, 0x193, 1); + } +} + +void sub_8041F4C(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0x18f, 1); + } + else + { + sub_804151C(r0, 0x191, 1); + } +} + +void sub_8041F70(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0x1a9, 1); + } + else + { + sub_804151C(r0, 0xC9 << 1, 1); + } +} + +void sub_8041F94(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xC7 << 1, 1); + } + else + { + sub_804151C(r0, 0xC8 << 1, 1); + } +} + +void sub_8041FB4(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0x1a9, 1); + } + else + { + sub_804151C(r0, 0xC9 << 1, 1); + } +} + +void sub_8041FD8(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xCA << 1, 1); + } + else + { + sub_804151C(r0, 0x193, 1); + } +} + +void sub_8041FFC(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xC7 << 1, 1); + } + else + { + sub_804151C(r0, 0xC8 << 1, 1); + } +} + +void sub_804201C(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0x18f, 1); + } + else + { + sub_804151C(r0, 0x191, 1); + } +} + +void sub_8042040(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xC6 << 1, 1); + } + else + { + sub_804151C(r0, 0xD, 1); + } +} + +void sub_8042060(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0x18d, 1); + } + else + { + sub_804151C(r0, 0xE, 1); + } +} + +void sub_8042080(u32 r0, u32 r1) +{ + if(r1 == 0) + { + sub_804151C(r0, 0xC6 << 1, 1); + } + else + { + sub_804151C(r0, 0xD, 1); + } +} + +void sub_80420A0(u32 r0, u32 r1) +{ + sub_804151C(r0, 0x143, 1); +} + +void nullsub_91(void) +{ +} + +void sub_80420B8(u32 r0, u32 r1) +{ + sub_804151C(r0, 0x19, 1); +} + +void sub_80420C8(u32 r0) +{ + volatile struct unk_struct_8041F08 temp; + temp.unk0 = 2; + temp.unk4 = 0; + sub_8041550(r0, 0x15, 1, 3); +} + +void nullsub_92(void) +{ +} diff --git a/src/save_mid.c b/src/save_mid.c index d401ec3..43f8aaf 100644 --- a/src/save_mid.c +++ b/src/save_mid.c @@ -10,6 +10,19 @@ struct unk_203B188 u32 unk4; }; +struct unk_struct +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + u32 padding[504]; +}; + extern struct unk_203B188 *gUnknown_203B188; extern u32 gUnknown_203B460; @@ -52,13 +65,21 @@ extern void sub_8097F74(void); extern void sub_8011C28(u32 r0); extern void sub_8011C40(s32 r0); extern void sub_8097748(void); -extern void sub_8012240(); extern void sub_8094FA8(struct unkTimeStruct *Time); // defined in src/code_8094F88.c extern struct unkTimeStruct *sub_8094FA0(void); extern void* MemoryAlloc(u32 a, u32 b); +extern void MemoryFree(void* a); +extern void MemoryFill8(u8 *dest, u8 value, s32 size); +extern void sub_8011830(void); +extern s32 WriteFlashData(s32 sector, u8 *src, s32 size); +extern void sub_8011854(void); +extern u32 *sub_809769C(void); +u32 *sub_8011C4C(void); +extern void sub_80958E4(u8 *a, u32 b); +extern s32 WriteSaveSector(s32 *a, u8 *src, s32 size); void sub_80122D0(); void sub_80122F4(); @@ -66,6 +87,50 @@ void sub_8012300(); void sub_80976A8(); void sub_80122A8(); +s32 sub_80121D4(s32 *a, u8 *src, s32 size) +{ + return WriteSaveSector(a, src, size); +} + +u32 sub_80121E0(u32 r0) +{ + u32 temp; + u32 *temp2; + u32 temp3; + struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); + temp = 0x1F; + + r4->unk18 = r0; + r4->unk1C = *sub_809769C(); + r4->unk14 = 0x5071412; + + temp2 = sub_8011C4C(); + strncpy((u8 *)r4 + 4, (u8*)temp2, 16); + sub_80958E4((u8 *)r4 + 32, 0); + temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); + MemoryFree(r4); + return temp3; +} + +u32 sub_8012240(void) +{ + s32 temp; + struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); + MemoryFill8((u8 *)r5, 0xFF, 0x4); + sub_8011830(); + temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct)); + sub_8011854(); + MemoryFree(r5); + if(temp != 0) + { + return 2; + } + else + { + return 0; + } +} + void sub_8012284(void) { sub_80122D0(); |