diff --git a/include/buffers.h b/include/buffers.h new file mode 100644 index 0000000000..72615a717b --- /dev/null +++ b/include/buffers.h @@ -0,0 +1,20 @@ +#ifndef BUFFERS_H +#define BUFFERS_H + +#include "z64.h" +#include "macros.h" +#include "stack.h" + + +extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; +extern STACK(gGfxSPTaskStack, 0x400); +extern GfxPool gGfxPools[2]; +extern u8 gAudioHeap[0x138000]; +extern u8 gSystemHeap[]; + +extern u8 gPictoPhotoI8[PICTO_PHOTO_SIZE]; +extern u8 D_80784600[0x56200]; +extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH]; + + +#endif diff --git a/include/stack.h b/include/stack.h new file mode 100644 index 0000000000..3667862cb6 --- /dev/null +++ b/include/stack.h @@ -0,0 +1,12 @@ +#ifndef STACK_H +#define STACK_H + +#include "alignment.h" + +#define STACK(stack, size) \ + u64 stack[ALIGN8(size) / sizeof(u64)] + +#define STACK_TOP(stack) \ + ((u8*)(stack) + sizeof(stack)) + +#endif diff --git a/include/variables.h b/include/variables.h index f12dbe629c..59779203d5 100644 --- a/include/variables.h +++ b/include/variables.h @@ -282,27 +282,12 @@ extern f64 D_800994C8; extern char gBuildTeam[]; extern char gBuildDate[]; extern char gBuildMakeOption[]; -// extern StackEntry sBootThreadInfo; -// extern OSThread sIdleThread; -// extern u8 sIdleThreadStack[0x400]; -// extern StackEntry sIdleThreadInfo; -// extern u8 sBootThreadStack[0x400]; + extern IrqMgr gIrqMgr; -// extern u8 sIrqMgrStack[0x500]; -// extern StackEntry sIrqMgrStackInfo; -// extern OSThread gMainThread; -// extern u8 sMainStack[0x900]; -// extern StackEntry sMainStackInfo; -// extern OSMesg sPiMgrCmdBuff[50]; -// extern OSMesgQueue gPiMgrCmdQ; + extern OSViMode gViConfigMode; extern u8 D_8009B290; -extern StackEntry sDmaMgrStackInfo; -extern u16 numDmaEntries; -extern OSMesgQueue sDmaMgrMsgQueue; -extern OSMesg sDmaMgrMsgs[32]; -extern OSThread sDmaMgrThread; -extern u8 sDmaMgrStack[0x500]; + extern u8 sYaz0DataBuffer[0x400]; extern u8* sYaz0CurDataEnd; extern u32 sYaz0CurRomStart; @@ -312,13 +297,9 @@ extern void* gYaz0DecompressDstEnd; // extern UNK_TYPE4 D_8009BE30; // extern UNK_TYPE4 D_8009BE34; // extern FaultClient romInfoFaultClient; -extern FaultThreadStruct* sFaultContext; -extern f32 D_8009BE54; -extern u32 faultCustomOptions; -extern u32 faultCopyToLog; -extern u8 sFaultStack[0x600]; -extern StackEntry sFaultThreadInfo; + extern FaultThreadStruct gFaultStruct; + extern FaultDrawer sFaultDrawerStruct; // extern UNK_TYPE4 D_8009CD10; extern u32 sRandFloat; @@ -333,10 +314,7 @@ extern UNK_TYPE1 D_8009CF60; extern OSThread __osThreadSave; extern OSPiHandle D_8009D130; extern OSPiHandle D_8009D1A8; -// extern OSThread D_8009D220; -// extern u8 piManagerStack[0x1000]; -// extern OSMesgQueue D_8009E3D0; -// extern OSMesg D_8009E3E8[1]; + extern OSMesg D_8009E3F0[1]; extern OSMesgQueue __osPiAccessQueue; extern __OSInode __osPfsInodeCache; @@ -348,13 +326,7 @@ extern u32 __osViIntrCount; extern u32 __osTimerCounter; extern OSPifRam __osPfsPifRam; extern OSPiHandle CartRomHandle; -extern OSThread viThread; -extern u8 viThreadStack[0x1000]; -extern OSMesgQueue viEventQueue; -// extern OSMesg viEventBuf[5]; -// extern OSIoMesg viRetraceMsg; -// extern OSIoMesg viCounterMsg; -extern u16 viRetrace; + extern DmaEntry dmadata[1568]; // extern UNK_TYPE1 D_80186028; extern u64 aspMainTextStart[]; @@ -2488,11 +2460,7 @@ extern Struct_80140E80* D_801F6D4C; extern BombersNotebook sBombersNotebook; extern u8 sBombersNotebookOpen; extern u8 sMotionBlurStatus; -extern SlowlyTask D_801F6E00; -extern s32 D_801F6FC0; -extern StackEntry slowlyStackEntry; -extern u8 slowlyStack[0x1000]; -extern UNK_TYPE1 D_801F7FE8; + extern UNK_TYPE1 D_801F7FF0; extern struct_801F8010 D_801F8010; extern struct_801F8020 D_801F8020; @@ -2503,24 +2471,12 @@ extern FaultClient sGraphFaultClient; extern GfxMasterList* gGfxMasterDL; extern CfbInfo sGraphCfbInfos[3]; extern OSTime sGraphTaskStartTime; -extern OSMesgQueue sSiIntMsgQ; -extern OSMesg sSiIntMsgBuf[1]; + extern u32 gSegments[NUM_SEGMENTS]; extern SchedContext gSchedContext; -extern IrqMgrClient irqClient; -extern OSMesgQueue irqMgrMsgQ; -extern OSMesg irqMgrMsgBuf[60]; -extern OSThread sGraphThread; -extern u8 sGraphStack[6144]; -extern u8 schedStack[1536]; -extern u8 audioStack[2048]; -extern u8 padmgrStack[1280]; -extern StackEntry sGraphStackInfo; -extern StackEntry schedStackEntry; -extern StackEntry audioStackEntry; -extern StackEntry padmgrStackEntry; -extern AudioMgr audioContext; -extern PadMgr D_801FB620; +extern OSThread gGraphThread; +extern PadMgr gPadMgr; + extern FaultClient sSchedFaultClient; extern OSTime sRSPGFXStartTime; extern OSTime sRSPAudioStartTime; @@ -2636,15 +2592,7 @@ extern Vec3f D_801FBDA4; extern Vec3f D_801FBDE8; extern MtxF* sMatrixStack; extern MtxF* sCurrentMatrix; -// extern UNK_TYPE1 D_801FBE10; -// extern UNK_TYPE1 D_801FBE28; -// extern UNK_TYPE1 D_801FBE2C; -// extern UNK_TYPE4 D_801FBE30; -extern u8 sys_flashromStack[0x1000]; -extern StackEntry sys_flashromStackEntry; -extern OSThread sys_flashromOSThread; -extern s80185D40 D_801FD008; -extern OSMesg D_801FD034; + extern s32 D_801FD120; // extern UNK_TYPE1 D_801FD140; // extern UNK_TYPE1 D_801FD158; @@ -2777,17 +2725,6 @@ extern AudioCustomSeqFunction gAudioCustomSeqFunction; extern AudioCustomReverbFunction gAudioCustomReverbFunction; extern AudioCustomSynthFunction gAudioCustomSynthFunction; -// post-code buffers -extern u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; -extern u8 gGfxSPTaskStack[0x400]; -extern GfxPool gGfxPools[2]; -extern u8 gAudioHeap[0x138000]; -extern u8 gSystemHeap[UNK_SIZE]; - -extern u8 gPictoPhotoI8[PICTO_PHOTO_SIZE]; -extern u8 D_80784600[0x56200]; -extern u16 gFramebuffer0[SCREEN_HEIGHT][SCREEN_WIDTH]; - // other segments extern GfxMasterList D_0E000000; extern Mtx D_01000000; diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 28c27d2cca..6584b0a50f 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -11,6 +11,7 @@ */ #include "global.h" +#include "buffers.h" /** * SoundFont Notes: diff --git a/src/audio/session_config.c b/src/audio/session_config.c index 6bba865e9c..e0881913b8 100644 --- a/src/audio/session_config.c +++ b/src/audio/session_config.c @@ -1,4 +1,5 @@ #include "global.h" +#include "buffers.h" const s16 gAudioTatumInit[] = { 0x1C00, // unused diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 87bee5da4f..061458a1db 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,21 +1,22 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "stack.h" -StackEntry sBootThreadInfo; +StackEntry sBootStackInfo; OSThread sIdleThread; -u8 sIdleThreadStack[0x400]; -StackEntry sIdleThreadInfo; -u8 sBootThreadStack[0x400]; +STACK(sIdleThreadStack, 0x400); +StackEntry sIdleStackInfo; +STACK(sBootThreadStack, 0x400); void bootproc(void) { - StackCheck_Init(&sBootThreadInfo, sBootThreadStack, sBootThreadStack + sizeof(sBootThreadStack), 0, -1, "boot"); + StackCheck_Init(&sBootStackInfo, sBootThreadStack, STACK_TOP(sBootThreadStack), 0, -1, "boot"); osMemSize = osGetMemSize(); func_800818F4(); osInitialize(); osUnmapTLBAll(); gCartHandle = osCartRomInit(); - StackCheck_Init(&sIdleThreadInfo, sIdleThreadStack, sIdleThreadStack + sizeof(sIdleThreadStack), 0, 256, "idle"); - osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, sIdleThreadStack + sizeof(sIdleThreadStack), + StackCheck_Init(&sIdleStackInfo, sIdleThreadStack, STACK_TOP(sIdleThreadStack), 0, 0x100, "idle"); + osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, STACK_TOP(sIdleThreadStack), Z_PRIORITY_IDLE); osStartThread(&sIdleThread); } diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index e648275b6f..134b120dc9 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -1,7 +1,15 @@ #include "ultra64.h" #include "global.h" +#include "stack.h" #include "vt.h" +extern FaultThreadStruct* sFaultContext; +extern f32 D_8009BE54; +extern u32 faultCustomOptions; +extern u32 faultCopyToLog; +extern STACK(sFaultStack, 0x600); +extern StackEntry sFaultStackInfo; + // data const char* sCpuExceptions[] = { "Interrupt", @@ -759,9 +767,9 @@ void Fault_SetOptionsFromController3(void) { } if (faultCustomOptions) { - graphPC = sGraphThread.context.pc; - graphRA = sGraphThread.context.ra; - graphSP = sGraphThread.context.sp; + graphPC = gGraphThread.context.pc; + graphRA = gGraphThread.context.ra; + graphSP = gGraphThread.context.sp; if (CHECK_BTN_ALL(input3->cur.button, BTN_R)) { static u32 faultCopyToLog; @@ -889,8 +897,8 @@ void Fault_Start(void) { sFaultContext->faultActive = 0; gFaultStruct.faultHandlerEnabled = 1; osCreateMesgQueue(&sFaultContext->queue, sFaultContext->msg, ARRAY_COUNT(sFaultContext->msg)); - StackCheck_Init(&sFaultThreadInfo, sFaultStack, sFaultStack + sizeof(sFaultStack), 0, 0x100, "fault"); - osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, sFaultStack + sizeof(sFaultStack), 0x7F); + StackCheck_Init(&sFaultStackInfo, sFaultStack, STACK_TOP(sFaultStack), 0, 0x100, "fault"); + osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, STACK_TOP(sFaultStack), 0x7F); osStartThread(&sFaultContext->thread); } diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index da93f13fdb..40bcf5d0e3 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -1,5 +1,7 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "stack.h" +#include "buffers.h" u8 D_80096B20 = 1; vu8 gViConfigUseDefault = 1; @@ -9,10 +11,10 @@ f32 gViConfigXScale = 1.0f; f32 gViConfigYScale = 1.0f; IrqMgr gIrqMgr; -u8 sIrqMgrStack[0x500]; +STACK(sIrqMgrStack, 0x500); StackEntry sIrqMgrStackInfo; -OSThread gMainThread; -u8 sMainStack[0x900]; +OSThread sMainThread; +STACK(sMainStack, 0x900); StackEntry sMainStackInfo; OSMesg sPiMgrCmdBuff[50]; OSMesgQueue gPiMgrCmdQ; @@ -71,8 +73,8 @@ void Idle_InitCodeAndMemory(void) { } void Main_ThreadEntry(void* arg) { - StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, sIrqMgrStack + sizeof(sIrqMgrStack), 0, 0x100, "irqmgr"); - IrqMgr_Init(&gIrqMgr, &sIrqMgrStackInfo, Z_PRIORITY_IRQMGR, 1); + StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr"); + IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), Z_PRIORITY_IRQMGR, 1); DmaMgr_Start(); Idle_InitCodeAndMemory(); Main(arg); @@ -108,10 +110,9 @@ void Idle_InitVideo(void) { void Idle_ThreadEntry(void* arg) { Idle_InitVideo(); osCreatePiManager(150, &gPiMgrCmdQ, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff)); - StackCheck_Init(&sMainStackInfo, sMainStack, sMainStack + sizeof(sMainStack), 0, 0x400, "main"); - osCreateThread(&gMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, sMainStack + sizeof(sMainStack), - Z_PRIORITY_MAIN); - osStartThread(&gMainThread); + StackCheck_Init(&sMainStackInfo, sMainStack, STACK_TOP(sMainStack), 0, 0x400, "main"); + osCreateThread(&sMainThread, Z_THREAD_ID_MAIN, Main_ThreadEntry, arg, STACK_TOP(sMainStack), Z_PRIORITY_MAIN); + osStartThread(&sMainThread); osSetThreadPri(NULL, 0); do { } while (true); } diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 8e9d838729..dd34d9e87f 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "stack.h" u32 sDmaMgrDmaBuffSize = 0x2000; @@ -8,7 +9,7 @@ u16 numDmaEntries; OSMesgQueue sDmaMgrMsgQueue; OSMesg sDmaMgrMsgs[32]; OSThread sDmaMgrThread; -u8 sDmaMgrStack[0x500]; +STACK(sDmaMgrStack, 0x500); s32 DmaMgr_DmaRomToRam(uintptr_t rom, void* ram, size_t size) { OSIoMesg ioMsg; @@ -226,8 +227,8 @@ void DmaMgr_Start(void) { } osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs)); - StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, sDmaMgrStack + sizeof(sDmaMgrStack), 0, 0x100, "dmamgr"); - osCreateThread(&sDmaMgrThread, Z_THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, sDmaMgrStack + sizeof(sDmaMgrStack), + StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, STACK_TOP(sDmaMgrStack), 0, 0x100, "dmamgr"); + osCreateThread(&sDmaMgrThread, Z_THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, STACK_TOP(sDmaMgrStack), Z_PRIORITY_DMAMGR); osStartThread(&sDmaMgrThread); diff --git a/src/buffers/gfxpools.c b/src/buffers/gfxpools.c index a91c87bed9..ff4934f11a 100644 --- a/src/buffers/gfxpools.c +++ b/src/buffers/gfxpools.c @@ -1,3 +1,3 @@ -#include "global.h" +#include "buffers.h" GfxPool gGfxPools[2]; diff --git a/src/buffers/gfxstack.c b/src/buffers/gfxstack.c index 2b158d1414..8864d58ef5 100644 --- a/src/buffers/gfxstack.c +++ b/src/buffers/gfxstack.c @@ -1,3 +1,3 @@ -#include "global.h" +#include "buffers.h" -u8 gGfxSPTaskStack[0x400]; +STACK(gGfxSPTaskStack, 0x400); diff --git a/src/buffers/gfxyield.c b/src/buffers/gfxyield.c index 94a5f55c97..576cfc0bb4 100644 --- a/src/buffers/gfxyield.c +++ b/src/buffers/gfxyield.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" -#include "global.h" +#include "buffers.h" u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; diff --git a/src/buffers/heaps.c b/src/buffers/heaps.c index 866d51c16d..477eca03ef 100644 --- a/src/buffers/heaps.c +++ b/src/buffers/heaps.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "buffers.h" u8 gAudioHeap[0x138000]; diff --git a/src/code/PreRender.c b/src/code/PreRender.c index 599f4c8d30..247325251c 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -1,4 +1,5 @@ #include "global.h" +#include "stack.h" /** * Assigns the "save" values in PreRender @@ -410,19 +411,24 @@ void PreRender_ApplyFilters(PreRender* this) { } } +extern SlowlyTask D_801F6E00; +extern s32 D_801F6FC0; +extern StackEntry sSlowlyStackInfo; +extern STACK(sSlowlyStack, 0x1000); + /** * Initializes `PreRender_ApplyFilters` onto a new "slowly" thread */ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { if ((this->cvgSave != NULL) && (this->fbufSave != NULL)) { if (D_801F6FC0) { - StackCheck_Cleanup(&slowlyStackEntry); + StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Stop(&D_801F6E00); } this->unk_4D = 1; - StackCheck_Init(&slowlyStackEntry, slowlyStack, &slowlyStack[4096], 0, 0x100, "slowly"); - Slowly_Start(&D_801F6E00, &D_801F7FE8, PreRender_ApplyFilters, this, NULL); + StackCheck_Init(&sSlowlyStackInfo, sSlowlyStack, STACK_TOP(sSlowlyStack), 0, 0x100, "slowly"); + Slowly_Start(&D_801F6E00, STACK_TOP(sSlowlyStack), PreRender_ApplyFilters, this, NULL); D_801F6FC0 = true; } } @@ -432,7 +438,7 @@ void PreRender_ApplyFiltersSlowlyInit(PreRender* this) { */ void PreRender_ApplyFiltersSlowlyDestroy(PreRender* this) { if (D_801F6FC0) { - StackCheck_Cleanup(&slowlyStackEntry); + StackCheck_Cleanup(&sSlowlyStackInfo); Slowly_Stop(&D_801F6E00); D_801F6FC0 = false; } diff --git a/src/code/graph.c b/src/code/graph.c index 4bf3228783..6cc8d77729 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,4 +1,5 @@ #include "global.h" +#include "buffers.h" #include "system_malloc.h" #include "overlays/gamestates/ovl_daytelop/z_daytelop.h" #include "overlays/gamestates/ovl_file_choose/z_file_choose.h" diff --git a/src/code/main.c b/src/code/main.c index 59ffb6a32f..b036123bea 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -3,7 +3,29 @@ * reordering than just prevent_bss_reordering.h: there is too much of it to control, and it cannot be split into * separate files since most of it is at addresses ending in 8. */ + #include "global.h" +#include "buffers.h" +#include "stack.h" + +extern OSMesgQueue sSiIntMsgQ; +extern OSMesg sSiIntMsgBuf[1]; +extern u32 gSegments[NUM_SEGMENTS]; +extern SchedContext gSchedContext; +extern IrqMgrClient irqClient; +extern OSMesgQueue irqMgrMsgQ; +extern OSMesg irqMgrMsgBuf[60]; +extern OSThread gGraphThread; +extern STACK(sGraphStack, 0x1800); +extern STACK(sSchedStack, 0x600); +extern STACK(sAudioStack, 0x800); +extern STACK(sPadMgrStack, 0x500); +extern StackEntry sGraphStackInfo; +extern StackEntry sSchedStackInfo; +extern StackEntry sAudioStackInfo; +extern StackEntry sPadMgrStackInfo; +extern AudioMgr sAudioMgr; +extern PadMgr gPadMgr; void Main(void* arg) { intptr_t fb; @@ -33,25 +55,24 @@ void Main(void* arg) { osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf)); - StackCheck_Init(&schedStackEntry, schedStack, schedStack + sizeof(schedStack), 0, 0x100, "sched"); - Sched_Init(&gSchedContext, schedStack + sizeof(schedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr); + StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched"); + Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr); CIC6105_AddRomInfoFaultPage(); IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ); - StackCheck_Init(&audioStackEntry, audioStack, audioStack + sizeof(audioStack), 0, 0x100, "audio"); - AudioMgr_Init(&audioContext, audioStack + sizeof(audioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); + StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio"); + AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); - StackCheck_Init(&padmgrStackEntry, padmgrStack, padmgrStack + sizeof(padmgrStack), 0, 0x100, "padmgr"); - PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, padmgrStack + sizeof(padmgrStack)); + StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr"); + PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack)); - AudioMgr_Unlock(&audioContext); + AudioMgr_Unlock(&sAudioMgr); - StackCheck_Init(&sGraphStackInfo, sGraphStack, sGraphStack + sizeof(sGraphStack), 0, 0x100, "graph"); - osCreateThread(&sGraphThread, Z_THREAD_ID_GRAPH, Graph_ThreadEntry, arg, sGraphStack + sizeof(sGraphStack), - Z_PRIORITY_GRAPH); - osStartThread(&sGraphThread); + StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph"); + osCreateThread(&gGraphThread, Z_THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), Z_PRIORITY_GRAPH); + osStartThread(&gGraphThread); exit = false; @@ -73,5 +94,5 @@ void Main(void* arg) { } IrqMgr_RemoveClient(&gIrqMgr, &irqClient); - osDestroyThread(&sGraphThread); + osDestroyThread(&gGraphThread); } diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 3f198ce8fd..25d92227cb 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -1,4 +1,5 @@ #include "global.h" +#include "buffers.h" #include "system_malloc.h" #pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s") diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index 8b6c2fa5cc..e9ea6e21ef 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -1,6 +1,17 @@ #include "global.h" +#include "stack.h" #include "system_malloc.h" +// extern UNK_TYPE1 D_801FBE10; +// extern UNK_TYPE1 D_801FBE28; +// extern UNK_TYPE1 D_801FBE2C; +// extern UNK_TYPE4 D_801FBE30; +extern STACK(sSysFlashromStack, 0x1000); +extern StackEntry sys_flashromStackEntry; +extern OSThread sys_flashromOSThread; +extern s80185D40 D_801FD008; +extern OSMesg D_801FD034; + #pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s") #pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857D0.s") diff --git a/src/code/z_play.c b/src/code/z_play.c index 712b94f115..f6a425367f 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,4 +1,5 @@ #include "global.h" +#include "buffers.h" #include "z64debug_display.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index 94d0e69c31..67f8bdda6f 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "overlays/gamestates/ovl_file_choose/z_file_choose.h" diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index 3d618de746..fefffd6533 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -1,9 +1,10 @@ #include "global.h" +#include "stack.h" OSPiHandle D_8009D130; OSPiHandle D_8009D1A8; -OSThread D_8009D220; -u8 piManagerStack[0x1000]; +OSThread sPiMgrThread; +STACK(sPiMgrStack, 0x1000); OSMesgQueue D_8009E3D0; OSMesg D_8009E3E8[1]; @@ -27,14 +28,14 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC } savedMask = __osDisableInt(); __osPiDevMgr.active = 1; - __osPiDevMgr.thread = &D_8009D220; + __osPiDevMgr.thread = &sPiMgrThread; __osPiDevMgr.cmdQueue = cmdQ; __osPiDevMgr.evtQueue = &D_8009E3D0; __osPiDevMgr.acsQueue = &__osPiAccessQueue; __osPiDevMgr.piDmaCallback = __osPiRawStartDma; __osPiDevMgr.epiDmaCallback = __osEPiRawStartDma; - osCreateThread(&D_8009D220, 0, __osDevMgrMain, (void*)&__osPiDevMgr, &piManagerStack[4096], pri); - osStartThread(&D_8009D220); + osCreateThread(&sPiMgrThread, 0, __osDevMgrMain, &__osPiDevMgr, STACK_TOP(sPiMgrStack), pri); + osStartThread(&sPiMgrThread); __osRestoreInt(savedMask); if (oldPri != -1) { osSetThreadPri(NULL, oldPri); diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c index 07babf3517..ad9cbffd89 100644 --- a/src/libultra/io/vimgr.c +++ b/src/libultra/io/vimgr.c @@ -1,8 +1,9 @@ #include "global.h" +#include "stack.h" #include "osint.h" OSThread viThread; -u8 viThreadStack[0x1000]; +STACK(sViStack, 0x1000); OSMesgQueue viEventQueue; OSMesg viEventBuf[6]; OSIoMesg viRetraceMsg; @@ -45,7 +46,7 @@ void osCreateViManager(OSPri pri) { __osViDevMgr.piDmaCallback = NULL; __osViDevMgr.epiDmaCallback = NULL; - osCreateThread(&viThread, 0, &viMgrMain, &__osViDevMgr, viThreadStack + sizeof(viThreadStack), pri); + osCreateThread(&viThread, 0, &viMgrMain, &__osViDevMgr, STACK_TOP(sViStack), pri); __osViInit(); osStartThread(&viThread); __osRestoreInt(prevInt); diff --git a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c index ccf5a374f4..9b74a97ac9 100644 --- a/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c +++ b/src/overlays/actors/ovl_En_Wood02/z_en_wood02.c @@ -4,6 +4,7 @@ * Description: Trees, shrubs */ +#include "prevent_bss_reordering.h" #include "z_en_wood02.h" #include "objects/object_wood02/object_wood02.h" @@ -35,8 +36,8 @@ typedef enum { /* 5 */ WOOD_DRAW_LEAF_YELLOW } WoodDrawType; -static f32 sSpawnCos; -static f32 sSpawnSin; +f32 sWood02SpawnCos; +f32 sWood02SpawnSin; ActorInit En_Wood02_InitVars = { ACTOR_EN_WOOD02, @@ -70,9 +71,9 @@ static ColliderCylinderInit sCylinderInit = { { 18, 60, 0, { 0, 0, 0 } }, }; -static f32 sSpawnDistance[] = { 707.0f, 525.0f, 510.0f, 500.0f, 566.0f, 141.0f }; +f32 sWood02SpawnDistance[] = { 707.0f, 525.0f, 510.0f, 500.0f, 566.0f, 141.0f }; -static s16 sSpawnAngle[] = { 0x1FFF, 0x4C9E, 0x77F5, 0xA5C9, -0x293D, 0xA000 }; +s16 sWood02SpawnAngle[] = { 0x1FFF, 0x4C9E, 0x77F5, 0xA5C9, -0x293D, 0xA000 }; static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 5600, ICHAIN_STOP), @@ -136,12 +137,12 @@ void EnWood02_SpawnOffspring(EnWood02* this, PlayState* play) { extraRot = 0x4000; } - sSpawnCos = Math_CosS(sSpawnAngle[i] + this->actor.world.rot.y + extraRot); - sSpawnSin = Math_SinS(sSpawnAngle[i] + this->actor.world.rot.y + extraRot); + sWood02SpawnCos = Math_CosS(sWood02SpawnAngle[i] + this->actor.world.rot.y + extraRot); + sWood02SpawnSin = Math_SinS(sWood02SpawnAngle[i] + this->actor.world.rot.y + extraRot); - childPos.x = (sSpawnDistance[i] * sSpawnSin) + this->actor.home.pos.x; + childPos.x = (sWood02SpawnDistance[i] * sWood02SpawnSin) + this->actor.home.pos.x; childPos.y = this->actor.home.pos.y; - childPos.z = (sSpawnDistance[i] * sSpawnCos) + this->actor.home.pos.z; + childPos.z = (sWood02SpawnDistance[i] * sWood02SpawnCos) + this->actor.home.pos.z; if (EnWood02_SpawnZoneCheck(this, play, &childPos)) { if (this->unk_14A[i] & 0x80) { @@ -152,8 +153,8 @@ void EnWood02_SpawnOffspring(EnWood02* this, PlayState* play) { childParams = ((this->unk_144 << 8) & 0xFF00) | (this->actor.params + 1); child = (EnWood02*)Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_WOOD02, childPos.x, - childPos.y, childPos.z, this->actor.world.rot.x, sSpawnAngle[i], - unk, childParams); + childPos.y, childPos.z, this->actor.world.rot.x, + sWood02SpawnAngle[i], unk, childParams); if (child != NULL) { child->unk_14A[0] = i; this->unk_14A[i] |= 1; @@ -296,10 +297,10 @@ void EnWood02_Init(Actor* thisx, PlayState* play) { if (spawnType == WOOD_SPAWN_SPAWNER) { EnWood02_SpawnOffspring(this, play); - sSpawnCos = Math_CosS(sSpawnAngle[5] + this->actor.world.rot.y + extraRot); - sSpawnSin = Math_SinS(sSpawnAngle[5] + this->actor.world.rot.y + extraRot); - this->actor.world.pos.x += sSpawnSin * sSpawnDistance[5]; - this->actor.world.pos.z += sSpawnCos * sSpawnDistance[5]; + sWood02SpawnCos = Math_CosS(sWood02SpawnAngle[5] + this->actor.world.rot.y + extraRot); + sWood02SpawnSin = Math_SinS(sWood02SpawnAngle[5] + this->actor.world.rot.y + extraRot); + this->actor.world.pos.x += sWood02SpawnSin * sWood02SpawnDistance[5]; + this->actor.world.pos.z += sWood02SpawnCos * sWood02SpawnDistance[5]; } else { this->actor.flags |= ACTOR_FLAG_10; this->unk_151 = 2; diff --git a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c index 501fb2ee41..b1924c63be 100644 --- a/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c +++ b/src/overlays/actors/ovl_Obj_Grass/z_obj_grass.c @@ -4,11 +4,9 @@ * Description: "Master" instance of grass for unit spawned by Obj_Grass_Unit */ -#include "prevent_bss_reordering.h" #include "z_obj_grass.h" #include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h" #include "objects/gameplay_keep/gameplay_keep.h" -#include "prevent_bss_reordering.h" #define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20) diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f680f6bca5..1c59f0fe13 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -285,15 +285,15 @@ 0x800994D0:("D_800994D0","char","[]",0xc), 0x800994DC:("D_800994DC","char","[]",0x12), 0x800994F0:("D_800994F0","char","[]",0x1), - 0x80099500:("sBootThreadInfo","StackEntry","",0x1c), + 0x80099500:("sBootStackInfo","StackEntry","",0x1c), 0x80099520:("sIdleThread","OSThread","",0x1b0), 0x800996D0:("sIdleThreadStack","u8","[1024]",0x400), - 0x80099AD0:("sIdleThreadInfo","StackEntry","",0x1c), + 0x80099AD0:("sIdleStackInfo","StackEntry","",0x1c), 0x80099AF0:("sBootThreadStack","u8","[1024]",0x400), 0x80099EF0:("gIrqMgr","IrqMgr","",0x280), 0x8009A170:("sIrqMgrStack","u8","[1280]",0x500), 0x8009A670:("sIrqMgrStackInfo","StackEntry","",0x1c), - 0x8009A690:("gMainThread","OSThread","",0x1b0), + 0x8009A690:("sMainThread","OSThread","",0x1b0), 0x8009A840:("sMainStack","u8","[2304]",0x900), 0x8009B140:("sMainStackInfo","StackEntry","",0x1c), 0x8009B160:("sPiMgrCmdBuff","OSMesg","[50]",0xc8), @@ -320,7 +320,7 @@ 0x8009BE58:("faultCustomOptions","u32","",0x4), 0x8009BE5C:("faultCopyToLog","u32","",0x4), 0x8009BE60:("sFaultStack","u8","[1536]",0x600), - 0x8009C460:("sFaultThreadInfo","StackEntry","",0x1c), + 0x8009C460:("sFaultStackInfo","StackEntry","",0x1c), 0x8009C480:("gFaultStruct","FaultThreadStruct","",0x848), 0x8009CCD0:("sFaultDrawerStruct","FaultDrawer","",0x3c), 0x8009CD10:("D_8009CD10","UNK_TYPE4","",0x4), @@ -343,8 +343,8 @@ 0x8009CF80:("__osThreadSave","OSThread","",0x1b0), 0x8009D130:("D_8009D130","OSPiHandle","",0x74), 0x8009D1A8:("D_8009D1A8","OSPiHandle","",0x74), - 0x8009D220:("D_8009D220","OSThread","",0x1b0), - 0x8009D3D0:("piManagerStack","u8","[4096]",0x1000), + 0x8009D220:("sPiMgrThread","OSThread","",0x1b0), + 0x8009D3D0:("sPiMgrStack","u8","[4096]",0x1000), 0x8009E3D0:("D_8009E3D0","OSMesgQueue","",0x18), 0x8009E3E8:("D_8009E3E8","OSMesg","[1]",0x4), 0x8009E3F0:("D_8009E3F0","OSMesg","[1]",0x4), @@ -359,7 +359,7 @@ 0x8009E5D0:("__osPfsPifRam","OSPifRam","",0x40), 0x8009E610:("CartRomHandle","OSPiHandle","",0x74), 0x8009E690:("viThread","OSThread","",0x1b0), - 0x8009E840:("viThreadStack","u8","[4096]",0x1000), + 0x8009E840:("sViStack","u8","[4096]",0x1000), 0x8009F840:("viEventQueue","OSMesgQueue","",0x18), 0x8009F858:("viEventBuf","OSMesg","[5]",0x14), 0x8009F870:("viRetraceMsg","OSIoMesg","",0x18), @@ -4063,9 +4063,8 @@ 0x801F6DFD:("sMotionBlurStatus","UNK_TYPE1","",0x1), 0x801F6E00:("D_801F6E00","SlowlyTask","",0x1c0), 0x801F6FC0:("D_801F6FC0","UNK_TYPE1","",0x1), - 0x801F6FC8:("slowlyStackEntry","StackEntry","",0x1c), - 0x801F6FE8:("slowlyStack","u8","[4096]",0x1000), - 0x801F7FE8:("D_801F7FE8","UNK_TYPE1","",0x1), + 0x801F6FC8:("sSlowlyStackInfo","StackEntry","",0x1c), + 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), 0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x1), 0x801F8010:("D_801F8010","struct_801F8010","",0x10), 0x801F8020:("D_801F8020","struct_801F8020","",0x10), @@ -4083,17 +4082,17 @@ 0x801F84F8:("irqClient","IrqMgrClient","",0x8), 0x801F8500:("irqMgrMsgQ","OSMesgQueue","",0x18), 0x801F8518:("irqMgrMsgBuf","OSMesg","[60]",0xf0), - 0x801F8608:("sGraphThread","OSThread","",0x1b0), + 0x801F8608:("gGraphThread","OSThread","",0x1b0), 0x801F87B8:("sGraphStack","u8","[6144]",0x1800), - 0x801F9FB8:("schedStack","u8","[1536]",0x600), - 0x801FA5B8:("audioStack","u8","[2048]",0x800), - 0x801FADB8:("padmgrStack","u8","[1280]",0x500), + 0x801F9FB8:("sSchedStack","u8","[1536]",0x600), + 0x801FA5B8:("sAudioStack","u8","[2048]",0x800), + 0x801FADB8:("sPadMgrStack","u8","[1280]",0x500), 0x801FB2B8:("sGraphStackInfo","StackEntry","",0x1c), - 0x801FB2D8:("schedStackEntry","StackEntry","",0x1c), - 0x801FB2F8:("audioStackEntry","StackEntry","",0x1c), - 0x801FB318:("padmgrStackEntry","StackEntry","",0x1c), - 0x801FB338:("audioContext","AudioMgr","",0x2e0), - 0x801FB620:("D_801FB620","PadMgr","",0x480), + 0x801FB2D8:("sSchedStackInfo","StackEntry","",0x1c), + 0x801FB2F8:("sAudioStackInfo","StackEntry","",0x1c), + 0x801FB318:("sPadMgrStackInfo","StackEntry","",0x1c), + 0x801FB338:("sAudioMgr","AudioMgr","",0x2e0), + 0x801FB620:("gPadMgr","PadMgr","",0x480), 0x801FBAA0:("sSchedFaultClient","UNK_TYPE1","",0x1), 0x801FBAB0:("sRSPGFXStartTime","OSTime","",0x8), 0x801FBAB8:("sRSPAudioStartTime","OSTime","",0x8), @@ -4216,7 +4215,7 @@ 0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1), 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1), 0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4), - 0x801FBE38:("sys_flashromStack","u8","[4096]",0x1000), + 0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000), 0x801FCE38:("sys_flashromStackEntry","StackEntry","",0x1c), 0x801FCE58:("sys_flashromOSThread","OSThread","",0x1b0), 0x801FD008:("D_801FD008","s80185D40","",0x2c), @@ -6649,8 +6648,8 @@ 0x808C3BC0:("D_808C3BC0","UNK_TYPE1","",0x1), 0x808C4CE0:("En_Wood02_InitVars","UNK_TYPE1","",0x1), 0x808C4D00:("D_808C4D00","UNK_TYPE1","",0x1), - 0x808C4D2C:("D_808C4D2C","UNK_TYPE1","",0x1), - 0x808C4D44:("D_808C4D44","UNK_TYPE1","",0x1), + 0x808C4D2C:("sWood02SpawnDistance","f32","",0x1), + 0x808C4D44:("sWood02SpawnAngle","UNK_TYPE1","",0x1), 0x808C4D4E:("D_808C4D4E","UNK_TYPE2","",0x2), 0x808C4D50:("D_808C4D50","UNK_TYPE1","",0x1), 0x808C4D54:("D_808C4D54","UNK_TYPE1","",0x1), @@ -6660,8 +6659,8 @@ 0x808C4E10:("D_808C4E10","f32","",0x4), 0x808C4E14:("D_808C4E14","f32","",0x4), 0x808C4E18:("D_808C4E18","UNK_TYPE1","",0x1), - 0x808C4F70:("D_808C4F70","f32","",0x4), - 0x808C4F74:("D_808C4F74","UNK_TYPE1","",0x1), + 0x808C4F70:("sWood02SpawnCos","f32","",0x4), + 0x808C4F74:("sWood02SpawnSin","UNK_TYPE1","",0x4), 0x808C98C0:("En_Death_InitVars","UNK_TYPE1","",0x1), 0x808C98E0:("D_808C98E0","UNK_TYPE1","",0x1), 0x808C990C:("D_808C990C","UNK_TYPE1","",0x1),