From cc9df2b186df728fcbdb09f41fe6a435db14e580 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 26 Jan 2021 19:58:32 +1000 Subject: [PATCH] Decompile osSpTaskYeilded --- Makefile | 1 + ld/libfiles.inc | 2 +- src/boot/entry.c | 1 - src/boot/init.c | 1 - src/boot/sched.c | 1 - src/include/lib/lib_48c00.h | 6 ---- src/include/lib/lib_51890.h | 2 +- src/lib/lib_48c00.c | 51 -------------------------------- src/lib/lib_51890.c | 2 +- src/lib/ultra/io/sptaskyielded.c | 22 ++++++++++++++ 10 files changed, 26 insertions(+), 63 deletions(-) delete mode 100644 src/include/lib/lib_48c00.h delete mode 100644 src/lib/lib_48c00.c create mode 100644 src/lib/ultra/io/sptaskyielded.c diff --git a/Makefile b/Makefile index cd141419c..a2c932113 100644 --- a/Makefile +++ b/Makefile @@ -68,6 +68,7 @@ $(B_DIR)/lib/libc/llcvt.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/dpctr.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/sp.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/spsetpc.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/io/sptaskyielded.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/vigetcurrframebuf.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/vigetnextframebuf.o: OPT_LVL := -O1 diff --git a/ld/libfiles.inc b/ld/libfiles.inc index edcdfb404..1db61fe83 100644 --- a/ld/libfiles.inc +++ b/ld/libfiles.inc @@ -99,7 +99,7 @@ build/ROMID/lib/ultra/os/sendmesg.o (section); \ build/ROMID/lib/ultra/os/stoptimer.o (section); \ build/ROMID/lib/ultra/os/settimer.o (section); \ - build/ROMID/lib/lib_48c00.o (section); \ + build/ROMID/lib/ultra/io/sptaskyielded.o (section); \ build/ROMID/lib/ultra/io/dpctr.o (section); \ build/ROMID/lib/lib_48cd0.o (section); \ build/ROMID/lib/lib_48dc0.o (section); \ diff --git a/src/boot/entry.c b/src/boot/entry.c index b6af2dc85..bb9caba6c 100644 --- a/src/boot/entry.c +++ b/src/boot/entry.c @@ -27,7 +27,6 @@ #include "lib/lib_48150.h" #include "lib/lib_481d0.h" #include "lib/lib_485e0.h" -#include "lib/lib_48c00.h" #include "lib/lib_48cd0.h" #include "lib/lib_48dc0.h" #include "lib/lib_48ef0.h" diff --git a/src/boot/init.c b/src/boot/init.c index 0a7671b47..47f50e9d7 100644 --- a/src/boot/init.c +++ b/src/boot/init.c @@ -28,7 +28,6 @@ #include "lib/lib_48150.h" #include "lib/lib_481d0.h" #include "lib/lib_485e0.h" -#include "lib/lib_48c00.h" #include "lib/lib_48cd0.h" #include "lib/lib_48dc0.h" #include "lib/lib_48ef0.h" diff --git a/src/boot/sched.c b/src/boot/sched.c index 4f9bc4231..e752bc42b 100644 --- a/src/boot/sched.c +++ b/src/boot/sched.c @@ -28,7 +28,6 @@ #include "lib/lib_48150.h" #include "lib/lib_481d0.h" #include "lib/lib_485e0.h" -#include "lib/lib_48c00.h" #include "lib/lib_48cd0.h" #include "lib/lib_48dc0.h" #include "lib/lib_48ef0.h" diff --git a/src/include/lib/lib_48c00.h b/src/include/lib/lib_48c00.h deleted file mode 100644 index 850748b1a..000000000 --- a/src/include/lib/lib_48c00.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _IN_LIB_LIB_48C00_H -#define _IN_LIB_LIB_48C00_H -#include -#include "types.h" - -#endif diff --git a/src/include/lib/lib_51890.h b/src/include/lib/lib_51890.h index 8d272ff10..a7de4ecf4 100644 --- a/src/include/lib/lib_51890.h +++ b/src/include/lib/lib_51890.h @@ -3,6 +3,6 @@ #include #include "types.h" -u32 func00051890(void); +u32 __osSpGetStatus(void); #endif diff --git a/src/lib/lib_48c00.c b/src/lib/lib_48c00.c deleted file mode 100644 index ed970bf45..000000000 --- a/src/lib/lib_48c00.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include "constants.h" -#include "game/data/data_000000.h" -#include "game/data/data_0083d0.h" -#include "game/data/data_00e460.h" -#include "game/data/data_0160b0.h" -#include "game/data/data_01a3a0.h" -#include "game/data/data_020df0.h" -#include "game/data/data_02da90.h" -#include "gvars/gvars.h" -#include "lib/lib_51890.h" -#include "types.h" - -GLOBAL_ASM( -glabel osSpTaskYielded -/* 48c00: 27bdffe0 */ addiu $sp,$sp,-32 -/* 48c04: afbf0014 */ sw $ra,0x14($sp) -/* 48c08: 0c014624 */ jal func00051890 -/* 48c0c: afa40020 */ sw $a0,0x20($sp) -/* 48c10: afa2001c */ sw $v0,0x1c($sp) -/* 48c14: 8fae001c */ lw $t6,0x1c($sp) -/* 48c18: 31cf0100 */ andi $t7,$t6,0x100 -/* 48c1c: 11e00004 */ beqz $t7,.L00048c30 -/* 48c20: 00000000 */ nop -/* 48c24: 24180001 */ addiu $t8,$zero,0x1 -/* 48c28: 10000002 */ b .L00048c34 -/* 48c2c: afb80018 */ sw $t8,0x18($sp) -.L00048c30: -/* 48c30: afa00018 */ sw $zero,0x18($sp) -.L00048c34: -/* 48c34: 8fb9001c */ lw $t9,0x1c($sp) -/* 48c38: 33280080 */ andi $t0,$t9,0x80 -/* 48c3c: 1100000b */ beqz $t0,.L00048c6c -/* 48c40: 00000000 */ nop -/* 48c44: 8fa90020 */ lw $t1,0x20($sp) -/* 48c48: 8fab0018 */ lw $t3,0x18($sp) -/* 48c4c: 2401fffd */ addiu $at,$zero,-3 -/* 48c50: 8d2a0004 */ lw $t2,0x4($t1) -/* 48c54: 014b6025 */ or $t4,$t2,$t3 -/* 48c58: ad2c0004 */ sw $t4,0x4($t1) -/* 48c5c: 8fad0020 */ lw $t5,0x20($sp) -/* 48c60: 8dae0004 */ lw $t6,0x4($t5) -/* 48c64: 01c17824 */ and $t7,$t6,$at -/* 48c68: adaf0004 */ sw $t7,0x4($t5) -.L00048c6c: -/* 48c6c: 8fbf0014 */ lw $ra,0x14($sp) -/* 48c70: 8fa20018 */ lw $v0,0x18($sp) -/* 48c74: 27bd0020 */ addiu $sp,$sp,0x20 -/* 48c78: 03e00008 */ jr $ra -/* 48c7c: 00000000 */ nop -); diff --git a/src/lib/lib_51890.c b/src/lib/lib_51890.c index 89342ce15..a55bc9933 100644 --- a/src/lib/lib_51890.c +++ b/src/lib/lib_51890.c @@ -11,7 +11,7 @@ #include "types.h" GLOBAL_ASM( -glabel func00051890 +glabel __osSpGetStatus /* 51890: 3c0ea404 */ lui $t6,0xa404 /* 51894: 03e00008 */ jr $ra /* 51898: 8dc20010 */ lw $v0,0x10($t6) diff --git a/src/lib/ultra/io/sptaskyielded.c b/src/lib/ultra/io/sptaskyielded.c new file mode 100644 index 000000000..4fe6c56a7 --- /dev/null +++ b/src/lib/ultra/io/sptaskyielded.c @@ -0,0 +1,22 @@ +#include "libultra_internal.h" + +OSYieldResult osSpTaskYielded(OSTask *tp) +{ + u32 status; + OSYieldResult result; + + status = __osSpGetStatus(); + + if (status & SP_STATUS_YIELDED) { + result = OS_TASK_YIELDED; + } else { + result = 0; + } + + if (status & SP_STATUS_YIELD) { + tp->t.flags |= result; + tp->t.flags &= ~(OS_TASK_DP_WAIT); + } + + return result; +}