Files
2019-09-27 01:42:56 -04:00

2163 lines
37 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.text
.syntax unified
thumb_func_start ClearSaveData
ClearSaveData: @ 0x0815262C
push {r4, r5, lr}
movs r4, #0
ldr r5, _08152658
_08152632:
ldr r1, [r5]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
adds r0, #0x10
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r1, [r5]
bl _call_via_r1
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0xf
bls _08152632
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08152658: .4byte 0x03007600
thumb_func_end ClearSaveData
thumb_func_start Save_ResetSaveCounters
Save_ResetSaveCounters: @ 0x0815265C
ldr r0, _0815266C
movs r1, #0
str r1, [r0]
ldr r0, _08152670
strh r1, [r0]
ldr r0, _08152674
str r1, [r0]
bx lr
.align 2, 0
_0815266C: .4byte 0x03005F40
_08152670: .4byte 0x03005F30
_08152674: .4byte 0x03005F3C
thumb_func_end Save_ResetSaveCounters
thumb_func_start SetDamagedSectorBits
SetDamagedSectorBits: @ 0x08152678
push {r4, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r3, r1, #0x18
movs r4, #0
cmp r0, #1
beq _081526AC
cmp r0, #1
bgt _08152692
cmp r0, #0
beq _08152698
b _081526D0
_08152692:
cmp r0, #2
beq _081526C0
b _081526D0
_08152698:
ldr r2, _081526A8
movs r1, #1
lsls r1, r3
ldr r0, [r2]
orrs r0, r1
str r0, [r2]
b _081526D0
.align 2, 0
_081526A8: .4byte 0x03005F3C
_081526AC:
ldr r2, _081526BC
adds r1, r0, #0
lsls r1, r3
ldr r0, [r2]
bics r0, r1
str r0, [r2]
b _081526D0
.align 2, 0
_081526BC: .4byte 0x03005F3C
_081526C0:
ldr r0, _081526D8
movs r1, #1
lsls r1, r3
ldr r0, [r0]
ands r0, r1
cmp r0, #0
beq _081526D0
movs r4, #1
_081526D0:
adds r0, r4, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_081526D8: .4byte 0x03005F3C
thumb_func_end SetDamagedSectorBits
thumb_func_start save_write_to_flash
save_write_to_flash: @ 0x081526DC
push {r4, r5, r6, r7, lr}
adds r7, r1, #0
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r1, _08152700
ldr r0, _08152704
str r0, [r1]
ldr r0, _08152708
cmp r2, r0
beq _0815270C
adds r0, r2, #0
adds r1, r7, #0
bl HandleWriteSector
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
b _0815275E
.align 2, 0
_08152700: .4byte 0x03005F44
_08152704: .4byte 0x0203A888
_08152708: .4byte 0x0000FFFF
_0815270C:
ldr r1, _08152768
ldr r5, _0815276C
ldrh r0, [r5]
strh r0, [r1]
ldr r1, _08152770
ldr r6, _08152774
ldr r4, [r6]
str r4, [r1]
adds r0, #1
strh r0, [r5]
ldrh r0, [r5]
movs r1, #0xe
bl __umodsi3
strh r0, [r5]
adds r4, #1
str r4, [r6]
movs r5, #1
movs r4, #0
_08152732:
adds r0, r4, #0
adds r1, r7, #0
bl HandleWriteSector
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0xd
bls _08152732
ldr r0, _08152778
ldr r0, [r0]
cmp r0, #0
beq _0815275E
movs r5, #0xff
ldr r1, _0815276C
ldr r0, _08152768
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _08152774
ldr r0, _08152770
ldr r0, [r0]
str r0, [r1]
_0815275E:
adds r0, r5, #0
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08152768: .4byte 0x03005F38
_0815276C: .4byte 0x03005F30
_08152770: .4byte 0x03005F34
_08152774: .4byte 0x03005F40
_08152778: .4byte 0x03005F3C
thumb_func_end save_write_to_flash
thumb_func_start HandleWriteSector
HandleWriteSector: @ 0x0815277C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r4, r1, #0
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldr r0, _08152848
ldrh r0, [r0]
adds r0, r6, r0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
adds r0, r5, #0
movs r1, #0xe
bl __umodsi3
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r2, _0815284C
ldr r1, [r2]
movs r0, #1
ands r1, r0
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #1
adds r0, r5, r0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
lsls r0, r6, #3
adds r0, r0, r4
ldr r1, [r0]
mov sl, r1
ldrh r4, [r0, #4]
movs r3, #0
mov sb, r2
ldr r2, _08152850
mov ip, r2
mov r8, ip
movs r2, #0
ldr r1, _08152854
_081527CE:
mov r7, r8
ldr r0, [r7]
adds r0, r0, r3
strb r2, [r0]
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, r1
bls _081527CE
mov r0, ip
ldr r1, [r0]
ldr r2, _08152858
adds r0, r1, r2
strh r6, [r0]
ldr r3, _0815285C
adds r2, r1, r3
ldr r0, _08152860
str r0, [r2]
ldr r6, _08152864
adds r1, r1, r6
mov r7, sb
ldr r0, [r7]
str r0, [r1]
movs r3, #0
lsls r5, r5, #0x18
cmp r3, r4
bhs _0815281C
mov r2, ip
_08152806:
ldr r1, [r2]
adds r1, r1, r3
mov r6, sl
adds r0, r6, r3
ldrb r0, [r0]
strb r0, [r1]
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, r4
blo _08152806
_0815281C:
mov r0, sl
adds r1, r4, #0
bl CalculateChecksum
ldr r1, _08152850
ldr r1, [r1]
ldr r7, _08152868
adds r2, r1, r7
strh r0, [r2]
lsrs r0, r5, #0x18
bl TryWriteSector
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08152848: .4byte 0x03005F30
_0815284C: .4byte 0x03005F40
_08152850: .4byte 0x03005F44
_08152854: .4byte 0x00000FFF
_08152858: .4byte 0x00000FF4
_0815285C: .4byte 0x00000FF8
_08152860: .4byte 0x08012025
_08152864: .4byte 0x00000FFC
_08152868: .4byte 0x00000FF6
thumb_func_end HandleWriteSector
thumb_func_start HandleWriteSectorNBytes
HandleWriteSectorNBytes: @ 0x0815286C
push {r4, r5, r6, r7, lr}
adds r5, r1, #0
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
ldr r4, _081528D0
movs r3, #0
movs r6, #0
ldr r1, _081528D4
_08152880:
adds r0, r4, r3
strb r6, [r0]
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, r1
bls _08152880
ldr r0, _081528D8
adds r1, r4, r0
ldr r0, _081528DC
str r0, [r1]
movs r3, #0
cmp r3, r2
bhs _081528AE
_0815289C:
adds r1, r4, r3
adds r0, r5, r3
ldrb r0, [r0]
strb r0, [r1]
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, r2
blo _0815289C
_081528AE:
adds r0, r5, #0
adds r1, r2, #0
bl CalculateChecksum
ldr r2, _081528E0
adds r1, r4, r2
strh r0, [r1]
adds r0, r7, #0
adds r1, r4, #0
bl TryWriteSector
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_081528D0: .4byte 0x0203A888
_081528D4: .4byte 0x00000FFF
_081528D8: .4byte 0x00000FF8
_081528DC: .4byte 0x08012025
_081528E0: .4byte 0x00000FF4
thumb_func_end HandleWriteSectorNBytes
thumb_func_start TryWriteSector
TryWriteSector: @ 0x081528E4
push {r4, lr}
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
adds r0, r4, #0
bl ProgramFlashSectorAndVerify
cmp r0, #0
bne _08152900
movs r0, #1
adds r1, r4, #0
bl SetDamagedSectorBits
movs r0, #1
b _0815290A
_08152900:
movs r0, #0
adds r1, r4, #0
bl SetDamagedSectorBits
movs r0, #0xff
_0815290A:
pop {r4}
pop {r1}
bx r1
thumb_func_end TryWriteSector
thumb_func_start RestoreSaveBackupVarsAndIncrement
RestoreSaveBackupVarsAndIncrement: @ 0x08152910
push {r4, r5, r6, lr}
ldr r1, _0815294C
ldr r0, _08152950
str r0, [r1]
ldr r1, _08152954
ldr r5, _08152958
ldrh r0, [r5]
strh r0, [r1]
ldr r1, _0815295C
ldr r6, _08152960
ldr r4, [r6]
str r4, [r1]
adds r0, #1
strh r0, [r5]
ldrh r0, [r5]
movs r1, #0xe
bl __umodsi3
strh r0, [r5]
adds r4, #1
str r4, [r6]
ldr r1, _08152964
movs r0, #0
strh r0, [r1]
ldr r1, _08152968
movs r0, #0
str r0, [r1]
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_0815294C: .4byte 0x03005F44
_08152950: .4byte 0x0203A888
_08152954: .4byte 0x03005F38
_08152958: .4byte 0x03005F30
_0815295C: .4byte 0x03005F34
_08152960: .4byte 0x03005F40
_08152964: .4byte 0x03005F48
_08152968: .4byte 0x03005F3C
thumb_func_end RestoreSaveBackupVarsAndIncrement
thumb_func_start RestoreSaveBackupVars
RestoreSaveBackupVars: @ 0x0815296C
ldr r1, _08152990
ldr r0, _08152994
str r0, [r1]
ldr r1, _08152998
ldr r0, _0815299C
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _081529A0
ldr r0, _081529A4
ldr r0, [r0]
str r0, [r1]
ldr r1, _081529A8
movs r0, #0
strh r0, [r1]
ldr r1, _081529AC
movs r0, #0
str r0, [r1]
bx lr
.align 2, 0
_08152990: .4byte 0x03005F44
_08152994: .4byte 0x0203A888
_08152998: .4byte 0x03005F38
_0815299C: .4byte 0x03005F30
_081529A0: .4byte 0x03005F34
_081529A4: .4byte 0x03005F40
_081529A8: .4byte 0x03005F48
_081529AC: .4byte 0x03005F3C
thumb_func_end RestoreSaveBackupVars
thumb_func_start sub_081529B0
sub_081529B0: @ 0x081529B0
push {r4, r5, lr}
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r4, _081529EC
ldrh r2, [r4]
subs r0, #1
cmp r2, r0
bge _08152A04
movs r5, #1
adds r0, r2, #0
bl HandleWriteSector
ldrh r0, [r4]
adds r0, #1
strh r0, [r4]
ldr r0, _081529F0
ldr r0, [r0]
cmp r0, #0
beq _08152A06
movs r5, #0xff
ldr r1, _081529F4
ldr r0, _081529F8
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _081529FC
ldr r0, _08152A00
ldr r0, [r0]
str r0, [r1]
b _08152A06
.align 2, 0
_081529EC: .4byte 0x03005F48
_081529F0: .4byte 0x03005F3C
_081529F4: .4byte 0x03005F30
_081529F8: .4byte 0x03005F38
_081529FC: .4byte 0x03005F40
_08152A00: .4byte 0x03005F34
_08152A04:
movs r5, #0xff
_08152A06:
adds r0, r5, #0
pop {r4, r5}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_081529B0
thumb_func_start sub_08152A10
sub_08152A10: @ 0x08152A10
push {r4, lr}
lsls r0, r0, #0x10
movs r4, #1
ldr r2, _08152A44
adds r0, r0, r2
lsrs r0, r0, #0x10
bl ClearSaveData_2
ldr r0, _08152A48
ldr r0, [r0]
cmp r0, #0
beq _08152A3A
movs r4, #0xff
ldr r1, _08152A4C
ldr r0, _08152A50
ldrh r0, [r0]
strh r0, [r1]
ldr r1, _08152A54
ldr r0, _08152A58
ldr r0, [r0]
str r0, [r1]
_08152A3A:
adds r0, r4, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_08152A44: .4byte 0xFFFF0000
_08152A48: .4byte 0x03005F3C
_08152A4C: .4byte 0x03005F30
_08152A50: .4byte 0x03005F38
_08152A54: .4byte 0x03005F40
_08152A58: .4byte 0x03005F34
thumb_func_end sub_08152A10
thumb_func_start ClearSaveData_2
ClearSaveData_2: @ 0x08152A5C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r4, r1, #0
lsls r0, r0, #0x10
lsrs r6, r0, #0x10
ldr r0, _08152B28
ldrh r0, [r0]
adds r0, r6, r0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
adds r0, r5, #0
movs r1, #0xe
bl __umodsi3
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
ldr r2, _08152B2C
ldr r1, [r2]
movs r0, #1
ands r1, r0
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #1
adds r0, r5, r0
lsls r0, r0, #0x10
lsrs r5, r0, #0x10
lsls r0, r6, #3
adds r0, r0, r4
ldr r1, [r0]
mov sl, r1
ldrh r3, [r0, #4]
movs r4, #0
mov sb, r2
ldr r2, _08152B30
mov ip, r2
mov r8, ip
movs r2, #0
ldr r1, _08152B34
_08152AAE:
mov r7, r8
ldr r0, [r7]
adds r0, r0, r4
strb r2, [r0]
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, r1
bls _08152AAE
mov r0, ip
ldr r1, [r0]
ldr r2, _08152B38
adds r0, r1, r2
strh r6, [r0]
ldr r6, _08152B3C
adds r2, r1, r6
ldr r0, _08152B40
str r0, [r2]
ldr r7, _08152B44
adds r1, r1, r7
mov r2, sb
ldr r0, [r2]
str r0, [r1]
movs r4, #0
lsls r6, r5, #0x18
mov r8, r6
cmp r4, r3
bhs _08152AFE
mov r2, ip
_08152AE8:
ldr r1, [r2]
adds r1, r1, r4
mov r7, sl
adds r0, r7, r4
ldrb r0, [r0]
strb r0, [r1]
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, r3
blo _08152AE8
_08152AFE:
mov r0, sl
adds r1, r3, #0
bl CalculateChecksum
ldr r1, _08152B30
ldr r1, [r1]
ldr r2, _08152B48
adds r1, r1, r2
strh r0, [r1]
ldr r0, _08152B4C
ldr r1, [r0]
adds r0, r5, #0
bl _call_via_r1
movs r6, #1
movs r4, #0
ldr r7, _08152B50
mov sb, r7
ldr r7, _08152B54
b _08152B5E
.align 2, 0
_08152B28: .4byte 0x03005F30
_08152B2C: .4byte 0x03005F40
_08152B30: .4byte 0x03005F44
_08152B34: .4byte 0x00000FFF
_08152B38: .4byte 0x00000FF4
_08152B3C: .4byte 0x00000FF8
_08152B40: .4byte 0x08012025
_08152B44: .4byte 0x00000FFC
_08152B48: .4byte 0x00000FF6
_08152B4C: .4byte 0x03007600
_08152B50: .4byte 0x00000FF7
_08152B54: .4byte 0x030075F4
_08152B58:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
_08152B5E:
cmp r4, sb
bhi _08152B7C
ldr r0, _08152B88
ldr r0, [r0]
adds r0, r0, r4
ldrb r2, [r0]
ldr r3, [r7]
adds r0, r5, #0
adds r1, r4, #0
bl _call_via_r3
lsls r0, r0, #0x10
cmp r0, #0
beq _08152B58
movs r6, #0xff
_08152B7C:
cmp r6, #0xff
bne _08152B8C
mov r0, r8
lsrs r1, r0, #0x18
b _08152BE4
.align 2, 0
_08152B88: .4byte 0x03005F44
_08152B8C:
movs r6, #1
movs r4, #0
ldr r1, _08152B98
mov sb, r1
ldr r7, _08152B9C
b _08152BA6
.align 2, 0
_08152B98: .4byte 0x030075F4
_08152B9C: .4byte 0x00000FF9
_08152BA0:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
_08152BA6:
cmp r4, #6
bhi _08152BC8
adds r1, r4, r7
ldr r0, _08152BDC
ldr r0, [r0]
adds r0, r4, r0
adds r0, r0, r7
ldrb r2, [r0]
mov r0, sb
ldr r3, [r0]
adds r0, r5, #0
bl _call_via_r3
lsls r0, r0, #0x10
cmp r0, #0
beq _08152BA0
movs r6, #0xff
_08152BC8:
cmp r6, #0xff
beq _08152BE0
mov r2, r8
lsrs r1, r2, #0x18
movs r0, #1
bl SetDamagedSectorBits
movs r0, #1
b _08152BEC
.align 2, 0
_08152BDC: .4byte 0x03005F44
_08152BE0:
mov r6, r8
lsrs r1, r6, #0x18
_08152BE4:
movs r0, #0
bl SetDamagedSectorBits
movs r0, #0xff
_08152BEC:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
thumb_func_end ClearSaveData_2
thumb_func_start sub_08152BFC
sub_08152BFC: @ 0x08152BFC
push {r4, r5, r6, lr}
lsls r0, r0, #0x10
ldr r6, _08152C58
lsrs r0, r0, #0x10
ldrh r1, [r6]
adds r0, r0, r1
subs r0, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
adds r0, r4, #0
movs r1, #0xe
bl __umodsi3
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r5, _08152C5C
ldr r1, [r5]
movs r0, #1
ands r1, r0
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #1
adds r0, r4, r0
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r3, _08152C60
ldr r1, _08152C64
ldr r0, _08152C68
ldr r0, [r0]
adds r0, r0, r1
ldrb r2, [r0]
ldr r3, [r3]
adds r0, r4, #0
bl _call_via_r3
lsls r0, r0, #0x10
cmp r0, #0
bne _08152C6C
lsls r1, r4, #0x18
lsrs r1, r1, #0x18
movs r0, #1
bl SetDamagedSectorBits
movs r0, #1
b _08152C84
.align 2, 0
_08152C58: .4byte 0x03005F30
_08152C5C: .4byte 0x03005F40
_08152C60: .4byte 0x030075F4
_08152C64: .4byte 0x00000FF8
_08152C68: .4byte 0x03005F44
_08152C6C:
lsls r1, r4, #0x18
lsrs r1, r1, #0x18
movs r0, #0
bl SetDamagedSectorBits
ldr r0, _08152C8C
ldrh r0, [r0]
strh r0, [r6]
ldr r0, _08152C90
ldr r0, [r0]
str r0, [r5]
movs r0, #0xff
_08152C84:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08152C8C: .4byte 0x03005F38
_08152C90: .4byte 0x03005F34
thumb_func_end sub_08152BFC
thumb_func_start sub_08152C94
sub_08152C94: @ 0x08152C94
push {r4, r5, r6, lr}
lsls r0, r0, #0x10
ldr r6, _08152CE8
lsrs r0, r0, #0x10
ldrh r1, [r6]
adds r0, r0, r1
subs r0, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
adds r0, r4, #0
movs r1, #0xe
bl __umodsi3
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r5, _08152CEC
ldr r1, [r5]
movs r0, #1
ands r1, r0
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #1
adds r0, r4, r0
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r0, _08152CF0
ldr r1, _08152CF4
ldr r3, [r0]
adds r0, r4, #0
movs r2, #0x25
bl _call_via_r3
lsls r0, r0, #0x10
cmp r0, #0
bne _08152CF8
lsls r1, r4, #0x18
lsrs r1, r1, #0x18
movs r0, #1
bl SetDamagedSectorBits
movs r0, #1
b _08152D10
.align 2, 0
_08152CE8: .4byte 0x03005F30
_08152CEC: .4byte 0x03005F40
_08152CF0: .4byte 0x030075F4
_08152CF4: .4byte 0x00000FF8
_08152CF8:
lsls r1, r4, #0x18
lsrs r1, r1, #0x18
movs r0, #0
bl SetDamagedSectorBits
ldr r0, _08152D18
ldrh r0, [r0]
strh r0, [r6]
ldr r0, _08152D1C
ldr r0, [r0]
str r0, [r5]
movs r0, #0xff
_08152D10:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08152D18: .4byte 0x03005F38
_08152D1C: .4byte 0x03005F34
thumb_func_end sub_08152C94
thumb_func_start sub_08152D20
sub_08152D20: @ 0x08152D20
push {r4, r5, r6, lr}
adds r6, r1, #0
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
ldr r1, _08152D38
ldr r0, _08152D3C
str r0, [r1]
ldr r0, _08152D40
cmp r4, r0
beq _08152D44
movs r5, #0xff
b _08152D56
.align 2, 0
_08152D38: .4byte 0x03005F44
_08152D3C: .4byte 0x0203A888
_08152D40: .4byte 0x0000FFFF
_08152D44:
adds r0, r6, #0
bl GetSaveValidStatus
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
adds r0, r4, #0
adds r1, r6, #0
bl sub_08152D60
_08152D56:
adds r0, r5, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_08152D20
thumb_func_start sub_08152D60
sub_08152D60: @ 0x08152D60
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
mov r8, r1
ldr r0, _08152DFC
ldr r1, [r0]
movs r0, #1
ands r1, r0
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #0x11
lsrs r7, r0, #0x10
movs r5, #0
ldr r6, _08152E00
_08152D7C:
adds r0, r5, r7
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r1, [r6]
bl DoReadFlashWholeSection
ldr r0, [r6]
ldr r1, _08152E04
adds r0, r0, r1
ldrh r1, [r0]
cmp r1, #0
bne _08152D98
ldr r0, _08152E08
strh r5, [r0]
_08152D98:
ldr r0, [r6]
lsls r1, r1, #3
mov r2, r8
adds r4, r1, r2
ldrh r1, [r4, #4]
bl CalculateChecksum
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
ldr r2, [r6]
ldr r1, _08152E0C
adds r0, r2, r1
ldr r1, [r0]
ldr r0, _08152E10
adds r5, #1
cmp r1, r0
bne _08152DE8
ldr r1, _08152E14
adds r0, r2, r1
ldrh r0, [r0]
cmp r0, r3
bne _08152DE8
movs r2, #0
ldrh r0, [r4, #4]
cmp r2, r0
bhs _08152DE8
adds r3, r4, #0
ldr r4, _08152E00
_08152DD0:
ldr r1, [r3]
adds r1, r1, r2
ldr r0, [r4]
adds r0, r0, r2
ldrb r0, [r0]
strb r0, [r1]
adds r0, r2, #1
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldrh r1, [r3, #4]
cmp r2, r1
blo _08152DD0
_08152DE8:
lsls r0, r5, #0x10
lsrs r5, r0, #0x10
cmp r5, #0xd
bls _08152D7C
movs r0, #1
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08152DFC: .4byte 0x03005F40
_08152E00: .4byte 0x03005F44
_08152E04: .4byte 0x00000FF4
_08152E08: .4byte 0x03005F30
_08152E0C: .4byte 0x00000FF8
_08152E10: .4byte 0x08012025
_08152E14: .4byte 0x00000FF6
thumb_func_end sub_08152D60
thumb_func_start GetSaveValidStatus
GetSaveValidStatus: @ 0x08152E18
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
mov sl, r0
movs r0, #0
mov r8, r0
mov sb, r0
movs r6, #0
movs r5, #0
movs r4, #0
ldr r7, _08152EA4
_08152E34:
lsls r0, r4, #0x18
lsrs r0, r0, #0x18
ldr r1, [r7]
bl DoReadFlashWholeSection
ldr r2, [r7]
ldr r1, _08152EA8
adds r0, r2, r1
ldr r1, [r0]
ldr r0, _08152EAC
cmp r1, r0
bne _08152E84
movs r5, #1
ldr r3, _08152EB0
adds r0, r2, r3
ldrh r0, [r0]
lsls r0, r0, #3
add r0, sl
ldrh r1, [r0, #4]
adds r0, r2, #0
bl CalculateChecksum
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r1, [r7]
ldr r3, _08152EB4
adds r0, r1, r3
ldrh r0, [r0]
cmp r0, r2
bne _08152E84
ldr r2, _08152EB8
adds r0, r1, r2
ldr r0, [r0]
mov r8, r0
subs r3, #2
adds r1, r1, r3
adds r0, r5, #0
ldrh r1, [r1]
lsls r0, r1
orrs r6, r0
_08152E84:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0xd
bls _08152E34
cmp r5, #0
beq _08152EC0
ldr r0, _08152EBC
movs r1, #0xff
str r1, [sp]
cmp r6, r0
bne _08152EC4
movs r2, #1
str r2, [sp]
b _08152EC4
.align 2, 0
_08152EA4: .4byte 0x03005F44
_08152EA8: .4byte 0x00000FF8
_08152EAC: .4byte 0x08012025
_08152EB0: .4byte 0x00000FF4
_08152EB4: .4byte 0x00000FF6
_08152EB8: .4byte 0x00000FFC
_08152EBC: .4byte 0x00003FFF
_08152EC0:
movs r3, #0
str r3, [sp]
_08152EC4:
movs r6, #0
movs r5, #0
movs r4, #0
ldr r7, _08152F3C
_08152ECC:
adds r0, r4, #0
adds r0, #0xe
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r1, [r7]
bl DoReadFlashWholeSection
ldr r2, [r7]
ldr r1, _08152F40
adds r0, r2, r1
ldr r1, [r0]
ldr r0, _08152F44
cmp r1, r0
bne _08152F20
movs r5, #1
ldr r3, _08152F48
adds r0, r2, r3
ldrh r0, [r0]
lsls r0, r0, #3
add r0, sl
ldrh r1, [r0, #4]
adds r0, r2, #0
bl CalculateChecksum
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r1, [r7]
ldr r3, _08152F4C
adds r0, r1, r3
ldrh r0, [r0]
cmp r0, r2
bne _08152F20
ldr r2, _08152F50
adds r0, r1, r2
ldr r0, [r0]
mov sb, r0
subs r3, #2
adds r1, r1, r3
adds r0, r5, #0
ldrh r1, [r1]
lsls r0, r1
orrs r6, r0
_08152F20:
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0xd
bls _08152ECC
cmp r5, #0
beq _08152F58
ldr r0, _08152F54
movs r1, #0xff
cmp r6, r0
bne _08152F5A
movs r1, #1
b _08152F5A
.align 2, 0
_08152F3C: .4byte 0x03005F44
_08152F40: .4byte 0x00000FF8
_08152F44: .4byte 0x08012025
_08152F48: .4byte 0x00000FF4
_08152F4C: .4byte 0x00000FF6
_08152F50: .4byte 0x00000FFC
_08152F54: .4byte 0x00003FFF
_08152F58:
movs r1, #0
_08152F5A:
ldr r0, [sp]
cmp r0, #1
bne _08152FCC
cmp r1, #1
bne _08152FBC
movs r0, #1
rsbs r0, r0, #0
cmp r8, r0
bne _08152F72
mov r1, sb
cmp r1, #0
beq _08152F7C
_08152F72:
mov r2, r8
cmp r2, #0
bne _08152FA0
cmp sb, r0
bne _08152FA0
_08152F7C:
mov r1, r8
adds r1, #1
mov r0, sb
adds r0, #1
cmp r1, r0
bhs _08152F94
ldr r0, _08152F90
mov r3, sb
b _08152FB4
.align 2, 0
_08152F90: .4byte 0x03005F40
_08152F94:
ldr r0, _08152F9C
mov r1, r8
str r1, [r0]
b _08152FE4
.align 2, 0
_08152F9C: .4byte 0x03005F40
_08152FA0:
cmp r8, sb
bhs _08152FB0
ldr r0, _08152FAC
mov r2, sb
str r2, [r0]
b _08152FE4
.align 2, 0
_08152FAC: .4byte 0x03005F40
_08152FB0:
ldr r0, _08152FB8
mov r3, r8
_08152FB4:
str r3, [r0]
b _08152FE4
.align 2, 0
_08152FB8: .4byte 0x03005F40
_08152FBC:
ldr r0, _08152FC8
mov r2, r8
str r2, [r0]
cmp r1, #0xff
beq _08152FDC
b _08152FE4
.align 2, 0
_08152FC8: .4byte 0x03005F40
_08152FCC:
cmp r1, #1
bne _08152FE8
ldr r0, _08152FE0
mov r3, sb
str r3, [r0]
ldr r0, [sp]
cmp r0, #0xff
bne _08152FE4
_08152FDC:
movs r0, #0xff
b _08153014
.align 2, 0
_08152FE0: .4byte 0x03005F40
_08152FE4:
movs r0, #1
b _08153014
_08152FE8:
ldr r2, [sp]
cmp r2, #0
bne _08153008
cmp r1, #0
bne _08153008
ldr r0, _08153000
str r1, [r0]
ldr r0, _08153004
strh r1, [r0]
movs r0, #0
b _08153014
.align 2, 0
_08153000: .4byte 0x03005F40
_08153004: .4byte 0x03005F30
_08153008:
ldr r0, _08153024
movs r1, #0
str r1, [r0]
ldr r0, _08153028
strh r1, [r0]
movs r0, #2
_08153014:
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08153024: .4byte 0x03005F40
_08153028: .4byte 0x03005F30
thumb_func_end GetSaveValidStatus
thumb_func_start sub_0815302C
sub_0815302C: @ 0x0815302C
push {r4, r5, r6, lr}
adds r6, r1, #0
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r2, #0x10
lsrs r4, r2, #0x10
ldr r5, _08153080
adds r1, r5, #0
bl DoReadFlashWholeSection
ldr r1, _08153084
adds r0, r5, r1
ldr r1, [r0]
ldr r0, _08153088
cmp r1, r0
bne _08153094
adds r0, r5, #0
adds r1, r4, #0
bl CalculateChecksum
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r2, _0815308C
adds r1, r5, r2
ldrh r1, [r1]
cmp r1, r0
bne _08153090
movs r2, #0
cmp r2, r4
bhs _0815307A
_08153068:
adds r1, r6, r2
adds r0, r5, r2
ldrb r0, [r0]
strb r0, [r1]
adds r0, r2, #1
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
cmp r2, r4
blo _08153068
_0815307A:
movs r0, #1
b _08153096
.align 2, 0
_08153080: .4byte 0x0203A888
_08153084: .4byte 0x00000FF8
_08153088: .4byte 0x08012025
_0815308C: .4byte 0x00000FF4
_08153090:
movs r0, #2
b _08153096
_08153094:
movs r0, #0
_08153096:
pop {r4, r5, r6}
pop {r1}
bx r1
thumb_func_end sub_0815302C
thumb_func_start DoReadFlashWholeSection
DoReadFlashWholeSection: @ 0x0815309C
push {lr}
adds r2, r1, #0
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r3, #0x80
lsls r3, r3, #5
movs r1, #0
bl ReadFlash
movs r0, #1
pop {r1}
bx r1
thumb_func_end DoReadFlashWholeSection
thumb_func_start CalculateChecksum
CalculateChecksum: @ 0x081530B4
push {r4, lr}
adds r4, r0, #0
lsls r1, r1, #0x10
movs r2, #0
movs r3, #0
lsrs r1, r1, #0x12
cmp r2, r1
bhs _081530D2
_081530C4:
ldm r4!, {r0}
adds r2, r2, r0
adds r0, r3, #1
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
cmp r3, r1
blo _081530C4
_081530D2:
lsrs r0, r2, #0x10
adds r0, r0, r2
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
pop {r4}
pop {r1}
bx r1
thumb_func_end CalculateChecksum
thumb_func_start UpdateSaveAddresses
UpdateSaveAddresses: @ 0x081530E0
push {r4, r5, lr}
ldr r3, _08153140
ldr r0, _08153144
ldr r2, _08153148
ldrh r1, [r2]
ldr r0, [r0]
adds r0, r0, r1
str r0, [r3]
ldrh r0, [r2, #2]
strh r0, [r3, #4]
ldr r5, _0815314C
adds r3, #8
adds r2, #4
movs r4, #3
_081530FC:
ldrh r0, [r2]
ldr r1, [r5]
adds r1, r1, r0
str r1, [r3]
ldrh r0, [r2, #2]
strh r0, [r3, #4]
adds r3, #8
adds r2, #4
subs r4, #1
cmp r4, #0
bge _081530FC
movs r4, #5
ldr r1, _08153140
ldr r5, _08153150
ldr r0, _08153148
adds r3, r1, #0
adds r3, #0x28
adds r2, r0, #0
adds r2, #0x14
_08153122:
ldrh r0, [r2]
ldr r1, [r5]
adds r1, r1, r0
str r1, [r3]
ldrh r0, [r2, #2]
strh r0, [r3, #4]
adds r3, #8
adds r2, #4
adds r4, #1
cmp r4, #0xd
ble _08153122
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08153140: .4byte 0x03005F60
_08153144: .4byte 0x03005AF0
_08153148: .4byte 0x085ACA08
_0815314C: .4byte 0x03005AEC
_08153150: .4byte 0x03005AF4
thumb_func_end UpdateSaveAddresses
thumb_func_start HandleSavingData
HandleSavingData: @ 0x08153154
push {r4, r5, r6, lr}
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldr r1, _08153174
ldr r6, [r1]
movs r0, #0
str r0, [r1]
bl UpdateSaveAddresses
cmp r4, #5
bhi _081531FC
lsls r0, r4, #2
ldr r1, _08153178
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08153174: .4byte 0x0203CC28
_08153178: .4byte 0x0815317C
_0815317C: @ jump table
.4byte _081531FC @ case 0
.4byte _08153214 @ case 1
.4byte _08153214 @ case 2
.4byte _081531AA @ case 3
.4byte _08153234 @ case 4
.4byte _08153194 @ case 5
_08153194:
movs r4, #0x1c
ldr r5, _081531E8
_08153198:
ldr r1, [r5]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0x1f
bls _08153198
_081531AA:
movs r0, #0xa
bl GetGameStat
ldr r1, _081531EC
cmp r0, r1
bhi _081531BC
movs r0, #0xa
bl IncrementGameStat
_081531BC:
bl SaveSerializedGame
ldr r0, _081531F0
ldr r1, _081531F4
bl save_write_to_flash
ldr r4, _081531F8
movs r5, #0xf8
lsls r5, r5, #4
movs r0, #0x1c
adds r1, r4, #0
adds r2, r5, #0
bl HandleWriteSectorNBytes
adds r4, r4, r5
movs r0, #0x1d
adds r1, r4, #0
adds r2, r5, #0
bl HandleWriteSectorNBytes
b _08153256
.align 2, 0
_081531E8: .4byte 0x03007600
_081531EC: .4byte 0x000003E6
_081531F0: .4byte 0x0000FFFF
_081531F4: .4byte 0x03005F60
_081531F8: .4byte 0x0201C000
_081531FC:
bl SaveSerializedGame
ldr r0, _0815320C
ldr r1, _08153210
bl save_write_to_flash
b _08153256
.align 2, 0
_0815320C: .4byte 0x0000FFFF
_08153210: .4byte 0x03005F60
_08153214:
bl SaveSerializedGame
movs r4, #0
_0815321A:
adds r0, r4, #0
ldr r1, _08153230
bl save_write_to_flash
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #4
bls _0815321A
b _08153256
.align 2, 0
_08153230: .4byte 0x03005F60
_08153234:
movs r4, #0x1c
ldr r5, _08153264
_08153238:
ldr r1, [r5]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #0x1f
bls _08153238
bl SaveSerializedGame
ldr r0, _08153268
ldr r1, _0815326C
bl save_write_to_flash
_08153256:
ldr r0, _08153270
str r6, [r0]
movs r0, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08153264: .4byte 0x03007600
_08153268: .4byte 0x0000FFFF
_0815326C: .4byte 0x03005F60
_08153270: .4byte 0x0203CC28
thumb_func_end HandleSavingData
thumb_func_start TrySavingData
TrySavingData: @ 0x08153274
push {r4, r5, lr}
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
ldr r0, _081532A0
ldr r4, [r0]
cmp r4, #1
bne _08153296
adds r0, r5, #0
bl HandleSavingData
ldr r0, _081532A4
ldr r0, [r0]
cmp r0, #0
beq _081532AC
adds r0, r5, #0
bl DoSaveFailedScreen
_08153296:
ldr r1, _081532A8
movs r0, #0xff
strh r0, [r1]
movs r0, #0xff
b _081532B2
.align 2, 0
_081532A0: .4byte 0x03005AE8
_081532A4: .4byte 0x03005F3C
_081532A8: .4byte 0x03005FD4
_081532AC:
ldr r0, _081532B8
strh r4, [r0]
movs r0, #1
_081532B2:
pop {r4, r5}
pop {r1}
bx r1
.align 2, 0
_081532B8: .4byte 0x03005FD4
thumb_func_end TrySavingData
thumb_func_start sub_081532BC
sub_081532BC: @ 0x081532BC
push {lr}
ldr r0, _081532D8
ldr r0, [r0]
cmp r0, #1
bne _081532E0
bl UpdateSaveAddresses
bl SaveSerializedGame
ldr r0, _081532DC
bl RestoreSaveBackupVarsAndIncrement
movs r0, #0
b _081532E2
.align 2, 0
_081532D8: .4byte 0x03005AE8
_081532DC: .4byte 0x03005F60
_081532E0:
movs r0, #1
_081532E2:
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_081532BC
thumb_func_start sub_081532E8
sub_081532E8: @ 0x081532E8
push {r4, lr}
ldr r1, _0815330C
movs r0, #0xe
bl sub_081529B0
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldr r0, _08153310
ldr r0, [r0]
cmp r0, #0
beq _08153304
movs r0, #0
bl DoSaveFailedScreen
_08153304:
cmp r4, #0xff
beq _08153314
movs r0, #0
b _08153316
.align 2, 0
_0815330C: .4byte 0x03005F60
_08153310: .4byte 0x03005F3C
_08153314:
movs r0, #1
_08153316:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_081532E8
thumb_func_start sub_0815331C
sub_0815331C: @ 0x0815331C
push {lr}
ldr r1, _0815333C
movs r0, #0xe
bl sub_08152A10
ldr r0, _08153340
ldr r0, [r0]
cmp r0, #0
beq _08153334
movs r0, #0
bl DoSaveFailedScreen
_08153334:
movs r0, #0
pop {r1}
bx r1
.align 2, 0
_0815333C: .4byte 0x03005F60
_08153340: .4byte 0x03005F3C
thumb_func_end sub_0815331C
thumb_func_start sub_08153344
sub_08153344: @ 0x08153344
push {lr}
ldr r1, _08153364
movs r0, #0xe
bl sub_08152BFC
ldr r0, _08153368
ldr r0, [r0]
cmp r0, #0
beq _0815335C
movs r0, #0
bl DoSaveFailedScreen
_0815335C:
movs r0, #0
pop {r1}
bx r1
.align 2, 0
_08153364: .4byte 0x03005F60
_08153368: .4byte 0x03005F3C
thumb_func_end sub_08153344
thumb_func_start FullSaveGame
FullSaveGame: @ 0x0815336C
push {r4, lr}
ldr r0, _0815339C
ldr r0, [r0]
cmp r0, #1
bne _081533A8
bl UpdateSaveAddresses
bl SaveSerializedGame
ldr r4, _081533A0
adds r0, r4, #0
bl RestoreSaveBackupVars
ldr r0, _081533A4
ldrh r0, [r0]
adds r0, #1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
adds r1, r4, #0
bl sub_08152A10
movs r0, #0
b _081533AA
.align 2, 0
_0815339C: .4byte 0x03005AE8
_081533A0: .4byte 0x03005F60
_081533A4: .4byte 0x03005F48
_081533A8:
movs r0, #1
_081533AA:
pop {r4}
pop {r1}
bx r1
thumb_func_end FullSaveGame
thumb_func_start CheckSaveFile
CheckSaveFile: @ 0x081533B0
push {r4, r5, r6, lr}
movs r6, #0
ldr r0, _081533DC
ldrh r1, [r0]
adds r1, #1
strh r1, [r0]
lsls r0, r1, #0x10
lsrs r5, r0, #0x10
cmp r5, #4
bhi _081533E4
adds r0, r1, #1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldr r4, _081533E0
adds r1, r4, #0
bl sub_08152A10
adds r0, r5, #0
adds r1, r4, #0
bl sub_08152C94
b _081533EE
.align 2, 0
_081533DC: .4byte 0x03005F48
_081533E0: .4byte 0x03005F60
_081533E4:
ldr r1, _08153404
adds r0, r5, #0
bl sub_08152C94
movs r6, #1
_081533EE:
ldr r0, _08153408
ldr r0, [r0]
cmp r0, #0
beq _081533FC
movs r0, #1
bl DoSaveFailedScreen
_081533FC:
adds r0, r6, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08153404: .4byte 0x03005F60
_08153408: .4byte 0x03005F3C
thumb_func_end CheckSaveFile
thumb_func_start Save_LoadGameData
Save_LoadGameData: @ 0x0815340C
push {r4, r5, r6, lr}
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldr r0, _08153424
ldr r0, [r0]
cmp r0, #1
beq _0815342C
ldr r1, _08153428
movs r0, #4
strh r0, [r1]
movs r0, #0xff
b _0815348C
.align 2, 0
_08153424: .4byte 0x03005AE8
_08153428: .4byte 0x03005F50
_0815342C:
bl UpdateSaveAddresses
cmp r4, #0
beq _08153438
cmp r4, #3
beq _08153464
_08153438:
ldr r0, _08153454
ldr r1, _08153458
bl sub_08152D20
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
bl LoadSerializedGame
ldr r0, _0815345C
strh r4, [r0]
ldr r1, _08153460
movs r0, #0
str r0, [r1]
b _0815348A
.align 2, 0
_08153454: .4byte 0x0000FFFF
_08153458: .4byte 0x03005F60
_0815345C: .4byte 0x03005F50
_08153460: .4byte 0x03005F54
_08153464:
ldr r5, _08153494
movs r6, #0xf8
lsls r6, r6, #4
movs r0, #0x1c
adds r1, r5, #0
adds r2, r6, #0
bl sub_0815302C
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #1
bne _0815348A
adds r1, r5, r6
movs r0, #0x1d
adds r2, r6, #0
bl sub_0815302C
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
_0815348A:
adds r0, r4, #0
_0815348C:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08153494: .4byte 0x0201C000
thumb_func_end Save_LoadGameData
thumb_func_start sub_08153498
sub_08153498: @ 0x08153498
push {r4, r5, r6, r7, lr}
ldr r5, _081534AC
ldr r0, _081534B0
str r0, [r5]
adds r7, r0, #0
ldr r0, _081534B4
ldr r4, [r0]
cmp r4, #1
beq _081534C8
b _08153504
.align 2, 0
_081534AC: .4byte 0x03005F44
_081534B0: .4byte 0x0203A888
_081534B4: .4byte 0x03005AE8
_081534B8:
ldrb r1, [r7, #0xa]
ldrb r0, [r7, #0xb]
adds r1, r1, r0
ldrb r0, [r7, #0xc]
adds r1, r1, r0
ldrb r0, [r7, #0xd]
adds r0, r0, r1
b _08153506
_081534C8:
bl UpdateSaveAddresses
ldr r0, _0815350C
bl GetSaveValidStatus
ldr r0, _08153510
ldr r1, [r0]
ands r1, r4
lsls r0, r1, #3
subs r0, r0, r1
lsls r0, r0, #0x11
lsrs r6, r0, #0x10
movs r4, #0
_081534E2:
adds r0, r4, r6
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r1, [r5]
bl DoReadFlashWholeSection
ldr r0, [r5]
ldr r1, _08153514
adds r0, r0, r1
ldrh r0, [r0]
cmp r0, #0
beq _081534B8
adds r0, r4, #1
lsls r0, r0, #0x10
lsrs r4, r0, #0x10
cmp r4, #0xd
bls _081534E2
_08153504:
movs r0, #0
_08153506:
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_0815350C: .4byte 0x03005F60
_08153510: .4byte 0x03005F40
_08153514: .4byte 0x00000FF4
thumb_func_end sub_08153498
thumb_func_start TryReadSpecialSaveSection
TryReadSpecialSaveSection: @ 0x08153518
push {r4, r5, r6, lr}
adds r6, r1, #0
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
movs r2, #0xe2
lsls r2, r2, #0x18
adds r0, r0, r2
lsrs r0, r0, #0x18
cmp r0, #1
bhi _08153544
ldr r4, _08153548
movs r3, #0x80
lsls r3, r3, #5
adds r0, r1, #0
movs r1, #0
adds r2, r4, #0
bl ReadFlash
ldr r1, [r4]
ldr r0, _0815354C
cmp r1, r0
beq _08153550
_08153544:
movs r0, #0xff
b _08153566
.align 2, 0
_08153548: .4byte 0x0203A888
_0815354C: .4byte 0x0000B39D
_08153550:
movs r3, #0
ldr r5, _0815356C
adds r2, r4, #4
_08153556:
adds r0, r6, r3
adds r1, r2, r3
ldrb r1, [r1]
strb r1, [r0]
adds r3, #1
cmp r3, r5
ble _08153556
movs r0, #1
_08153566:
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_0815356C: .4byte 0x00000FFB
thumb_func_end TryReadSpecialSaveSection
thumb_func_start TryWriteSpecialSaveSection
TryWriteSpecialSaveSection: @ 0x08153570
push {r4, r5, r6, r7, lr}
adds r5, r1, #0
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
movs r1, #0xe2
lsls r1, r1, #0x18
adds r0, r0, r1
lsrs r0, r0, #0x18
cmp r0, #1
bhi _081535BC
ldr r7, _081535B0
ldr r0, _081535B4
adds r3, r7, #0
stm r3!, {r0}
movs r2, #0
ldr r4, _081535B8
_08153590:
adds r0, r3, r2
adds r1, r5, r2
ldrb r1, [r1]
strb r1, [r0]
adds r2, #1
cmp r2, r4
ble _08153590
adds r0, r6, #0
adds r1, r7, #0
bl ProgramFlashSectorAndVerify
cmp r0, #0
bne _081535BC
movs r0, #1
b _081535BE
.align 2, 0
_081535B0: .4byte 0x0203A888
_081535B4: .4byte 0x0000B39D
_081535B8: .4byte 0x00000FFB
_081535BC:
movs r0, #0xff
_081535BE:
pop {r4, r5, r6, r7}
pop {r1}
bx r1
thumb_func_end TryWriteSpecialSaveSection
thumb_func_start sub_081535C4
sub_081535C4: @ 0x081535C4
push {r4, lr}
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
lsls r0, r2, #2
adds r0, r0, r2
lsls r0, r0, #3
ldr r1, _081535E8
adds r4, r0, r1
movs r1, #0
ldrsh r0, [r4, r1]
cmp r0, #0xb
bls _081535DE
b _081536FE
_081535DE:
lsls r0, r0, #2
ldr r1, _081535EC
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_081535E8: .4byte 0x03005B68
_081535EC: .4byte 0x081535F0
_081535F0: @ jump table
.4byte _08153620 @ case 0
.4byte _08153630 @ case 1
.4byte _0815363A @ case 2
.4byte _08153656 @ case 3
.4byte _08153668 @ case 4
.4byte _0815367E @ case 5
.4byte _08153694 @ case 6
.4byte _0815369E @ case 7
.4byte _081536B4 @ case 8
.4byte _081536C8 @ case 9
.4byte _081536D2 @ case 10
.4byte _081536E4 @ case 11
_08153620:
ldr r0, _0815362C
movs r1, #1
strb r1, [r0]
movs r0, #1
strh r0, [r4]
b _081536FE
.align 2, 0
_0815362C: .4byte 0x030027A0
_08153630:
bl sub_0800A8D4
movs r0, #2
strh r0, [r4]
b _081536FE
_0815363A:
bl IsLinkTaskFinished
lsls r0, r0, #0x18
cmp r0, #0
beq _081536FE
movs r1, #4
ldrsh r0, [r4, r1]
cmp r0, #0
bne _08153650
bl save_serialize_map
_08153650:
movs r0, #3
strh r0, [r4]
b _081536FE
_08153656:
movs r1, #4
ldrsh r0, [r4, r1]
cmp r0, #0
bne _08153662
bl SetContinueGameWarpStatusToDynamicWarp
_08153662:
bl sub_081532BC
b _0815368E
_08153668:
ldrh r0, [r4, #2]
adds r0, #1
strh r0, [r4, #2]
lsls r0, r0, #0x10
asrs r1, r0, #0x10
cmp r1, #5
bne _081536FE
movs r0, #0
strh r0, [r4, #2]
strh r1, [r4]
b _081536FE
_0815367E:
bl sub_081532E8
lsls r0, r0, #0x18
cmp r0, #0
beq _0815368E
movs r0, #6
strh r0, [r4]
b _081536FE
_0815368E:
movs r0, #4
strh r0, [r4]
b _081536FE
_08153694:
bl sub_0815331C
movs r0, #7
strh r0, [r4]
b _081536FE
_0815369E:
movs r1, #4
ldrsh r0, [r4, r1]
cmp r0, #0
bne _081536AA
bl ClearContinueGameWarpStatus
_081536AA:
bl sub_0800A8D4
movs r0, #8
strh r0, [r4]
b _081536FE
_081536B4:
bl IsLinkTaskFinished
lsls r0, r0, #0x18
cmp r0, #0
beq _081536FE
bl sub_08153344
movs r0, #9
strh r0, [r4]
b _081536FE
_081536C8:
bl sub_0800A8D4
movs r0, #0xa
strh r0, [r4]
b _081536FE
_081536D2:
bl IsLinkTaskFinished
lsls r0, r0, #0x18
cmp r0, #0
beq _081536FE
ldrh r0, [r4]
adds r0, #1
strh r0, [r4]
b _081536FE
_081536E4:
ldrh r0, [r4, #2]
adds r0, #1
strh r0, [r4, #2]
lsls r0, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #5
ble _081536FE
ldr r1, _08153704
movs r0, #0
strb r0, [r1]
adds r0, r2, #0
bl DestroyTask
_081536FE:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08153704: .4byte 0x030027A0
thumb_func_end sub_081535C4