From ba9ca90c15ad9b9a24b15811bcffba57ac6dd91d Mon Sep 17 00:00:00 2001 From: fig02 Date: Wed, 2 Apr 2025 22:04:08 -0400 Subject: [PATCH 1/3] system_heap -> runtime (#2500) * very light documentation for runtime * more renaming * one more rename * RunTime -> Runtime --- include/functions.h | 2 +- spec/spec | 6 ++-- src/code/main.c | 2 +- src/libu64/{system_heap.c => runtime.c} | 43 ++++++++++++------------- 4 files changed, 25 insertions(+), 28 deletions(-) rename src/libu64/{system_heap.c => runtime.c} (76%) diff --git a/include/functions.h b/include/functions.h index 8144d18e9..1fe27acb2 100644 --- a/include/functions.h +++ b/include/functions.h @@ -79,6 +79,6 @@ void* SysCfb_GetFbEnd(void); void RcpUtils_PrintRegisterStatus(void); void RcpUtils_Reset(void); -void SystemHeap_Init(void* start, u32 size); +void Runtime_Init(void* start, u32 size); #endif diff --git a/spec/spec b/spec/spec index 31d0a8801..362d83c1a 100644 --- a/spec/spec +++ b/spec/spec @@ -708,7 +708,7 @@ beginseg include "$(BUILD_DIR)/src/libu64/rcp_utils.o" include "$(BUILD_DIR)/src/libu64/loadfragment2_n64.o" include "$(BUILD_DIR)/src/libu64/pad.o" - include "$(BUILD_DIR)/src/libu64/system_heap.o" + include "$(BUILD_DIR)/src/libu64/runtime.o" include "$(BUILD_DIR)/src/libu64/padsetup.o" #elif PLATFORM_GC include "$(BUILD_DIR)/src/libu64/logseverity_gc.o" @@ -720,11 +720,11 @@ beginseg #endif include "$(BUILD_DIR)/src/libu64/relocation_gc.o" include "$(BUILD_DIR)/src/libu64/load_gc.o" - include "$(BUILD_DIR)/src/libu64/system_heap.o" + include "$(BUILD_DIR)/src/libu64/runtime.o" include "$(BUILD_DIR)/src/libu64/pad.o" include "$(BUILD_DIR)/src/libu64/padsetup.o" #elif PLATFORM_IQUE - include "$(BUILD_DIR)/src/libu64/system_heap.o" + include "$(BUILD_DIR)/src/libu64/runtime.o" include "$(BUILD_DIR)/src/libu64/debug.o" include "$(BUILD_DIR)/src/libu64/gfxprint.o" include "$(BUILD_DIR)/src/libu64/logseverity_gc.o" diff --git a/src/code/main.c b/src/code/main.c index fffc72194..79c40658c 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -109,7 +109,7 @@ void Main(void* arg) { gSystemHeapSize = fb - systemHeapStart; PRINTF(T("システムヒープ初期化 %08x-%08x %08x\n", "System heap initialization %08x-%08x %08x\n"), systemHeapStart, fb, gSystemHeapSize); - SystemHeap_Init((void*)systemHeapStart, gSystemHeapSize); // initializes the system heap + Runtime_Init((void*)systemHeapStart, gSystemHeapSize); #if DEBUG_FEATURES { diff --git a/src/libu64/system_heap.c b/src/libu64/runtime.c similarity index 76% rename from src/libu64/system_heap.c rename to src/libu64/runtime.c index 3a98ef3ce..9dbb522f5 100644 --- a/src/libu64/system_heap.c +++ b/src/libu64/runtime.c @@ -6,13 +6,12 @@ typedef void (*arg3_800FC8D8)(void*, u32); typedef void (*arg3_800FC948)(void*, u32, u32, u32, u32, u32, u32, u32, u32); typedef void (*arg3_800FCA18)(void*, u32); -typedef struct InitFunc { +typedef struct CtorEntry { s32 nextOffset; void (*func)(void); -} InitFunc; +} CtorEntry; -// .data -void* sInitFuncs = NULL; +void* sGlobalCtorEntries = NULL; #if DEBUG_FEATURES char sNew[] = "new"; @@ -20,8 +19,7 @@ char sNew[] = "new"; char sNew[] = ""; #endif -// possibly some kind of new() function -void* func_800FC800(u32 size) { +void* Runtime_New(u32 size) { DECLARE_INTERRUPT_MASK void* ptr; @@ -41,8 +39,7 @@ void* func_800FC800(u32 size) { return ptr; } -// possibly some kind of delete() function -void func_800FC83C(void* ptr) { +void Runtime_Delete(void* ptr) { DECLARE_INTERRUPT_MASK DISABLE_INTERRUPTS(); @@ -81,7 +78,7 @@ void* func_800FC948(void* blk, u32 nBlk, u32 blkSize, arg3_800FC948 arg3) { DISABLE_INTERRUPTS(); if (blk == NULL) { - blk = func_800FC800(nBlk * blkSize); + blk = Runtime_New(nBlk * blkSize); } if (blk != NULL && arg3 != NULL) { @@ -115,39 +112,39 @@ void func_800FCA18(void* blk, u32 nBlk, u32 blkSize, arg3_800FCA18 arg3, s32 arg } if (arg4 != 0) { - func_800FC83C(blk); + Runtime_Delete(blk); } } RESTORE_INTERRUPTS(); } -void func_800FCB34(void) { - InitFunc* initFunc = (InitFunc*)&sInitFuncs; - u32 nextOffset = initFunc->nextOffset; - InitFunc* prev = NULL; +void Runtime_ExecuteGlobalCtors(void) { + CtorEntry* ctorEntry = (CtorEntry*)&sGlobalCtorEntries; + u32 nextOffset = ctorEntry->nextOffset; + CtorEntry* prevEntry = NULL; while (nextOffset != 0) { - initFunc = (InitFunc*)((s32)initFunc + nextOffset); + ctorEntry = (CtorEntry*)((s32)ctorEntry + nextOffset); - if (initFunc->func != NULL) { - initFunc->func(); + if (ctorEntry->func != NULL) { + ctorEntry->func(); } - nextOffset = initFunc->nextOffset; - initFunc->nextOffset = (s32)prev; - prev = initFunc; + nextOffset = ctorEntry->nextOffset; + ctorEntry->nextOffset = (s32)prevEntry; + prevEntry = ctorEntry; } - sInitFuncs = prev; + sGlobalCtorEntries = prevEntry; } -void SystemHeap_Init(void* start, u32 size) { +void Runtime_Init(void* start, u32 size) { #if PLATFORM_N64 __osMallocInit(&gSystemArena, start, size); #else SystemArena_Init(start, size); #endif - func_800FCB34(); + Runtime_ExecuteGlobalCtors(); } From 1beeff96583e30f6a61960446a97b3583ff2ac73 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Fri, 4 Apr 2025 16:54:18 -0700 Subject: [PATCH 2/3] Account for z_rumble's unreferenced bss at the start in fix_bss script (#2502) * Account for z_rumble's unreferenced bss at the start * z_locale and black --- tools/fix_bss.py | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/tools/fix_bss.py b/tools/fix_bss.py index 61cb4985d..743085cd1 100755 --- a/tools/fix_bss.py +++ b/tools/fix_bss.py @@ -82,7 +82,8 @@ class Pointer: @dataclass class BssSection: - start_address: int + base_start_address: int + build_start_address: int pointers: list[Pointer] @@ -294,7 +295,26 @@ def compare_pointers(version: str) -> dict[Path, BssSection]: object_file = Path("src/code/z_message.o") c_file = object_file.with_suffix(".c") - bss_sections[c_file] = BssSection(file.vram, pointers_in_section) + + # For the baserom, assume that the lowest address is the start of the BSS section. This might + # not be true if the first BSS variable is not referenced so account for that specifically. + + base_start_address = ( + min(p.base_value for p in pointers_in_section) + if pointers_in_section + else 0 + ) + # Account for the fact that z_rumble starts with unreferenced bss + if str(c_file) == "src/code/z_rumble.c": + base_start_address -= 0x10 + elif str(c_file) == "src/boot/z_locale.c": + base_start_address -= 0x18 + + build_start_address = file.vram + + bss_sections[c_file] = BssSection( + base_start_address, build_start_address, pointers_in_section + ) return bss_sections @@ -436,12 +456,10 @@ def determine_base_bss_ordering( build_bss_symbols: list[BssSymbol], bss_section: BssSection, ) -> list[BssSymbol]: - base_start_address = min(p.base_value for p in bss_section.pointers) - found_symbols: dict[str, BssSymbol] = {} for p in bss_section.pointers: - base_offset = p.base_value - base_start_address - build_offset = p.build_value - bss_section.start_address + base_offset = p.base_value - bss_section.base_start_address + build_offset = p.build_value - bss_section.build_start_address new_symbol = None new_offset = 0 @@ -814,18 +832,10 @@ def main(): for file, bss_section in bss_sections.items(): if not bss_section.pointers: continue - # The following heuristic doesn't work for z_locale, since the first pointer into BSS is not - # at the start of the section. Fortunately z_locale either has one BSS variable (in GC versions) - # or none (in N64 versions), so we can just skip it. - if str(file) == "src/boot/z_locale.c": - continue - # For the baserom, assume that the lowest address is the start of the BSS section. This might - # not be true if the first BSS variable is not referenced, but in practice this doesn't happen - # (except for z_locale above). - base_min_address = min(p.base_value for p in bss_section.pointers) - build_min_address = bss_section.start_address + if not all( - p.build_value - build_min_address == p.base_value - base_min_address + p.build_value - bss_section.build_start_address + == p.base_value - bss_section.base_start_address for p in bss_section.pointers ): files_with_reordering.append(file) From 5133db15a3d3f554e7936a600ff358a6aa38540a Mon Sep 17 00:00:00 2001 From: fig02 Date: Sat, 5 Apr 2025 19:16:52 -0400 Subject: [PATCH 3/3] Remove functions.h (#2501) * split most of functions.h * osdriverominit * forgot include * fix * remove functions.h * temporary fix for fix_bss * fix bss * revert fix_bss.py change --- include/flag_set.h | 8 ++ include/functions.h | 84 ---------------- include/global.h | 1 - include/idle.h | 6 ++ include/inflate.h | 10 ++ include/is_debug.h | 18 ++++ include/libu64/rcp_utils.h | 6 ++ include/libu64/runtime.h | 8 ++ include/memory_utils.h | 9 ++ include/mio0.h | 8 ++ include/sys_cfb.h | 10 ++ include/transition_circle.h | 55 +++++++++++ include/transition_fade.h | 24 +++++ include/transition_tile.h | 30 ++++++ include/transition_triforce.h | 27 +++++ include/transition_wipe.h | 30 ++++++ include/ultra64.h | 1 + include/yaz0.h | 10 ++ include/z64play.h | 1 + include/z64transition.h | 4 + include/z64transition_instances.h | 98 +------------------ src/boot/boot_main.c | 2 + src/boot/idle.c | 1 + src/boot/inflate.c | 2 + src/boot/is_debug.c | 3 +- src/boot/z_std_dma.c | 10 +- src/code/fault_gc_drawer.c | 4 +- src/code/flg_set.c | 2 + src/code/graph.c | 1 + src/code/main.c | 5 +- src/code/sched.c | 1 + src/code/sys_cfb.c | 3 +- src/code/z_bgcheck.c | 2 +- src/code/z_camera.c | 2 +- src/code/z_collision_check.c | 2 +- src/code/z_demo.c | 1 + src/code/z_en_item00.c | 2 +- src/code/z_fbdemo.c | 2 + src/code/z_fbdemo_circle.c | 2 + src/code/z_fbdemo_fade.c | 3 +- src/code/z_fbdemo_triforce.c | 2 + src/code/z_fbdemo_wipe1.c | 2 + src/code/z_kankyo.c | 2 +- src/code/z_message.c | 1 + src/code/z_parameter.c | 1 + src/code/z_play.c | 5 + src/code/z_sram.c | 1 + src/libu64/rcp_utils.c | 5 + src/libu64/runtime.c | 2 + .../ovl_file_choose/z_file_choose.c | 1 + 50 files changed, 326 insertions(+), 194 deletions(-) create mode 100644 include/flag_set.h delete mode 100644 include/functions.h create mode 100644 include/idle.h create mode 100644 include/inflate.h create mode 100644 include/is_debug.h create mode 100644 include/libu64/rcp_utils.h create mode 100644 include/libu64/runtime.h create mode 100644 include/memory_utils.h create mode 100644 include/mio0.h create mode 100644 include/sys_cfb.h create mode 100644 include/transition_circle.h create mode 100644 include/transition_fade.h create mode 100644 include/transition_tile.h create mode 100644 include/transition_triforce.h create mode 100644 include/transition_wipe.h create mode 100644 include/yaz0.h diff --git a/include/flag_set.h b/include/flag_set.h new file mode 100644 index 000000000..df9262ac7 --- /dev/null +++ b/include/flag_set.h @@ -0,0 +1,8 @@ +#ifndef FLAG_SET_H +#define FLAG_SET_H + +struct PlayState; + +void FlagSet_Update(struct PlayState* play); + +#endif diff --git a/include/functions.h b/include/functions.h deleted file mode 100644 index 1fe27acb2..000000000 --- a/include/functions.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef FUNCTIONS_H -#define FUNCTIONS_H - -#include "z64.h" -#include "macros.h" - -void Idle_ThreadEntry(void* arg); - -#if !PLATFORM_IQUE -void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size); -#else -void gzip_decompress(uintptr_t romStart, u8* dst, size_t size); -#endif - -#if DEBUG_FEATURES -void isPrintfInit(void); -#endif -void rmonPrintf(const char* fmt, ...); - -#if DEBUG_FEATURES -void* is_proutSyncPrintf(void* arg, const char* str, size_t count); -NORETURN void func_80002384(const char* exp, const char* file, int line); -#endif - -OSPiHandle* osDriveRomInit(void); - -void Mio0_Decompress(u8* src, u8* dst); - -void FlagSet_Update(PlayState* play); - -void* MemCpy(void* dest, const void* src, s32 len); - -void TransitionTile_Destroy(TransitionTile* this); -TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows); -void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP); -void TransitionTile_Update(TransitionTile* this); - -void TransitionTriforce_Start(void* thisx); -void* TransitionTriforce_Init(void* thisx); -void TransitionTriforce_Destroy(void* thisx); -void TransitionTriforce_Update(void* thisx, s32 updateRate); -void TransitionTriforce_SetColor(void* thisx, u32 color); -void TransitionTriforce_SetType(void* thisx, s32 type); -void TransitionTriforce_Draw(void* thisx, Gfx** gfxP); -s32 TransitionTriforce_IsDone(void* thisx); - -void TransitionWipe_Start(void* thisx); -void* TransitionWipe_Init(void* thisx); -void TransitionWipe_Destroy(void* thisx); -void TransitionWipe_Update(void* thisx, s32 updateRate); -void TransitionWipe_Draw(void* thisx, Gfx** gfxP); -s32 TransitionWipe_IsDone(void* thisx); -void TransitionWipe_SetType(void* thisx, s32 type); -void TransitionWipe_SetColor(void* thisx, u32 color); - -void TransitionCircle_Start(void* thisx); -void* TransitionCircle_Init(void* thisx); -void TransitionCircle_Destroy(void* thisx); -void TransitionCircle_Update(void* thisx, s32 updateRate); -void TransitionCircle_Draw(void* thisx, Gfx** gfxP); -s32 TransitionCircle_IsDone(void* thisx); -void TransitionCircle_SetType(void* thisx, s32 type); -void TransitionCircle_SetColor(void* thisx, u32 color); -void TransitionCircle_SetUnkColor(void* thisx, u32 color); - -void TransitionFade_Start(void* thisx); -void* TransitionFade_Init(void* thisx); -void TransitionFade_Destroy(void* thisx); -void TransitionFade_Update(void* thisx, s32 updateRate); -void TransitionFade_Draw(void* thisx, Gfx** gfxP); -s32 TransitionFade_IsDone(void* thisx); -void TransitionFade_SetColor(void* thisx, u32 color); -void TransitionFade_SetType(void* thisx, s32 type); - -void SysCfb_Init(s32 n64dd); -void* SysCfb_GetFbPtr(s32 idx); -void* SysCfb_GetFbEnd(void); - -void RcpUtils_PrintRegisterStatus(void); -void RcpUtils_Reset(void); - -void Runtime_Init(void* start, u32 size); - -#endif diff --git a/include/global.h b/include/global.h index d2a081a5f..902ddad84 100644 --- a/include/global.h +++ b/include/global.h @@ -1,7 +1,6 @@ #ifndef GLOBAL_H #define GLOBAL_H -#include "functions.h" #include "variables.h" #include "macros.h" #include "versions.h" diff --git a/include/idle.h b/include/idle.h new file mode 100644 index 000000000..03dfa5180 --- /dev/null +++ b/include/idle.h @@ -0,0 +1,6 @@ +#ifndef IDLE_H +#define IDLE_H + +void Idle_ThreadEntry(void* arg); + +#endif diff --git a/include/inflate.h b/include/inflate.h new file mode 100644 index 000000000..f26f7e496 --- /dev/null +++ b/include/inflate.h @@ -0,0 +1,10 @@ +#ifndef INFLATE_H +#define INFLATE_H + +#include "libc/stddef.h" +#include "libc/stdint.h" +#include "ultra64.h" + +void gzip_decompress(uintptr_t romStart, u8* dst, size_t size); + +#endif diff --git a/include/is_debug.h b/include/is_debug.h new file mode 100644 index 000000000..e5f03bb78 --- /dev/null +++ b/include/is_debug.h @@ -0,0 +1,18 @@ +#ifndef IS_DEBUG_H +#define IS_DEBUG_H + +#include "libc/stddef.h" +#include "attributes.h" + +#if DEBUG_FEATURES +void isPrintfInit(void); +#endif + +void rmonPrintf(const char* fmt, ...); + +#if DEBUG_FEATURES +void* is_proutSyncPrintf(void* arg, const char* str, size_t count); +NORETURN void func_80002384(const char* exp, const char* file, int line); +#endif + +#endif diff --git a/include/libu64/rcp_utils.h b/include/libu64/rcp_utils.h new file mode 100644 index 000000000..758230514 --- /dev/null +++ b/include/libu64/rcp_utils.h @@ -0,0 +1,6 @@ +#ifndef LIBU64_RCP_UTILS_H +#define LIBU64_RCP_UTILS_H + +void RcpUtils_Reset(void); + +#endif diff --git a/include/libu64/runtime.h b/include/libu64/runtime.h new file mode 100644 index 000000000..7df947cef --- /dev/null +++ b/include/libu64/runtime.h @@ -0,0 +1,8 @@ +#ifndef LIBU64_RUNTIME_H +#define LIBU64_RUNTIME_H + +#include "ultra64.h" + +void Runtime_Init(void* start, u32 size); + +#endif diff --git a/include/memory_utils.h b/include/memory_utils.h new file mode 100644 index 000000000..7a8d9aca9 --- /dev/null +++ b/include/memory_utils.h @@ -0,0 +1,9 @@ +#ifndef MEMORY_UTILS_H +#define MEMORY_UTILS_H + +#include "ultra64.h" + +void* MemCpy(void* dest, const void* src, s32 len); +void* MemSet(void* dest, s32 val, s32 len); + +#endif diff --git a/include/mio0.h b/include/mio0.h new file mode 100644 index 000000000..d350b4555 --- /dev/null +++ b/include/mio0.h @@ -0,0 +1,8 @@ +#ifndef MIO0_H +#define MIO0_H + +#include "ultra64.h" + +void Mio0_Decompress(u8* src, u8* dst); + +#endif diff --git a/include/sys_cfb.h b/include/sys_cfb.h new file mode 100644 index 000000000..5b7039175 --- /dev/null +++ b/include/sys_cfb.h @@ -0,0 +1,10 @@ +#ifndef SYS_CFB_H +#define SYS_CFB_H + +#include "ultra64.h" + +void SysCfb_Init(s32 n64dd); +void* SysCfb_GetFbPtr(s32 idx); +void* SysCfb_GetFbEnd(void); + +#endif diff --git a/include/transition_circle.h b/include/transition_circle.h new file mode 100644 index 000000000..23dec1d9d --- /dev/null +++ b/include/transition_circle.h @@ -0,0 +1,55 @@ +#ifndef TRANSITION_CIRCLE_H +#define TRANSITION_CIRCLE_H + +#include "ultra64.h" +#include "color.h" + +typedef enum TransitionCircleAppearance { + /* 0 */ TCA_NORMAL, + /* 1 */ TCA_WAVE, + /* 2 */ TCA_RIPPLE, + /* 3 */ TCA_STARBURST +} TransitionCircleAppearance; + +typedef enum TransitionCircleColor { + /* 0 */ TCC_BLACK, + /* 1 */ TCC_WHITE, + /* 2 */ TCC_GRAY, + /* 3 */ TCC_SPECIAL // color varies depending on appearance. unused and appears broken +} TransitionCircleColor; + +typedef enum TransitionCircleSpeed { + /* 0 */ TCS_FAST, + /* 1 */ TCS_SLOW +} TransitionCircleSpeed; + +typedef struct TransitionCircle { + /* 0x000 */ Color_RGBA8_u32 color; + /* 0x004 */ Color_RGBA8_u32 unkColor; + /* 0x008 */ s32 texX; + /* 0x00C */ s32 texY; + /* 0x010 */ s32 speed; + /* 0x014 */ u8 direction; + /* 0x015 */ u8 colorType; + /* 0x016 */ u8 speedType; + /* 0x017 */ u8 appearanceType; + /* 0x018 */ u8 isDone; + /* 0x019 */ u8 frame; + /* 0x01A */ u16 normal; + /* 0x020 */ Mtx projection; + /* 0x060 */ Mtx lookAt; + /* 0x0A0 */ void* texture; + /* 0x0A8 */ Mtx modelView[2][3]; +} TransitionCircle; // size = 0x228 + +void TransitionCircle_Start(void* thisx); +void* TransitionCircle_Init(void* thisx); +void TransitionCircle_Destroy(void* thisx); +void TransitionCircle_Update(void* thisx, s32 updateRate); +void TransitionCircle_Draw(void* thisx, Gfx** gfxP); +s32 TransitionCircle_IsDone(void* thisx); +void TransitionCircle_SetType(void* thisx, s32 type); +void TransitionCircle_SetColor(void* thisx, u32 color); +void TransitionCircle_SetUnkColor(void* thisx, u32 color); + +#endif diff --git a/include/transition_fade.h b/include/transition_fade.h new file mode 100644 index 000000000..be4e575e0 --- /dev/null +++ b/include/transition_fade.h @@ -0,0 +1,24 @@ +#ifndef TRANSITION_FADE_H +#define TRANSITION_FADE_H + +#include "ultra64.h" +#include "color.h" + +typedef struct TransitionFade { + /* 0x000 */ u8 type; + /* 0x001 */ u8 isDone; + /* 0x002 */ u8 direction; + /* 0x004 */ Color_RGBA8_u32 color; + /* 0x008 */ u16 timer; +} TransitionFade; // size = 0xC + +void TransitionFade_Start(void* thisx); +void* TransitionFade_Init(void* thisx); +void TransitionFade_Destroy(void* thisx); +void TransitionFade_Update(void* thisx, s32 updateRate); +void TransitionFade_Draw(void* thisx, Gfx** gfxP); +s32 TransitionFade_IsDone(void* thisx); +void TransitionFade_SetColor(void* thisx, u32 color); +void TransitionFade_SetType(void* thisx, s32 type); + +#endif diff --git a/include/transition_tile.h b/include/transition_tile.h new file mode 100644 index 000000000..14191f3fe --- /dev/null +++ b/include/transition_tile.h @@ -0,0 +1,30 @@ +#ifndef TRANSITION_TILE_H +#define TRANSITION_TILE_H + +#include "ultra64.h" + +typedef struct TransitionTileVtxData { + /* 0x0 */ f32 x; + /* 0x4 */ f32 y; +} TransitionTileVtxData; // size = 0x8 + +typedef struct TransitionTile { + /* 0x00 */ s32 cols; + /* 0x04 */ s32 rows; + /* 0x08 */ s32 frame; + /* 0x0C */ TransitionTileVtxData* vtxData; + /* 0x10 */ Vtx* vtxFrame1; + /* 0x14 */ Vtx* vtxFrame2; + /* 0x18 */ Mtx projection; + /* 0x58 */ Mtx modelView; + /* 0x98 */ Mtx unk_98; + /* 0xD8 */ Gfx* gfx; // "gfxtbl" + /* 0xDC */ u16* zBuffer; +} TransitionTile; // size = 0xE0 + +TransitionTile* TransitionTile_Init(TransitionTile* this, s32 cols, s32 rows); +void TransitionTile_Destroy(TransitionTile* this); +void TransitionTile_Update(TransitionTile* this); +void TransitionTile_Draw(TransitionTile* this, Gfx** gfxP); + +#endif diff --git a/include/transition_triforce.h b/include/transition_triforce.h new file mode 100644 index 000000000..85eb1597e --- /dev/null +++ b/include/transition_triforce.h @@ -0,0 +1,27 @@ +#ifndef TRANSITION_TRIFORCE_H +#define TRANSITION_TRIFORCE_H + +#include "ultra64.h" +#include "color.h" + +typedef struct TransitionTriforce { + /* 0x000 */ Color_RGBA8_u32 color; + /* 0x004 */ f32 transPos; + /* 0x008 */ f32 step; + /* 0x00C */ s32 state; + /* 0x010 */ s32 type; + /* 0x018 */ Mtx projection; + /* 0x058 */ s32 frame; + /* 0x060 */ Mtx modelView[2][3]; +} TransitionTriforce; // size = 0x1E0 + +void TransitionTriforce_Start(void* thisx); +void* TransitionTriforce_Init(void* thisx); +void TransitionTriforce_Destroy(void* thisx); +void TransitionTriforce_Update(void* thisx, s32 updateRate); +void TransitionTriforce_SetColor(void* thisx, u32 color); +void TransitionTriforce_SetType(void* thisx, s32 type); +void TransitionTriforce_Draw(void* thisx, Gfx** gfxP); +s32 TransitionTriforce_IsDone(void* thisx); + +#endif diff --git a/include/transition_wipe.h b/include/transition_wipe.h new file mode 100644 index 000000000..654e9b623 --- /dev/null +++ b/include/transition_wipe.h @@ -0,0 +1,30 @@ +#ifndef TRANSITION_WIPE_H +#define TRANSITION_WIPE_H + +#include "ultra64.h" +#include "color.h" + +typedef struct TransitionWipe { + /* 0x000 */ Color_RGBA8_u32 color; + /* 0x004 */ Color_RGBA8_u32 unkColor; + /* 0x008 */ u8 direction; + /* 0x009 */ u8 frame; + /* 0x00A */ u8 isDone; + /* 0x00C */ u16 texX; + /* 0x00E */ u16 texY; + /* 0x010 */ u16 normal; + /* 0x018 */ Mtx projection; + /* 0x058 */ Mtx lookAt; + /* 0x098 */ Mtx modelView[2][3]; +} TransitionWipe; // size = 0x218 + +void TransitionWipe_Start(void* thisx); +void* TransitionWipe_Init(void* thisx); +void TransitionWipe_Destroy(void* thisx); +void TransitionWipe_Update(void* thisx, s32 updateRate); +void TransitionWipe_Draw(void* thisx, Gfx** gfxP); +s32 TransitionWipe_IsDone(void* thisx); +void TransitionWipe_SetType(void* thisx, s32 type); +void TransitionWipe_SetColor(void* thisx, u32 color); + +#endif diff --git a/include/ultra64.h b/include/ultra64.h index 9972a4dfe..cccab388b 100644 --- a/include/ultra64.h +++ b/include/ultra64.h @@ -105,6 +105,7 @@ OSMesgQueue* osPiGetCmdQueue(void); s32 osEPiReadIo(OSPiHandle* handle, u32 devAddr, u32* data); void osViSetSpecialFeatures(u32 func); OSPiHandle* osCartRomInit(void); +OSPiHandle* osDriveRomInit(void); void __osSetFpcCsr(u32); u32 __osGetFpcCsr(void); s32 osEPiWriteIo(OSPiHandle* handle, u32 devAddr, u32 data); diff --git a/include/yaz0.h b/include/yaz0.h new file mode 100644 index 000000000..52f5ba951 --- /dev/null +++ b/include/yaz0.h @@ -0,0 +1,10 @@ +#ifndef YAZ0_H +#define YAZ0_H + +#include "libc/stddef.h" +#include "libc/stdint.h" +#include "ultra64.h" + +void Yaz0_Decompress(uintptr_t romStart, u8* dst, size_t size); + +#endif diff --git a/include/z64play.h b/include/z64play.h index 4ca9e0b02..4853ac8f4 100644 --- a/include/z64play.h +++ b/include/z64play.h @@ -4,6 +4,7 @@ #include "ultra64.h" #include "prerender.h" +#include "transition_tile.h" #include "z64actor.h" #include "z64bgcheck.h" #include "z64camera.h" diff --git a/include/z64transition.h b/include/z64transition.h index 569b8fb32..d46683d2b 100644 --- a/include/z64transition.h +++ b/include/z64transition.h @@ -3,6 +3,10 @@ #include "ultra64/ultratypes.h" #include "ultra64/gbi.h" // for Gfx +#include "transition_circle.h" +#include "transition_fade.h" +#include "transition_triforce.h" +#include "transition_wipe.h" #include "z64transition_instances.h" #define TRANS_TRIGGER_OFF 0 // transition is not active diff --git a/include/z64transition_instances.h b/include/z64transition_instances.h index 154b98d00..cc35add03 100644 --- a/include/z64transition_instances.h +++ b/include/z64transition_instances.h @@ -1,104 +1,10 @@ #ifndef Z64TRANSITION_INSTANCES_H #define Z64TRANSITION_INSTANCES_H -#include "ultra64.h" -#include "color.h" - -typedef struct TransitionTileVtxData { - /* 0x0 */ f32 x; - /* 0x4 */ f32 y; -} TransitionTileVtxData; // size = 0x8 - -typedef struct TransitionTile { - /* 0x00 */ s32 cols; - /* 0x04 */ s32 rows; - /* 0x08 */ s32 frame; - /* 0x0C */ TransitionTileVtxData* vtxData; - /* 0x10 */ Vtx* vtxFrame1; - /* 0x14 */ Vtx* vtxFrame2; - /* 0x18 */ Mtx projection; - /* 0x58 */ Mtx modelView; - /* 0x98 */ Mtx unk_98; - /* 0xD8 */ Gfx* gfx; // "gfxtbl" - /* 0xDC */ u16* zBuffer; -} TransitionTile; // size = 0xE0 - typedef enum TransitionInstanceType { /* 1 */ TRANS_INSTANCE_TYPE_FILL_OUT = 1, - /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN + /* 2 */ TRANS_INSTANCE_TYPE_FILL_IN, + /* 3 */ TRANS_INSTANCE_TYPE_FADE_FLASH } TransitionInstanceType; -typedef struct TransitionWipe { - /* 0x000 */ Color_RGBA8_u32 color; - /* 0x004 */ Color_RGBA8_u32 unkColor; - /* 0x008 */ u8 direction; - /* 0x009 */ u8 frame; - /* 0x00A */ u8 isDone; - /* 0x00C */ u16 texX; - /* 0x00E */ u16 texY; - /* 0x010 */ u16 normal; - /* 0x018 */ Mtx projection; - /* 0x058 */ Mtx lookAt; - /* 0x098 */ Mtx modelView[2][3]; -} TransitionWipe; // size = 0x218 - -#define TRANS_INSTANCE_TYPE_FADE_FLASH 3 - -typedef struct TransitionFade { - /* 0x000 */ u8 type; - /* 0x001 */ u8 isDone; - /* 0x002 */ u8 direction; - /* 0x004 */ Color_RGBA8_u32 color; - /* 0x008 */ u16 timer; -} TransitionFade; // size = 0xC - -typedef enum TransitionCircleAppearance { - /* 0 */ TCA_NORMAL, - /* 1 */ TCA_WAVE, - /* 2 */ TCA_RIPPLE, - /* 3 */ TCA_STARBURST -} TransitionCircleAppearance; - -typedef enum TransitionCircleColor { - /* 0 */ TCC_BLACK, - /* 1 */ TCC_WHITE, - /* 2 */ TCC_GRAY, - /* 3 */ TCC_SPECIAL // color varies depending on appearance. unused and appears broken -} TransitionCircleColor; - -typedef enum TransitionCircleSpeed { - /* 0 */ TCS_FAST, - /* 1 */ TCS_SLOW -} TransitionCircleSpeed; - -typedef struct TransitionCircle { - /* 0x000 */ Color_RGBA8_u32 color; - /* 0x004 */ Color_RGBA8_u32 unkColor; - /* 0x008 */ s32 texX; - /* 0x00C */ s32 texY; - /* 0x010 */ s32 speed; - /* 0x014 */ u8 direction; - /* 0x015 */ u8 colorType; - /* 0x016 */ u8 speedType; - /* 0x017 */ u8 appearanceType; - /* 0x018 */ u8 isDone; - /* 0x019 */ u8 frame; - /* 0x01A */ u16 normal; - /* 0x020 */ Mtx projection; - /* 0x060 */ Mtx lookAt; - /* 0x0A0 */ void* texture; - /* 0x0A8 */ Mtx modelView[2][3]; -} TransitionCircle; // size = 0x228 - -typedef struct TransitionTriforce { - /* 0x000 */ Color_RGBA8_u32 color; - /* 0x004 */ f32 transPos; - /* 0x008 */ f32 step; - /* 0x00C */ s32 state; - /* 0x010 */ s32 type; - /* 0x018 */ Mtx projection; - /* 0x058 */ s32 frame; - /* 0x060 */ Mtx modelView[2][3]; -} TransitionTriforce; // size = 0x1E0 - #endif diff --git a/src/boot/boot_main.c b/src/boot/boot_main.c index 75c1b9cf8..689d4f031 100644 --- a/src/boot/boot_main.c +++ b/src/boot/boot_main.c @@ -1,4 +1,6 @@ #include "boot.h" +#include "idle.h" +#include "is_debug.h" #include "stack.h" #include "stackcheck.h" #if PLATFORM_N64 diff --git a/src/boot/idle.c b/src/boot/idle.c index e24ab4ede..c56489137 100644 --- a/src/boot/idle.c +++ b/src/boot/idle.c @@ -1,4 +1,5 @@ #include "buffers.h" +#include "idle.h" #include "main.h" #include "segment_symbols.h" #include "stack.h" diff --git a/src/boot/inflate.c b/src/boot/inflate.c index c0467dd38..391ce0368 100644 --- a/src/boot/inflate.c +++ b/src/boot/inflate.c @@ -95,6 +95,8 @@ the two sets of lengths. */ +#include "inflate.h" + #include "ultra64/ultratypes.h" #include "libc/stddef.h" #include "libc/stdint.h" diff --git a/src/boot/is_debug.c b/src/boot/is_debug.c index 912b75984..d520b262b 100644 --- a/src/boot/is_debug.c +++ b/src/boot/is_debug.c @@ -1,5 +1,6 @@ +#include "is_debug.h" + #include "global.h" -#include "attributes.h" typedef struct ISVDbg { /* 0x00 */ u32 magic; // "IS64" diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c index e8581b6a5..9f5901b73 100644 --- a/src/boot/z_std_dma.c +++ b/src/boot/z_std_dma.c @@ -23,6 +23,9 @@ #include "libu64/debug.h" #include "attributes.h" #include "fault.h" +#if PLATFORM_IQUE +#include "inflate.h" +#endif #include "line_numbers.h" #if PLATFORM_N64 #include "n64dd.h" @@ -31,12 +34,15 @@ #include "stack.h" #include "stackcheck.h" #include "terminal.h" +#if !PLATFORM_IQUE +#include "yaz0.h" +#endif #include "z64thread.h" #include "global.h" -#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:20" \ - "pal-1.0:18 pal-1.1:18" +#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:0 gc-jp-ce:0 gc-jp-mq:0 gc-us:0 gc-us-mq:0 ntsc-1.2:14" \ + "pal-1.0:12 pal-1.1:12" StackEntry sDmaMgrStackInfo; OSMesgQueue sDmaMgrMsgQueue; diff --git a/src/code/fault_gc_drawer.c b/src/code/fault_gc_drawer.c index 9d3478a48..4482ba9ae 100644 --- a/src/code/fault_gc_drawer.c +++ b/src/code/fault_gc_drawer.c @@ -7,7 +7,7 @@ #include "global.h" #include "fault.h" #include "terminal.h" -#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" +#pragma increment_block_number "gc-eu:0 gc-eu-mq:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" typedef struct FaultDrawer { /* 0x00 */ u16* fb; @@ -101,7 +101,7 @@ FaultDrawer sFaultDrawerDefault = { NULL, }; -#pragma increment_block_number "gc-eu:128 gc-eu-mq:128" +#pragma increment_block_number "gc-eu:0 gc-eu-mq:0" FaultDrawer sFaultDrawer; char D_8016B6C0[0x20]; diff --git a/src/code/flg_set.c b/src/code/flg_set.c index 5f4316d7f..88f32a3e4 100644 --- a/src/code/flg_set.c +++ b/src/code/flg_set.c @@ -1,3 +1,5 @@ +#include "flag_set.h" + #include "libu64/gfxprint.h" #include "libu64/pad.h" #include "gfx.h" diff --git a/src/code/graph.c b/src/code/graph.c index a20c64e1f..8fe664dec 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -15,6 +15,7 @@ #include "regs.h" #include "setup_state.h" #include "speed_meter.h" +#include "sys_cfb.h" #include "sys_debug_controller.h" #include "sys_ucode.h" #include "terminal.h" diff --git a/src/code/main.c b/src/code/main.c index 79c40658c..ab330cb33 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,3 +1,4 @@ +#include "sys_cfb.h" #include "ultra64.h" #include "versions.h" @@ -13,6 +14,8 @@ extern struct PadMgr gPadMgr; extern struct IrqMgr gIrqMgr; #include "libc64/malloc.h" +#include "libu64/rcp_utils.h" +#include "libu64/runtime.h" #include "audiomgr.h" #include "debug_arena.h" #include "fault.h" @@ -35,7 +38,7 @@ extern struct IrqMgr gIrqMgr; #include "global.h" #pragma increment_block_number "gc-eu:32 gc-eu-mq:32 gc-jp:32 gc-jp-ce:32 gc-jp-mq:32 gc-us:32 gc-us-mq:32 ique-cn:32" \ - "ntsc-1.0:6 ntsc-1.1:6 ntsc-1.2:6 pal-1.0:4 pal-1.1:4" + "ntsc-1.0:0 ntsc-1.1:0 ntsc-1.2:0 pal-1.0:254 pal-1.1:254" extern u8 _buffersSegmentEnd[]; diff --git a/src/code/sched.c b/src/code/sched.c index 561a28370..2b519c6bd 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -40,6 +40,7 @@ * @see irqmgr.c */ #include "libu64/debug.h" +#include "libu64/rcp_utils.h" #include "fault.h" #include "irqmgr.h" #include "main.h" diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 4e4bc06f2..4fa17abfd 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,4 +1,5 @@ -#include "ultra64.h" +#include "sys_cfb.h" + #include "libu64/debug.h" #include "attributes.h" #include "line_numbers.h" diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 71733baef..f4f3a1fd3 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -11,7 +11,7 @@ #include "z64player.h" #include "z64skin_matrix.h" -#pragma increment_block_number "ntsc-1.0:208 ntsc-1.1:208 ntsc-1.2:208" +#pragma increment_block_number "ntsc-1.0:200 ntsc-1.1:200 ntsc-1.2:200" u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList); void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); diff --git a/src/code/z_camera.c b/src/code/z_camera.c index 8582519cd..64299a886 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -3658,7 +3658,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" \ - "ique-cn:128 ntsc-1.0:102 ntsc-1.1:102 ntsc-1.2:102 pal-1.0:100 pal-1.1:100" + "ique-cn:128 ntsc-1.0:98 ntsc-1.1:98 ntsc-1.2:98 pal-1.0:96 pal-1.1:96" s32 Camera_KeepOn4(Camera* camera) { static Vec3f D_8015BD50; diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index e05bb44d1..392df7c1f 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -15,7 +15,7 @@ #include "overlays/effects/ovl_Effect_Ss_HitMark/z_eff_ss_hitmark.h" #include "z_lib.h" -#pragma increment_block_number "ique-cn:0 ntsc-1.0:248 ntsc-1.1:248 ntsc-1.2:248 pal-1.0:248 pal-1.1:248" +#pragma increment_block_number "ique-cn:0 ntsc-1.0:240 ntsc-1.1:240 ntsc-1.2:240 pal-1.0:240 pal-1.1:240" typedef s32 (*ColChkResetFunc)(PlayState*, Collider*); typedef void (*ColChkApplyFunc)(PlayState*, CollisionCheckContext*, Collider*); diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 921613bd8..d34e0808d 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -6,6 +6,7 @@ #include "gfx.h" #include "gfxalloc.h" #include "letterbox.h" +#include "memory_utils.h" #if PLATFORM_N64 #include "n64dd.h" #endif diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index aa757f864..f0c627b25 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -22,7 +22,7 @@ #include "assets/objects/gameplay_keep/gameplay_keep.h" #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-eu-mq-dbg:0 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128" \ - "gc-us-mq:128 ntsc-1.0:128 ntsc-1.2:128" + "gc-us-mq:128 ique-cn:128 ntsc-1.0:128 ntsc-1.2:128" #define FLAGS 0 diff --git a/src/code/z_fbdemo.c b/src/code/z_fbdemo.c index 246e27b1a..46cfa0573 100644 --- a/src/code/z_fbdemo.c +++ b/src/code/z_fbdemo.c @@ -9,6 +9,8 @@ * @note The only coded effect has a visual effect to blend the tiles to a single point, which looks like the screen * gets sucked into. */ +#include "transition_tile.h" + #include "libc64/malloc.h" #include "libc64/sleep.h" #include "libu64/debug.h" diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index c25f174a7..eb1b22feb 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -1,3 +1,5 @@ +#include "transition_circle.h" + #include "gfx.h" #include "global.h" diff --git a/src/code/z_fbdemo_fade.c b/src/code/z_fbdemo_fade.c index 3375628cb..cbd9f6813 100644 --- a/src/code/z_fbdemo_fade.c +++ b/src/code/z_fbdemo_fade.c @@ -1,4 +1,5 @@ -#include "ultra64.h" +#include "transition_fade.h" + #include "main.h" #include "regs.h" #include "terminal.h" diff --git a/src/code/z_fbdemo_triforce.c b/src/code/z_fbdemo_triforce.c index 7bb8862b2..93826fa36 100644 --- a/src/code/z_fbdemo_triforce.c +++ b/src/code/z_fbdemo_triforce.c @@ -1,3 +1,5 @@ +#include "transition_triforce.h" + #include "global.h" #include "assets/code/fbdemo_triforce/z_fbdemo_triforce.c" diff --git a/src/code/z_fbdemo_wipe1.c b/src/code/z_fbdemo_wipe1.c index a3418e91a..d876b0b73 100644 --- a/src/code/z_fbdemo_wipe1.c +++ b/src/code/z_fbdemo_wipe1.c @@ -1,3 +1,5 @@ +#include "transition_wipe.h" + #include "gfx.h" #include "z64save.h" #include "z64transition_instances.h" diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 0bdc048ee..d86af19c0 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -236,7 +236,7 @@ s16 sSunDepthTestX; s16 sSunDepthTestY; #pragma increment_block_number "gc-eu:192 gc-eu-mq:192 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \ - "ique-cn:160 ntsc-1.0:192 ntsc-1.1:192 ntsc-1.2:192 pal-1.0:192 pal-1.1:192" + "ique-cn:160 ntsc-1.0:160 ntsc-1.1:160 ntsc-1.2:160 pal-1.0:192 pal-1.1:192" LightNode* sNGameOverLightNode; LightInfo sNGameOverLightInfo; diff --git a/src/code/z_message.c b/src/code/z_message.c index 88c219d37..789d4aa6a 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -4,6 +4,7 @@ #include "gfx.h" #include "gfx_setupdl.h" #include "gfxalloc.h" +#include "memory_utils.h" #include "message_data_static.h" #if PLATFORM_N64 #include "n64dd.h" diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 2c9b21950..4dd6662d5 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1,5 +1,6 @@ #include "attributes.h" #include "controller.h" +#include "flag_set.h" #include "gfx.h" #include "gfx_setupdl.h" #include "main.h" diff --git a/src/code/z_play.c b/src/code/z_play.c index cc041ecaf..7e4f5f5e3 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -24,6 +24,11 @@ #include "sys_matrix.h" #include "terminal.h" #include "title_setup_state.h" +#include "transition_circle.h" +#include "transition_fade.h" +#include "transition_tile.h" +#include "transition_triforce.h" +#include "transition_wipe.h" #include "versions.h" #include "z_actor_dlftbls.h" #include "zelda_arena.h" diff --git a/src/code/z_sram.c b/src/code/z_sram.c index bf713d373..534017d83 100644 --- a/src/code/z_sram.c +++ b/src/code/z_sram.c @@ -1,5 +1,6 @@ #include "file_select_state.h" #include "controller.h" +#include "memory_utils.h" #include "terminal.h" #include "versions.h" #include "z64game.h" diff --git a/src/libu64/rcp_utils.c b/src/libu64/rcp_utils.c index 420ac51f9..c4f0cad53 100644 --- a/src/libu64/rcp_utils.c +++ b/src/libu64/rcp_utils.c @@ -1,3 +1,5 @@ +#include "libu64/rcp_utils.h" + #include "global.h" #if PLATFORM_N64 || DEBUG_FEATURES @@ -55,9 +57,12 @@ void RcpUtils_PrintRegisterStatus(void) { void RcpUtils_Reset(void) { RcpUtils_PrintRegisterStatus(); + // Flush the RDP pipeline and freeze clock counter osDpSetStatus(DPC_SET_FREEZE | DPC_SET_FLUSH); + // Halt the RSP, disable interrupt on break and set "task done" signal __osSpSetStatus(SP_SET_HALT | SP_SET_TASKDONE | SP_CLR_INTR_BREAK); + RcpUtils_PrintRegisterStatus(); } diff --git a/src/libu64/runtime.c b/src/libu64/runtime.c index 9dbb522f5..aa0c507b7 100644 --- a/src/libu64/runtime.c +++ b/src/libu64/runtime.c @@ -1,3 +1,5 @@ +#include "libu64/runtime.h" + #include "libc64/malloc.h" #include "libc64/os_malloc.h" diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 4517fc7e7..9da143369 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -9,6 +9,7 @@ #include "macros.h" #include "main.h" #include "map_select_state.h" +#include "memory_utils.h" #if PLATFORM_N64 #include "n64dd.h" #endif