[cc0 oot] z_memory_utils (#2783)

* [cc0 oot] z_memory_utils

* format

* doc

* MemCopy: The memory regions must not overlap.
This commit is contained in:
Dragorn421
2026-08-05 18:32:30 +02:00
committed by GitHub
parent a883cd019a
commit 05e9046417
6 changed files with 111 additions and 126 deletions
+2 -2
View File
@@ -3,7 +3,7 @@
#include "ultra64.h"
void* MemCpy(void* dest, const void* src, s32 len);
void* MemSet(void* dest, s32 val, s32 len);
void* MemCopy(void* dest, void* src, s32 size);
void* MemSet(void* dest, s32 val, s32 size);
#endif
+23 -23
View File
@@ -1820,10 +1820,10 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
s32 csFrameCount;
s16 j;
MemCpy(&totalEntries, script, sizeof(totalEntries));
MemCopy(&totalEntries, script, sizeof(totalEntries));
script += sizeof(totalEntries);
MemCpy(&csFrameCount, script, sizeof(csFrameCount));
MemCopy(&csFrameCount, script, sizeof(csFrameCount));
script += sizeof(csFrameCount);
if ((csCtx->curFrame > csFrameCount) && (csCtx->state != CS_STATE_RUN_UNSTOPPABLE)) {
@@ -1839,7 +1839,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
#endif
for (i = 0; i < totalEntries; i++) {
MemCpy(&cmdType, script, sizeof(cmdType));
MemCopy(&cmdType, script, sizeof(cmdType));
script += sizeof(cmdType);
if (cmdType == CS_CMD_END_OF_SCRIPT) {
@@ -1848,7 +1848,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
switch (cmdType) {
case CS_CMD_MISC:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1858,7 +1858,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_LIGHT_SETTING:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1868,7 +1868,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_START_SEQ:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1878,7 +1878,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_STOP_SEQ:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1888,7 +1888,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_FADE_OUT_SEQ:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1898,7 +1898,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_RUMBLE_CONTROLLER:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1908,7 +1908,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_TIME:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1918,7 +1918,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_PLAYER_CUE:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1951,7 +1951,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_0_15:
case CS_CMD_ACTOR_CUE_0_16:
case CS_CMD_ACTOR_CUE_0_17:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -1984,7 +1984,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_1_15:
case CS_CMD_ACTOR_CUE_1_16:
case CS_CMD_ACTOR_CUE_1_17:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2013,7 +2013,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_2_11:
case CS_CMD_ACTOR_CUE_2_12:
case CS_CMD_ACTOR_CUE_2_13:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2041,7 +2041,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_3_10:
case CS_CMD_ACTOR_CUE_3_11:
case CS_CMD_ACTOR_CUE_3_12:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2065,7 +2065,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_4_6:
case CS_CMD_ACTOR_CUE_4_7:
case CS_CMD_ACTOR_CUE_4_8:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2087,7 +2087,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_5_4:
case CS_CMD_ACTOR_CUE_5_5:
case CS_CMD_ACTOR_CUE_5_6:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2110,7 +2110,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_6_5:
case CS_CMD_ACTOR_CUE_6_6:
case CS_CMD_ACTOR_CUE_6_7:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2132,7 +2132,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
case CS_CMD_ACTOR_CUE_7_4:
case CS_CMD_ACTOR_CUE_7_5:
case CS_CMD_ACTOR_CUE_7_6:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2148,7 +2148,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_ACTOR_CUE_8_0:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2164,7 +2164,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_ACTOR_CUE_9_0:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2210,7 +2210,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
case CS_CMD_TEXT:
MemCpy(&cmdEntries, script, sizeof(cmdEntries));
MemCopy(&cmdEntries, script, sizeof(cmdEntries));
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
@@ -2231,7 +2231,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
break;
default:
MemCpy(&cmdEntries, script, 4);
MemCopy(&cmdEntries, script, 4);
script += sizeof(cmdEntries);
for (j = 0; j < cmdEntries; j++) {
+14 -30
View File
@@ -1,47 +1,31 @@
#include "ultra64.h"
#include "memory_utils.h"
/**
* memcpy: copies `len` bytes from memory starting at `src` to memory starting at `dest`. Expects the memory
* specified by `src` and `dest` to not overlap.
*
* @see libultra also has a memcpy().
*
* @param dest address of start of buffer writing to
* @param src address of start of buffer to read from
* @param len number of bytes to copy. (`s32` rather than the standard `size_t`)
*
* @return dest
* Copy `size` bytes from `src` to `dest`.
* The memory regions must not overlap.
*/
void* MemCpy(void* dest, const void* src, s32 len) {
u8* d = dest;
const u8* s = src;
void* MemCopy(void* dest, void* src, s32 size) {
u8* destu = (u8*)dest;
u8* srcu = (u8*)src;
while (len > 0) {
*d++ = *s++;
len--;
while (size > 0) {
*destu++ = *srcu++;
size--;
}
return dest;
}
/**
* memset: sets `len` bytes to `val` starting at address `dest`.
*
* @see There are two other memsets in this codebase, Lib_MemSet(), memset().
* This one is unused.
*
* @param dest address to start at
* @param val value to write (`s32`, but interpreted as `u8`)
* @param len number of bytes to write. (`s32` rather than the standard `size_t`)
*
* @return dest
* Set `size` bytes starting at `dest` to value `val`.
*/
void* MemSet(void* dest, s32 val, s32 len) {
u8* d = dest;
s32 s = len;
void* MemSet(void* dest, s32 val, s32 size) {
u8* destu = (u8*)dest;
s32 s = size;
while (s > 0) {
*d++ = val;
*destu++ = val;
s--;
}
+4 -4
View File
@@ -3686,8 +3686,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
T("録音終了!!!!!!!!!録音終了\n", "Recording complete!!!!!!!!! Recording Complete\n"));
PRINTF_COLOR_YELLOW();
PRINTF("\n====================================================================\n");
MemCpy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
sizeof(gSaveContext.save.info.scarecrowLongSong));
MemCopy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
sizeof(gSaveContext.save.info.scarecrowLongSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++) {
PRINTF("%d, ", gSaveContext.save.info.scarecrowLongSong[i]);
}
@@ -3750,8 +3750,8 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
SFX_PLAY_CENTERED(NA_SE_SY_TRE_BOX_APPEAR);
PRINTF_COLOR_YELLOW();
PRINTF("\n====================================================================\n");
MemCpy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
MemCopy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++) {
PRINTF("%d, ", gSaveContext.save.info.scarecrowSpawnSong[i]);
}
+67 -66
View File
@@ -445,7 +445,7 @@ void Sram_OpenSave(SramContext* sramCtx) {
i = gSramSlotOffsets[gSaveContext.fileNum];
PRINTF(T("ぽいんと=%x(%d)\n", "Point=%x(%d)\n"), i, gSaveContext.fileNum);
MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
MemCopy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
PRINTF_COLOR_YELLOW();
PRINTF("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.save.info.playerData.savedSceneId,
@@ -533,8 +533,8 @@ void Sram_OpenSave(SramContext* sramCtx) {
PRINTF_COLOR_BLUE();
PRINTF("\n====================================================================\n");
MemCpy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
sizeof(gSaveContext.save.info.scarecrowLongSong));
MemCopy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
sizeof(gSaveContext.save.info.scarecrowLongSong));
ptr = (u8*)gScarecrowLongSongPtr;
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++, ptr++) {
@@ -549,8 +549,8 @@ void Sram_OpenSave(SramContext* sramCtx) {
PRINTF_COLOR_GREEN();
PRINTF("\n====================================================================\n");
MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
MemCopy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
ptr = gScarecrowSpawnSongPtr;
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++, ptr++) {
@@ -677,7 +677,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
offset = gSramSlotOffsets[slotNum];
PRINTF(T("ぽいんと=%x(%d) SAVE_MAX=%d\n", "Point=%x(%d) SAVE_MAX=%d\n"), offset, gSaveContext.fileNum,
sizeof(Save));
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
oldChecksum = gSaveContext.save.info.checksum.value;
gSaveContext.save.info.checksum.value = 0;
@@ -702,7 +702,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
// checksum didnt match, try backup save
PRINTF("ERROR!!! %x(%d)\n", gSramSlotOffsets[slotNum], slotNum);
offset = gSramSlotOffsets[slotNum + 3];
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
oldChecksum = gSaveContext.save.info.checksum.value;
gSaveContext.save.info.checksum.value = 0;
@@ -801,37 +801,37 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
PRINTF("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
DEFENSE);
MemCpy(&fileSelect->deaths[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCpy(&fileSelect->deaths[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCpy(&fileSelect->deaths[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCopy(&fileSelect->deaths[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCopy(&fileSelect->deaths[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCopy(&fileSelect->deaths[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEATHS, sizeof(fileSelect->deaths[0]));
MemCpy(&fileSelect->fileNames[0], sramCtx->readBuff + SLOT_OFFSET(0) + NAME, sizeof(fileSelect->fileNames[0]));
MemCpy(&fileSelect->fileNames[1], sramCtx->readBuff + SLOT_OFFSET(1) + NAME, sizeof(fileSelect->fileNames[0]));
MemCpy(&fileSelect->fileNames[2], sramCtx->readBuff + SLOT_OFFSET(2) + NAME, sizeof(fileSelect->fileNames[0]));
MemCopy(&fileSelect->fileNames[0], sramCtx->readBuff + SLOT_OFFSET(0) + NAME, sizeof(fileSelect->fileNames[0]));
MemCopy(&fileSelect->fileNames[1], sramCtx->readBuff + SLOT_OFFSET(1) + NAME, sizeof(fileSelect->fileNames[0]));
MemCopy(&fileSelect->fileNames[2], sramCtx->readBuff + SLOT_OFFSET(2) + NAME, sizeof(fileSelect->fileNames[0]));
MemCpy(&fileSelect->healthCapacities[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCpy(&fileSelect->healthCapacities[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCpy(&fileSelect->healthCapacities[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCopy(&fileSelect->healthCapacities[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCopy(&fileSelect->healthCapacities[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCopy(&fileSelect->healthCapacities[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCpy(&fileSelect->questItems[0], sramCtx->readBuff + SLOT_OFFSET(0) + QUEST, sizeof(fileSelect->questItems[0]));
MemCpy(&fileSelect->questItems[1], sramCtx->readBuff + SLOT_OFFSET(1) + QUEST, sizeof(fileSelect->questItems[0]));
MemCpy(&fileSelect->questItems[2], sramCtx->readBuff + SLOT_OFFSET(2) + QUEST, sizeof(fileSelect->questItems[0]));
MemCopy(&fileSelect->questItems[0], sramCtx->readBuff + SLOT_OFFSET(0) + QUEST, sizeof(fileSelect->questItems[0]));
MemCopy(&fileSelect->questItems[1], sramCtx->readBuff + SLOT_OFFSET(1) + QUEST, sizeof(fileSelect->questItems[0]));
MemCopy(&fileSelect->questItems[2], sramCtx->readBuff + SLOT_OFFSET(2) + QUEST, sizeof(fileSelect->questItems[0]));
MemCpy(&fileSelect->n64ddFlags[0], sramCtx->readBuff + SLOT_OFFSET(0) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCpy(&fileSelect->n64ddFlags[1], sramCtx->readBuff + SLOT_OFFSET(1) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCpy(&fileSelect->n64ddFlags[2], sramCtx->readBuff + SLOT_OFFSET(2) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->n64ddFlags[0], sramCtx->readBuff + SLOT_OFFSET(0) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->n64ddFlags[1], sramCtx->readBuff + SLOT_OFFSET(1) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->n64ddFlags[2], sramCtx->readBuff + SLOT_OFFSET(2) + N64DD, sizeof(fileSelect->n64ddFlags[0]));
MemCpy(&fileSelect->defense[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEFENSE, sizeof(fileSelect->defense[0]));
MemCpy(&fileSelect->defense[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEFENSE, sizeof(fileSelect->defense[0]));
MemCpy(&fileSelect->defense[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEFENSE, sizeof(fileSelect->defense[0]));
MemCopy(&fileSelect->defense[0], sramCtx->readBuff + SLOT_OFFSET(0) + DEFENSE, sizeof(fileSelect->defense[0]));
MemCopy(&fileSelect->defense[1], sramCtx->readBuff + SLOT_OFFSET(1) + DEFENSE, sizeof(fileSelect->defense[0]));
MemCopy(&fileSelect->defense[2], sramCtx->readBuff + SLOT_OFFSET(2) + DEFENSE, sizeof(fileSelect->defense[0]));
#if OOT_PAL
MemCpy(&fileSelect->health[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH, sizeof(fileSelect->health[0]));
MemCpy(&fileSelect->health[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH, sizeof(fileSelect->health[0]));
MemCpy(&fileSelect->health[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH, sizeof(fileSelect->health[0]));
MemCopy(&fileSelect->health[0], sramCtx->readBuff + SLOT_OFFSET(0) + HEALTH, sizeof(fileSelect->health[0]));
MemCopy(&fileSelect->health[1], sramCtx->readBuff + SLOT_OFFSET(1) + HEALTH, sizeof(fileSelect->health[0]));
MemCopy(&fileSelect->health[2], sramCtx->readBuff + SLOT_OFFSET(2) + HEALTH, sizeof(fileSelect->health[0]));
#endif
PRINTF("f_64dd=%d, %d, %d\n", fileSelect->n64ddFlags[0], fileSelect->n64ddFlags[1], fileSelect->n64ddFlags[2]);
@@ -910,11 +910,11 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
offset = gSramSlotOffsets[gSaveContext.fileNum];
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum);
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
offset = gSramSlotOffsets[gSaveContext.fileNum + 3];
PRINTF("I=%x no=%d\n", offset, gSaveContext.fileNum + 3);
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
@@ -924,18 +924,19 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
j = gSramSlotOffsets[gSaveContext.fileNum];
MemCpy(&fileSelect->deaths[gSaveContext.fileNum], sramCtx->readBuff + j + DEATHS, sizeof(fileSelect->deaths[0]));
MemCpy(&fileSelect->fileNames[gSaveContext.fileNum], sramCtx->readBuff + j + NAME,
sizeof(fileSelect->fileNames[0]));
MemCpy(&fileSelect->healthCapacities[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCpy(&fileSelect->questItems[gSaveContext.fileNum], sramCtx->readBuff + j + QUEST,
sizeof(fileSelect->questItems[0]));
MemCpy(&fileSelect->n64ddFlags[gSaveContext.fileNum], sramCtx->readBuff + j + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
MemCpy(&fileSelect->defense[gSaveContext.fileNum], sramCtx->readBuff + j + DEFENSE, sizeof(fileSelect->defense[0]));
MemCopy(&fileSelect->deaths[gSaveContext.fileNum], sramCtx->readBuff + j + DEATHS, sizeof(fileSelect->deaths[0]));
MemCopy(&fileSelect->fileNames[gSaveContext.fileNum], sramCtx->readBuff + j + NAME,
sizeof(fileSelect->fileNames[0]));
MemCopy(&fileSelect->healthCapacities[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCopy(&fileSelect->questItems[gSaveContext.fileNum], sramCtx->readBuff + j + QUEST,
sizeof(fileSelect->questItems[0]));
MemCopy(&fileSelect->n64ddFlags[gSaveContext.fileNum], sramCtx->readBuff + j + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->defense[gSaveContext.fileNum], sramCtx->readBuff + j + DEFENSE,
sizeof(fileSelect->defense[0]));
#if OOT_PAL
MemCpy(&fileSelect->health[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH, sizeof(fileSelect->health[0]));
MemCopy(&fileSelect->health[gSaveContext.fileNum], sramCtx->readBuff + j + HEALTH, sizeof(fileSelect->health[0]));
#endif
PRINTF("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileSelect->n64ddFlags[gSaveContext.fileNum]);
@@ -951,14 +952,14 @@ void Sram_EraseSave(FileSelectState* fileSelect, SramContext* sramCtx) {
Sram_InitNewSave();
offset = gSramSlotOffsets[fileSelect->selectedFileIndex];
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
MemCpy(&fileSelect->n64ddFlags[fileSelect->selectedFileIndex], sramCtx->readBuff + offset + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->n64ddFlags[fileSelect->selectedFileIndex], sramCtx->readBuff + offset + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
offset = gSramSlotOffsets[fileSelect->selectedFileIndex + 3];
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000) + offset, &gSaveContext, SLOT_SIZE);
PRINTF(T("CLEAR終了\n", "CLEAR END\n"));
@@ -972,33 +973,33 @@ void Sram_CopySave(FileSelectState* fileSelect, SramContext* sramCtx) {
gSramSlotOffsets[fileSelect->copyDestFileIndex]);
offset = gSramSlotOffsets[fileSelect->selectedFileIndex];
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
MemCopy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex];
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex + 3];
MemCpy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
MemCopy(sramCtx->readBuff + offset, &gSaveContext, sizeof(Save));
SRAM_WRITE(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE);
offset = gSramSlotOffsets[fileSelect->copyDestFileIndex];
MemCpy(&fileSelect->deaths[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + DEATHS,
sizeof(fileSelect->deaths[0]));
MemCpy(&fileSelect->fileNames[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + NAME,
sizeof(fileSelect->fileNames[0]));
MemCpy(&fileSelect->healthCapacities[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCpy(&fileSelect->questItems[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + QUEST,
sizeof(fileSelect->questItems[0]));
MemCpy(&fileSelect->n64ddFlags[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
MemCpy(&fileSelect->defense[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + DEFENSE,
sizeof(fileSelect->defense[0]));
MemCopy(&fileSelect->deaths[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + DEATHS,
sizeof(fileSelect->deaths[0]));
MemCopy(&fileSelect->fileNames[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + NAME,
sizeof(fileSelect->fileNames[0]));
MemCopy(&fileSelect->healthCapacities[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + HEALTH_CAP,
sizeof(fileSelect->healthCapacities[0]));
MemCopy(&fileSelect->questItems[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + QUEST,
sizeof(fileSelect->questItems[0]));
MemCopy(&fileSelect->n64ddFlags[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + N64DD,
sizeof(fileSelect->n64ddFlags[0]));
MemCopy(&fileSelect->defense[fileSelect->copyDestFileIndex], sramCtx->readBuff + offset + DEFENSE,
sizeof(fileSelect->defense[0]));
#if OOT_PAL
MemCpy(&fileSelect->health[fileSelect->copyDestFileIndex], (sramCtx->readBuff + offset) + HEALTH,
sizeof(fileSelect->health[0]));
MemCopy(&fileSelect->health[fileSelect->copyDestFileIndex], (sramCtx->readBuff + offset) + HEALTH,
sizeof(fileSelect->health[0]));
#endif
PRINTF("f_64dd[%d]=%d\n", gSaveContext.fileNum, fileSelect->n64ddFlags[gSaveContext.fileNum]);
@@ -1026,7 +1027,7 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
gSaveContext.language = sramCtx->readBuff[SRAM_HEADER_LANGUAGE];
#endif
MemCpy(sramCtx->readBuff, sSramDefaultHeader, sizeof(sSramDefaultHeader));
MemCopy(sramCtx->readBuff, sSramDefaultHeader, sizeof(sSramDefaultHeader));
#if PLATFORM_GC && OOT_PAL
sramCtx->readBuff[SRAM_HEADER_LANGUAGE] = gSaveContext.language;
@@ -543,7 +543,7 @@ void FileSelect_UpdateMainMenu(GameState* thisx) {
this->newFileNameCharCount = 0;
this->nameEntryBoxPosX = 120;
this->nameEntryBoxAlpha = 0;
MemCpy(&this->fileNames[this->buttonIndex][0], &emptyName, sizeof(emptyName));
MemCopy(&this->fileNames[this->buttonIndex][0], &emptyName, sizeof(emptyName));
} else if (this->n64ddFlags[this->buttonIndex] == this->n64ddFlag) {
SFX_PLAY_CENTERED(NA_SE_SY_FSEL_DECIDE_L);
this->actionTimer = 8;