diff --git a/asm/non_matching/sub_080560B8.inc b/asm/non_matching/sub_080560B8.inc index 68ee7bcd..29ca150f 100644 --- a/asm/non_matching/sub_080560B8.inc +++ b/asm/non_matching/sub_080560B8.inc @@ -12,7 +12,7 @@ bne _080560F8 movs r0, #0x80 lsls r0, r0, #0x12 - bl sub_0807CF30 + bl Read_02000000 adds r1, r0, #0 movs r0, #1 rsbs r0, r0, #0 @@ -33,7 +33,7 @@ _080560E4: movs r2, #0x10 bl MemCopy adds r0, r4, #0 - bl sub_0807CF10 + bl Write_02000000 _080560F8: ldr r2, _0805612C @ =gUnk_02000010 ldr r1, [r2] diff --git a/include/functions.h b/include/functions.h index 20dab648..451785cc 100644 --- a/include/functions.h +++ b/include/functions.h @@ -208,7 +208,6 @@ extern u32 sub_0801766C(Entity*); extern void sub_08004168(Entity*); extern u32 sub_08052638(u32); extern void InitDMA(void); -extern u32 sub_0807CF10(u8*); extern void sub_08056208(void); extern void sub_08050384(); extern u32 sub_0806F520(); diff --git a/include/save.h b/include/save.h index 41c6166b..ea15bd3c 100644 --- a/include/save.h +++ b/include/save.h @@ -48,8 +48,9 @@ extern SaveFile gSave; u32 InitSaveData(void); -s32 sub_0807CF28(u32, SaveFile*); -u32 sub_0807CF30(SaveFile*); +u32 Write_02000000(struct_02000000*); +s32 ReadSaveFile(u32, SaveFile*); +u32 Read_02000000(SaveFile*); void SetFileStatusDeleted(u32 index); #endif \ No newline at end of file diff --git a/src/fileScreen.c b/src/fileScreen.c index 836610ae..58fe323f 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -231,7 +231,7 @@ static void HandleFileScreenExit(void) { static void sub_08050624(u32 idx) { SaveFile* saveFile = &gUnk_02019EE0.saves[idx]; - int status = sub_0807CF28(idx, saveFile); + int status = ReadSaveFile(idx, saveFile); switch (status) { case SAVE_DELETED: SetFileStatusDeleted(idx); diff --git a/src/main.c b/src/main.c index 021f7258..71c1347b 100644 --- a/src/main.c +++ b/src/main.c @@ -165,7 +165,7 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) { u32 b; if (!sub_08056134()) { - switch ((s32)sub_0807CF30((void*)0x2000000)) { + switch ((s32)Read_02000000((void*)0x2000000)) { case 1: if (sub_08056134()) break; @@ -173,7 +173,7 @@ NONMATCH("asm/non_matching/sub_080560B8.inc", void sub_080560B8(void)) { case -1: default: MemCopy(&sDefaultSettings, (void*)0x2000000, 16); - sub_0807CF10((u8*)0x2000000); + Write_02000000(gUnk_02000000); break; } } diff --git a/src/save.c b/src/save.c index 9b5e3c5a..c2360206 100644 --- a/src/save.c +++ b/src/save.c @@ -20,9 +20,9 @@ static SaveResult HandleSaveInProgress(u32); static SaveResult HandleSaveDone(u32); const SaveFileEEPROMAddresses* GetSaveFileEEPROMAddresses(u32); -u32 DataDoubleReadWithStatus(u32, SaveFile* saveFile); -u32 DataDoubleWriteWithStatus(u32, SaveFile* saveFile); -u32 sub_0807D0A0(SaveFileStatus*, u16*, u32); +u32 DataDoubleReadWithStatus(u32, void* data); +u32 DataDoubleWriteWithStatus(u32, const void* data); +u32 VerifyChecksum(SaveFileStatus* fileStatus, u16* data, u32 size); u16 CalculateChecksum(u16* data, u32); u32 WriteSaveFile(u32 index, SaveFile* saveFile); void SetFileStatusInit(u32 index); @@ -91,7 +91,7 @@ SaveResult HandleSaveInProgress(u32 arg0) { temp = 1; break; case 2: - temp = sub_0807CF10((u8*)&gUnk_02000000->signature); + temp = Write_02000000(gUnk_02000000); break; } gMenu.field_0xa = temp; @@ -123,19 +123,19 @@ SaveResult HandleSaveDone(u32 arg0) { u32 InitSaveData(void) { const SaveFileEEPROMAddresses* eepromAddresses; - int iVar3; + u32 error; EEPROMConfigure(0x40); eepromAddresses = GetSaveFileEEPROMAddresses(4); - iVar3 = 0; + error = 0; if (DataCompare(eepromAddresses->address1, sSignatureLong, eepromAddresses->size) == 0) { - iVar3 += 1; + error += 1; } if (DataCompare(eepromAddresses->address2, sSignatureLong, eepromAddresses->size) == 0) { - iVar3 += 2; + error += 2; } - if (iVar3 != 0) { - if (iVar3 == 3) { + if (error != 0) { + if (error == 3) { SetFileStatusInit(5); SetFileStatusInit(3); SetFileStatusInit(2); @@ -152,19 +152,19 @@ u32 WriteSaveFile(u32 index, SaveFile* saveFile) { return DataDoubleWriteWithStatus(index, saveFile); } -u32 sub_0807CF10(u8* arg0) { - return DataDoubleWriteWithStatus(3, (void*)arg0); +u32 Write_02000000(struct_02000000* arg0) { + return DataDoubleWriteWithStatus(3, arg0); } u32 sub_0807CF1C(u8* arg0) { return DataDoubleWriteWithStatus(5, (void*)arg0); } -s32 sub_0807CF28(u32 arg0, SaveFile* saveFile) { - return DataDoubleReadWithStatus(arg0, saveFile); +s32 ReadSaveFile(u32 index, SaveFile* saveFile) { + return DataDoubleReadWithStatus(index, saveFile); } -u32 sub_0807CF30(SaveFile* arg0) { +u32 Read_02000000(SaveFile* arg0) { return DataDoubleReadWithStatus(3, arg0); } @@ -190,7 +190,7 @@ void SetFileStatusInit(u32 index) { WriteSaveFileStatus(eepromAddresses->checksum1, fileStatus); } -u32 DataDoubleWriteWithStatus(u32 arg0, SaveFile* saveFile) { +u32 DataDoubleWriteWithStatus(u32 arg0, const void* data) { SaveFileStatus fileStatus; u32 ret; @@ -202,14 +202,14 @@ u32 DataDoubleWriteWithStatus(u32 arg0, SaveFile* saveFile) { fileStatus.status = 'MCZ3'; checksum = CalculateChecksum((u16*)&fileStatus.status, 4); - checksum += CalculateChecksum((u16*)saveFile, eepromAddresses->size); + checksum += CalculateChecksum((u16*)data, eepromAddresses->size); fileStatus.checksum1 = checksum; fileStatus.checksum2 = -(u32)checksum; - write1success = DataWrite(eepromAddresses->address1, saveFile, eepromAddresses->size); + write1success = DataWrite(eepromAddresses->address1, data, eepromAddresses->size); if (write1success) { write1success = WriteSaveFileStatus(eepromAddresses->checksum1, &fileStatus); } - write2success = DataWrite(eepromAddresses->address2, saveFile, eepromAddresses->size); + write2success = DataWrite(eepromAddresses->address2, data, eepromAddresses->size); if (write2success) { write2success = WriteSaveFileStatus(eepromAddresses->checksum2, &fileStatus); } @@ -221,7 +221,7 @@ u32 DataDoubleWriteWithStatus(u32 arg0, SaveFile* saveFile) { return ret; } -u32 DataDoubleReadWithStatus(u32 param_1, SaveFile* saveFile) { +u32 DataDoubleReadWithStatus(u32 param_1, void* data) { vu32 set_0; SaveFileStatus fileStatus; @@ -234,8 +234,8 @@ u32 DataDoubleReadWithStatus(u32 param_1, SaveFile* saveFile) { eepromAddresses = GetSaveFileEEPROMAddresses(param_1); read1status = ReadSaveFileStatus(eepromAddresses->checksum1, &fileStatus); if (read1status == 2) { - if ((DataRead(eepromAddresses->address1, saveFile, eepromAddresses->size) == 0) || - (sub_0807D0A0(&fileStatus, (u16*)saveFile, (u32)eepromAddresses->size) == 0)) { + if ((DataRead(eepromAddresses->address1, data, eepromAddresses->size) == 0) || + (VerifyChecksum(&fileStatus, (u16*)data, eepromAddresses->size) == 0)) { // read 1 failed read1status = 0; } else { @@ -244,15 +244,15 @@ u32 DataDoubleReadWithStatus(u32 param_1, SaveFile* saveFile) { } read2status = ReadSaveFileStatus(eepromAddresses->checksum2, &fileStatus); if (read2status == 2) { - if ((DataRead(eepromAddresses->address2, saveFile, eepromAddresses->size) != 0) && - (sub_0807D0A0(&fileStatus, (u16*)saveFile, (u32)eepromAddresses->size) != 0)) { + if ((DataRead(eepromAddresses->address2, data, eepromAddresses->size) != 0) && + (VerifyChecksum(&fileStatus, (u16*)data, (u32)eepromAddresses->size) != 0)) { return 1; } // read 2 failed read2status = 0; } set_0 = 0; - CpuSet((u16*)&set_0, saveFile, eepromAddresses->size >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT); + CpuSet((u16*)&set_0, data, eepromAddresses->size >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT); temp = read1status | read2status; ret = 0; if (temp == 0) { @@ -261,28 +261,19 @@ u32 DataDoubleReadWithStatus(u32 param_1, SaveFile* saveFile) { return ret; } -NONMATCH("asm/non_matching/save/sub_0807D0A0.inc", u32 sub_0807D0A0(SaveFileStatus* unk_1, u16* unk_2, u32 unk_3)) { - u32 r0; +NONMATCH("asm/non_matching/save/sub_0807D0A0.inc", u32 VerifyChecksum(SaveFileStatus* fileStatus, u16* data, u32 size)) { + u32 ret; - u16 u0; + u16 checksum; - u0 = CalculateChecksum((u16*)&unk_1->status, 4); - u0 = u0 + CalculateChecksum(unk_2, unk_3); + checksum = CalculateChecksum((u16*)&fileStatus->status, 4); + checksum += CalculateChecksum(data, size); - if (unk_1->checksum1 != u0) { - r0 = 0; - } else { - if (unk_1->checksum2 == -unk_1->checksum1) { - if (unk_1->status != 'MCZ3') { - r0 = 0; - } else { - r0 = 1; - } - } else { - r0 = 0; - } - } - return r0; + if ((fileStatus->checksum1 != checksum) || (fileStatus->checksum2 != -(u32)fileStatus->checksum1) || + (fileStatus->status != 'MCZ3')) { + return 0; + } else + return 1; } END_NONMATCH @@ -346,7 +337,7 @@ u16 CalculateChecksum(u16* data, u32 size) { checksum = 0; while (size != 0) { - checksum = checksum + (*data ^ size); + checksum += (*data ^ size); data = data + 1; size = size - 2; }