summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-10-17 01:44:34 -0700
committerYamaArashi <shadow962@live.com>2016-10-17 01:44:34 -0700
commitf13e7b91273e457279d3f06a6c5b606dc6f26d1b (patch)
tree3925e7180875d4ccd22d332a7409c8157986f580
parent94b9c6890ca6b6d59b99f43b5d06d5a0e8789a82 (diff)
decompile another save function
-rw-r--r--asm/rom_81258BC.s269
-rw-r--r--src/save.c131
2 files changed, 129 insertions, 271 deletions
diff --git a/asm/rom_81258BC.s b/asm/rom_81258BC.s
index c06f3f470..9a97d6983 100644
--- a/asm/rom_81258BC.s
+++ b/asm/rom_81258BC.s
@@ -6,275 +6,6 @@
.text
- thumb_func_start sub_8125974
-sub_8125974: @ 8125974
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- movs r0, 0
- mov r8, r0
- mov r9, r0
- movs r6, 0
- movs r5, 0
- movs r4, 0
- ldr r7, _08125A00
-_08125990:
- lsls r0, r4, 24
- lsrs r0, 24
- ldr r1, [r7]
- bl sub_8125BF8
- ldr r2, [r7]
- ldr r1, _08125A04
- adds r0, r2, r1
- ldr r1, [r0]
- ldr r0, _08125A08
- cmp r1, r0
- bne _081259E0
- movs r5, 0x1
- ldr r3, _08125A0C
- adds r0, r2, r3
- ldrh r0, [r0]
- lsls r0, 3
- add r0, r10
- ldrh r1, [r0, 0x4]
- adds r0, r2, 0
- bl sub_8125C10
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, [r7]
- ldr r3, _08125A10
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, r2
- bne _081259E0
- ldr r2, _08125A14
- adds r0, r1, r2
- ldr r0, [r0]
- mov r8, r0
- subs r3, 0x2
- adds r1, r3
- adds r0, r5, 0
- ldrh r1, [r1]
- lsls r0, r1
- orrs r6, r0
-_081259E0:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xD
- bls _08125990
- cmp r5, 0
- beq _08125A1C
- ldr r0, _08125A18
- movs r1, 0xFF
- str r1, [sp]
- cmp r6, r0
- bne _08125A20
- movs r2, 0x1
- str r2, [sp]
- b _08125A20
- .align 2, 0
-_08125A00: .4byte gUnknown_03005EB0
-_08125A04: .4byte 0x00000ff8
-_08125A08: .4byte 0x08012025 @ TODO: figure out what this represents
-_08125A0C: .4byte 0x00000ff4
-_08125A10: .4byte 0x00000ff6
-_08125A14: .4byte 0x00000ffc
-_08125A18: .4byte 0x00003fff
-_08125A1C:
- movs r3, 0
- str r3, [sp]
-_08125A20:
- movs r6, 0
- movs r5, 0
- movs r4, 0
- ldr r7, _08125A98
-_08125A28:
- adds r0, r4, 0
- adds r0, 0xE
- lsls r0, 24
- lsrs r0, 24
- ldr r1, [r7]
- bl sub_8125BF8
- ldr r2, [r7]
- ldr r1, _08125A9C
- adds r0, r2, r1
- ldr r1, [r0]
- ldr r0, _08125AA0
- cmp r1, r0
- bne _08125A7C
- movs r5, 0x1
- ldr r3, _08125AA4
- adds r0, r2, r3
- ldrh r0, [r0]
- lsls r0, 3
- add r0, r10
- ldrh r1, [r0, 0x4]
- adds r0, r2, 0
- bl sub_8125C10
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, [r7]
- ldr r3, _08125AA8
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, r2
- bne _08125A7C
- ldr r2, _08125AAC
- adds r0, r1, r2
- ldr r0, [r0]
- mov r9, r0
- subs r3, 0x2
- adds r1, r3
- adds r0, r5, 0
- ldrh r1, [r1]
- lsls r0, r1
- orrs r6, r0
-_08125A7C:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xD
- bls _08125A28
- cmp r5, 0
- beq _08125AB4
- ldr r0, _08125AB0
- movs r1, 0xFF
- cmp r6, r0
- bne _08125AB6
- movs r1, 0x1
- b _08125AB6
- .align 2, 0
-_08125A98: .4byte gUnknown_03005EB0
-_08125A9C: .4byte 0x00000ff8
-_08125AA0: .4byte 0x08012025 @ TODO: figure out what this represents
-_08125AA4: .4byte 0x00000ff4
-_08125AA8: .4byte 0x00000ff6
-_08125AAC: .4byte 0x00000ffc
-_08125AB0: .4byte 0x00003fff
-_08125AB4:
- movs r1, 0
-_08125AB6:
- ldr r0, [sp]
- cmp r0, 0x1
- bne _08125B28
- cmp r1, 0x1
- bne _08125B18
- movs r0, 0x1
- negs r0, r0
- cmp r8, r0
- bne _08125ACE
- mov r1, r9
- cmp r1, 0
- beq _08125AD8
-_08125ACE:
- mov r2, r8
- cmp r2, 0
- bne _08125AFC
- cmp r9, r0
- bne _08125AFC
-_08125AD8:
- mov r1, r8
- adds r1, 0x1
- mov r0, r9
- adds r0, 0x1
- cmp r1, r0
- bcs _08125AF0
- ldr r0, _08125AEC
- mov r3, r9
- b _08125B10
- .align 2, 0
-_08125AEC: .4byte gUnknown_03005EAC
-_08125AF0:
- ldr r0, _08125AF8
- mov r1, r8
- str r1, [r0]
- b _08125B40
- .align 2, 0
-_08125AF8: .4byte gUnknown_03005EAC
-_08125AFC:
- cmp r8, r9
- bcs _08125B0C
- ldr r0, _08125B08
- mov r2, r9
- str r2, [r0]
- b _08125B40
- .align 2, 0
-_08125B08: .4byte gUnknown_03005EAC
-_08125B0C:
- ldr r0, _08125B14
- mov r3, r8
-_08125B10:
- str r3, [r0]
- b _08125B40
- .align 2, 0
-_08125B14: .4byte gUnknown_03005EAC
-_08125B18:
- ldr r0, _08125B24
- mov r2, r8
- str r2, [r0]
- cmp r1, 0xFF
- beq _08125B38
- b _08125B40
- .align 2, 0
-_08125B24: .4byte gUnknown_03005EAC
-_08125B28:
- cmp r1, 0x1
- bne _08125B44
- ldr r0, _08125B3C
- mov r3, r9
- str r3, [r0]
- ldr r0, [sp]
- cmp r0, 0xFF
- bne _08125B40
-_08125B38:
- movs r0, 0xFF
- b _08125B70
- .align 2, 0
-_08125B3C: .4byte gUnknown_03005EAC
-_08125B40:
- movs r0, 0x1
- b _08125B70
-_08125B44:
- ldr r2, [sp]
- cmp r2, 0
- bne _08125B64
- cmp r1, 0
- bne _08125B64
- ldr r0, _08125B5C
- str r1, [r0]
- ldr r0, _08125B60
- strh r1, [r0]
- movs r0, 0
- b _08125B70
- .align 2, 0
-_08125B5C: .4byte gUnknown_03005EAC
-_08125B60: .4byte gUnknown_03005E9C
-_08125B64:
- ldr r0, _08125B80
- movs r1, 0
- str r1, [r0]
- ldr r0, _08125B84
- strh r1, [r0]
- movs r0, 0x2
-_08125B70:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08125B80: .4byte gUnknown_03005EAC
-_08125B84: .4byte gUnknown_03005E9C
- thumb_func_end sub_8125974
-
thumb_func_start sub_8125B88
sub_8125B88: @ 8125B88
push {r4-r6,lr}
diff --git a/src/save.c b/src/save.c
index decc75bcc..ba1951701 100644
--- a/src/save.c
+++ b/src/save.c
@@ -30,7 +30,8 @@ u8 sub_81252D8(u16, struct SaveSectionLocation *);
u8 sub_8125440(u8, u8 *);
u8 sub_81255B8(u16, struct SaveSectionLocation *);
u8 sub_81258BC(u16, struct SaveSectionLocation *);
-u8 sub_8125BF8(u8, u8 *);
+u8 sub_8125BF8(u8, struct SaveSection *);
+u8 sub_8125974(struct SaveSectionLocation *);
void calls_flash_erase_block(void)
{
@@ -359,7 +360,7 @@ u8 sub_81258BC(u16 a1, struct SaveSectionLocation *a2)
for (i = 0; i < 14; i++)
{
- sub_8125BF8(i + v3, gUnknown_03005EB0->data);
+ sub_8125BF8(i + v3, gUnknown_03005EB0);
id = gUnknown_03005EB0->id;
if (id == 0)
gUnknown_03005E9C = i;
@@ -375,3 +376,129 @@ u8 sub_81258BC(u16 a1, struct SaveSectionLocation *a2)
return 1;
}
+
+u8 sub_8125974(struct SaveSectionLocation *a1)
+{
+ u16 i;
+ u16 checksum;
+ u32 v2 = 0;
+ u32 v3 = 0;
+ u32 v4;
+ bool8 v5;
+ u8 v14;
+ u8 v10;
+
+ v4 = 0;
+ v5 = FALSE;
+
+ for (i = 0; i < 14; i++)
+ {
+ sub_8125BF8(i, gUnknown_03005EB0);
+ if (gUnknown_03005EB0->unknown == 0x8012025)
+ {
+ v5 = TRUE;
+ checksum = sub_8125C10(gUnknown_03005EB0->data, a1[gUnknown_03005EB0->id].size);
+ if (gUnknown_03005EB0->checksum == checksum)
+ {
+ v2 = gUnknown_03005EB0->counter;
+ v4 |= 1 << gUnknown_03005EB0->id;
+ }
+ }
+ }
+
+ if (v5)
+ {
+ if (v4 == 0x3FFF)
+ v14 = 1;
+ else
+ v14 = 255;
+ }
+ else
+ {
+ v14 = 0;
+ }
+
+ v4 = 0;
+ v5 = FALSE;
+
+ for (i = 0; i < 14; i++)
+ {
+ sub_8125BF8(i + 14, gUnknown_03005EB0);
+ if (gUnknown_03005EB0->unknown == 0x8012025)
+ {
+ v5 = TRUE;
+ checksum = sub_8125C10(gUnknown_03005EB0->data, a1[gUnknown_03005EB0->id].size);
+ if (gUnknown_03005EB0->checksum == checksum)
+ {
+ v3 = gUnknown_03005EB0->counter;
+ v4 |= 1 << gUnknown_03005EB0->id;
+ }
+ }
+ }
+
+ if (v5)
+ {
+ if (v4 == 0x3FFF)
+ v10 = 1;
+ else
+ v10 = 255;
+ }
+ else
+ {
+ v10 = 0;
+ }
+
+ if (v14 == 1 && v10 == 1)
+ {
+ if ((v2 == -1 && v3 == 0) || (v2 == 0 && v3 == -1))
+ {
+ if ((unsigned)(v2 + 1) < (unsigned)(v3 + 1))
+ {
+ gUnknown_03005EAC = v3;
+ }
+ else
+ {
+ gUnknown_03005EAC = v2;
+ }
+ }
+ else
+ {
+ if (v2 < v3)
+ {
+ gUnknown_03005EAC = v3;
+ }
+ else
+ {
+ gUnknown_03005EAC = v2;
+ }
+ }
+ return 1;
+ }
+
+ if (v14 == 1)
+ {
+ gUnknown_03005EAC = v2;
+ if (v10 == 255)
+ return 255;
+ return 1;
+ }
+
+ if (v10 == 1)
+ {
+ gUnknown_03005EAC = v3;
+ if (v14 == 255)
+ return 255;
+ return 1;
+ }
+
+ if (v14 == 0 && v10 == 0)
+ {
+ gUnknown_03005EAC = 0;
+ gUnknown_03005E9C = 0;
+ return 0;
+ }
+
+ gUnknown_03005EAC = 0;
+ gUnknown_03005E9C = 0;
+ return 2;
+}