mirror of
https://github.com/zeldaret/mm.git
synced 2026-05-26 23:47:02 -04:00
5c06a6b240
* Main OK, use defines where known * Couple more defines * Tharo's review * Fix lifemeter bss
73 lines
2.3 KiB
C
73 lines
2.3 KiB
C
#include "global.h"
|
|
|
|
void Main(void* arg) {
|
|
intptr_t fb;
|
|
intptr_t sysHeap;
|
|
s32 exit;
|
|
s16* msg;
|
|
|
|
gScreenWidth = SCREEN_WIDTH;
|
|
gScreenHeight = SCREEN_HEIGHT;
|
|
|
|
Nmi_Init();
|
|
Fault_Start();
|
|
Check_RegionIsSupported();
|
|
Check_ExpansionPak();
|
|
|
|
sysHeap = gSystemHeap;
|
|
fb = 0x80780000;
|
|
startHeapSize = fb - sysHeap;
|
|
SystemArena_Init(sysHeap, startHeapSize);
|
|
|
|
static_context_init();
|
|
|
|
R_ENABLE_ARENA_DBG = 0;
|
|
|
|
osCreateMesgQueue(&siEventCallbackQueue, siEventCallbackBuffer, ARRAY_COUNT(siEventCallbackBuffer));
|
|
osSetEventMesg(OS_EVENT_SI, &siEventCallbackQueue, NULL);
|
|
|
|
osCreateMesgQueue(&mainIrqmgrCallbackQueue, mainIrqCallbackBuffer, ARRAY_COUNT(mainIrqCallbackBuffer));
|
|
|
|
StackCheck_Init(&schedStackEntry, schedStack, schedStack + sizeof(schedStack), 0, 0x100, "sched");
|
|
Sched_Init(&schedContext, schedStack + sizeof(schedStack), Z_PRIORITY_SCHED, D_8009B290, 1, &gIrqMgr);
|
|
|
|
CIC6105_AddRomInfoFaultPage();
|
|
|
|
IrqMgr_AddClient(&gIrqMgr, &mainIrqmgrCallbackNode, &mainIrqmgrCallbackQueue);
|
|
|
|
StackCheck_Init(&audioStackEntry, audioStack, audioStack + sizeof(audioStack), 0, 0x100, "audio");
|
|
AudioMgr_Init(&audioContext, audioStack + sizeof(audioStack), Z_PRIORITY_AUDIOMGR, 0xA, &schedContext, &gIrqMgr);
|
|
|
|
StackCheck_Init(&padmgrStackEntry, padmgrStack, padmgrStack + sizeof(padmgrStack), 0, 0x100, "padmgr");
|
|
Padmgr_Start(&siEventCallbackQueue, &gIrqMgr, 7, Z_PRIORITY_PADMGR, padmgrStack + sizeof(padmgrStack));
|
|
|
|
AudioMgr_Unlock(&audioContext);
|
|
|
|
StackCheck_Init(&graphStackEntry, graphStack, graphStack + sizeof(graphStack), 0, 0x100, "graph");
|
|
osCreateThread(&graphOSThread, Z_THREAD_ID_GRAPH, Graph_ThreadEntry, arg, graphStack + sizeof(graphStack),
|
|
Z_PRIORITY_GRAPH);
|
|
osStartThread(&graphOSThread);
|
|
|
|
exit = false;
|
|
|
|
while (!exit) {
|
|
msg = NULL;
|
|
osRecvMesg(&mainIrqmgrCallbackQueue, (OSMesg)&msg, OS_MESG_BLOCK);
|
|
if (msg == NULL) {
|
|
break;
|
|
}
|
|
|
|
switch (*msg) {
|
|
case OS_SC_PRE_NMI_MSG:
|
|
Nmi_SetPrenmiStart();
|
|
break;
|
|
case OS_SC_NMI_MSG:
|
|
exit = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
IrqMgr_RemoveClient(&gIrqMgr, &mainIrqmgrCallbackNode);
|
|
osDestroyThread(&graphOSThread);
|
|
}
|