diff --git a/src/boot/boot.c b/src/boot/boot.c index ff58dde55..bebc6acd2 100644 --- a/src/boot/boot.c +++ b/src/boot/boot.c @@ -1630,63 +1630,29 @@ void __scMain(void *arg) } } -GLOBAL_ASM( -glabel func00001fa8 -/* 1fa8: 27bdffd0 */ addiu $sp,$sp,-48 -/* 1fac: afb00018 */ sw $s0,0x18($sp) -/* 1fb0: 00808025 */ or $s0,$a0,$zero -/* 1fb4: afbf001c */ sw $ra,0x1c($sp) -/* 1fb8: afa50034 */ sw $a1,0x34($sp) -/* 1fbc: afa00028 */ sw $zero,0x28($sp) -/* 1fc0: afa00024 */ sw $zero,0x24($sp) -/* 1fc4: 0c012230 */ jal osGetThreadPri -/* 1fc8: 00002025 */ or $a0,$zero,$zero -/* 1fcc: afa20020 */ sw $v0,0x20($sp) -/* 1fd0: 00002025 */ or $a0,$zero,$zero -/* 1fd4: 0c01210c */ jal osSetThreadPri -/* 1fd8: 2405001f */ addiu $a1,$zero,0x1f -/* 1fdc: 02002025 */ or $a0,$s0,$zero -/* 1fe0: 0c000a87 */ jal __scAppendList -/* 1fe4: 8fa50034 */ lw $a1,0x34($sp) -/* 1fe8: 8e0e00d4 */ lw $t6,0xd4($s0) -/* 1fec: 02002025 */ or $a0,$s0,$zero -/* 1ff0: 27a50028 */ addiu $a1,$sp,0x28 -/* 1ff4: 51c00009 */ beqzl $t6,.L0000201c -/* 1ff8: 8e1800c8 */ lw $t8,0xc8($s0) -/* 1ffc: 8e0f00c8 */ lw $t7,0xc8($s0) -/* 2000: 51e00006 */ beqzl $t7,.L0000201c -/* 2004: 8e1800c8 */ lw $t8,0xc8($s0) -/* 2008: 0c000adc */ jal __scYield -/* 200c: 02002025 */ or $a0,$s0,$zero -/* 2010: 10000012 */ b .L0000205c -/* 2014: 00002025 */ or $a0,$zero,$zero -/* 2018: 8e1800c8 */ lw $t8,0xc8($s0) -.L0000201c: -/* 201c: 8e0900cc */ lw $t1,0xcc($s0) -/* 2020: 27a60024 */ addiu $a2,$sp,0x24 -/* 2024: 2f190001 */ sltiu $t9,$t8,0x1 -/* 2028: 00194040 */ sll $t0,$t9,0x1 -/* 202c: 2d2a0001 */ sltiu $t2,$t1,0x1 -/* 2030: 010a3825 */ or $a3,$t0,$t2 -/* 2034: 0c000aeb */ jal __scSchedule -/* 2038: afa7002c */ sw $a3,0x2c($sp) -/* 203c: 8fa7002c */ lw $a3,0x2c($sp) -/* 2040: 02002025 */ or $a0,$s0,$zero -/* 2044: 8fa50028 */ lw $a1,0x28($sp) -/* 2048: 50470004 */ beql $v0,$a3,.L0000205c -/* 204c: 00002025 */ or $a0,$zero,$zero -/* 2050: 0c000aa1 */ jal __scExec -/* 2054: 8fa60024 */ lw $a2,0x24($sp) -/* 2058: 00002025 */ or $a0,$zero,$zero -.L0000205c: -/* 205c: 0c01210c */ jal osSetThreadPri -/* 2060: 8fa50020 */ lw $a1,0x20($sp) -/* 2064: 8fbf001c */ lw $ra,0x1c($sp) -/* 2068: 8fb00018 */ lw $s0,0x18($sp) -/* 206c: 27bd0030 */ addiu $sp,$sp,0x30 -/* 2070: 03e00008 */ jr $ra -/* 2074: 00000000 */ nop -); +void __scHandleRetraceViaPri(OSSched *sc, OSScTask *t) +{ + s32 state; + OSScTask *sp = 0; + OSScTask *dp = 0; + + OSPri prevpri = osGetThreadPri(0); + osSetThreadPri(0, 31); + + __scAppendList(sc, t); + + if (sc->doAudio && sc->curRSPTask) { + __scYield(sc); + } else { + state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); + + if (__scSchedule(sc, &sp, &dp, state) != state) { + __scExec(sc, sp, dp); + } + } + + osSetThreadPri(0, prevpri); +} GLOBAL_ASM( glabel func00002078 @@ -1767,7 +1733,7 @@ void __scHandleRetrace(OSSched *sc) } else { state = ((sc->curRSPTask == 0) << 1) | (sc->curRDPTask == 0); - if ( __scSchedule (sc, &sp, &dp, state) != state) { + if (__scSchedule(sc, &sp, &dp, state) != state) { __scExec(sc, sp, dp); } } diff --git a/src/include/boot/boot.h b/src/include/boot/boot.h index 9d8e01621..13281cc18 100644 --- a/src/include/boot/boot.h +++ b/src/include/boot/boot.h @@ -9,7 +9,7 @@ s32 func000016cc(void); s32 osGetMemSize(void); void *allocateStack(s32 threadid, s32 size); void func00001b28(u32 arg0); -s32 func00001fa8(void); +void __scHandleRetraceViaPri(OSSched *sc, OSScTask *t); s32 func00002078(OSSched *sc); void __scHandleRSP(OSSched *sc); void __scHandleRDP(OSSched *sc); diff --git a/src/lib/lib_08a20.c b/src/lib/lib_08a20.c index e2a753a1a..7e3c96f6e 100644 --- a/src/lib/lib_08a20.c +++ b/src/lib/lib_08a20.c @@ -724,7 +724,7 @@ glabel func00009448 /* 946c: 3c018009 */ lui $at,%hi(var800918f4) /* 9470: ac2618f4 */ sw $a2,%lo(var800918f4)($at) /* 9474: 2484dbd0 */ addiu $a0,$a0,%lo(var8008dbd0) -/* 9478: 0c0007ea */ jal func00001fa8 +/* 9478: 0c0007ea */ jal __scHandleRetraceViaPri /* 947c: 00c02825 */ or $a1,$a2,$zero .L00009480: /* 9480: 0c00264f */ jal func0000993c diff --git a/src/lib/lib_2f490.c b/src/lib/lib_2f490.c index 32675b828..dc24ba523 100644 --- a/src/lib/lib_2f490.c +++ b/src/lib/lib_2f490.c @@ -375,7 +375,7 @@ glabel func0002f8f4 /* 2f9b0: afa6001c */ sw $a2,0x1c($sp) /* 2f9b4: 3c048009 */ lui $a0,%hi(var8008dbd0) /* 2f9b8: 8fa5001c */ lw $a1,0x1c($sp) -/* 2f9bc: 0c0007ea */ jal func00001fa8 +/* 2f9bc: 0c0007ea */ jal __scHandleRetraceViaPri /* 2f9c0: 2484dbd0 */ addiu $a0,$a0,%lo(var8008dbd0) /* 2f9c4: 3c028006 */ lui $v0,%hi(var8005f108) /* 2f9c8: 2442f108 */ addiu $v0,$v0,%lo(var8005f108)