summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_8041AD0.s297
-rw-r--r--asm/save.s85
-rw-r--r--src/code_8041AD0.c179
-rw-r--r--src/save_mid.c67
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}
diff --git a/asm/save.s b/asm/save.s
index ddb9fdb..9f47bb3 100644
--- a/asm/save.s
+++ b/asm/save.s
@@ -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();