From 08f273cdf9fa97162f8a0e501c081170a9547769 Mon Sep 17 00:00:00 2001 From: Lucas Shaw <49287729+shawlucas@users.noreply.github.com> Date: Fri, 12 Apr 2024 23:19:59 -0400 Subject: m_DLF.c OK (#170) * m_DLF.c OK * added comment --- src/code/m_DLF.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/code/m_DLF.c (limited to 'src/code') diff --git a/src/code/m_DLF.c b/src/code/m_DLF.c new file mode 100644 index 0000000..0bfb4e9 --- /dev/null +++ b/src/code/m_DLF.c @@ -0,0 +1,97 @@ +#include "m_DLF.h" + +// Function names taken from Zelda64 Decompilation + +void Overlay_LoadGameState(GameStateOverlay* overlayEntry) { + void* vramStart; + + if (overlayEntry->loadedRamAddr != NULL) { + return; + } + + vramStart = overlayEntry->vramStart; + if (vramStart == NULL) { + overlayEntry->unk_28 = 0; + return; + } + + overlayEntry->loadedRamAddr = malloc_r((uintptr_t)overlayEntry->vramEnd - (uintptr_t)vramStart); + + if (overlayEntry->loadedRamAddr != NULL) { + ovlmgr_Load(overlayEntry->vromStart, overlayEntry->vromEnd, overlayEntry->vramStart, overlayEntry->vramEnd, + overlayEntry->loadedRamAddr); + overlayEntry->unk_14 = + (void*)((overlayEntry->unk_14 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_14 - (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->init = + (void*)((overlayEntry->init != NULL) + ? (void*)((uintptr_t)overlayEntry->init - (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->destroy = + (void*)((overlayEntry->destroy != NULL) + ? (void*)((uintptr_t)overlayEntry->destroy - (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->unk_20 = + (void*)((overlayEntry->unk_20 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_20 - (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->unk_24 = + (void*)((overlayEntry->unk_24 != NULL) + ? (void*)((uintptr_t)overlayEntry->unk_24 - (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->unk_28 = 0; + } +} + +void Overlay_FreeGameState(GameStateOverlay* overlayEntry) { + s32 var_v0; + + if (overlayEntry->loadedRamAddr != NULL) { + var_v0 = (overlayEntry->unk_28 != 0) ? -1 : 0; + if (var_v0 == 0) { + overlayEntry->unk_14 = + (void*)((overlayEntry->unk_14 != NULL) ? (void*)((uintptr_t)overlayEntry->unk_14 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->init = + (void*)((overlayEntry->init != NULL) ? (void*)((uintptr_t)overlayEntry->init + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->destroy = + (void*)((overlayEntry->destroy != NULL) ? (void*)((uintptr_t)overlayEntry->destroy + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->unk_20 = + (void*)((overlayEntry->unk_20 != NULL) ? (void*)((uintptr_t)overlayEntry->unk_20 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + overlayEntry->unk_24 = + (void*)((overlayEntry->unk_24 != NULL) ? (void*)((uintptr_t)overlayEntry->unk_24 + + (intptr_t)((uintptr_t)overlayEntry->vramStart - + (uintptr_t)overlayEntry->loadedRamAddr)) + : NULL); + + free(overlayEntry->loadedRamAddr); + overlayEntry->loadedRamAddr = NULL; + } + } +} -- cgit v1.2.3