From 78153a1bf46e8be1559ea03af6eb1521a1d3bae2 Mon Sep 17 00:00:00 2001 From: kyleburnette Date: Wed, 3 Nov 2021 12:48:08 -0700 Subject: [PATCH] osspsetpc OK (#384) --- include/functions.h | 2 +- src/libultra/io/spsetpc.c | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/functions.h b/include/functions.h index 0970b330c5..56be51a78f 100644 --- a/include/functions.h +++ b/include/functions.h @@ -478,7 +478,7 @@ float __ull_to_f(unsigned long long l); // void osVoiceControlGain(void); // void osVoiceStartReadData(void); void* osViGetCurrentFramebuffer(void); -s32 __osSpSetPc(void* data); +s32 __osSpSetPc(void* pc); // void __osVoiceContWrite4(void); void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); void __osSetHWIntrRoutine(s32 idx, OSMesgQueue* queue, OSMesg msg); diff --git a/src/libultra/io/spsetpc.c b/src/libultra/io/spsetpc.c index d87302bc22..2c3cc32ba0 100644 --- a/src/libultra/io/spsetpc.c +++ b/src/libultra/io/spsetpc.c @@ -1,3 +1,13 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/spsetpc/__osSpSetPc.s") +s32 __osSpSetPc(void* pc) { + register u32 spStatus = HW_REG(SP_STATUS_REG, u32); + + if (!(spStatus & SP_STATUS_HALT)) { + return -1; + } else { + HW_REG(SP_PC_REG, void*) = pc; + } + + return 0; +}