diff --git a/include/functions.h b/include/functions.h index 63ee51708d..65514ca8e0 100644 --- a/include/functions.h +++ b/include/functions.h @@ -479,7 +479,7 @@ void* osViGetCurrentFramebuffer(void); s32 __osSpSetPc(void* data); // void __osVoiceContWrite4(void); void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); -// void __osSetHWIntrRoutine(void); +void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg); u32 __osGetWatchLo(void); void __osSetWatchLo(u32 value); f32 fmodf(f32 dividend, f32 divisor); diff --git a/src/libultra/os/sethwinterrupt.c b/src/libultra/os/sethwinterrupt.c index 86dfd2c649..6ba72be7a1 100644 --- a/src/libultra/os/sethwinterrupt.c +++ b/src/libultra/os/sethwinterrupt.c @@ -1,3 +1,10 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/sethwinterrupt/__osSetHWIntrRoutine.s") +void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg) { + register s32 prevInt = __osDisableInt(); + + __osHwIntTable[idx].queue = queue; + __osHwIntTable[idx].msg = msg; + + __osRestoreInt(prevInt); +}