From b9d20f4175f0e1f5b75acba06cf6eae98f6d59ce Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 26 Jan 2021 22:57:31 +1000 Subject: [PATCH] Decompile osYieldThread --- Makefile | 1 + src/game/data/data_003dc0.c | 2 +- src/include/game/data/data_000000.h | 2 +- src/lib/ultra/os/yieldthread.c | 31 ++++++++--------------------- 4 files changed, 11 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 29a7ab719..830cef5a7 100644 --- a/Makefile +++ b/Makefile @@ -76,6 +76,7 @@ $(B_DIR)/lib/ultra/io/visetevent.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/destroythread.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/resetglobalintmask.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/thread.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/os/yieldthread.o: OPT_LVL := -O1 CFLAGS = -DVERSION=$(VERSION) \ -DNTSC=$(NTSC) \ diff --git a/src/game/data/data_003dc0.c b/src/game/data/data_003dc0.c index 926e136c0..093e6b6fd 100644 --- a/src/game/data/data_003dc0.c +++ b/src/game/data/data_003dc0.c @@ -2289,7 +2289,7 @@ u32 var80060928 = 0x00000000; u32 var8006092c = 0x00000000; u32 __osThreadTail = 0x00000000; u32 var80060934 = 0xffffffff; -u32 __osRunQueue = (u32) &__osThreadTail; +OSThread *__osRunQueue = (OSThread *)&__osThreadTail; OSThread *__osActiveQueue = (OSThread *)&__osThreadTail; OSThread *__osRunningThread = NULL; u32 var80060944 = 0x00000000; diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index ba431cd4f..2220dd70c 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -184,7 +184,7 @@ extern __OSViContext *__osViCurr; extern __OSViContext *__osViNext; extern u32 __osPiAccessQueueEnabled; extern u32 __osThreadTail; -extern u32 __osRunQueue; +extern OSThread *__osRunQueue; extern OSThread *__osActiveQueue; extern OSThread *__osRunningThread; extern u32 var80060970; diff --git a/src/lib/ultra/os/yieldthread.c b/src/lib/ultra/os/yieldthread.c index 6d2344f1a..303dc69ba 100644 --- a/src/lib/ultra/os/yieldthread.c +++ b/src/lib/ultra/os/yieldthread.c @@ -1,25 +1,10 @@ #include +#include "game/data/data_000000.h" -GLOBAL_ASM( -glabel osYieldThread -/* 51c10: 27bdffd8 */ addiu $sp,$sp,-40 -/* 51c14: afbf001c */ sw $ra,0x1c($sp) -/* 51c18: 0c01256c */ jal __osDisableInt -/* 51c1c: afb00018 */ sw $s0,0x18($sp) -/* 51c20: 3c0f8006 */ lui $t7,%hi(__osRunningThread) -/* 51c24: 8def0940 */ lw $t7,%lo(__osRunningThread)($t7) -/* 51c28: 240e0002 */ addiu $t6,$zero,0x2 -/* 51c2c: 3c048006 */ lui $a0,%hi(__osRunQueue) -/* 51c30: 00408025 */ or $s0,$v0,$zero -/* 51c34: 24840938 */ addiu $a0,$a0,%lo(__osRunQueue) -/* 51c38: 0c000ee8 */ jal __osEnqueueAndYield -/* 51c3c: a5ee0010 */ sh $t6,0x10($t7) -/* 51c40: 0c012588 */ jal __osRestoreInt -/* 51c44: 02002025 */ or $a0,$s0,$zero -/* 51c48: 8fbf001c */ lw $ra,0x1c($sp) -/* 51c4c: 8fb00018 */ lw $s0,0x18($sp) -/* 51c50: 27bd0028 */ addiu $sp,$sp,0x28 -/* 51c54: 03e00008 */ jr $ra -/* 51c58: 00000000 */ nop -/* 51c5c: 00000000 */ nop -); +void osYieldThread(void) +{ + register u32 saveMask = __osDisableInt(); + __osRunningThread->state = OS_STATE_RUNNABLE; + __osEnqueueAndYield(&__osRunQueue); + __osRestoreInt(saveMask); +}