Move set_rsp_segment to it's own file outside of the os functions

This commit is contained in:
Ryan Myers
2021-10-07 09:30:34 -04:00
parent 719488f4d4
commit 8330fceda4
8 changed files with 40 additions and 32 deletions
@@ -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)
+1 -1
View File
@@ -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
+4 -7
View File
@@ -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);
}
}
+12 -17
View File
@@ -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)
}
+2 -5
View File
@@ -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
+11
View File
@@ -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)
}
+8
View File
@@ -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
+1 -1
View File
@@ -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"