mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-10 02:54:24 +00:00
[iQue] Match z_sram (#2426)
* [iQue] z_sram: Use iQue-specific read/write macros * [iQue] z_sram: Make checksum a struct * [iQue] z_sram: Finish matching * Call the trigraph usage a bug * Fix bss * Sram_iQueReadWrite -> Sram_ReadWriteIQue * Use SRAM_HEADER_MAGIC for loop bound * Rename sZeldaMagic -> sSramDefaultHeader and use less char literals
This commit is contained in:
parent
4a205b9d4c
commit
d066586872
11 changed files with 106 additions and 53 deletions
2
Makefile
2
Makefile
|
@ -581,7 +581,7 @@ EGCS_O_FILES += $(BUILD_DIR)/src/code/z_construct.o
|
||||||
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_kanfont.o
|
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_kanfont.o
|
||||||
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_message.o
|
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_message.o
|
||||||
EGCS_O_FILES += $(BUILD_DIR)/src/code/z_parameter.o
|
EGCS_O_FILES += $(BUILD_DIR)/src/code/z_parameter.o
|
||||||
# EGCS_O_FILES += $(BUILD_DIR)/src/code/z_sram.o
|
EGCS_O_FILES += $(BUILD_DIR)/src/code/z_sram.o
|
||||||
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_En_Mag/z_en_mag.o
|
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_En_Mag/z_en_mag.o
|
||||||
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_End_Title/z_end_title.o
|
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_End_Title/z_end_title.o
|
||||||
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_Fishing/z_fishing.o
|
EGCS_O_FILES += $(BUILD_DIR)/src/overlays/actors/ovl_Fishing/z_fishing.o
|
||||||
|
|
|
@ -84,6 +84,10 @@ typedef struct Inventory {
|
||||||
/* 0x5C */ s16 gsTokens;
|
/* 0x5C */ s16 gsTokens;
|
||||||
} Inventory; // size = 0x5E
|
} Inventory; // size = 0x5E
|
||||||
|
|
||||||
|
typedef struct Checksum {
|
||||||
|
/* 0x00 */ u16 value;
|
||||||
|
} Checksum; // size = 0x02
|
||||||
|
|
||||||
typedef struct SavedSceneFlags {
|
typedef struct SavedSceneFlags {
|
||||||
/* 0x00 */ u32 chest;
|
/* 0x00 */ u32 chest;
|
||||||
/* 0x04 */ u32 swch;
|
/* 0x04 */ u32 swch;
|
||||||
|
@ -254,7 +258,7 @@ typedef struct SaveInfo {
|
||||||
/* 0x12AA 0x12C6 */ u8 scarecrowSpawnSong[0x80];
|
/* 0x12AA 0x12C6 */ u8 scarecrowSpawnSong[0x80];
|
||||||
/* 0x132A 0x1346 */ char unk_1346[0x02];
|
/* 0x132A 0x1346 */ char unk_1346[0x02];
|
||||||
/* 0x132C 0x1348 */ HorseData horseData;
|
/* 0x132C 0x1348 */ HorseData horseData;
|
||||||
/* 0x1336 0x1352 */ u16 checksum; // "check_sum"
|
/* 0x1336 0x1352 */ Checksum checksum; // "check_sum"
|
||||||
} SaveInfo;
|
} SaveInfo;
|
||||||
|
|
||||||
typedef struct Save {
|
typedef struct Save {
|
||||||
|
|
|
@ -14,7 +14,7 @@ typedef enum SramHeaderField {
|
||||||
/* 0x00 */ SRAM_HEADER_SOUND,
|
/* 0x00 */ SRAM_HEADER_SOUND,
|
||||||
/* 0x01 */ SRAM_HEADER_ZTARGET,
|
/* 0x01 */ SRAM_HEADER_ZTARGET,
|
||||||
/* 0x02 */ SRAM_HEADER_LANGUAGE,
|
/* 0x02 */ SRAM_HEADER_LANGUAGE,
|
||||||
/* 0x03 */ SRAM_HEADER_MAGIC // must be the value of `sZeldaMagic` for save to be considered valid
|
/* 0x03 */ SRAM_HEADER_MAGIC // must be the value in `sSramDefaultHeader` for save to be considered valid
|
||||||
} SramHeaderField;
|
} SramHeaderField;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
||||||
"ntsc-1.2:70 pal-1.0:68 pal-1.1:68"
|
"ntsc-1.2:68 pal-1.0:66 pal-1.1:66"
|
||||||
|
|
||||||
StackEntry sDmaMgrStackInfo;
|
StackEntry sDmaMgrStackInfo;
|
||||||
OSMesgQueue sDmaMgrMsgQueue;
|
OSMesgQueue sDmaMgrMsgQueue;
|
||||||
|
|
|
@ -24,7 +24,7 @@ extern struct IrqMgr gIrqMgr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma increment_block_number "gc-eu:144 gc-eu-mq:144 gc-jp:144 gc-jp-ce:144 gc-jp-mq:144 gc-us:144 gc-us-mq:144" \
|
#pragma increment_block_number "gc-eu:144 gc-eu-mq:144 gc-jp:144 gc-jp-ce:144 gc-jp-mq:144 gc-us:144 gc-us-mq:144" \
|
||||||
"ntsc-1.0:130 ntsc-1.1:130 ntsc-1.2:130 pal-1.0:128 pal-1.1:128"
|
"ntsc-1.0:127 ntsc-1.1:127 ntsc-1.2:127 pal-1.0:125 pal-1.1:125"
|
||||||
|
|
||||||
extern u8 _buffersSegmentEnd[];
|
extern u8 _buffersSegmentEnd[];
|
||||||
|
|
||||||
|
|
|
@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
#pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \
|
||||||
"ntsc-1.0:133 ntsc-1.1:133 ntsc-1.2:133 pal-1.0:131 pal-1.1:131"
|
"ntsc-1.0:130 ntsc-1.1:130 ntsc-1.2:130 pal-1.0:128 pal-1.1:128"
|
||||||
|
|
||||||
s32 Camera_KeepOn4(Camera* camera) {
|
s32 Camera_KeepOn4(Camera* camera) {
|
||||||
static Vec3f D_8015BD50;
|
static Vec3f D_8015BD50;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:224 gc-jp-ce:224 gc-jp-mq:224 gc-us:224 gc-us-mq:224" \
|
#pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:192 gc-jp-ce:192 gc-jp-mq:192 gc-us:192 gc-us-mq:192" \
|
||||||
"ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:224 pal-1.1:224"
|
"ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:224 pal-1.1:224"
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma increment_block_number "gc-eu:220 gc-eu-mq:220 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \
|
#pragma increment_block_number "gc-eu:216 gc-eu-mq:216 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \
|
||||||
"ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:228 pal-1.1:228"
|
"ntsc-1.0:208 ntsc-1.1:208 ntsc-1.2:208 pal-1.0:228 pal-1.1:228"
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "ultra64.h"
|
#include "ultra64.h"
|
||||||
|
|
|
@ -17,6 +17,30 @@
|
||||||
|
|
||||||
#define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE))
|
#define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE))
|
||||||
|
|
||||||
|
#if !PLATFORM_IQUE
|
||||||
|
|
||||||
|
#define SRAM_READ(addr, dramAddr, size) SsSram_ReadWrite(addr, dramAddr, size, OS_READ)
|
||||||
|
#define SRAM_WRITE(addr, dramAddr, size) SsSram_ReadWrite(addr, dramAddr, size, OS_WRITE)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
void Sram_ReadWriteIQue(s32 addr, void* dramAddr, size_t size, s32 direction) {
|
||||||
|
void* sramAddr;
|
||||||
|
|
||||||
|
addr -= OS_K1_TO_PHYSICAL(0xA8000000);
|
||||||
|
sramAddr = (void*)(__osBbSramAddress + addr);
|
||||||
|
if (direction == OS_READ) {
|
||||||
|
bcopy(sramAddr, dramAddr, size);
|
||||||
|
} else if (direction == OS_WRITE) {
|
||||||
|
bcopy(dramAddr, sramAddr, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SRAM_READ(addr, dramAddr, size) Sram_ReadWriteIQue(addr, dramAddr, size, OS_READ)
|
||||||
|
#define SRAM_WRITE(addr, dramAddr, size) Sram_ReadWriteIQue(addr, dramAddr, size, OS_WRITE)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
u16 gSramSlotOffsets[] = {
|
u16 gSramSlotOffsets[] = {
|
||||||
SLOT_OFFSET(0),
|
SLOT_OFFSET(0),
|
||||||
SLOT_OFFSET(1),
|
SLOT_OFFSET(1),
|
||||||
|
@ -27,7 +51,23 @@ u16 gSramSlotOffsets[] = {
|
||||||
SLOT_OFFSET(5),
|
SLOT_OFFSET(5),
|
||||||
};
|
};
|
||||||
|
|
||||||
static char sZeldaMagic[] = { '\0', '\0', '\0', '\x98', '\x09', '\x10', '\x21', 'Z', 'E', 'L', 'D', 'A' };
|
static u8 sSramDefaultHeader[] = {
|
||||||
|
// TODO: use enums for these
|
||||||
|
0, // SRAM_HEADER_SOUND
|
||||||
|
0, // SRAM_HEADER_ZTARGET
|
||||||
|
0, // SRAM_HEADER_LANGUAGE
|
||||||
|
|
||||||
|
// SRAM_HEADER_MAGIC
|
||||||
|
0x98,
|
||||||
|
0x09,
|
||||||
|
0x10,
|
||||||
|
0x21,
|
||||||
|
'Z',
|
||||||
|
'E',
|
||||||
|
'L',
|
||||||
|
'D',
|
||||||
|
'A',
|
||||||
|
};
|
||||||
|
|
||||||
static SavePlayerData sNewSavePlayerData = {
|
static SavePlayerData sNewSavePlayerData = {
|
||||||
{ '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
|
{ '\0', '\0', '\0', '\0', '\0', '\0' }, // newf
|
||||||
|
@ -138,15 +178,13 @@ static Inventory sNewSaveInventory = {
|
||||||
0, // gsTokens
|
0, // gsTokens
|
||||||
};
|
};
|
||||||
|
|
||||||
static u16 sNewSaveChecksum = 0;
|
static Checksum sNewSaveChecksum = { 0 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize new save.
|
* Initialize new save.
|
||||||
* This save has an empty inventory with 3 hearts and single magic.
|
* This save has an empty inventory with 3 hearts and single magic.
|
||||||
*/
|
*/
|
||||||
void Sram_InitNewSave(void) {
|
void Sram_InitNewSave(void) {
|
||||||
SaveContext* temp = &gSaveContext;
|
|
||||||
|
|
||||||
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
||||||
gSaveContext.save.totalDays = 0;
|
gSaveContext.save.totalDays = 0;
|
||||||
gSaveContext.save.bgsDayCount = 0;
|
gSaveContext.save.bgsDayCount = 0;
|
||||||
|
@ -154,8 +192,8 @@ void Sram_InitNewSave(void) {
|
||||||
gSaveContext.save.info.playerData = sNewSavePlayerData;
|
gSaveContext.save.info.playerData = sNewSavePlayerData;
|
||||||
gSaveContext.save.info.equips = sNewSaveEquips;
|
gSaveContext.save.info.equips = sNewSaveEquips;
|
||||||
gSaveContext.save.info.inventory = sNewSaveInventory;
|
gSaveContext.save.info.inventory = sNewSaveInventory;
|
||||||
|
gSaveContext.save.info.checksum = sNewSaveChecksum;
|
||||||
|
|
||||||
temp->save.info.checksum = sNewSaveChecksum;
|
|
||||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||||
gSaveContext.save.info.horseData.pos.y = 72;
|
gSaveContext.save.info.horseData.pos.y = 72;
|
||||||
|
@ -297,7 +335,7 @@ static Inventory sDebugSaveInventory = {
|
||||||
0, // gsTokens
|
0, // gsTokens
|
||||||
};
|
};
|
||||||
|
|
||||||
static u16 sDebugSaveChecksum = 0;
|
static Checksum sDebugSaveChecksum = { 0 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize debug save. This is also used on the Title Screen
|
* Initialize debug save. This is also used on the Title Screen
|
||||||
|
@ -309,8 +347,6 @@ static u16 sDebugSaveChecksum = 0;
|
||||||
* and set water level in Water Temple to lowest level.
|
* and set water level in Water Temple to lowest level.
|
||||||
*/
|
*/
|
||||||
void Sram_InitDebugSave(void) {
|
void Sram_InitDebugSave(void) {
|
||||||
SaveContext* temp = &gSaveContext;
|
|
||||||
|
|
||||||
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
||||||
gSaveContext.save.totalDays = 0;
|
gSaveContext.save.totalDays = 0;
|
||||||
gSaveContext.save.bgsDayCount = 0;
|
gSaveContext.save.bgsDayCount = 0;
|
||||||
|
@ -318,8 +354,8 @@ void Sram_InitDebugSave(void) {
|
||||||
gSaveContext.save.info.playerData = sDebugSavePlayerData;
|
gSaveContext.save.info.playerData = sDebugSavePlayerData;
|
||||||
gSaveContext.save.info.equips = sDebugSaveEquips;
|
gSaveContext.save.info.equips = sDebugSaveEquips;
|
||||||
gSaveContext.save.info.inventory = sDebugSaveInventory;
|
gSaveContext.save.info.inventory = sDebugSaveInventory;
|
||||||
|
gSaveContext.save.info.checksum = sDebugSaveChecksum;
|
||||||
|
|
||||||
temp->save.info.checksum = sDebugSaveChecksum;
|
|
||||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||||
gSaveContext.save.info.horseData.pos.y = 72;
|
gSaveContext.save.info.horseData.pos.y = 72;
|
||||||
|
@ -456,8 +492,11 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (gSaveContext.save.info.playerData.savedSceneId != SCENE_LINKS_HOUSE) {
|
if (gSaveContext.save.info.playerData.savedSceneId != SCENE_LINKS_HOUSE) {
|
||||||
gSaveContext.save.entranceIndex =
|
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
||||||
(LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_0 : ENTR_TEMPLE_OF_TIME_7;
|
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||||
|
} else {
|
||||||
|
gSaveContext.save.entranceIndex = ENTR_TEMPLE_OF_TIME_7;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
|
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||||
}
|
}
|
||||||
|
@ -505,7 +544,8 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
||||||
|
|
||||||
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
|
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
|
||||||
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
|
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
|
||||||
i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] & ~EVENTCHKINF_MASK(EVENTCHKINF_40);
|
i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40];
|
||||||
|
i &= ~EVENTCHKINF_MASK(EVENTCHKINF_40);
|
||||||
gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] = i;
|
gSaveContext.save.info.eventChkInf[EVENTCHKINF_INDEX_40] = i;
|
||||||
|
|
||||||
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
|
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
|
||||||
|
@ -551,7 +591,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
||||||
u16 j;
|
u16 j;
|
||||||
u16* ptr;
|
u16* ptr;
|
||||||
|
|
||||||
gSaveContext.save.info.checksum = 0;
|
gSaveContext.save.info.checksum.value = 0;
|
||||||
|
|
||||||
ptr = (u16*)&gSaveContext;
|
ptr = (u16*)&gSaveContext;
|
||||||
checksum = j = 0;
|
checksum = j = 0;
|
||||||
|
@ -563,7 +603,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
||||||
checksum += *ptr++;
|
checksum += *ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
gSaveContext.save.info.checksum = checksum;
|
gSaveContext.save.info.checksum.value = checksum;
|
||||||
|
|
||||||
ptr = (u16*)&gSaveContext;
|
ptr = (u16*)&gSaveContext;
|
||||||
checksum = 0;
|
checksum = 0;
|
||||||
|
@ -576,7 +616,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = gSramSlotOffsets[gSaveContext.fileNum];
|
offset = gSramSlotOffsets[gSaveContext.fileNum];
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
|
||||||
|
|
||||||
ptr = (u16*)&gSaveContext;
|
ptr = (u16*)&gSaveContext;
|
||||||
checksum = 0;
|
checksum = 0;
|
||||||
|
@ -589,7 +629,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = gSramSlotOffsets[gSaveContext.fileNum + 3];
|
offset = gSramSlotOffsets[gSaveContext.fileNum + 3];
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -610,7 +650,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
||||||
|
|
||||||
PRINTF("SRAM START─LOAD\n");
|
PRINTF("SRAM START─LOAD\n");
|
||||||
bzero(sramCtx->readBuff, SRAM_SIZE);
|
bzero(sramCtx->readBuff, SRAM_SIZE);
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
|
SRAM_READ(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
|
|
||||||
dayTime = ((void)0, gSaveContext.save.dayTime);
|
dayTime = ((void)0, gSaveContext.save.dayTime);
|
||||||
|
|
||||||
|
@ -620,8 +660,8 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
||||||
sizeof(Save));
|
sizeof(Save));
|
||||||
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
||||||
|
|
||||||
oldChecksum = gSaveContext.save.info.checksum;
|
oldChecksum = gSaveContext.save.info.checksum.value;
|
||||||
gSaveContext.save.info.checksum = 0;
|
gSaveContext.save.info.checksum.value = 0;
|
||||||
ptr = (u16*)&gSaveContext;
|
ptr = (u16*)&gSaveContext;
|
||||||
PRINTF("\n============= S(%d) =============\n", slotNum);
|
PRINTF("\n============= S(%d) =============\n", slotNum);
|
||||||
|
|
||||||
|
@ -645,8 +685,8 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
||||||
offset = gSramSlotOffsets[slotNum + 3];
|
offset = gSramSlotOffsets[slotNum + 3];
|
||||||
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
||||||
|
|
||||||
oldChecksum = gSaveContext.save.info.checksum;
|
oldChecksum = gSaveContext.save.info.checksum.value;
|
||||||
gSaveContext.save.info.checksum = 0;
|
gSaveContext.save.info.checksum.value = 0;
|
||||||
ptr = (u16*)&gSaveContext;
|
ptr = (u16*)&gSaveContext;
|
||||||
PRINTF("================= BACK─UP ========================\n");
|
PRINTF("================= BACK─UP ========================\n");
|
||||||
|
|
||||||
|
@ -710,32 +750,33 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
||||||
newChecksum += *ptr++;
|
newChecksum += *ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
gSaveContext.save.info.checksum = newChecksum;
|
gSaveContext.save.info.checksum.value = newChecksum;
|
||||||
PRINTF("\nCheck_Sum=%x(%x)\n", gSaveContext.save.info.checksum, newChecksum);
|
PRINTF("\nCheck_Sum=%x(%x)\n", gSaveContext.save.info.checksum.value, newChecksum);
|
||||||
|
|
||||||
i = gSramSlotOffsets[slotNum + 3];
|
i = gSramSlotOffsets[slotNum + 3];
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE);
|
||||||
|
|
||||||
PRINTF("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
|
//! @bug The ??= below is interpreted as a trigraph for # by IDO
|
||||||
|
PRINTF("??????=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
|
||||||
gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
|
gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
|
||||||
gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
|
gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
|
||||||
gSaveContext.save.info.playerData.newf[5]);
|
gSaveContext.save.info.playerData.newf[5]);
|
||||||
PRINTF(T("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", "\npoints=%x(%d+3) check_sum=%x(%x)\n"), i,
|
PRINTF(T("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", "\npoints=%x(%d+3) check_sum=%x(%x)\n"), i,
|
||||||
slotNum, gSaveContext.save.info.checksum, newChecksum);
|
slotNum, gSaveContext.save.info.checksum.value, newChecksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = gSramSlotOffsets[slotNum];
|
i = gSramSlotOffsets[slotNum];
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE);
|
||||||
|
|
||||||
PRINTF(T("ぽいんと=%x(%d) check_sum=%x(%x)\n", "point=%x(%d) check_sum=%x(%x)\n"), i, slotNum,
|
PRINTF(T("ぽいんと=%x(%d) check_sum=%x(%x)\n", "point=%x(%d) check_sum=%x(%x)\n"), i, slotNum,
|
||||||
gSaveContext.save.info.checksum, newChecksum);
|
gSaveContext.save.info.checksum.value, newChecksum);
|
||||||
} else {
|
} else {
|
||||||
PRINTF(T("\nSAVEデータ OK!!!!\n", "\nSAVE data OK!!!!\n"));
|
PRINTF(T("\nSAVEデータ OK!!!!\n", "\nSAVE data OK!!!!\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bzero(sramCtx->readBuff, SRAM_SIZE);
|
bzero(sramCtx->readBuff, SRAM_SIZE);
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
|
SRAM_READ(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
gSaveContext.save.dayTime = dayTime;
|
gSaveContext.save.dayTime = dayTime;
|
||||||
|
|
||||||
PRINTF("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
|
PRINTF("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
|
||||||
|
@ -809,7 +850,14 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (offset = 0; offset < 8; offset++) {
|
for (offset = 0; offset < 8; offset++) {
|
||||||
|
#if !PLATFORM_IQUE
|
||||||
gSaveContext.save.info.playerData.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
|
gSaveContext.save.info.playerData.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
|
||||||
|
#else
|
||||||
|
// Workaround for EGCS bug
|
||||||
|
u8* fileName = fileSelect->fileNames[fileSelect->buttonIndex];
|
||||||
|
|
||||||
|
gSaveContext.save.info.playerData.playerName[offset] = fileName[offset];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
gSaveContext.save.info.playerData.newf[0] = 'Z';
|
gSaveContext.save.info.playerData.newf[0] = 'Z';
|
||||||
|
@ -838,8 +886,8 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gSaveContext.save.info.checksum = checksum;
|
gSaveContext.save.info.checksum.value = checksum;
|
||||||
PRINTF(T("\nチェックサム=%x\n", "\nChecksum = %x\n"), gSaveContext.save.info.checksum);
|
PRINTF(T("\nチェックサム=%x\n", "\nChecksum = %x\n"), gSaveContext.save.info.checksum.value);
|
||||||
|
|
||||||
offset = gSramSlotOffsets[gSaveContext.fileNum];
|
offset = gSramSlotOffsets[gSaveContext.fileNum];
|
||||||
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum);
|
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum);
|
||||||
|
@ -849,7 +897,7 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum + 3);
|
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum + 3);
|
||||||
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
||||||
|
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
|
|
||||||
PRINTF(T("SAVE終了\n", "SAVE end\n"));
|
PRINTF(T("SAVE終了\n", "SAVE end\n"));
|
||||||
PRINTF("z_common_data.file_no = %d\n", gSaveContext.fileNum);
|
PRINTF("z_common_data.file_no = %d\n", gSaveContext.fileNum);
|
||||||
|
@ -879,26 +927,26 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sram_EraseSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
void Sram_EraseSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
s32 offset;
|
u16 offset;
|
||||||
|
|
||||||
Sram_InitNewSave();
|
Sram_InitNewSave();
|
||||||
|
|
||||||
offset = gSramSlotOffsets[fileSelect->selectedFileIndex];
|
offset = gSramSlotOffsets[fileSelect->selectedFileIndex];
|
||||||
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
|
||||||
|
|
||||||
MemCpy(&fileSelect->n64ddFlags[fileSelect->selectedFileIndex], sramCtx->readBuff + offset + N64DD,
|
MemCpy(&fileSelect->n64ddFlags[fileSelect->selectedFileIndex], sramCtx->readBuff + offset + N64DD,
|
||||||
sizeof(fileSelect->n64ddFlags[0]));
|
sizeof(fileSelect->n64ddFlags[0]));
|
||||||
|
|
||||||
offset = gSramSlotOffsets[fileSelect->selectedFileIndex + 3];
|
offset = gSramSlotOffsets[fileSelect->selectedFileIndex + 3];
|
||||||
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
|
||||||
|
|
||||||
PRINTF(T("CLEAR終了\n", "CLEAR END\n"));
|
PRINTF(T("CLEAR終了\n", "CLEAR END\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
s32 offset;
|
u16 offset;
|
||||||
|
|
||||||
PRINTF("READ=%d(%x) COPY=%d(%x)\n", fileSelect->selectedFileIndex,
|
PRINTF("READ=%d(%x) COPY=%d(%x)\n", fileSelect->selectedFileIndex,
|
||||||
gSramSlotOffsets[fileSelect->selectedFileIndex], fileSelect->copyDestFileIndex,
|
gSramSlotOffsets[fileSelect->selectedFileIndex], fileSelect->copyDestFileIndex,
|
||||||
|
@ -913,7 +961,7 @@ void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex + 3];
|
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex + 3];
|
||||||
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
|
||||||
|
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
|
|
||||||
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex];
|
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex];
|
||||||
|
|
||||||
|
@ -943,23 +991,23 @@ void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||||
* Write the first 16 bytes of the read buffer to the SRAM header
|
* Write the first 16 bytes of the read buffer to the SRAM header
|
||||||
*/
|
*/
|
||||||
void Sram_WriteSramHeader(SramContext* sramCtx) {
|
void Sram_WriteSramHeader(SramContext* sramCtx) {
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_HEADER_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_HEADER_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
|
void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
|
||||||
u16 i;
|
u16 i;
|
||||||
|
|
||||||
PRINTF("sram_initialize( Game *game, Sram *sram )\n");
|
PRINTF("sram_initialize( Game *game, Sram *sram )\n");
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
|
SRAM_READ(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_COUNTU(sZeldaMagic) - 3; i++) {
|
for (i = 0; i < ARRAY_COUNTU(sSramDefaultHeader) - SRAM_HEADER_MAGIC; i++) {
|
||||||
if (sZeldaMagic[i + SRAM_HEADER_MAGIC] != sramCtx->readBuff[i + SRAM_HEADER_MAGIC]) {
|
if (sSramDefaultHeader[i + SRAM_HEADER_MAGIC] != sramCtx->readBuff[i + SRAM_HEADER_MAGIC]) {
|
||||||
PRINTF(T("SRAM破壊!!!!!!\n", "SRAM destruction!!!!!!\n"));
|
PRINTF(T("SRAM破壊!!!!!!\n", "SRAM destruction!!!!!!\n"));
|
||||||
#if PLATFORM_GC && OOT_PAL
|
#if PLATFORM_GC && OOT_PAL
|
||||||
gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE];
|
gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
MemCpy(sramCtx->readBuff, sZeldaMagic, sizeof(sZeldaMagic));
|
MemCpy(sramCtx->readBuff, sSramDefaultHeader, sizeof(sSramDefaultHeader));
|
||||||
|
|
||||||
#if PLATFORM_GC && OOT_PAL
|
#if PLATFORM_GC && OOT_PAL
|
||||||
sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language;
|
sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language;
|
||||||
|
@ -986,7 +1034,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
|
||||||
for (i = 0; i < CHECKSUM_SIZE; i++) {
|
for (i = 0; i < CHECKSUM_SIZE; i++) {
|
||||||
sramCtx->readBuff[i] = i;
|
sramCtx->readBuff[i] = i;
|
||||||
}
|
}
|
||||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_WRITE);
|
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
|
||||||
PRINTF(T("SRAM破壊!!!!!!\n", "SRAM destruction!!!!!!\n"));
|
PRINTF(T("SRAM破壊!!!!!!\n", "SRAM destruction!!!!!!\n"));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include "cic6105.h"
|
#include "cic6105.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#pragma increment_block_number "gc-eu:167 gc-eu-mq:167 gc-jp:167 gc-jp-ce:167 gc-jp-mq:167 gc-us:167 gc-us-mq:167" \
|
#pragma increment_block_number "gc-eu:164 gc-eu-mq:164 gc-jp:164 gc-jp-ce:164 gc-jp-mq:164 gc-us:164 gc-us-mq:164" \
|
||||||
"ntsc-1.0:121 ntsc-1.1:121 ntsc-1.2:121 pal-1.0:121 pal-1.1:121"
|
"ntsc-1.0:121 ntsc-1.1:121 ntsc-1.2:121 pal-1.0:121 pal-1.1:121"
|
||||||
|
|
||||||
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
||||||
|
|
|
@ -1824,6 +1824,7 @@ SkinMatrix_MtxFToMtx = 0x80095D40; // type:func
|
||||||
SkinMatrix_MtxFToNewMtx = 0x80095F58; // type:func
|
SkinMatrix_MtxFToNewMtx = 0x80095F58; // type:func
|
||||||
SkinMatrix_SetRotateAxis = 0x80095FA0; // type:func
|
SkinMatrix_SetRotateAxis = 0x80095FA0; // type:func
|
||||||
func_800A8030 = 0x80096110; // type:func
|
func_800A8030 = 0x80096110; // type:func
|
||||||
|
Sram_ReadWriteIQue = 0x80096280; // type:func
|
||||||
Sram_InitNewSave = 0x800962D0; // type:func
|
Sram_InitNewSave = 0x800962D0; // type:func
|
||||||
Sram_InitDebugSave = 0x80096420; // type:func
|
Sram_InitDebugSave = 0x80096420; // type:func
|
||||||
Sram_OpenSave = 0x800965E8; // type:func
|
Sram_OpenSave = 0x800965E8; // type:func
|
||||||
|
|
Loading…
Add table
Reference in a new issue