z_nmi_buff OK, code_8010C1B0 split and OK (#334)

* nmi_buff OK, code_8010C1B0 split and OK

* COLD_RESET

* spec

* Fix lifemeter bss

* Rename variable
This commit is contained in:
EllipticEllipsis
2021-09-30 03:13:31 +01:00
committed by GitHub
parent f80b08450f
commit bd9e21b165
8 changed files with 65 additions and 11 deletions
+20
View File
@@ -0,0 +1,20 @@
#include "global.h"
// Blocks the current thread until all currently queued scheduler tasks have been completed
void func_8010C1B0(void) {
OSScTask task;
OSMesgQueue queue;
OSMesg msg;
task.next = NULL;
task.flags = OS_SC_RCP_MASK;
task.msgQ = &queue;
task.msg = NULL;
task.framebuffer = NULL;
task.list.t.type = M_NULTASK;
osCreateMesgQueue(task.msgQ, &msg, 1);
osSendMesg(&gSchedContext.cmdQ, &task, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext);
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
}
+8 -3
View File
@@ -1,3 +1,8 @@
/**
* 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"
void Main(void* arg) {
@@ -29,18 +34,18 @@ void Main(void* arg) {
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);
Sched_Init(&gSchedContext, 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);
AudioMgr_Init(&audioContext, audioStack + sizeof(audioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &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");
+25 -4
View File
@@ -1,9 +1,30 @@
#include "global.h"
#pragma GLOBAL_ASM("asm/non_matchings/code/z_nmi_buff/Nmi_Init.s")
#define COLD_RESET 0
#define NMI 1
#pragma GLOBAL_ASM("asm/non_matchings/code/z_nmi_buff/Nmi_SetPrenmiStart.s")
NmiBuff* gNMIBuffer;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_nmi_buff/Nmi_GetPrenmiHasStarted.s")
void Nmi_Init(void) {
gNMIBuffer = (NmiBuff*)osAppNmiBuffer;
gNMIBuffer->resetting = false;
#pragma GLOBAL_ASM("asm/non_matchings/code/z_nmi_buff/func_8010C1B0.s")
if (osResetType == COLD_RESET) {
gNMIBuffer->resetCount = 0;
gNMIBuffer->duration = 0;
} else {
gNMIBuffer->resetCount++;
gNMIBuffer->duration += gNMIBuffer->resetTime;
}
gNMIBuffer->resetTime = 0;
}
void Nmi_SetPrenmiStart(void) {
gNMIBuffer->resetting = true;
gNMIBuffer->resetTime = osGetTime();
}
u32 Nmi_GetPrenmiHasStarted(void) {
return gNMIBuffer->resetting;
}