diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2023-06-25 17:18:50 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-26 10:18:50 +1000 |
| commit | 22035890fa372f61dd9b907c2a0f9dc6bcd0ae19 (patch) | |
| tree | 82dffc7c8d27e07adecd11d3e1a481a5857c7393 /src/code/main.c | |
| parent | a2c2c45a0e2c35ec30cfac888a0deb92f86b8d96 (diff) | |
Idle + Main bss and cleanup (#1292)
* Idle bss and cleanup
* main bss and cleanup
* format
* Remove pad comment about sAudioMgr
* PR
* Missed a couple size_t changes
* unused pads
* static
Diffstat (limited to 'src/code/main.c')
| -rw-r--r-- | src/code/main.c | 81 |
1 files changed, 45 insertions, 36 deletions
diff --git a/src/code/main.c b/src/code/main.c index 381c42fac..f969df70d 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,34 +1,41 @@ -/** - * This file has unmigrated bss. It is not practical to migrate it until we have a better way of dealing with bss - * 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 "audiomgr.h" -#include "buffers.h" +#include "idle.h" +#include "irqmgr.h" +#include "padmgr.h" +#include "scheduler.h" #include "stack.h" #include "stackcheck.h" #include "system_heap.h" #include "z64thread.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; +// Variables are put before most headers as a hacky way to bypass bss reordering +OSMesgQueue sSerialEventQueue; +OSMesg sSerialMsgBuf[1]; +u32 gSegments[NUM_SEGMENTS]; +SchedContext gSchedContext; +IrqMgrClient sIrqClient; +OSMesgQueue sIrqMgrMsgQueue; +OSMesg sIrqMgrMsgBuf[60]; +OSThread gGraphThread; +STACK(sGraphStack, 0x1800); +STACK(sSchedStack, 0x600); +STACK(sAudioStack, 0x800); +STACK(sPadMgrStack, 0x500); +StackEntry sGraphStackInfo; +StackEntry sSchedStackInfo; +StackEntry sAudioStackInfo; +StackEntry sPadMgrStackInfo; +AudioMgr sAudioMgr; +static s32 sBssPad; +PadMgr gPadMgr; + +#include "main.h" +#include "buffers.h" +#include "global.h" + +s32 gScreenWidth = SCREEN_WIDTH; +s32 gScreenHeight = SCREEN_HEIGHT; +size_t gSystemHeapSize = 0; void Main(void* arg) { intptr_t fb; @@ -46,30 +53,31 @@ void Main(void* arg) { sysHeap = gSystemHeap; fb = 0x80780000; - startHeapSize = fb - sysHeap; - SystemHeap_Init(sysHeap, startHeapSize); + gSystemHeapSize = fb - sysHeap; + SystemHeap_Init(sysHeap, gSystemHeapSize); Regs_Init(); R_ENABLE_ARENA_DBG = 0; - osCreateMesgQueue(&sSiIntMsgQ, sSiIntMsgBuf, ARRAY_COUNT(sSiIntMsgBuf)); - osSetEventMesg(OS_EVENT_SI, &sSiIntMsgQ, NULL); + osCreateMesgQueue(&sSerialEventQueue, sSerialMsgBuf, ARRAY_COUNT(sSerialMsgBuf)); + osSetEventMesg(OS_EVENT_SI, &sSerialEventQueue, NULL); - osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf)); + osCreateMesgQueue(&sIrqMgrMsgQueue, sIrqMgrMsgBuf, ARRAY_COUNT(sIrqMgrMsgBuf)); StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched"); - Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr); + Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, gViConfigModeType, 1, &gIrqMgr); CIC6105_AddRomInfoFaultPage(); - IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ); + IrqMgr_AddClient(&gIrqMgr, &sIrqClient, &sIrqMgrMsgQueue); StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio"); - AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); + AudioMgr_Init(&sAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, Z_THREAD_ID_AUDIOMGR, &gSchedContext, + &gIrqMgr); StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr"); - PadMgr_Init(&sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack)); + PadMgr_Init(&sSerialEventQueue, &gIrqMgr, Z_THREAD_ID_PADMGR, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack)); AudioMgr_Unlock(&sAudioMgr); @@ -81,7 +89,7 @@ void Main(void* arg) { while (!exit) { msg = NULL; - osRecvMesg(&irqMgrMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK); + osRecvMesg(&sIrqMgrMsgQueue, (OSMesg*)&msg, OS_MESG_BLOCK); if (msg == NULL) { break; } @@ -90,12 +98,13 @@ void Main(void* arg) { case OS_SC_PRE_NMI_MSG: Nmi_SetPrenmiStart(); break; + case OS_SC_NMI_MSG: exit = true; break; } } - IrqMgr_RemoveClient(&gIrqMgr, &irqClient); + IrqMgr_RemoveClient(&gIrqMgr, &sIrqClient); osDestroyThread(&gGraphThread); } |
