diff --git a/include/functions.h b/include/functions.h index 553d9ee6..4d1a3a4e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -213,7 +213,6 @@ extern void sub_0807CF48(u32); extern u32 sub_0807CF10(u8*); extern void sub_08056208(void); extern void sub_08050384(); -extern struct_0807D1C4* sub_0807D1C4(u32); extern void sub_0807CF68(u32); extern u32 sub_0807CF88(u32, u8*); extern u32 sub_0806F520(); diff --git a/src/save.c b/src/save.c index a22d9579..6ec84517 100644 --- a/src/save.c +++ b/src/save.c @@ -17,12 +17,13 @@ static SaveResult HandleSaveInProgress(u32); static SaveResult HandleSaveDone(u32); static SaveResult (*const sSaveHandlers[])(u32) = { HandleSaveInit, HandleSaveInProgress, HandleSaveDone }; +struct_0807D1C4* sub_0807D1C4(u32); u32 sub_0807D008(u32, SaveFile*); -u32 sub_0807D0A0(u16*, u16*, u32); -u32 sub_0807D0EC(u32, const char*); +u32 sub_0807D0A0(Thing*, u16*, u32); u32 sub_0807D128(const Thing*); u16 sub_0807D1A4(u16*, u32); +u32 sub_0807D0EC(u32 address, char* data); u32 sub_0807D184(u32 address, const u8* data); u32 DataRead(u32 address, void* data, u32 size); @@ -205,9 +206,9 @@ u32 sub_0807CF88(u32 arg0, u8* arg1) { return retval; } -NONMATCH("asm/non_matching/save/sub_0807D008.inc", u32 sub_0807D008(u32 param_1, SaveFile* saveFile)) { - u32 set_0; - char auStack32[8]; +u32 sub_0807D008(u32 param_1, SaveFile* saveFile) { + vu32 set_0; + Thing auStack32; struct_0807D1C4* unk_s; u32 t1; @@ -216,25 +217,25 @@ NONMATCH("asm/non_matching/save/sub_0807D008.inc", u32 sub_0807D008(u32 param_1, u32 temp; unk_s = sub_0807D1C4(param_1); - t1 = sub_0807D0EC(unk_s->field_0x2, auStack32); + t1 = sub_0807D0EC(unk_s->field_0x2, (char*)&auStack32); if (t1 == 2) { if ((DataRead(unk_s->field_0x6, (char*)saveFile, unk_s->field_0x0) == 0) || - (sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)unk_s->field_0x0) == 0)) { + (sub_0807D0A0(&auStack32, (u16*)saveFile, (u32)unk_s->field_0x0) == 0)) { t1 = 0; } else { return 1; } } - t2 = sub_0807D0EC(unk_s->field_0x4, auStack32); + t2 = sub_0807D0EC(unk_s->field_0x4, (char*)&auStack32); if (t2 == 2) { if ((DataRead(unk_s->field_0x8, (char*)saveFile, unk_s->field_0x0) != 0) && - (sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)unk_s->field_0x0) != 0)) { + (sub_0807D0A0(&auStack32, (u16*)saveFile, (u32)unk_s->field_0x0) != 0)) { return 1; } t2 = 0; } set_0 = 0; - CpuSet(&set_0, saveFile, unk_s->field_0x0 >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT); + CpuSet((u16*)&set_0, saveFile, unk_s->field_0x0 >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT); temp = t1 | t2; ret = 0; if (temp == 0) { @@ -242,47 +243,42 @@ NONMATCH("asm/non_matching/save/sub_0807D008.inc", u32 sub_0807D008(u32 param_1, } return ret; } -END_NONMATCH -NONMATCH("asm/non_matching/save/sub_0807D0A0.inc", u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3)) { - u32 r0; +NONMATCH("asm/non_matching/save/sub_0807D0A0.inc", u32 sub_0807D0A0(Thing* unk_1, u16* unk_2, u32 unk_3)) { + u32 r0; - u32* u32_1 = (u32*)unk_1; + u16 u0; - u16 u0; - u32 u1; + u0 = sub_0807D1A4((u16*)&unk_1->unk_3, 4); + u0 = u0 + sub_0807D1A4(unk_2, unk_3); - u0 = sub_0807D1A4(unk_1 + 2, 4); - u0 = u0 + sub_0807D1A4(unk_2, unk_3); - - u1 = unk_1[0]; - if (u1 != u0) { - r0 = 0; - } else { - if (unk_1[1] == (-(u1 << 0x10) >> 0x10)) { - if (*(u32_1 + 1) != 'MCZ3') { - r0 = 0; - } else { - r0 = 1; - } - } else { + if (unk_1->unk_1 != u0) { r0 = 0; + } else { + if (unk_1->unk_2 == -unk_1->unk_1) { + if (unk_1->unk_3 != 'MCZ3') { + r0 = 0; + } else { + r0 = 1; + } + } else { + r0 = 0; + } } - } - return r0; + return r0; } END_NONMATCH -u32 sub_0807D0EC(u32 unk_1, const char* unk_2) { +u32 sub_0807D0EC(u32 address, char* data) { u32 ret; - if (!DataRead(unk_1, unk_2, 8)) { + if (!DataRead(address, data, 8)) { ret = 0; } else { - ret = sub_0807D128((Thing*)unk_2); + ret = sub_0807D128((Thing*)data); } - if (!ret && DataRead(unk_1 + 8, unk_2, 8)) { - ret = sub_0807D128((Thing*)unk_2); + if (!ret && DataRead(address + 8, data, 8)) { + ret = sub_0807D128((Thing*)data); } return ret; }