diff --git a/src/nu/nusicallbackadd.c b/src/nu/nusicallbackadd.c index a30f9cd..18f1bf1 100644 --- a/src/nu/nusicallbackadd.c +++ b/src/nu/nusicallbackadd.c @@ -1,3 +1,24 @@ #include "common.h" -INCLUDE_ASM(const s32, "nu/nusicallbackadd", nuSiCallBackAdd); +#include "nu/nusys.h" + +void nuSiCallBackAdd(NUCallBackList* list) { + OSIntMask mask; + NUCallBackList** siCallBackListPtr = &nuSiCallBackList; + u32 i; + + while (*siCallBackListPtr != NULL) { + if ((*siCallBackListPtr)->majorNo == list->majorNo) { + return; + } + siCallBackListPtr = &(*siCallBackListPtr)->next; + } + + for (i = 1; list->func[i] != NULL; i++); + + mask = osSetIntMask(OS_IM_NONE); + *siCallBackListPtr = list; + list->next = NULL; + list->funcNum = i; + osSetIntMask(mask); +} \ No newline at end of file