From 3b3aabe0bd67609fe13475871764fa1cf4fe6b91 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Thu, 14 Oct 2021 14:44:38 -0400 Subject: [PATCH] Match __scTaskComplete and some other minor cleanps --- .../non_matchings/sched/__scTaskComplete.s | 75 --------------- .../non_matchings/unknown_0C9A30/osSendMesg.s | 95 ------------------- lib/src/mips1/sc/sched.c | 84 ++++++++-------- 3 files changed, 37 insertions(+), 217 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scTaskComplete.s delete mode 100644 lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s diff --git a/lib/asm/non_matchings/sched/__scTaskComplete.s b/lib/asm/non_matchings/sched/__scTaskComplete.s deleted file mode 100644 index 3f8b23cf..00000000 --- a/lib/asm/non_matchings/sched/__scTaskComplete.s +++ /dev/null @@ -1,75 +0,0 @@ -glabel __scTaskComplete -/* 07AA40 80079E40 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 07AA44 80079E44 AFBF0014 */ sw $ra, 0x14($sp) -/* 07AA48 80079E48 AFA40018 */ sw $a0, 0x18($sp) -/* 07AA4C 80079E4C 8CAE0004 */ lw $t6, 4($a1) -/* 07AA50 80079E50 00A03825 */ move $a3, $a1 -/* 07AA54 80079E54 31CF0003 */ andi $t7, $t6, 3 -/* 07AA58 80079E58 15E00035 */ bnez $t7, .L80079F30 -/* 07AA5C 80079E5C 00001025 */ move $v0, $zero -/* 07AA60 80079E60 8CA40050 */ lw $a0, 0x50($a1) -/* 07AA64 80079E64 00000000 */ nop -/* 07AA68 80079E68 1080002F */ beqz $a0, .L80079F28 -/* 07AA6C 80079E6C 00000000 */ nop -/* 07AA70 80079E70 8CB80008 */ lw $t8, 8($a1) -/* 07AA74 80079E74 8FA80018 */ lw $t0, 0x18($sp) -/* 07AA78 80079E78 33190020 */ andi $t9, $t8, 0x20 -/* 07AA7C 80079E7C 1320001B */ beqz $t9, .L80079EEC -/* 07AA80 80079E80 00000000 */ nop -/* 07AA84 80079E84 8D090280 */ lw $t1, 0x280($t0) -/* 07AA88 80079E88 24020001 */ li $v0, 1 -/* 07AA8C 80079E8C 2D210002 */ sltiu $at, $t1, 2 -/* 07AA90 80079E90 10200003 */ beqz $at, .L80079EA0 -/* 07AA94 80079E94 00000000 */ nop -/* 07AA98 80079E98 10000025 */ b .L80079F30 -/* 07AA9C 80079E9C AD05027C */ sw $a1, 0x27c($t0) -.L80079EA0: -/* 07AAA0 80079EA0 8CEA0068 */ lw $t2, 0x68($a3) -/* 07AAA4 80079EA4 00000000 */ nop -/* 07AAA8 80079EA8 15400005 */ bnez $t2, .L80079EC0 -/* 07AAAC 80079EAC 00000000 */ nop -/* 07AAB0 80079EB0 8CEB0054 */ lw $t3, 0x54($a3) -/* 07AAB4 80079EB4 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e -/* 07AAB8 80079EB8 11600006 */ beqz $t3, .L80079ED4 -/* 07AABC 80079EBC 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0 -.L80079EC0: -/* 07AAC0 80079EC0 8CE50054 */ lw $a1, 0x54($a3) -/* 07AAC4 80079EC4 0C03238C */ jal osSendMesg -/* 07AAC8 80079EC8 24060001 */ li $a2, 1 -/* 07AACC 80079ECC 10000004 */ b .L80079EE0 -/* 07AAD0 80079ED0 8FAC0018 */ lw $t4, 0x18($sp) -.L80079ED4: -/* 07AAD4 80079ED4 0C03238C */ jal osSendMesg -/* 07AAD8 80079ED8 24060001 */ li $a2, 1 -/* 07AADC 80079EDC 8FAC0018 */ lw $t4, 0x18($sp) -.L80079EE0: -/* 07AAE0 80079EE0 24020001 */ li $v0, 1 -/* 07AAE4 80079EE4 10000012 */ b .L80079F30 -/* 07AAE8 80079EE8 AD800280 */ sw $zero, 0x280($t4) -.L80079EEC: -/* 07AAEC 80079EEC 8CED0068 */ lw $t5, 0x68($a3) -/* 07AAF0 80079EF0 00000000 */ nop -/* 07AAF4 80079EF4 15A00005 */ bnez $t5, .L80079F0C -/* 07AAF8 80079EF8 00000000 */ nop -/* 07AAFC 80079EFC 8CEE0054 */ lw $t6, 0x54($a3) -/* 07AB00 80079F00 3C05800E */ lui $a1, %hi(D_800DE730) # $a1, 0x800e -/* 07AB04 80079F04 11C00006 */ beqz $t6, .L80079F20 -/* 07AB08 80079F08 24A5E730 */ addiu $a1, %lo(D_800DE730) # addiu $a1, $a1, -0x18d0 -.L80079F0C: -/* 07AB0C 80079F0C 8CE50054 */ lw $a1, 0x54($a3) -/* 07AB10 80079F10 0C03238C */ jal osSendMesg -/* 07AB14 80079F14 24060001 */ li $a2, 1 -/* 07AB18 80079F18 10000005 */ b .L80079F30 -/* 07AB1C 80079F1C 24020001 */ li $v0, 1 -.L80079F20: -/* 07AB20 80079F20 0C03238C */ jal osSendMesg -/* 07AB24 80079F24 24060001 */ li $a2, 1 -.L80079F28: -/* 07AB28 80079F28 10000001 */ b .L80079F30 -/* 07AB2C 80079F2C 24020001 */ li $v0, 1 -.L80079F30: -/* 07AB30 80079F30 8FBF0014 */ lw $ra, 0x14($sp) -/* 07AB34 80079F34 27BD0018 */ addiu $sp, $sp, 0x18 -/* 07AB38 80079F38 03E00008 */ jr $ra -/* 07AB3C 80079F3C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s b/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s deleted file mode 100644 index cfeb9068..00000000 --- a/lib/asm/non_matchings/unknown_0C9A30/osSendMesg.s +++ /dev/null @@ -1,95 +0,0 @@ -glabel osSendMesg -/* 0C9A30 800C8E30 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0C9A34 800C8E34 AFBF0024 */ sw $ra, 0x24($sp) -/* 0C9A38 800C8E38 AFA40038 */ sw $a0, 0x38($sp) -/* 0C9A3C 800C8E3C AFA5003C */ sw $a1, 0x3c($sp) -/* 0C9A40 800C8E40 AFA60040 */ sw $a2, 0x40($sp) -/* 0C9A44 800C8E44 AFB20020 */ sw $s2, 0x20($sp) -/* 0C9A48 800C8E48 AFB1001C */ sw $s1, 0x1c($sp) -/* 0C9A4C 800C8E4C 0C034958 */ jal __osDisableInt -/* 0C9A50 800C8E50 AFB00018 */ sw $s0, 0x18($sp) -/* 0C9A54 800C8E54 8FAE0038 */ lw $t6, 0x38($sp) -/* 0C9A58 800C8E58 00408025 */ move $s0, $v0 -/* 0C9A5C 800C8E5C 8DCF0008 */ lw $t7, 8($t6) -/* 0C9A60 800C8E60 8DD80010 */ lw $t8, 0x10($t6) -/* 0C9A64 800C8E64 01F8082A */ slt $at, $t7, $t8 -/* 0C9A68 800C8E68 14200018 */ bnez $at, .L800C8ECC -/* 0C9A6C 800C8E6C 00000000 */ nop -.L800C8E70: -/* 0C9A70 800C8E70 8FB90040 */ lw $t9, 0x40($sp) -/* 0C9A74 800C8E74 24010001 */ li $at, 1 -/* 0C9A78 800C8E78 1721000A */ bne $t9, $at, .L800C8EA4 -/* 0C9A7C 800C8E7C 00000000 */ nop -/* 0C9A80 800C8E80 3C09800E */ lui $t1, %hi(__osRunningThread) # $t1, 0x800e -/* 0C9A84 800C8E84 8D294890 */ lw $t1, %lo(__osRunningThread)($t1) -/* 0C9A88 800C8E88 24080008 */ li $t0, 8 -/* 0C9A8C 800C8E8C A5280010 */ sh $t0, 0x10($t1) -/* 0C9A90 800C8E90 8FA40038 */ lw $a0, 0x38($sp) -/* 0C9A94 800C8E94 0C034CB3 */ jal __osEnqueueAndYield -/* 0C9A98 800C8E98 24840004 */ addiu $a0, $a0, 4 -/* 0C9A9C 800C8E9C 10000005 */ b .L800C8EB4 -/* 0C9AA0 800C8EA0 00000000 */ nop -.L800C8EA4: -/* 0C9AA4 800C8EA4 0C034960 */ jal __osRestoreInt -/* 0C9AA8 800C8EA8 02002025 */ move $a0, $s0 -/* 0C9AAC 800C8EAC 1000002D */ b .L800C8F64 -/* 0C9AB0 800C8EB0 2402FFFF */ li $v0, -1 -.L800C8EB4: -/* 0C9AB4 800C8EB4 8FAA0038 */ lw $t2, 0x38($sp) -/* 0C9AB8 800C8EB8 8D4B0008 */ lw $t3, 8($t2) -/* 0C9ABC 800C8EBC 8D4C0010 */ lw $t4, 0x10($t2) -/* 0C9AC0 800C8EC0 016C082A */ slt $at, $t3, $t4 -/* 0C9AC4 800C8EC4 1020FFEA */ beqz $at, .L800C8E70 -/* 0C9AC8 800C8EC8 00000000 */ nop -.L800C8ECC: -/* 0C9ACC 800C8ECC 8FAD0038 */ lw $t5, 0x38($sp) -/* 0C9AD0 800C8ED0 8FA8003C */ lw $t0, 0x3c($sp) -/* 0C9AD4 800C8ED4 8DAE000C */ lw $t6, 0xc($t5) -/* 0C9AD8 800C8ED8 8DAF0008 */ lw $t7, 8($t5) -/* 0C9ADC 800C8EDC 8DB90010 */ lw $t9, 0x10($t5) -/* 0C9AE0 800C8EE0 8DA90014 */ lw $t1, 0x14($t5) -/* 0C9AE4 800C8EE4 01CFC021 */ addu $t8, $t6, $t7 -/* 0C9AE8 800C8EE8 0319001A */ div $zero, $t8, $t9 -/* 0C9AEC 800C8EEC 00008810 */ mfhi $s1 -/* 0C9AF0 800C8EF0 00115080 */ sll $t2, $s1, 2 -/* 0C9AF4 800C8EF4 012A5821 */ addu $t3, $t1, $t2 -/* 0C9AF8 800C8EF8 AD680000 */ sw $t0, ($t3) -/* 0C9AFC 800C8EFC 8FAC0038 */ lw $t4, 0x38($sp) -/* 0C9B00 800C8F00 17200002 */ bnez $t9, .L800C8F0C -/* 0C9B04 800C8F04 00000000 */ nop -/* 0C9B08 800C8F08 0007000D */ break 7 -.L800C8F0C: -/* 0C9B0C 800C8F0C 2401FFFF */ li $at, -1 -/* 0C9B10 800C8F10 17210004 */ bne $t9, $at, .L800C8F24 -/* 0C9B14 800C8F14 3C018000 */ lui $at, 0x8000 -/* 0C9B18 800C8F18 17010002 */ bne $t8, $at, .L800C8F24 -/* 0C9B1C 800C8F1C 00000000 */ nop -/* 0C9B20 800C8F20 0006000D */ break 6 -.L800C8F24: -/* 0C9B24 800C8F24 8D8E0008 */ lw $t6, 8($t4) -/* 0C9B28 800C8F28 25CF0001 */ addiu $t7, $t6, 1 -/* 0C9B2C 800C8F2C AD8F0008 */ sw $t7, 8($t4) -/* 0C9B30 800C8F30 8FB80038 */ lw $t8, 0x38($sp) -/* 0C9B34 800C8F34 8F190000 */ lw $t9, ($t8) -/* 0C9B38 800C8F38 8F2D0000 */ lw $t5, ($t9) -/* 0C9B3C 800C8F3C 11A00006 */ beqz $t5, .L800C8F58 -/* 0C9B40 800C8F40 00000000 */ nop -/* 0C9B44 800C8F44 0C034D05 */ jal __osPopThread -/* 0C9B48 800C8F48 03002025 */ move $a0, $t8 -/* 0C9B4C 800C8F4C 00409025 */ move $s2, $v0 -/* 0C9B50 800C8F50 0C032268 */ jal osStartThread -/* 0C9B54 800C8F54 02402025 */ move $a0, $s2 -.L800C8F58: -/* 0C9B58 800C8F58 0C034960 */ jal __osRestoreInt -/* 0C9B5C 800C8F5C 02002025 */ move $a0, $s0 -/* 0C9B60 800C8F60 00001025 */ move $v0, $zero -.L800C8F64: -/* 0C9B64 800C8F64 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C9B68 800C8F68 8FB00018 */ lw $s0, 0x18($sp) -/* 0C9B6C 800C8F6C 8FB1001C */ lw $s1, 0x1c($sp) -/* 0C9B70 800C8F70 8FB20020 */ lw $s2, 0x20($sp) -/* 0C9B74 800C8F74 03E00008 */ jr $ra -/* 0C9B78 800C8F78 27BD0038 */ addiu $sp, $sp, 0x38 - -/* 0C9B7C 800C8F7C 00000000 */ nop - diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index d3c577fd..6d1dbc96 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -27,8 +27,8 @@ f32 D_800DE748 = 0; f32 D_800DE74C = 0; s32 D_800DE750 = 0; // Currently unknown, might be a different type. -u32 D_800DE754 = 0; -u32 D_800DE758 = 0; +s32 D_800DE754 = 0; +s32 D_800DE758 = 0; s32 D_800DE75C = 0; // Currently unknown, might be a different type. u64 D_800DE760 = 0; @@ -226,12 +226,12 @@ void dummy_80079810() { void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; - s32 i; - s32 availRPC; + s32 state; OSScTask *sp = 0; OSScTask *dp = 0; u8 set_curRSPTask_NULL = FALSE; u8 set_curRDPTask_NULL = FALSE; + s32 i; if (sc->curRSPTask) { D_800DE754++; @@ -241,7 +241,7 @@ void __scHandleRetrace(OSSched *sc) { D_800DE758++; } - if (((s32)D_800DE754 > (s32)10) && (sc->curRSPTask)) { + if ((D_800DE754 > 10) && (sc->curRSPTask)) { D_800DE754 = 0; set_curRSPTask_NULL = TRUE; @@ -252,7 +252,7 @@ void __scHandleRetrace(OSSched *sc) { D_80126110 = 1; } - if (((s32)D_800DE758 > (s32)10) && (sc->curRDPTask)) { + if ((D_800DE758 > 10) && (sc->curRDPTask)) { if (sc->curRDPTask->unk68 == 0) { osSendMesg(sc->curRDPTask->msgQ, &D_800DE738, OS_MESG_BLOCK); } @@ -281,8 +281,8 @@ void __scHandleRetrace(OSSched *sc) { while (osRecvMesg(&sc->cmdQ, (OSMesg *)&rspTask, OS_MESG_NOBLOCK) != -1) __scAppendList(sc, rspTask); - availRPC = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL); - if (__scSchedule(sc, &sp, &dp, availRPC) != availRPC) + state = ((sc->curRSPTask == NULL) << 1) | (sc->curRDPTask == NULL); + if (__scSchedule(sc, &sp, &dp, state) != state) __scExec(sc, sp, dp); D_800DE760++; @@ -406,79 +406,69 @@ OSScTask *__scTaskReady(OSScTask *t) { return 0; } -#if 0 /* * __scTaskComplete checks to see if the task is complete (all RCP * operations have been performed) and sends the done message to the * client if it is. */ s32 __scTaskComplete(OSSched *sc, OSScTask *t) { - int rv; - static int firsttime = 1; - - if ((t->state & OS_SC_RCP_MASK) == 0) { /* none of the needs bits set */ - - -#ifndef _FINALROM - t->totalTime += osGetTime() - t->startTime; -#endif - -#ifdef SC_LOGGING - osLogEvent(l, 504, 1, t); -#endif - rv = osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); - - if (t->list.t.type == M_GFXTASK) { - if ((t->flags & OS_SC_SWAPBUFFER) && (t->flags & OS_SC_LAST_TASK)){ - if (firsttime) { - osViBlack(FALSE); - firsttime = 0; - } - osViSwapBuffer(t->framebuffer); -#ifdef SC_LOGGING - osLogEvent(l, 525, 1, t->framebuffer); -#endif + if ((t->state & OS_SC_RCP_MASK) == 0) { + if (t->msgQ) { + if (t->flags & OS_SC_LAST_TASK) { + if (sc->frameCount <= 1) { + sc->unkTask = t; + return 1; + } + if (t->unk68 || t->msg) { + osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); + } else { + osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK); + } + sc->frameCount = 0; + return 1; } - } + if (t->unk68 || t->msg) { + osSendMesg(t->msgQ, t->msg, OS_MESG_BLOCK); + return 1; + } + osSendMesg(t->msgQ, &D_800DE730, OS_MESG_BLOCK); + } return 1; } - return 0; } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scTaskComplete.s") -#endif void __scAppendList(OSSched *sc, OSScTask *t) { - u32 tmp = t->list.t.type; - if (tmp == 2) { + long type = t->list.t.type; + + if (type == M_AUDTASK) { if(sc->audioListTail) sc->audioListTail->next = t; else sc->audioListHead = t; sc->audioListTail = t; - } else { + } else { if(sc->gfxListTail) sc->gfxListTail->next = t; else sc->gfxListHead = t; sc->gfxListTail = t; - } + } + t->next = NULL; - t->state = t->flags & 0x03; + t->state = t->flags & OS_SC_RCP_MASK; } void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { - if (sp) { if (sp->list.t.type == M_AUDTASK) { osWritebackDCacheAll(); /* flush the cache */ D_80126120 = osGetCount(); } - sp->state &= ~0x30; + sp->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); osSpTaskLoad(&sp->list); osSpTaskStartGo(&sp->list); D_800DE754 = 0; @@ -506,7 +496,7 @@ void __scYield(OSSched *sc) { /* * Schedules the tasks to be run on the RCP */ -s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) { +static s32 __scSchedule(OSSched *sc, OSScTask **sp, OSScTask **dp, s32 availRCP) { s32 avail = availRCP; OSScTask *gfx = sc->gfxListHead; OSScTask *audio = sc->audioListHead;