pokeruby/asm/load_save.s
2016-10-28 15:41:15 -07:00

445 lines
8.1 KiB
ArmAsm

.include "constants/gba_constants.inc"
.include "constants/species_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start CheckForFlashMemory
CheckForFlashMemory: @ 80479CC
push {lr}
bl IdentifyFlash
lsls r0, 16
cmp r0, 0
bne _080479E8
ldr r1, _080479E4 @ =gUnknown_3004820
movs r0, 0x1
str r0, [r1]
bl InitFlashTimer
b _080479EE
.align 2, 0
_080479E4: .4byte gUnknown_3004820
_080479E8:
ldr r1, _080479F4 @ =gUnknown_3004820
movs r0, 0
str r0, [r1]
_080479EE:
pop {r0}
bx r0
.align 2, 0
_080479F4: .4byte gUnknown_3004820
thumb_func_end CheckForFlashMemory
thumb_func_start sub_80479F8
sub_80479F8: @ 80479F8
ldr r0, _08047A00 @ =gSaveBlock2
ldrb r0, [r0, 0x9]
bx lr
.align 2, 0
_08047A00: .4byte gSaveBlock2
thumb_func_end sub_80479F8
thumb_func_start sub_8047A04
sub_8047A04: @ 8047A04
ldr r1, _08047A0C @ =gSaveBlock2
movs r0, 0
strb r0, [r1, 0x9]
bx lr
.align 2, 0
_08047A0C: .4byte gSaveBlock2
thumb_func_end sub_8047A04
thumb_func_start sub_8047A10
sub_8047A10: @ 8047A10
ldr r1, _08047A18 @ =gSaveBlock2
movs r0, 0x1
strb r0, [r1, 0x9]
bx lr
.align 2, 0
_08047A18: .4byte gSaveBlock2
thumb_func_end sub_8047A10
thumb_func_start sub_8047A1C
sub_8047A1C: @ 8047A1C
push {lr}
movs r0, 0
bl gpu_sync_bg_hide
ldr r1, _08047A30 @ =gSaveBlock2
movs r0, 0x1
strb r0, [r1, 0x9]
pop {r0}
bx r0
.align 2, 0
_08047A30: .4byte gSaveBlock2
thumb_func_end sub_8047A1C
thumb_func_start sub_8047A34
sub_8047A34: @ 8047A34
ldr r1, _08047A3C @ =gSaveBlock2
movs r0, 0
strb r0, [r1, 0x9]
bx lr
.align 2, 0
_08047A3C: .4byte gSaveBlock2
thumb_func_end sub_8047A34
thumb_func_start sub_8047A40
sub_8047A40: @ 8047A40
push {r4-r6,lr}
ldr r2, _08047A78 @ =gSaveBlock1
ldr r0, _08047A7C @ =gPlayerPartyCount
ldrb r1, [r0]
movs r3, 0x8D
lsls r3, 2
adds r0, r2, r3
strb r1, [r0]
movs r6, 0
movs r0, 0x8E
lsls r0, 2
adds r5, r2, r0
movs r4, 0
_08047A5A:
ldr r1, _08047A80 @ =gPlayerParty
adds r1, r4, r1
adds r0, r5, 0
movs r2, 0x64
bl memcpy
adds r5, 0x64
adds r4, 0x64
adds r6, 0x1
cmp r6, 0x5
ble _08047A5A
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08047A78: .4byte gSaveBlock1
_08047A7C: .4byte gPlayerPartyCount
_08047A80: .4byte gPlayerParty
thumb_func_end sub_8047A40
thumb_func_start copy_player_party_from_sav1
copy_player_party_from_sav1: @ 8047A84
push {r4-r6,lr}
ldr r0, _08047AC0 @ =gPlayerPartyCount
ldr r1, _08047AC4 @ =gSaveBlock1
movs r2, 0x8D
lsls r2, 2
adds r1, r2
ldrb r1, [r1]
strb r1, [r0]
ldr r4, _08047AC8 @ =gPlayerParty
movs r5, 0
movs r0, 0xFA
lsls r0, 1
adds r6, r4, r0
_08047A9E:
ldr r1, _08047AC4 @ =gSaveBlock1
adds r1, r5, r1
movs r2, 0x8E
lsls r2, 2
adds r1, r2
adds r0, r4, 0
movs r2, 0x64
bl memcpy
adds r4, 0x64
adds r5, 0x64
cmp r4, r6
ble _08047A9E
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08047AC0: .4byte gPlayerPartyCount
_08047AC4: .4byte gSaveBlock1
_08047AC8: .4byte gPlayerParty
thumb_func_end copy_player_party_from_sav1
thumb_func_start sub_8047ACC
sub_8047ACC: @ 8047ACC
push {r4-r7,lr}
ldr r0, _08047AFC @ =gSaveBlock1
ldr r4, _08047B00 @ =gMapObjects
movs r1, 0x9E
lsls r1, 4
adds r3, r0, r1
movs r2, 0xF
_08047ADA:
adds r1, r3, 0
adds r0, r4, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r4, 0x24
adds r3, 0x24
subs r2, 0x1
cmp r2, 0
bge _08047ADA
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08047AFC: .4byte gSaveBlock1
_08047B00: .4byte gMapObjects
thumb_func_end sub_8047ACC
thumb_func_start save_deserialize_npcs
save_deserialize_npcs: @ 8047B04
push {r4-r7,lr}
ldr r0, _08047B34 @ =gSaveBlock1
movs r1, 0x9E
lsls r1, 4
adds r4, r0, r1
ldr r3, _08047B38 @ =gMapObjects
movs r2, 0xF
_08047B12:
adds r1, r3, 0
adds r0, r4, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r4, 0x24
adds r3, 0x24
subs r2, 0x1
cmp r2, 0
bge _08047B12
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08047B34: .4byte gSaveBlock1
_08047B38: .4byte gMapObjects
thumb_func_end save_deserialize_npcs
thumb_func_start save_serialize_game
save_serialize_game: @ 8047B3C
push {lr}
bl sub_8047A40
bl sub_8047ACC
pop {r0}
bx r0
thumb_func_end save_serialize_game
thumb_func_start save_deserialize_game
save_deserialize_game: @ 8047B4C
push {lr}
bl copy_player_party_from_sav1
bl save_deserialize_npcs
pop {r0}
bx r0
thumb_func_end save_deserialize_game
thumb_func_start copy_bags_and_unk_data_from_save_blocks
copy_bags_and_unk_data_from_save_blocks: @ 8047B5C
push {r4-r7,lr}
ldr r0, _08047C0C @ =gSaveBlock1
movs r1, 0xAC
lsls r1, 3
adds r3, r0, r1
ldr r1, _08047C10 @ =gUnknown_020291F4
movs r2, 0x13
_08047B6A:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047B6A
ldr r1, _08047C10 @ =gUnknown_020291F4
ldr r0, _08047C0C @ =gSaveBlock1
movs r2, 0xB6
lsls r2, 3
adds r3, r0, r2
adds r1, 0x50
movs r2, 0x13
_08047B82:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047B82
ldr r1, _08047C10 @ =gUnknown_020291F4
ldr r0, _08047C0C @ =gSaveBlock1
movs r5, 0xC0
lsls r5, 3
adds r3, r0, r5
adds r1, 0xA0
movs r2, 0xF
_08047B9A:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047B9A
ldr r1, _08047C10 @ =gUnknown_020291F4
ldr r0, _08047C0C @ =gSaveBlock1
movs r6, 0xC8
lsls r6, 3
adds r3, r0, r6
adds r1, 0xE0
movs r2, 0x3F
_08047BB2:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047BB2
ldr r1, _08047C10 @ =gUnknown_020291F4
ldr r0, _08047C0C @ =gSaveBlock1
movs r7, 0xE8
lsls r7, 3
adds r3, r0, r7
movs r0, 0xF0
lsls r0, 1
adds r1, r0
movs r2, 0x2D
_08047BCE:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047BCE
ldr r0, _08047C10 @ =gUnknown_020291F4
ldr r4, _08047C0C @ =gSaveBlock1
movs r1, 0xA6
lsls r1, 2
adds r3, r0, r1
ldr r2, _08047C14 @ =0x00002b4c
mov r12, r2
movs r2, 0xF
_08047BE8:
adds r1, r3, 0
mov r5, r12
adds r0, r4, r5
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r4, 0x24
adds r3, 0x24
subs r2, 0x1
cmp r2, 0
bge _08047BE8
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08047C0C: .4byte gSaveBlock1
_08047C10: .4byte gUnknown_020291F4
_08047C14: .4byte 0x00002b4c
thumb_func_end copy_bags_and_unk_data_from_save_blocks
thumb_func_start copy_bags_and_unk_data_to_save_blocks
copy_bags_and_unk_data_to_save_blocks: @ 8047C18
push {r4-r7,lr}
ldr r0, _08047CCC @ =gSaveBlock1
ldr r3, _08047CD0 @ =gUnknown_020291F4
movs r2, 0xAC
lsls r2, 3
adds r1, r0, r2
movs r2, 0x13
_08047C26:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047C26
ldr r1, _08047CCC @ =gSaveBlock1
ldr r0, _08047CD0 @ =gUnknown_020291F4
adds r3, r0, 0
adds r3, 0x50
movs r5, 0xB6
lsls r5, 3
adds r1, r5
movs r2, 0x13
_08047C40:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047C40
ldr r1, _08047CCC @ =gSaveBlock1
ldr r0, _08047CD0 @ =gUnknown_020291F4
adds r3, r0, 0
adds r3, 0xA0
movs r6, 0xC0
lsls r6, 3
adds r1, r6
movs r2, 0xF
_08047C5A:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047C5A
ldr r1, _08047CCC @ =gSaveBlock1
ldr r0, _08047CD0 @ =gUnknown_020291F4
adds r3, r0, 0
adds r3, 0xE0
movs r7, 0xC8
lsls r7, 3
adds r1, r7
movs r2, 0x3F
_08047C74:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047C74
ldr r1, _08047CCC @ =gSaveBlock1
ldr r0, _08047CD0 @ =gUnknown_020291F4
movs r2, 0xF0
lsls r2, 1
adds r3, r0, r2
movs r5, 0xE8
lsls r5, 3
adds r1, r5
movs r2, 0x2D
_08047C90:
ldm r3!, {r0}
stm r1!, {r0}
subs r2, 0x1
cmp r2, 0
bge _08047C90
ldr r0, _08047CCC @ =gSaveBlock1
ldr r4, _08047CD0 @ =gUnknown_020291F4
ldr r6, _08047CD4 @ =0x00002b4c
adds r3, r0, r6
movs r7, 0xA6
lsls r7, 2
mov r12, r7
movs r2, 0xF
_08047CAA:
adds r1, r3, 0
mov r5, r12
adds r0, r4, r5
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r4, 0x24
adds r3, 0x24
subs r2, 0x1
cmp r2, 0
bge _08047CAA
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08047CCC: .4byte gSaveBlock1
_08047CD0: .4byte gUnknown_020291F4
_08047CD4: .4byte 0x00002b4c
thumb_func_end copy_bags_and_unk_data_to_save_blocks
.align 2, 0 @ Don't pad with nop.