diff options
author | YamaArashi <shadow962@live.com> | 2016-10-17 01:44:34 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-10-17 01:44:34 -0700 |
commit | f13e7b91273e457279d3f06a6c5b606dc6f26d1b (patch) | |
tree | 3925e7180875d4ccd22d332a7409c8157986f580 | |
parent | 94b9c6890ca6b6d59b99f43b5d06d5a0e8789a82 (diff) |
decompile another save function
-rw-r--r-- | asm/rom_81258BC.s | 269 | ||||
-rw-r--r-- | src/save.c | 131 |
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; +} |