diff options
author | Kermalis <29823718+Kermalis@users.noreply.github.com> | 2019-08-10 22:06:31 -0400 |
---|---|---|
committer | Kermalis <29823718+Kermalis@users.noreply.github.com> | 2019-08-10 22:06:31 -0400 |
commit | c7188a70d8b0f1b7a8309d3af4d63719255eafb6 (patch) | |
tree | 4a51d4a0cfe7c9cbe063229181cb5534d06b0cad | |
parent | d75a62af27b3cc472fdbd8facca146f2744d2572 (diff) |
save.c - sub_8011CA8() to ReadSaveSector()
-rw-r--r-- | asm/save.s | 137 | ||||
-rw-r--r-- | asmdiff.sh | 2 | ||||
-rw-r--r-- | src/save.c | 67 |
3 files changed, 67 insertions, 139 deletions
@@ -5,143 +5,6 @@ .text - thumb_func_start sub_8011CA8 -sub_8011CA8: - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, =gUnknown_203B184 - ldr r0, [r0] - ldr r0, =0xfff - adds r1, r2, r0 - cmp r1, 0 - bge _08011CBE - ldr r0, =0x1ffe - adds r1, r2, r0 -_08011CBE: - asrs r1, 12 - ldr r0, [r3] - adds r0, r1 - str r0, [r3] - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end sub_8011CA8 - - thumb_func_start WriteSaveSector -WriteSaveSector: - push {r4-r6,lr} - adds r5, r1, 0 - adds r4, r2, 0 - ldr r6, [r0] - adds r1, r4, 0 - bl sub_8011CA8 - adds r0, r5, 0 - adds r1, r4, 0 - bl CalculateChecksum - ldr r0, _08011D04 - ldr r0, [r0] - cmp r0, 0 - bne _08011D08 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl WriteFlashData - adds r1, r0, 0 - b _08011D28 - .align 2, 0 -_08011D04: .4byte gUnknown_203B184 -_08011D08: - bl sub_800DAB8 - lsls r0, 24 - cmp r0, 0 - beq _08011D38 - lsls r0, r6, 16 - lsrs r0, 16 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_800DAB4 - lsls r0, 24 - movs r1, 0 - cmp r0, 0 - bne _08011D28 - movs r1, 0x3 -_08011D28: - cmp r1, 0x4 - bne _08011D30 - movs r0, 0x1 - b _08011D3A -_08011D30: - cmp r1, 0 - bne _08011D38 - movs r0, 0 - b _08011D3A -_08011D38: - movs r0, 0x2 -_08011D3A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end WriteSaveSector - - thumb_func_start ReadSaveSector -ReadSaveSector: - push {r4-r6,lr} - adds r5, r1, 0 - adds r4, r2, 0 - ldr r6, [r0] - adds r1, r4, 0 - bl sub_8011CA8 - ldr r0, _08011D64 - ldr r0, [r0] - cmp r0, 0 - bne _08011D68 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl ReadFlashData - adds r1, r0, 0 - b _08011D86 - .align 2, 0 -_08011D64: .4byte gUnknown_203B184 -_08011D68: - bl sub_800DAB8 - lsls r0, 24 - cmp r0, 0 - beq _08011D8A - lsls r0, r6, 16 - lsrs r0, 16 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_800DAB0 - lsls r0, 24 - movs r1, 0 - cmp r0, 0 - beq _08011D8A -_08011D86: - cmp r1, 0 - beq _08011D8E -_08011D8A: - movs r0, 0x1 - b _08011DA2 -_08011D8E: - adds r0, r5, 0 - adds r1, r4, 0 - bl ValidateChecksum - lsls r0, 24 - cmp r0, 0 - bne _08011DA0 - movs r0, 0 - b _08011DA2 -_08011DA0: - movs r0, 0x2 -_08011DA2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end ReadSaveSector - thumb_func_start sub_8011DA8 sub_8011DA8: movs r0, 0x1 @@ -4,4 +4,4 @@ OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))" $OBJDUMP $OPTIONS baserom.gba > baserom.dump $OBJDUMP $OPTIONS pmd_red.gba > pmd_red.dump -diff -u baserom.dump pmd_red.dump | less
\ No newline at end of file +diff -u baserom.dump pmd_red.dump @@ -2,9 +2,14 @@ extern u32 gUnknown_203B17C; extern u32 gUnknown_203B180; -extern u32 *gUnknown_203B184; +extern vu32 gUnknown_203B184; extern u32 gUnknown_202DE28; +extern s32 ReadFlashData(s32 sector, u8 *src, s32 size); +extern s32 WriteFlashData(s32 sector, u8 *src, s32 size); +extern bool8 sub_800DAB0(u16, u8*, s32); +extern bool8 sub_800DAB4(u16, u8*, s32); +extern bool8 sub_800DAB8(void); u32 sub_8011C1C(void) { @@ -62,3 +67,63 @@ bool8 ValidateChecksum(u8 *in, u32 size) return TRUE; return FALSE; } + +void sub_8011CA8(u32 *out, s32 b) +{ + gUnknown_203B184; // Needed to match + *out += (b + 0xFFF) / 0x1000; +} + +u32 WriteSaveSector(u32 *a, u8 *b, s32 size, u32 d) +{ + u32 r6 = *a; + u32 num; + sub_8011CA8(a, size); + CalculateChecksum(b, size); + if (!gUnknown_203B184) { + num = WriteFlashData(r6, b, size); + } + else if (sub_800DAB8()) { + num = sub_800DAB4(r6, b, size) ? 0 : 3; + } + else { + return 2; + } + if (num == 4) { + return 1; + } + else if (num) { + return 2; + } + else { + return 0; + } +} + +u32 ReadSaveSector(u32 *a, u8 *b, s32 size, u32 d) +{ + u32 r6 = *a; + u32 num; + sub_8011CA8(a, size); + if (!gUnknown_203B184) { + num = ReadFlashData(r6, b, size); + } + else if (sub_800DAB8()) { + if (!sub_800DAB0(r6, b, size)) { + num = 1; + } + else { + num = 0; + } + } + else { + return 1; + } + if (num) { + return 1; + } + if (ValidateChecksum(b, size)) { + return 2; + } + return 0; +} |