From ee0bf8b91f1a20f4a5a5dc272f6242cbf889ce31 Mon Sep 17 00:00:00 2001 From: Mittenz Date: Wed, 19 Aug 2020 18:23:40 -0500 Subject: [PATCH] osSpTaskStartGo --- Makefile | 1 + .../unknown_0D29F0/osSpTaskStartGo.s | 21 -------------- lib/src/osGetTime.c | 21 ++++++++++++++ lib/src/unknown_0D29F0.c | 29 +++++++++---------- 4 files changed, 36 insertions(+), 36 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D29F0/osSpTaskStartGo.s create mode 100644 lib/src/osGetTime.c diff --git a/Makefile b/Makefile index ffa57d54..21829ac6 100755 --- a/Makefile +++ b/Makefile @@ -257,6 +257,7 @@ $(BUILD_DIR)/lib/src/unknown_0D5EC0.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0C9C90.o: OPT_FLAGS := -O2 -Wo,-loopunroll,0 $(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osGetTime.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osJamMesg.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osPfsFreeBlocks.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osPiGetCmdQueue.o : OPT_FLAGS := -O1 diff --git a/lib/asm/non_matchings/unknown_0D29F0/osSpTaskStartGo.s b/lib/asm/non_matchings/unknown_0D29F0/osSpTaskStartGo.s deleted file mode 100644 index 3902b339..00000000 --- a/lib/asm/non_matchings/unknown_0D29F0/osSpTaskStartGo.s +++ /dev/null @@ -1,21 +0,0 @@ -glabel osSpTaskStartGo -/* 0D2D6C 800D216C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0D2D70 800D2170 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D2D74 800D2174 0C035934 */ jal __osSpDeviceBusy -/* 0D2D78 800D2178 AFA40018 */ sw $a0, 0x18($sp) -/* 0D2D7C 800D217C 10400005 */ beqz $v0, .L800D2194 -/* 0D2D80 800D2180 00000000 */ nop -.L800D2184: -/* 0D2D84 800D2184 0C035934 */ jal __osSpDeviceBusy -/* 0D2D88 800D2188 00000000 */ nop -/* 0D2D8C 800D218C 1440FFFD */ bnez $v0, .L800D2184 -/* 0D2D90 800D2190 00000000 */ nop -.L800D2194: -/* 0D2D94 800D2194 0C033490 */ jal __osSpSetStatus -/* 0D2D98 800D2198 24040125 */ li $a0, 293 -/* 0D2D9C 800D219C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D2DA0 800D21A0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0D2DA4 800D21A4 03E00008 */ jr $ra -/* 0D2DA8 800D21A8 00000000 */ nop - -/* 0D2DAC 800D21AC 00000000 */ nop diff --git a/lib/src/osGetTime.c b/lib/src/osGetTime.c new file mode 100644 index 00000000..d613e0a6 --- /dev/null +++ b/lib/src/osGetTime.c @@ -0,0 +1,21 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D21B0 */ + +#include "libultra_internal.h" + +extern OSTime __osCurrentTime;//__osCurrentTime +extern u32 __osBaseCounter; //__osBaseCounter + +OSTime osGetTime() +{ + u32 tmptime; + u32 elapseCount; + OSTime currentCount; + register u32 saveMask; + saveMask = __osDisableInt(); + tmptime = osGetCount(); + elapseCount = tmptime - __osBaseCounter; + currentCount = __osCurrentTime; + __osRestoreInt(saveMask); + return currentCount + elapseCount; +} \ No newline at end of file diff --git a/lib/src/unknown_0D29F0.c b/lib/src/unknown_0D29F0.c index 37252ba6..dd9dfb8f 100644 --- a/lib/src/unknown_0D29F0.c +++ b/lib/src/unknown_0D29F0.c @@ -25,8 +25,6 @@ typedef struct /* 0x24 */ __OSViScale y; } __OSViContext; -extern OSTime __osCurrentTime;//__osCurrentTime -extern u32 __osBaseCounter; //__osBaseCounter extern __OSViContext *__osViCurr; extern __OSViContext *__osViNext; @@ -54,18 +52,19 @@ void *osViGetNextFramebuffer(void){ GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/_VirtualToPhysicalTask.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osSpTaskLoad.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D29F0/osSpTaskStartGo.s") -OSTime osGetTime() -{ - u32 tmptime; - u32 elapseCount; - OSTime currentCount; - register u32 saveMask; - saveMask = __osDisableInt(); - tmptime = osGetCount(); - elapseCount = tmptime - __osBaseCounter; - currentCount = __osCurrentTime; - __osRestoreInt(saveMask); - return currentCount + elapseCount; + +/* + * Values to clear/set bit in status reg (SP_STATUS_REG - write) + */ +#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */ +#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */ +#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */ +#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */ + +void osSpTaskStartGo(OSTask *tp){ + while (__osSpDeviceBusy()); + + __osSpSetStatus(SP_SET_INTR_BREAK | SP_CLR_SSTEP | SP_CLR_BROKE | SP_CLR_HALT); } +