summaryrefslogtreecommitdiff
path: root/src/engine/save.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/save.c')
-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