diff options
author | Cameron Hall <cameronghall@cox.net> | 2018-01-25 17:15:37 -0600 |
---|---|---|
committer | Cameron Hall <cameronghall@cox.net> | 2018-01-25 17:15:37 -0600 |
commit | 9f7fa5781e8de8e23faea3785e8b3aebde79c8c6 (patch) | |
tree | 2620b7ad39c7fb20dbb30d66b2677aa1d9b0da26 | |
parent | 092eba3155abf78bfdde1dbe3f140fdbfa9f5081 (diff) |
decompile sub_813B79C
-rw-r--r-- | src/engine/save.c | 98 |
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 |