summaryrefslogtreecommitdiff
path: root/src/save.c
diff options
context:
space:
mode:
authorKermalis <29823718+Kermalis@users.noreply.github.com>2019-08-10 22:06:31 -0400
committerKermalis <29823718+Kermalis@users.noreply.github.com>2019-08-10 22:06:31 -0400
commitc7188a70d8b0f1b7a8309d3af4d63719255eafb6 (patch)
tree4a51d4a0cfe7c9cbe063229181cb5534d06b0cad /src/save.c
parentd75a62af27b3cc472fdbd8facca146f2744d2572 (diff)
save.c - sub_8011CA8() to ReadSaveSector()
Diffstat (limited to 'src/save.c')
-rw-r--r--src/save.c67
1 files changed, 66 insertions, 1 deletions
diff --git a/src/save.c b/src/save.c
index 5d39bfe..037938a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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;
+}