From c2ebc5a01e8a031a1c09d372fa298e84c9b8de67 Mon Sep 17 00:00:00 2001 From: Reonu Date: Thu, 15 Jul 2021 01:06:52 +0100 Subject: [PATCH] auto savefile padding --- src/buffers/buffers.c | 2 +- src/game/save_file.c | 2 +- src/game/save_file.h | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/buffers/buffers.c b/src/buffers/buffers.c index d37193e8..1ae6da92 100644 --- a/src/buffers/buffers.c +++ b/src/buffers/buffers.c @@ -28,6 +28,6 @@ ALIGNED8 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; // 0xc00 bytes for f3dex, 0x900 otherwise ALIGNED8 u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; // 0x200 bytes -ALIGNED8 struct SaveBuffer gSaveBuffer; +struct SaveBuffer __attribute__ ((aligned (8))) gSaveBuffer; // 0x190a0 bytes struct GfxPool gGfxPools[2]; diff --git a/src/game/save_file.c b/src/game/save_file.c index da3378eb..0ee411a5 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -20,7 +20,7 @@ #define MENU_DATA_MAGIC 0x4849 #define SAVE_FILE_MAGIC 0x4441 -STATIC_ASSERT(sizeof(struct SaveBuffer) == EEPROM_SIZE, "eeprom buffer size must match"); +//STATIC_ASSERT(sizeof(struct SaveBuffer) == EEPROM_SIZE, "eeprom buffer size must match"); extern struct SaveBuffer gSaveBuffer; diff --git a/src/game/save_file.h b/src/game/save_file.h index ae6fcf35..b6f73b9d 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -8,7 +8,14 @@ #include "course_table.h" -#define EEPROM_SIZE 0x200 +#if defined(SRAM) + #define EEPROM_SIZE 0x8000 +#elif defined(EEP16K) + #define EEPROM_SIZE 0x800 +#else + #define EEPROM_SIZE 0x200 +#endif + #define NUM_SAVE_FILES 4 struct SaveBlockSignature @@ -55,13 +62,13 @@ struct MainMenuSaveData #ifdef VERSION_EU u16 language; -#define SUBTRAHEND 8 +#define SUBTRAHEND 10 #else #define SUBTRAHEND 6 #endif // Pad to match the EEPROM size of 0x200 (10 bytes on JP/US, 8 bytes on EU) - u8 filler[EEPROM_SIZE / 2 - SUBTRAHEND - NUM_SAVE_FILES * (4 + sizeof(struct SaveFile))]; + //u8 filler[EEPROM_SIZE / 2 - SUBTRAHEND - NUM_SAVE_FILES * (4 + sizeof(struct SaveFile))]; struct SaveBlockSignature signature; }; @@ -74,6 +81,8 @@ struct SaveBuffer struct MainMenuSaveData menuData[2]; }; +STATIC_ASSERT(sizeof(struct SaveBuffer) <= EEPROM_SIZE, "ERROR: Save struct too big for specified save type"); + extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; extern s8 sUnusedGotGlobalCoinHiScore;