diff --git a/lib/asm/non_matchings/sched/__scHandleRSP.s b/lib/asm/non_matchings/sched/__scHandleRSP.s index c19d3d20..d8e52b5f 100644 --- a/lib/asm/non_matchings/sched/__scHandleRSP.s +++ b/lib/asm/non_matchings/sched/__scHandleRSP.s @@ -17,8 +17,8 @@ glabel __scHandleRSP /* 07A76C 80079B6C 00808025 */ move $s0, $a0 /* 07A770 80079B70 0C031E34 */ jal osGetCount /* 07A774 80079B74 AFA50034 */ sw $a1, 0x34($sp) -/* 07A778 80079B78 3C038012 */ lui $v1, %hi(D_80126124) # $v1, 0x8012 -/* 07A77C 80079B7C 24636124 */ addiu $v1, %lo(D_80126124) # addiu $v1, $v1, 0x6124 +/* 07A778 80079B78 3C038012 */ lui $v1, %hi(gRSPAudTaskCount) # $v1, 0x8012 +/* 07A77C 80079B7C 24636124 */ addiu $v1, %lo(gRSPAudTaskCount) # addiu $v1, $v1, 0x6124 /* 07A780 80079B80 AC620000 */ sw $v0, ($v1) /* 07A784 80079B84 3C188012 */ lui $t8, %hi(D_80126120) # $t8, 0x8012 /* 07A788 80079B88 8F186120 */ lw $t8, %lo(D_80126120)($t8) @@ -46,7 +46,7 @@ glabel __scHandleRSP /* 07A7DC 80079BDC C4EA0000 */ lwc1 $f10, ($a3) /* 07A7E0 80079BE0 C4C80000 */ lwc1 $f8, ($a2) /* 07A7E4 80079BE4 46128103 */ div.s $f4, $f16, $f18 -/* 07A7E8 80079BE8 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e +/* 07A7E8 80079BE8 3C02800E */ lui $v0, %hi(gRetraceCounter32) # $v0, 0x800e /* 07A7EC 80079BEC E4840000 */ swc1 $f4, ($a0) /* 07A7F0 80079BF0 C4800000 */ lwc1 $f0, ($a0) /* 07A7F4 80079BF4 00000000 */ nop @@ -56,7 +56,7 @@ glabel __scHandleRSP /* 07A804 80079C04 E4C60000 */ swc1 $f6, ($a2) /* 07A808 80079C08 E4E00000 */ swc1 $f0, ($a3) .L80079C0C: -/* 07A80C 80079C0C 8C42E750 */ lw $v0, %lo(D_800DE750)($v0) +/* 07A80C 80079C0C 8C42E750 */ lw $v0, %lo(gRetraceCounter32)($v0) /* 07A810 80079C10 240103E8 */ li $at, 1000 /* 07A814 80079C14 0041001A */ div $zero, $v0, $at /* 07A818 80079C18 24010001 */ li $at, 1 diff --git a/lib/asm/non_matchings/sched/__scHandleRetrace.s b/lib/asm/non_matchings/sched/__scHandleRetrace.s index dc6d796c..083f8519 100644 --- a/lib/asm/non_matchings/sched/__scHandleRetrace.s +++ b/lib/asm/non_matchings/sched/__scHandleRetrace.s @@ -125,18 +125,18 @@ glabel __scHandleRetrace /* 07A5D8 800799D8 0C01E7EA */ jal __scExec /* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: -/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCount) # $t5, 0x800e -/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCount+4)($t5) -/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCount) # $t4, 0x800e -/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCount)($t4) +/* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(gRetraceCounter64) # $t5, 0x800e +/* 07A5E4 800799E4 8DADE764 */ lw $t5, %lo(gRetraceCounter64+4)($t5) +/* 07A5E8 800799E8 3C0C800E */ lui $t4, %hi(gRetraceCounter64) # $t4, 0x800e +/* 07A5EC 800799EC 8D8CE760 */ lw $t4, %lo(gRetraceCounter64)($t4) /* 07A5F0 800799F0 25AF0001 */ addiu $t7, $t5, 1 /* 07A5F4 800799F4 2DE10001 */ sltiu $at, $t7, 1 /* 07A5F8 800799F8 01817021 */ addu $t6, $t4, $at -/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCount) # $at, 0x800e -/* 07A600 80079A00 3C02800E */ lui $v0, %hi(D_800DE750) # $v0, 0x800e -/* 07A604 80079A04 2442E750 */ addiu $v0, %lo(D_800DE750) # addiu $v0, $v0, -0x18b0 -/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCount)($at) -/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCount+4)($at) +/* 07A5FC 800799FC 3C01800E */ lui $at, %hi(gRetraceCounter64) # $at, 0x800e +/* 07A600 80079A00 3C02800E */ lui $v0, %hi(gRetraceCounter32) # $v0, 0x800e +/* 07A604 80079A04 2442E750 */ addiu $v0, %lo(gRetraceCounter32) # addiu $v0, $v0, -0x18b0 +/* 07A608 80079A08 AC2EE760 */ sw $t6, %lo(gRetraceCounter64)($at) +/* 07A60C 80079A0C AC2FE764 */ sw $t7, %lo(gRetraceCounter64+4)($at) /* 07A610 80079A10 8C580000 */ lw $t8, ($v0) /* 07A614 80079A14 00000000 */ nop /* 07A618 80079A18 27190001 */ addiu $t9, $t8, 1 @@ -183,10 +183,10 @@ glabel __scHandleRetrace /* 07A6A4 80079AA4 92020000 */ lbu $v0, ($s0) /* 07A6A8 80079AA8 24010001 */ li $at, 1 /* 07A6AC 80079AAC 14410016 */ bne $v0, $at, .L80079B08 -/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCount) # $a0, 0x800e -/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCount) # $a1, 0x800e -/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCount+4)($a1) -/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCount)($a0) +/* 07A6B0 80079AB0 3C04800E */ lui $a0, %hi(gRetraceCounter64) # $a0, 0x800e +/* 07A6B4 80079AB4 3C05800E */ lui $a1, %hi(gRetraceCounter64) # $a1, 0x800e +/* 07A6B8 80079AB8 8CA5E764 */ lw $a1, %lo(gRetraceCounter64+4)($a1) +/* 07A6BC 80079ABC 8C84E760 */ lw $a0, %lo(gRetraceCounter64)($a0) /* 07A6C0 80079AC0 24060000 */ li $a2, 0 /* 07A6C4 80079AC4 0C033AA3 */ jal __ull_rem /* 07A6C8 80079AC8 24070002 */ li $a3, 2 diff --git a/lib/src/mips1/sc/sched.c b/lib/src/mips1/sc/sched.c index b7b10a68..de8f6b64 100644 --- a/lib/src/mips1/sc/sched.c +++ b/lib/src/mips1/sc/sched.c @@ -27,12 +27,11 @@ f32 D_800DE744 = 0; f32 D_800DE748 = 0; f32 D_800DE74C = 0; -s32 D_800DE750 = 0; // Currently unknown, might be a different type. +u32 gRetraceCounter32 = 0; s32 gCurRSPTaskCounter = 0; s32 gCurRDPTaskCounter = 0; -s32 D_800DE75C = 0; - -u64 gRetraceCount = 0; +static u32 gUnusedVar = 0; +u64 gRetraceCounter64 = 0; /*******************************/ @@ -64,7 +63,7 @@ s32 gCurRSPTaskIsSet; s32 gCurRDPTaskIsSet; OSTime gYieldTime; s32 D_80126120; -u32 D_80126124; +u32 gRSPAudTaskCount; s32 D_80126128[18]; /*******************************/ @@ -221,7 +220,7 @@ void dummy_80079808() {} void dummy_80079810() {} #ifdef NON_MATCHING -//Down to a single regalloc +//Down to single stack pointer value being 0x24 instead of 0x28 void __scHandleRetrace(OSSched *sc) { OSScTask *rspTask = NULL; OSScClient *client; @@ -231,6 +230,7 @@ void __scHandleRetrace(OSSched *sc) { u8 set_curRSPTask_NULL = FALSE; u8 set_curRDPTask_NULL = FALSE; s32 i; + OSScTask *unkTask; if (sc->curRSPTask) { gCurRSPTaskCounter++; @@ -284,16 +284,17 @@ void __scHandleRetrace(OSSched *sc) { if (__scSchedule(sc, &sp, &dp, state) != state) __scExec(sc, sp, dp); - gRetraceCount++; - D_800DE750++; + gRetraceCounter64++; + gRetraceCounter32++; sc->frameCount++; if ((sc->unkTask) && (sc->frameCount >= 2)) { - if (sc->unkTask->msgQ) { - if ((sc->unkTask->unk68) || (sc->unkTask->msg)) { - osSendMesg(sc->unkTask->msgQ, sc->unkTask->msg, OS_MESG_BLOCK); + unkTask = sc->unkTask; + if (unkTask->msgQ) { + if ((unkTask->unk68) || (unkTask->msg)) { + osSendMesg(unkTask->msgQ, unkTask->msg, OS_MESG_BLOCK); } else { - osSendMesg(sc->unkTask->msgQ, &D_800DE730, OS_MESG_BLOCK); + osSendMesg(unkTask->msgQ, &D_800DE730, OS_MESG_BLOCK); } } sc->frameCount = 0; @@ -303,7 +304,7 @@ void __scHandleRetrace(OSSched *sc) { for (client = sc->clientList; client != 0; client = client->next) { if (client->unk0 == 1) { //Only run this on even calls to this function - if (gRetraceCount % 2 == 0) { + if (gRetraceCounter64 % 2 == 0) { osSendMesg(client->msgQ, sc, OS_MESG_NOBLOCK); if (sc->audioListHead) { func_80079760(sc); @@ -332,13 +333,13 @@ void __scHandleRSP(OSSched *sc) { //Rare seems to have edited this function, most specifically here. //Still need to do better for a match, but this does work if (t->list.t.type == M_AUDTASK) { - D_80126124 = osGetCount(); - D_800DE74C = (f32) (((f32) (D_80126124 - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); + gRSPAudTaskCount = osGetCount(); + D_800DE74C = (f32) (((f32) (gRSPAudTaskCount - D_80126120) * 60.0f) / OS_CPU_COUNTER_F); D_800DE744 = (f32) (D_800DE744 + D_800DE74C); if (D_800DE740 < D_800DE74C) { D_800DE740 = D_800DE74C; } - temp_hi = (s32) D_800DE750 % 1000; + temp_hi = (s32) gRetraceCounter32 % 1000; if ((temp_hi == 1) || (temp_hi == 2)) { D_800DE748 = (f32) (D_800DE744 / 500.0f); D_800DE744 = 0.0f; @@ -480,7 +481,7 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) { } if (dp && (dp != sp)) { - osDpSetNextBuffer(dp->list.t.output_buff, *dp->list.t.output_buff_size); + osDpSetNextBuffer(dp->list.t.output_buff, *dp->list.t.output_buff_size); sc->curRDPTask = dp; } }