38 lines
813 B
ArmAsm
38 lines
813 B
ArmAsm
mflr r12
|
|
bl get_data_ptr
|
|
get_data_ptr_ret:
|
|
mflr r11
|
|
|
|
lwz r10, [r11]
|
|
|
|
# Copy part1 data into place
|
|
lwz r3, [r10 + 0x08]
|
|
addi r4, r11, 0x0008
|
|
li r5, 0x41C
|
|
bl memcpy
|
|
|
|
# Copy part2 data into place, but retain the values of a few metadata fields
|
|
# so the game won't think the file is corrupt
|
|
lwz r3, [r10 + 0x0C]
|
|
lwz r7, [r3 + 0x04] # creation_timestamp
|
|
lwz r8, [r3 + 0x08] # signature
|
|
lwz r9, [r3 + 0x14] # save_count
|
|
addi r4, r11, 0x0424
|
|
lwz r5, [r11 + 4]
|
|
bl memcpy
|
|
lwz r3, [r10 + 0x0C]
|
|
stw [r3 + 0x04], r7 # creation_timestamp
|
|
stw [r3 + 0x08], r8 # signature
|
|
stw [r3 + 0x14], r9 # save_count
|
|
|
|
li r3, 1
|
|
mtlr r12
|
|
blr
|
|
|
|
memcpy:
|
|
.include CopyDataWords
|
|
blr
|
|
|
|
get_data_ptr:
|
|
bl get_data_ptr_ret
|