summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom_81258BC.s181
-rw-r--r--src/save.c84
2 files changed, 84 insertions, 181 deletions
diff --git a/asm/rom_81258BC.s b/asm/rom_81258BC.s
index 8b44e6ead..70a9abbd7 100644
--- a/asm/rom_81258BC.s
+++ b/asm/rom_81258BC.s
@@ -6,187 +6,6 @@
.text
- thumb_func_start unref_sub_8125F4C
-unref_sub_8125F4C: @ 8125F4C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r2, r4, 0
- movs r1, 0
- ldr r6, _08125F88
- movs r5, 0
- ldr r3, _08125F8C
-_08125F5A:
- adds r0, r2, r1
- strb r5, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r3
- bls _08125F5A
- ldrb r0, [r6]
- movs r3, 0x80
- lsls r3, 5
- movs r1, 0
- adds r2, r4, 0
- bl ReadFlash
- ldr r1, _08125F90
- adds r0, r4, r1
- ldr r1, [r0]
- ldr r0, _08125F94
- cmp r1, r0
- bne _08125F98
- movs r0, 0x1
- b _08125F9A
- .align 2, 0
-_08125F88: .4byte gUnknown_08401E24
-_08125F8C: .4byte 0x00000fff
-_08125F90: .4byte 0x00000ff4
-_08125F94: .4byte 0x08012025 @ TODO: figure out what this represents
-_08125F98:
- movs r0, 0
-_08125F9A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8125F4C
-
- thumb_func_start unref_sub_8125FA0
-unref_sub_8125FA0: @ 8125FA0
- push {r4-r7,lr}
- movs r0, 0
- bl sub_8125D44
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r7, _08125FD0
- ldr r6, _08125FD4
-_08125FB2:
- adds r0, r4, r6
- ldrb r0, [r0]
- ldr r1, [r7]
- bl _call_via_r1
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _08125FB2
- cmp r5, 0xFF
- bne _08125FD8
- movs r0, 0x3
- b _08125FE8
- .align 2, 0
-_08125FD0: .4byte EraseFlashSector
-_08125FD4: .4byte gUnknown_08401E24
-_08125FD8:
- cmp r5, 0x3
- beq _08125FE6
- movs r0, 0
- bl sub_8125EC8
- movs r0, 0x1
- b _08125FE8
-_08125FE6:
- movs r0, 0x2
-_08125FE8:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8125FA0
-
- thumb_func_start unref_sub_8125FF0
-unref_sub_8125FF0: @ 8125FF0
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r3, r1, 16
- ldr r4, _08126048
- movs r2, 0
- ldr r7, _0812604C
- movs r5, 0
- ldr r1, _08126050
-_08126002:
- adds r0, r4, r2
- strb r5, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r1
- bls _08126002
- ldr r0, _08126054
- adds r1, r4, r0
- ldr r0, _08126058
- str r0, [r1]
- movs r2, 0
- cmp r2, r3
- bcs _08126030
-_0812601E:
- adds r1, r4, r2
- adds r0, r6, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r3
- bcc _0812601E
-_08126030:
- ldrb r0, [r7]
- movs r2, 0x80
- lsls r2, 5
- adds r1, r4, 0
- bl ProgramFlashSectorAndVerifyNBytes
- ldr r1, _0812605C
- str r0, [r1]
- cmp r0, 0
- bne _08126060
- movs r0, 0x1
- b _08126062
- .align 2, 0
-_08126048: .4byte 0x02000000
-_0812604C: .4byte gUnknown_08401E24
-_08126050: .4byte 0x00000fff
-_08126054: .4byte 0x00000ff4
-_08126058: .4byte 0x08012025 @ TODO: figure out what this represents
-_0812605C: .4byte gUnknown_02039284
-_08126060:
- movs r0, 0xFF
-_08126062:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8125FF0
-
- thumb_func_start unref_sub_8126068
-unref_sub_8126068: @ 8126068
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl ProgramFlashSectorAndVerify
- cmp r0, 0
- bne _0812607A
- movs r0, 0x1
- b _0812607C
-_0812607A:
- movs r0, 0xFF
-_0812607C:
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8126068
-
- thumb_func_start unref_sub_8126080
-unref_sub_8126080: @ 8126080
- push {lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0x80
- lsls r3, 5
- movs r1, 0
- bl ReadFlash
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end unref_sub_8126080
-
thumb_func_start sub_8126098
sub_8126098: @ 8126098
push {r4,lr}
diff --git a/src/save.c b/src/save.c
index e448ab079..456bfdbe4 100644
--- a/src/save.c
+++ b/src/save.c
@@ -16,11 +16,20 @@ struct SaveSection
u32 counter;
};
+struct UnkSaveSection
+{
+ u8 data[0xFF4];
+ u32 unknown;
+};
+
extern u32 sub_8053108(u8);
extern void sav12_xor_increment(u8);
+extern u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, u8 *src, u32 n);
extern struct SaveSection unk_2000000;
+extern u32 gUnknown_02039284;
+
extern u32 gUnknown_3004820;
extern u16 gUnknown_03005E9C;
@@ -35,6 +44,7 @@ extern u32 gUnknown_03005EBC;
extern struct SaveSectionLocation gSaveSectionLocations[];
extern struct SaveSectionLocation gHallOfFameSaveSectionLocations[];
+extern u8 gUnknown_08401E24[];
u8 sub_81252D8(u16, struct SaveSectionLocation *);
u8 sub_8125440(u8, u8 *);
@@ -701,3 +711,77 @@ u8 sub_8125EC8(u8 a1)
return result;
}
+
+bool8 unref_sub_8125F4C(struct UnkSaveSection *a1)
+{
+ u16 i;
+ char *raw = (char *)a1;
+
+ for (i = 0; i < 0x1000; i++)
+ raw[i] = 0;
+
+ ReadFlash(gUnknown_08401E24[0], 0, a1, 4096);
+
+ if (a1->unknown != 0x8012025)
+ return FALSE;
+
+ return TRUE;
+}
+
+u8 unref_sub_8125FA0(void)
+{
+ u16 i;
+ u8 v0 = sub_8125D44(0);
+
+ for (i = 0; i < 2; i++)
+ EraseFlashSector(gUnknown_08401E24[i]);
+
+ if (v0 == 255)
+ {
+ return 3;
+ }
+ else if (v0 == 3)
+ {
+ return 2;
+ }
+ else
+ {
+ sub_8125EC8(0);
+ return 1;
+ }
+}
+
+u8 unref_sub_8125FF0(u8 *data, u16 size)
+{
+ u16 i;
+ struct UnkSaveSection *section = (struct UnkSaveSection *)&unk_2000000;
+
+ for (i = 0; i < 0x1000; i++)
+ ((char *)section)[i] = 0;
+
+ section->unknown = 0x8012025;
+
+ for (i = 0; i < size; i++)
+ section->data[i] = data[i];
+
+ gUnknown_02039284 = ProgramFlashSectorAndVerifyNBytes(gUnknown_08401E24[0], (u8 *)section, 0x1000);
+
+ if (gUnknown_02039284)
+ return 255;
+ else
+ return 1;
+}
+
+u8 unref_sub_8126068(u8 sector, u8 *data, u32 size)
+{
+ if (ProgramFlashSectorAndVerify(sector, data, size))
+ return 255;
+ else
+ return 1;
+}
+
+u8 unref_sub_8126080(u8 sector, u8 *data)
+{
+ ReadFlash(sector, 0, data, 0x1000);
+ return 1;
+}