summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2018-01-25 17:15:37 -0600
committerCameron Hall <cameronghall@cox.net>2018-01-25 17:15:37 -0600
commit9f7fa5781e8de8e23faea3785e8b3aebde79c8c6 (patch)
tree2620b7ad39c7fb20dbb30d66b2677aa1d9b0da26
parent092eba3155abf78bfdde1dbe3f140fdbfa9f5081 (diff)
decompile sub_813B79C
-rw-r--r--src/engine/save.c98
1 files changed, 25 insertions, 73 deletions
diff --git a/src/engine/save.c b/src/engine/save.c
index 0eb93eb1d..0b7a3dd79 100644
--- a/src/engine/save.c
+++ b/src/engine/save.c
@@ -664,79 +664,31 @@ static u16 CalculateChecksum(void *data, u16 size)
}
#if DEBUG
-__attribute__((naked))
-void sub_813B79C()
-{
- asm(
- " push {r4, r5, r6, r7, lr}\n"
- " ldr r4, ._163\n"
- " ldr r6, ._163 + 4\n"
- " mov r5, #0x0\n"
- "._161:\n"
- " lsl r0, r5, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r1, r4, #0\n"
- " bl DoReadFlashWholeSection\n"
- " ldr r1, ._163 + 8\n"
- " add r0, r4, r1\n"
- " ldrh r0, [r0]\n"
- " lsl r0, r0, #0x3\n"
- " add r0, r0, r6\n"
- " ldrh r1, [r0, #0x4]\n"
- " add r0, r4, #0\n"
- " bl CalculateChecksum\n"
- " ldr r2, ._163 + 12\n"
- " add r1, r4, r2\n"
- " strh r0, [r1]\n"
- " add r0, r5, #0\n"
- " add r1, r4, #0\n"
- " bl ProgramFlashSectorAndVerify\n"
- " add r0, r5, #1\n"
- " lsl r0, r0, #0x10\n"
- " lsr r5, r0, #0x10\n"
- " cmp r5, #0x1b\n"
- " bls ._161 @cond_branch\n"
- " ldr r6, ._163\n"
- " ldr r7, ._163 + 16\n"
- " mov r5, #0x0\n"
- "._162:\n"
- " add r4, r5, #0\n"
- " add r4, r4, #0x1c\n"
- " lsl r0, r4, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r1, r6, #0\n"
- " bl DoReadFlashWholeSection\n"
- " lsl r0, r5, #0x3\n"
- " add r0, r0, r7\n"
- " ldrh r1, [r0, #0x4]\n"
- " add r0, r6, #0\n"
- " bl CalculateChecksum\n"
- " ldr r2, ._163 + 8\n"
- " add r1, r6, r2\n"
- " strh r0, [r1]\n"
- " lsl r4, r4, #0x10\n"
- " lsr r4, r4, #0x10\n"
- " add r0, r4, #0\n"
- " add r1, r6, #0\n"
- " bl ProgramFlashSectorAndVerify\n"
- " add r0, r5, #1\n"
- " lsl r0, r0, #0x10\n"
- " lsr r5, r0, #0x10\n"
- " cmp r5, #0x1\n"
- " bls ._162 @cond_branch\n"
- " pop {r4, r5, r6, r7}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._164:\n"
- " .align 2, 0\n"
- "._163:\n"
- " .word +0x2000000\n"
- " .word sSaveBlockChunks\n"
- " .word 0xff4\n"
- " .word 0xff6\n"
- " .word sHallOfFameChunks\n"
- "\n"
- );
+void sub_813B79C(void)
+{
+ struct SaveSector *sbSector;
+ struct SaveSector *hofSector;
+ const struct SaveBlockChunk *sbChunks;
+ const struct SaveBlockChunk *hofChunks;
+ u16 i;
+
+ sbSector = eSaveSection;
+ sbChunks = sSaveBlockChunks;
+ for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT * 2; i++)
+ {
+ DoReadFlashWholeSection(i, sbSector);
+ sbSector->checksum = CalculateChecksum(sbSector, sbChunks[sbSector->id].size);
+ ProgramFlashSectorAndVerify(i, sbSector->data);
+ }
+
+ hofSector = eSaveSection;
+ hofChunks = sHallOfFameChunks;
+ for (i = 0; i < NUM_HALL_OF_FAME_SECTORS; i++)
+ {
+ DoReadFlashWholeSection(HALL_OF_FAME_SECTOR + i, hofSector);
+ hofSector->id = CalculateChecksum(hofSector, hofChunks[i].size); // why id?
+ ProgramFlashSectorAndVerify(HALL_OF_FAME_SECTOR + i, hofSector->data);
+ }
}
#endif