save.c - sub_8011CA8() to ReadSaveSector()

This commit is contained in:
Kermalis 2019-08-10 22:06:31 -04:00
parent d75a62af27
commit c7188a70d8
3 changed files with 67 additions and 139 deletions

View File

@ -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

View File

@ -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
diff -u baserom.dump pmd_red.dump

View File

@ -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;
}