From 596bd60907325e5056832c58bc0f5187cc983fb7 Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sat, 9 Oct 2021 10:54:23 -0400 Subject: [PATCH] Matched __scMain --- lib/asm/non_matchings/sched/__scMain.s | 119 ------------------------- lib/src/mips1/sc/sched.c | 119 ++++++++++++------------- lib/src/mips1/sc/sched.h | 2 +- 3 files changed, 57 insertions(+), 183 deletions(-) delete mode 100644 lib/asm/non_matchings/sched/__scMain.s diff --git a/lib/asm/non_matchings/sched/__scMain.s b/lib/asm/non_matchings/sched/__scMain.s deleted file mode 100644 index 94f79fe5..00000000 --- a/lib/asm/non_matchings/sched/__scMain.s +++ /dev/null @@ -1,119 +0,0 @@ -glabel __scMain -/* 07A1AC 800795AC 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 07A1B0 800795B0 AFBE0038 */ sw $fp, 0x38($sp) -/* 07A1B4 800795B4 AFB70034 */ sw $s7, 0x34($sp) -/* 07A1B8 800795B8 AFB60030 */ sw $s6, 0x30($sp) -/* 07A1BC 800795BC AFB5002C */ sw $s5, 0x2c($sp) -/* 07A1C0 800795C0 AFB40028 */ sw $s4, 0x28($sp) -/* 07A1C4 800795C4 AFB30024 */ sw $s3, 0x24($sp) -/* 07A1C8 800795C8 AFB20020 */ sw $s2, 0x20($sp) -/* 07A1CC 800795CC 00809025 */ move $s2, $a0 -/* 07A1D0 800795D0 AFBF003C */ sw $ra, 0x3c($sp) -/* 07A1D4 800795D4 AFB1001C */ sw $s1, 0x1c($sp) -/* 07A1D8 800795D8 AFB00018 */ sw $s0, 0x18($sp) -/* 07A1DC 800795DC AFA00064 */ sw $zero, 0x64($sp) -/* 07A1E0 800795E0 AFA00054 */ sw $zero, 0x54($sp) -/* 07A1E4 800795E4 AFA00050 */ sw $zero, 0x50($sp) -/* 07A1E8 800795E8 24930040 */ addiu $s3, $a0, 0x40 -/* 07A1EC 800795EC 27B40064 */ addiu $s4, $sp, 0x64 -/* 07A1F0 800795F0 24150063 */ li $s5, 99 -/* 07A1F4 800795F4 2416029A */ li $s6, 666 -/* 07A1F8 800795F8 2417029B */ li $s7, 667 -/* 07A1FC 800795FC 241E029C */ li $fp, 668 -/* 07A200 80079600 02602025 */ move $a0, $s3 -.L80079604: -/* 07A204 80079604 02802825 */ move $a1, $s4 -/* 07A208 80079608 0C0322EC */ jal osRecvMesg -/* 07A20C 8007960C 24060001 */ li $a2, 1 -/* 07A210 80079610 8FAE0064 */ lw $t6, 0x64($sp) -/* 07A214 80079614 00000000 */ nop -/* 07A218 80079618 11D50017 */ beq $t6, $s5, .L80079678 -/* 07A21C 8007961C 00000000 */ nop -/* 07A220 80079620 11D60009 */ beq $t6, $s6, .L80079648 -/* 07A224 80079624 00000000 */ nop -/* 07A228 80079628 11D7000B */ beq $t6, $s7, .L80079658 -/* 07A22C 8007962C 00000000 */ nop -/* 07A230 80079630 11DE000D */ beq $t6, $fp, .L80079668 -/* 07A234 80079634 2401029D */ li $at, 669 -/* 07A238 80079638 11C10013 */ beq $t6, $at, .L80079688 -/* 07A23C 8007963C 00000000 */ nop -/* 07A240 80079640 10000020 */ b .L800796C4 -/* 07A244 80079644 8FA50064 */ lw $a1, 0x64($sp) -.L80079648: -/* 07A248 80079648 0C01E606 */ jal __scHandleRetrace -/* 07A24C 8007964C 02402025 */ move $a0, $s2 -/* 07A250 80079650 1000FFEC */ b .L80079604 -/* 07A254 80079654 02602025 */ move $a0, $s3 -.L80079658: -/* 07A258 80079658 0C01E6D1 */ jal __scHandleRSP -/* 07A25C 8007965C 02402025 */ move $a0, $s2 -/* 07A260 80079660 1000FFE8 */ b .L80079604 -/* 07A264 80079664 02602025 */ move $a0, $s3 -.L80079668: -/* 07A268 80079668 0C01E757 */ jal __scHandleRDP -/* 07A26C 8007966C 02402025 */ move $a0, $s2 -/* 07A270 80079670 1000FFE4 */ b .L80079604 -/* 07A274 80079674 02602025 */ move $a0, $s3 -.L80079678: -/* 07A278 80079678 0C01E5D8 */ jal func_80079760 -/* 07A27C 8007967C 02402025 */ move $a0, $s2 -/* 07A280 80079680 1000FFE0 */ b .L80079604 -/* 07A284 80079684 02602025 */ move $a0, $s3 -.L80079688: -/* 07A288 80079688 8E500260 */ lw $s0, 0x260($s2) -/* 07A28C 8007968C 26510020 */ addiu $s1, $s2, 0x20 -/* 07A290 80079690 1200FFDC */ beqz $s0, .L80079604 -/* 07A294 80079694 02602025 */ move $a0, $s3 -.L80079698: -/* 07A298 80079698 8E040008 */ lw $a0, 8($s0) -/* 07A29C 8007969C 02202825 */ move $a1, $s1 -/* 07A2A0 800796A0 0C03238C */ jal osSendMesg -/* 07A2A4 800796A4 00003025 */ move $a2, $zero -/* 07A2A8 800796A8 8E100004 */ lw $s0, 4($s0) -/* 07A2AC 800796AC 00000000 */ nop -/* 07A2B0 800796B0 1600FFF9 */ bnez $s0, .L80079698 -/* 07A2B4 800796B4 00000000 */ nop -/* 07A2B8 800796B8 1000FFD2 */ b .L80079604 -/* 07A2BC 800796BC 02602025 */ move $a0, $s3 -/* 07A2C0 800796C0 8FA50064 */ lw $a1, 0x64($sp) -.L800796C4: -/* 07A2C4 800796C4 0C01E7D0 */ jal __scAppendList -/* 07A2C8 800796C8 02402025 */ move $a0, $s2 -/* 07A2CC 800796CC 8E4F0274 */ lw $t7, 0x274($s2) -/* 07A2D0 800796D0 8E480278 */ lw $t0, 0x278($s2) -/* 07A2D4 800796D4 2DF80001 */ sltiu $t8, $t7, 1 -/* 07A2D8 800796D8 0018C840 */ sll $t9, $t8, 1 -/* 07A2DC 800796DC 2D090001 */ sltiu $t1, $t0, 1 -/* 07A2E0 800796E0 03298025 */ or $s0, $t9, $t1 -/* 07A2E4 800796E4 02003825 */ move $a3, $s0 -/* 07A2E8 800796E8 02402025 */ move $a0, $s2 -/* 07A2EC 800796EC 27A50054 */ addiu $a1, $sp, 0x54 -/* 07A2F0 800796F0 0C01E835 */ jal __scSchedule -/* 07A2F4 800796F4 27A60050 */ addiu $a2, $sp, 0x50 -/* 07A2F8 800796F8 1050FFC2 */ beq $v0, $s0, .L80079604 -/* 07A2FC 800796FC 02602025 */ move $a0, $s3 -/* 07A300 80079700 8FA50054 */ lw $a1, 0x54($sp) -/* 07A304 80079704 8FA60050 */ lw $a2, 0x50($sp) -/* 07A308 80079708 0C01E7EA */ jal __scExec -/* 07A30C 8007970C 02402025 */ move $a0, $s2 -/* 07A310 80079710 1000FFBC */ b .L80079604 -/* 07A314 80079714 02602025 */ move $a0, $s3 -/* 07A318 80079718 00000000 */ nop -/* 07A31C 8007971C 00000000 */ nop -/* 07A320 80079720 00000000 */ nop -/* 07A324 80079724 00000000 */ nop -/* 07A328 80079728 00000000 */ nop -/* 07A32C 8007972C 00000000 */ nop -/* 07A330 80079730 8FBF003C */ lw $ra, 0x3c($sp) -/* 07A334 80079734 8FB00018 */ lw $s0, 0x18($sp) -/* 07A338 80079738 8FB1001C */ lw $s1, 0x1c($sp) -/* 07A33C 8007973C 8FB20020 */ lw $s2, 0x20($sp) -/* 07A340 80079740 8FB30024 */ lw $s3, 0x24($sp) -/* 07A344 80079744 8FB40028 */ lw $s4, 0x28($sp) -/* 07A348 80079748 8FB5002C */ lw $s5, 0x2c($sp) -/* 07A34C 8007974C 8FB60030 */ lw $s6, 0x30($sp) -/* 07A350 80079750 8FB70034 */ lw $s7, 0x34($sp) -/* 07A354 80079754 8FBE0038 */ lw $fp, 0x38($sp) -/* 07A358 80079758 03E00008 */ jr $ra -/* 07A35C 8007975C 27BD0068 */ addiu $sp, $sp, 0x68 - diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index e08093f5..8223c9ef 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -150,63 +150,52 @@ void func_80079584(f32 *arg0, f32 *arg1, f32 *arg2) { *arg2 = D_800DE74C; } -#ifdef NON_MATCHING static void __scMain(void *arg) { OSMesg msg = NULL; OSSched *sc = (OSSched *)arg; OSScClient *client; - //static int count = 0; s32 state = 0; OSScTask *sp = 0; OSScTask *dp = 0; while (1) { - loop1: - do { - osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + osRecvMesg(&sc->interruptQ, (OSMesg *)&msg, OS_MESG_BLOCK); + switch ((int) msg) { + case (VIDEO_MSG): + __scHandleRetrace(sc); + break; - switch ((int) msg) { - case (VIDEO_MSG): - __scHandleRetrace(sc); - goto loop1; - break; + case (RSP_DONE_MSG): + __scHandleRSP(sc); + break; - case (RSP_DONE_MSG): - __scHandleRSP(sc); - goto loop1; - break; + case (RDP_DONE_MSG): + __scHandleRDP(sc); + break; - case (RDP_DONE_MSG): - __scHandleRDP(sc); - goto loop1; - break; + case (99): + func_80079760(sc); + break; - case (99): - func_80079760(sc); - goto loop1; - break; - - case (PRE_NMI_MSG): + case (PRE_NMI_MSG): /* * notify audio and graphics threads to fade out */ - for (client = sc->clientList; client != 0; client = client->next) { - osSendMesg(client->msgQ, (OSMesg) &sc->prenmiMsg, - OS_MESG_NOBLOCK); - } - goto loop1; - break; - } - __scAppendList(sc, (OSScTask *) msg); - state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); - } while (__scSchedule(sc, &sp, &dp, state) == state); - __scExec(sc, sp, dp); - goto loop1; + for (client = sc->clientList; client != 0; client = client->next) { + osSendMesg(client->msgQ, (OSMesg) &sc->prenmiMsg, + OS_MESG_NOBLOCK); + }; + break; + + default: + __scAppendList(sc, (OSScTask *) msg); + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + if (__scSchedule(sc, &sp, &dp, state) != state) + __scExec(sc, sp, dp); + break; + } } } -#else -GLOBAL_ASM("lib/asm/non_matchings/sched/__scMain.s") -#endif void func_80079760(OSSched *sc) { s32 state; @@ -416,38 +405,42 @@ OSScTask *__scTaskReady(OSScTask *t) { } #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; - int firsttime = 1; + static int firsttime = 1; - if ((t->state & 0x03) == 0) { /* none of the needs bits set */ + if ((t->state & OS_SC_RCP_MASK) == 0) { /* none of the needs bits set */ - assert (t->msgQ); - if(t->msgQ){ - //rv = osSendMesg(t->msgQ, &t->msg, OS_MESG_BLOCK); +#ifndef _FINALROM + t->totalTime += osGetTime() - t->startTime; +#endif - //if (t->list.t.type == M_GFXTASK) { - if ((t->flags & 0x20) /*&& (t->flags & OS_SC_LAST_TASK)*/){ - if(sc->doAudio < 2){ - sc->frameCount = t; - } - else{ - if(t->startTime == 0){ - osSendMesg(t->msgQ, t->msg, 1); - } - } - //if (firsttime) { - // osViBlack(FALSE); - // firsttime = 0; - //} - //osViSwapBuffer(t->framebuffer); - } - //} - } +#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 + } + } return 1; } - + return 0; } #else diff --git a/lib/src/mips1/sc/sched.h b/lib/src/mips1/sc/sched.h index 6610161c..77d0735b 100644 --- a/lib/src/mips1/sc/sched.h +++ b/lib/src/mips1/sc/sched.h @@ -99,7 +99,7 @@ extern OSViMode osViModeTable[]; /*******************************/ void __scYield(OSSched *sc); -#ifdef NON_MATCHING +#if 1 static void __scMain(void *arg); #else void __scMain(void *arg);