From 0f740013fc795d586a7a88ccfa51411e523306fe Mon Sep 17 00:00:00 2001 From: gijs Date: Fri, 20 Oct 2023 12:30:13 +0200 Subject: [PATCH] Decompile `nuScEventHandler` --- src/_ob_past_brick.c | 46 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/_ob_past_brick.c b/src/_ob_past_brick.c index 692faaa..3d1db2a 100644 --- a/src/_ob_past_brick.c +++ b/src/_ob_past_brick.c @@ -2,6 +2,8 @@ #include "nu/nusys.h" +void nuScEventBroadcast(NUScMsg* msg); + INCLUDE_ASM(const s32, "_ob_past_brick", nuScCreateScheduler); OSMesgQueue* nuScGetAudioMQ() { @@ -12,7 +14,49 @@ OSMesgQueue* nuScGetGfxMQ() { return &nusched.graphicsRequestMQ; } -INCLUDE_ASM(const s32, "_ob_past_brick", nuScEventHandler); +void nuScEventHandler(void) { + OSMesg msg; + s32 beforeResetFrame; + + nuScRetraceCounter = 0; + + while (TRUE) { + osRecvMesg(&nusched.retraceMQ, &msg, OS_MESG_BLOCK); + + switch ((s32) msg) { + case 666: + nuScRetraceCounter++; + + nuScEventBroadcast(&nusched.retraceMsg); + + if (nuScPreNMIFlag){ + if (beforeResetFrame){ + beforeResetFrame--; + } else { + nuScPreNMIFlag |= NU_SC_BEFORE_RESET; + osAfterPreNMI(); + osViSetYScale(1.0); + __calls_osViBlack(TRUE); + } + } + break; + + case 669: + nuScPreNMIFlag = NU_SC_PRENMI_GET; + nuScEventBroadcast(&nusched.prenmiMsg); + + if (nuScPreNMIFunc != NULL){ + (*nuScPreNMIFunc)(); + } + + beforeResetFrame = (nusched.frameRate / 2) / nusched.retraceCount - 3; + break; + + default: + break; + } + } +} void nuScAddClient(NUScClient* client, OSMesgQueue* queue, NUScMsg type) { s32 mask;