From d3081239d3291da52e87f31133d52a94cc9e44f5 Mon Sep 17 00:00:00 2001 From: angie Date: Sun, 3 Sep 2023 16:01:04 -0300 Subject: [PATCH] hardwareinterrupt --- include/PR/os_exception.h | 4 ++-- include/PR/os_internal.h | 5 ++--- src/libultra/os/gethwinterrupt.c | 6 +++--- src/libultra/os/sethwinterrupt.c | 8 ++++---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/include/PR/os_exception.h b/include/PR/os_exception.h index 7453780ac1..7140c96636 100644 --- a/include/PR/os_exception.h +++ b/include/PR/os_exception.h @@ -40,8 +40,8 @@ OSIntMask osSetIntMask(OSIntMask im); // Internal -void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg); -void __osGetHWIntrRoutine(OSHWIntr idx, OSMesgQueue** outQueue, OSMesg* outMsg); +void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void), void* stackEnd); +void __osGetHWIntrRoutine(OSHWIntr interrupt, s32 (**handler)(void), void** stackEnd); void __osSetGlobalIntMask(OSHWIntr mask); void __osResetGlobalIntMask(OSHWIntr mask); diff --git a/include/PR/os_internal.h b/include/PR/os_internal.h index c91fe56253..916e82d7c6 100644 --- a/include/PR/os_internal.h +++ b/include/PR/os_internal.h @@ -5,10 +5,9 @@ #include "os_message.h" #include "os_pi.h" - typedef struct __osHwInt { - /* 0x00 */ OSMesgQueue* queue; - /* 0x04 */ OSMesg msg; + /* 0x00 */ s32 (*handler)(void); + /* 0x04 */ void* stackEnd; } __osHwInt; // size = 0x08 #endif diff --git a/src/libultra/os/gethwinterrupt.c b/src/libultra/os/gethwinterrupt.c index eee73dc772..76366663c8 100644 --- a/src/libultra/os/gethwinterrupt.c +++ b/src/libultra/os/gethwinterrupt.c @@ -1,7 +1,7 @@ #include "PR/os_internal.h" #include "PR/osint.h" -void __osGetHWIntrRoutine(OSHWIntr interrupt, OSMesgQueue** outQueue, OSMesg* outMsg) { - *outQueue = __osHwIntTable[interrupt].queue; - *outMsg = __osHwIntTable[interrupt].msg; +void __osGetHWIntrRoutine(OSHWIntr interrupt, s32 (**handler)(void), void** stackEnd) { + *handler = __osHwIntTable[interrupt].handler; + *stackEnd = __osHwIntTable[interrupt].stackEnd; } diff --git a/src/libultra/os/sethwinterrupt.c b/src/libultra/os/sethwinterrupt.c index 4f536cade4..3a42123f76 100644 --- a/src/libultra/os/sethwinterrupt.c +++ b/src/libultra/os/sethwinterrupt.c @@ -1,11 +1,11 @@ -#include "global.h" +#include "PR/os_internal.h" #include "PR/osint.h" -void __osSetHWIntrRoutine(OSHWIntr idx, OSMesgQueue* queue, OSMesg msg) { +void __osSetHWIntrRoutine(OSHWIntr interrupt, s32 (*handler)(void), void* stackEnd) { register s32 prevInt = __osDisableInt(); - __osHwIntTable[idx].queue = queue; - __osHwIntTable[idx].msg = msg; + __osHwIntTable[interrupt].handler = handler; + __osHwIntTable[interrupt].stackEnd = stackEnd; __osRestoreInt(prevInt); }