From 8330fceda48a1df1c721e201a7abc126efa3543f Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 7 Oct 2021 09:30:34 -0400 Subject: [PATCH] Move set_rsp_segment to it's own file outside of the os functions --- .../{func_80079818.s => __scHandleRetrace.s} | 2 +- lib/asm/non_matchings/sched/__scMain.s | 2 +- lib/src/mips1/os/osCreatePiManager.c | 11 +++---- lib/src/mips1/sc/sched.c | 29 ++++++++----------- lib/src/mips1/sc/sched.h | 7 ++--- src/set_rsp_segment.c | 11 +++++++ src/set_rsp_segment.h | 8 +++++ src/unknown_06B2B0.c | 2 +- 8 files changed, 40 insertions(+), 32 deletions(-) rename lib/asm/non_matchings/sched/{func_80079818.s => __scHandleRetrace.s} (99%) create mode 100644 src/set_rsp_segment.c create mode 100644 src/set_rsp_segment.h diff --git a/lib/asm/non_matchings/sched/func_80079818.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s similarity index 99% rename from lib/asm/non_matchings/sched/func_80079818.s rename to lib/asm/non_matchings/sched/__scHandleRetrace.s index 2be643fd..66380241 100644 --- a/lib/asm/non_matchings/sched/func_80079818.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -1,4 +1,4 @@ -glabel func_80079818 +glabel __scHandleRetrace /* 07A418 80079818 27BDFFB8 */ addiu $sp, $sp, -0x48 /* 07A41C 8007981C AFBF001C */ sw $ra, 0x1c($sp) /* 07A420 80079820 AFB10018 */ sw $s1, 0x18($sp) diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s index dbdb3495..94f79fe5 100644 --- a/lib/asm/non_matchings/sched/__scMain.s +++ b/lib/asm/non_matchings/sched/__scMain.s @@ -40,7 +40,7 @@ glabel __scMain /* 07A240 80079640 10000020 */ b .L800796C4 /* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) .L80079648: -/* 07A248 80079648 0C01E606 */ jal func_80079818 +/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace /* 07A24C 8007964C 02402025 */ move $a0, $s2 /* 07A250 80079650 1000FFEC */ b .L80079604 /* 07A254 80079654 02602025 */ move $a0, $s3 diff --git a/lib/src/mips1/os/osCreatePiManager.c b/lib/src/mips1/os/osCreatePiManager.c index 00fd25cf..60f73842 100644 --- a/lib/src/mips1/os/osCreatePiManager.c +++ b/lib/src/mips1/os/osCreatePiManager.c @@ -12,7 +12,7 @@ void __osDevMgrMain(void); // bss variables OSThread piThread; -s32 D_8012A9B0[64]; +u8 piThreadStack_2[256]; // piThreadStack[OS_PIM_STACKSIZE]; Shouldn't this be piThreadStack? OSMesgQueue piEventQueue; OSMesg piEventBuf[2]; @@ -20,8 +20,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC u32 savedMask; OSPri oldPri; OSPri myPri; - if (!__osPiDevMgr.active) - { + if (!__osPiDevMgr.active) { osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt); osCreateMesgQueue(&piEventQueue, (OSMesg*)&piEventBuf, 1); if (!__osPiAccessQueueEnabled) @@ -29,8 +28,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC osSetEventMesg(OS_EVENT_PI, &piEventQueue, (OSMesg)0x22222222); oldPri = -1; myPri = osGetThreadPri(NULL); - if (myPri < pri) - { + if (myPri < pri) { oldPri = myPri; osSetThreadPri(NULL, pri); } @@ -46,8 +44,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgC osCreateThread(&piThread, 0, __osDevMgrMain, &__osPiDevMgr, &piThreadStack[OS_PIM_STACKSIZE], pri); osStartThread(&piThread); __osRestoreInt(savedMask); - if (oldPri != -1) - { + if (oldPri != -1) { osSetThreadPri(NULL, oldPri); } } diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index 5cb2a9d5..e8f6cf06 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -54,14 +54,14 @@ const char D_800E7958[] = "\tdata_size\t\t= %u\n"; s32 D_80126110; s32 D_80126114; -OSTime D_80126118; +OSTime gYieldTime; s32 D_80126120; s32 D_80126124; s32 D_80126128[18]; /*******************************/ -void func_8007A080(OSSched *sc); +void __scYield(OSSched *sc); void __scMain(void); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); @@ -153,6 +153,7 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") +//__scHandleRetrace equivalent for unk284? void func_80079760(OSSched *sc) { s32 sp24; s32 sp20; @@ -164,7 +165,7 @@ void func_80079760(OSSched *sc) { sc->unk284 = 1; } if ((sc->unk284 != 0) && (sc->curRSPTask != 0)) { - func_8007A080(sc); + __scYield(sc); } else { sp24 = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); if (__scSchedule(sc, &sp20, &sp1C, sp24) != sp24) { @@ -178,10 +179,10 @@ void dummy_80079808() { void dummy_80079810() { } -GLOBAL_ASM("lib/asm/non_matchings/sched/func_80079818.s") +GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRetrace.s") GLOBAL_ASM("lib/asm/non_matchings/sched/__scHandleRSP.s") -void __scHandleRDP(OSSched *sc){ +void __scHandleRDP(OSSched *sc) { OSScTask *t, *sp = 0, *dp = 0; s32 state; @@ -198,7 +199,7 @@ void __scHandleRDP(OSSched *sc){ } -OSScTask *__scTaskReady(OSScTask *t){ +OSScTask *__scTaskReady(OSScTask *t) { if (t) { /* * If there is a pending swap bail out til later (next @@ -255,15 +256,14 @@ GLOBAL_ASM("lib/asm/non_matchings/sched/__scTaskComplete.s") void __scAppendList(OSSched *sc, OSScTask *t) { u32 tmp = t->list.t.type; - if (tmp == 2){ + if (tmp == 2) { if(sc->audioListTail) sc->audioListTail->next = t; else sc->audioListHead = t; sc->audioListTail = t; - } - else{ + } else { if(sc->gfxListTail) sc->gfxListTail->next = t; else @@ -300,17 +300,12 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp){ } } -void func_8007A080(OSSched *sc) { +void __scYield(OSSched *sc) { if (sc->curRSPTask->list.t.type == M_GFXTASK) { - sc->curRSPTask->state |= 0x10; - D_80126118 = osGetTime(); + sc->curRSPTask->state |= OS_SC_YIELD; + gYieldTime = osGetTime(); osSpTaskYield(); } } GLOBAL_ASM("lib/asm/non_matchings/sched/__scSchedule.s") - -// This might need to be moved into it's own file. -void set_rsp_segment(Gfx **dlist, s32 segment, s32 base) { - gSPSegment((*dlist)++, segment, base + 0x80000000) -} diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 9fa4a8a5..7e84b88a 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -9,7 +9,7 @@ #define OS_SC_PRE_NMI_MSG 4 #define OS_SC_MAX_MESGS 8 -#define OS_SC_YIELD 2 +#define OS_SC_YIELD 0x10 typedef struct { short type; @@ -67,7 +67,7 @@ extern OSViMode osViModeTable[]; /*******************************/ -void func_8007A080(OSSched *sc); +void __scYield(OSSched *sc); void __scMain(void); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields); @@ -82,8 +82,5 @@ OSScTask *__scTaskReady(OSScTask *t); s32 __scTaskComplete(OSSched *sc, OSScTask *t); void __scAppendList(OSSched *sc, OSScTask *t); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); -void func_8007A080(OSSched *sc); -// This might need to be moved into it's own file. -void set_rsp_segment(Gfx **dlist, s32 segment, s32 base); #endif diff --git a/src/set_rsp_segment.c b/src/set_rsp_segment.c new file mode 100644 index 00000000..942923b6 --- /dev/null +++ b/src/set_rsp_segment.c @@ -0,0 +1,11 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x8007A2D0 */ + +#include "set_rsp_segment.h" +#include "PR/mbi.h" +#include "PR/gbi.h" +#include "PR/R4300.h" + +void set_rsp_segment(Gfx **dlist, s32 segment, s32 base) { + gSPSegment((*dlist)++, segment, base + K0BASE) +} diff --git a/src/set_rsp_segment.h b/src/set_rsp_segment.h new file mode 100644 index 00000000..e0145fe4 --- /dev/null +++ b/src/set_rsp_segment.h @@ -0,0 +1,8 @@ +#ifndef _SET_RSP_SEGMENT_H_ +#define _SET_RSP_SEGMENT_H_ + +#include "PR/gbi.h" + +void set_rsp_segment(Gfx **dlist, s32 segment, s32 base); + +#endif diff --git a/src/unknown_06B2B0.c b/src/unknown_06B2B0.c index 8a382719..16539808 100644 --- a/src/unknown_06B2B0.c +++ b/src/unknown_06B2B0.c @@ -15,7 +15,7 @@ #include "asset_loading.h" #include "menu.h" #include "video.h" -#include "lib/src/mips1/sc/sched.h" +#include "set_rsp_segment.h" #include "gzip.h" #include "printf.h" #include "thread0_epc.h"