From 754e7646bb070a0423e90b6325ff0e1230df369a Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Thu, 7 May 2026 23:04:50 +0100 Subject: [PATCH] sa1: match WriteSaveGame --- asm/non_matching/game/save__WriteSaveGame.inc | 133 ------------------ src/game/sa1/save.c | 14 +- 2 files changed, 5 insertions(+), 142 deletions(-) delete mode 100644 asm/non_matching/game/save__WriteSaveGame.inc diff --git a/asm/non_matching/game/save__WriteSaveGame.inc b/asm/non_matching/game/save__WriteSaveGame.inc deleted file mode 100644 index 5157c5962..000000000 --- a/asm/non_matching/game/save__WriteSaveGame.inc +++ /dev/null @@ -1,133 +0,0 @@ -.include "constants/constants.inc" - -.syntax unified -.text - push {r4, r5, r6, lr} - ldr r0, _08012DE0 @ =gFlags - ldr r0, [r0] - movs r1, #0x80 - lsls r1, r1, #1 - ands r0, r1 - cmp r0, #0 - bne _08012E0E_return_0 - ldr r6, _08012DE4 @ =gUsedSaveSectorID - movs r1, #0 - ldrsb r1, [r6, r1] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - beq _08012E1C - movs r4, #0x86 - lsls r4, r4, #3 - adds r0, r4, #0 - bl EwramMalloc - adds r5, r0, #0 @ r5 = sectorBuffer - movs r0, #0 - ldrsb r0, [r6, r0] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - movs r1, #0 - adds r2, r5, #0 - adds r3, r4, #0 - bl ReadFlash - movs r4, #1 - movs r2, #0 - ldr r0, _08012DE8 @ =gLoadedSaveGame - ldrb r1, [r5] - b _08012DFC - .align 2, 0 -_08012DE0: .4byte gFlags -_08012DE4: .4byte gUsedSaveSectorID -_08012DE8: .4byte gLoadedSaveGame -_08012DEC_loop: - adds r2, #1 - ldr r0, _08012E14 @ =0x0000042F - cmp r2, r0 - bhi _08012E04 - adds r1, r5, r2 - ldr r0, _08012E18 @ =gLoadedSaveGame - adds r0, r2, r0 - ldrb r1, [r1] -_08012DFC: - ldrb r0, [r0] - cmp r1, r0 - beq _08012DEC_loop - movs r4, #0 -_08012E04: - adds r0, r5, #0 - bl EwramFree - cmp r4, #0 - beq _08012E1C -_08012E0E_return_0: - movs r0, #0 - b _08012E8A_return - .align 2, 0 -_08012E14: .4byte 0x0000042F -_08012E18: .4byte gLoadedSaveGame -_08012E1C: - ldr r0, _08012E34 @ =gUsedSaveSectorID - ldrb r0, [r0] - adds r0, #1 - lsls r0, r0, #0x18 - lsrs r5, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #9 - bne _08012E3C - ldr r0, _08012E38 @ =EraseFlashSector - ldr r1, [r0] - movs r0, #0 - b _08012E52 - .align 2, 0 -_08012E34: .4byte gUsedSaveSectorID -_08012E38: .4byte EraseFlashSector -_08012E3C: - cmp r0, #9 - ble _08012E42 - movs r5, #0 -_08012E42: - ldr r1, _08012E90 @ =EraseFlashSector - lsls r0, r5, #0x18 - asrs r0, r0, #8 - movs r2, #0x80 - lsls r2, r2, #9 - adds r0, r0, r2 - lsrs r0, r0, #0x10 - ldr r1, [r1] -_08012E52: - bl _call_via_r1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0 - bne _08012E8A_return - ldr r4, _08012E94 @ =gLoadedSaveGame - ldr r0, _08012E98 @ =0x4F524950 - str r0, [r4] - adds r0, r4, #0 - bl CalculateChecksum - ldr r2, _08012E9C @ =0x0000042C - adds r1, r4, r2 - str r0, [r1] - ldr r0, _08012EA0 @ =gUsedSaveSectorID - strb r5, [r0] - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - adds r2, #4 - adds r1, r4, #0 - bl ProgramFlashSectorAndVerifyNBytes - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 -_08012E8A_return: - pop {r4, r5, r6} - pop {r1} - bx r1 - .align 2, 0 -_08012E90: .4byte EraseFlashSector -_08012E94: .4byte gLoadedSaveGame -_08012E98: .4byte 0x4F524950 -_08012E9C: .4byte 0x0000042C -_08012EA0: .4byte gUsedSaveSectorID - -.syntax divided diff --git a/src/game/sa1/save.c b/src/game/sa1/save.c index 780432f95..0cff1b6bc 100644 --- a/src/game/sa1/save.c +++ b/src/game/sa1/save.c @@ -83,8 +83,7 @@ bool32 SaveGameExists(void) return res; } -// (97.63%) https://decomp.me/scratch/Sq2Ec -NONMATCH("asm/non_matching/game/save__WriteSaveGame.inc", u16 WriteSaveGame(void)) +u16 WriteSaveGame(void) { s32 i; s8 sectorID; @@ -101,10 +100,8 @@ NONMATCH("asm/non_matching/game/save__WriteSaveGame.inc", u16 WriteSaveGame(void sectorIsUpToDate = TRUE; for (i = 0; i < sizeof(struct SaveSectorData); i++) { - u8 *dataBuffer = sectorBuffer + i; - u8 *dataIWRAM = (u8 *)LOADED_SAVE + i; - - if (*dataBuffer != *dataIWRAM) { + bool32 neq = sectorBuffer[i] != ((u8 *)LOADED_SAVE)[i]; + if (neq) { sectorIsUpToDate = FALSE; break; } @@ -133,12 +130,11 @@ NONMATCH("asm/non_matching/game/save__WriteSaveGame.inc", u16 WriteSaveGame(void LOADED_SAVE->security = SECTOR_SECURITY_NUM; LOADED_SAVE->checksum = CalculateChecksum(LOADED_SAVE); gUsedSaveSectorID = sectorID; - - result = ProgramFlashSectorAndVerifyNBytes(gUsedSaveSectorID, LOADED_SAVE, sizeof(LOADED_SAVE->security)); + result = ProgramFlashSectorAndVerifyNBytes(gUsedSaveSectorID, LOADED_SAVE, sizeof(*LOADED_SAVE)); } + return result; } -END_NONMATCH // (100.0%) https://decomp.me/scratch/9fyQQ bool32 RegisterTimeRecord(TimeRecord newRecord)