diff --git a/asm/non_matchings/unknown_079F50/__scMain.s b/asm/non_matchings/unknown_079F50/__scMain.s index 3caad31c..e5407ca5 100644 --- a/asm/non_matchings/unknown_079F50/__scMain.s +++ b/asm/non_matchings/unknown_079F50/__scMain.s @@ -94,7 +94,7 @@ glabel __scMain /* 07A2FC 800796FC 02602025 */ move $a0, $s3 /* 07A300 80079700 8FA50054 */ lw $a1, 0x54($sp) /* 07A304 80079704 8FA60050 */ lw $a2, 0x50($sp) -/* 07A308 80079708 0C01E7EA */ jal func_80079FA8 +/* 07A308 80079708 0C01E7EA */ jal __scExec /* 07A30C 8007970C 02402025 */ move $a0, $s2 /* 07A310 80079710 1000FFBC */ b .L80079604 /* 07A314 80079714 02602025 */ move $a0, $s3 diff --git a/asm/non_matchings/unknown_079F50/func_80079760.s b/asm/non_matchings/unknown_079F50/func_80079760.s index 43500e2b..4da59d4d 100644 --- a/asm/non_matchings/unknown_079F50/func_80079760.s +++ b/asm/non_matchings/unknown_079F50/func_80079760.s @@ -37,7 +37,7 @@ glabel func_80079760 /* 07A3E4 800797E4 8FBF0014 */ lw $ra, 0x14($sp) /* 07A3E8 800797E8 8FA50020 */ lw $a1, 0x20($sp) /* 07A3EC 800797EC 8FA6001C */ lw $a2, 0x1c($sp) -/* 07A3F0 800797F0 0C01E7EA */ jal func_80079FA8 +/* 07A3F0 800797F0 0C01E7EA */ jal __scExec /* 07A3F4 800797F4 00000000 */ nop /* 07A3F8 800797F8 8FBF0014 */ lw $ra, 0x14($sp) .L800797FC: diff --git a/asm/non_matchings/unknown_079F50/func_80079818.s b/asm/non_matchings/unknown_079F50/func_80079818.s index 56520bba..2d1108b3 100644 --- a/asm/non_matchings/unknown_079F50/func_80079818.s +++ b/asm/non_matchings/unknown_079F50/func_80079818.s @@ -122,7 +122,7 @@ glabel func_80079818 /* 07A5CC 800799CC 00000000 */ nop /* 07A5D0 800799D0 8FA50038 */ lw $a1, 0x38($sp) /* 07A5D4 800799D4 8FA60034 */ lw $a2, 0x34($sp) -/* 07A5D8 800799D8 0C01E7EA */ jal func_80079FA8 +/* 07A5D8 800799D8 0C01E7EA */ jal __scExec /* 07A5DC 800799DC 02202025 */ move $a0, $s1 .L800799E0: /* 07A5E0 800799E0 3C0D800E */ lui $t5, %hi(D_800DE764) # $t5, 0x800e diff --git a/asm/non_matchings/unknown_079F50/func_80079B44.s b/asm/non_matchings/unknown_079F50/func_80079B44.s index 90efdd27..3d7fa1c4 100644 --- a/asm/non_matchings/unknown_079F50/func_80079B44.s +++ b/asm/non_matchings/unknown_079F50/func_80079B44.s @@ -137,7 +137,7 @@ glabel func_80079B44 /* 07A938 80079D38 10470005 */ beq $v0, $a3, .L80079D50 /* 07A93C 80079D3C 8FBF001C */ lw $ra, 0x1c($sp) /* 07A940 80079D40 8FA6002C */ lw $a2, 0x2c($sp) -/* 07A944 80079D44 0C01E7EA */ jal func_80079FA8 +/* 07A944 80079D44 0C01E7EA */ jal __scExec /* 07A948 80079D48 02002025 */ move $a0, $s0 /* 07A94C 80079D4C 8FBF001C */ lw $ra, 0x1c($sp) .L80079D50: diff --git a/asm/non_matchings/unknown_079F50/func_80079D5C.s b/asm/non_matchings/unknown_079F50/func_80079D5C.s index 64de9d95..16eb86c2 100644 --- a/asm/non_matchings/unknown_079F50/func_80079D5C.s +++ b/asm/non_matchings/unknown_079F50/func_80079D5C.s @@ -28,7 +28,7 @@ glabel func_80079D5C /* 07A9C4 80079DC4 8FBF0014 */ lw $ra, 0x14($sp) /* 07A9C8 80079DC8 8FA50020 */ lw $a1, 0x20($sp) /* 07A9CC 80079DCC 8FA6001C */ lw $a2, 0x1c($sp) -/* 07A9D0 80079DD0 0C01E7EA */ jal func_80079FA8 +/* 07A9D0 80079DD0 0C01E7EA */ jal __scExec /* 07A9D4 80079DD4 00000000 */ nop /* 07A9D8 80079DD8 8FBF0014 */ lw $ra, 0x14($sp) .L80079DDC: diff --git a/asm/non_matchings/unknown_079F50/func_80079FA8.s b/asm/non_matchings/unknown_079F50/func_80079FA8.s deleted file mode 100644 index e1cbbbff..00000000 --- a/asm/non_matchings/unknown_079F50/func_80079FA8.s +++ /dev/null @@ -1,59 +0,0 @@ -glabel func_80079FA8 -/* 07ABA8 80079FA8 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 07ABAC 80079FAC AFB10018 */ sw $s1, 0x18($sp) -/* 07ABB0 80079FB0 AFB00014 */ sw $s0, 0x14($sp) -/* 07ABB4 80079FB4 00A08025 */ move $s0, $a1 -/* 07ABB8 80079FB8 00C08825 */ move $s1, $a2 -/* 07ABBC 80079FBC AFBF001C */ sw $ra, 0x1c($sp) -/* 07ABC0 80079FC0 10A0001D */ beqz $a1, .L8007A038 -/* 07ABC4 80079FC4 AFA40028 */ sw $a0, 0x28($sp) -/* 07ABC8 80079FC8 8CAE0010 */ lw $t6, 0x10($a1) -/* 07ABCC 80079FCC 24010002 */ li $at, 2 -/* 07ABD0 80079FD0 15C10007 */ bne $t6, $at, .L80079FF0 -/* 07ABD4 80079FD4 00000000 */ nop -/* 07ABD8 80079FD8 0C034628 */ jal osWritebackDCacheAll -/* 07ABDC 80079FDC 00000000 */ nop -/* 07ABE0 80079FE0 0C031E34 */ jal osGetCount -/* 07ABE4 80079FE4 00000000 */ nop -/* 07ABE8 80079FE8 3C018012 */ lui $at, %hi(D_80126120) # $at, 0x8012 -/* 07ABEC 80079FEC AC226120 */ sw $v0, %lo(D_80126120)($at) -.L80079FF0: -/* 07ABF0 80079FF0 8E0F0004 */ lw $t7, 4($s0) -/* 07ABF4 80079FF4 2401FFCF */ li $at, -49 -/* 07ABF8 80079FF8 01E1C024 */ and $t8, $t7, $at -/* 07ABFC 80079FFC AE180004 */ sw $t8, 4($s0) -/* 07AC00 8007A000 26040010 */ addiu $a0, $s0, 0x10 -/* 07AC04 8007A004 0C034803 */ jal osSpTaskLoad -/* 07AC08 8007A008 AFA40024 */ sw $a0, 0x24($sp) -/* 07AC0C 8007A00C 8FA40024 */ lw $a0, 0x24($sp) -/* 07AC10 8007A010 0C03485B */ jal osSpTaskStartGo -/* 07AC14 8007A014 00000000 */ nop -/* 07AC18 8007A018 3C01800E */ lui $at, %hi(D_800DE754) # $at, 0x800e -/* 07AC1C 8007A01C AC20E754 */ sw $zero, %lo(D_800DE754)($at) -/* 07AC20 8007A020 8FB90028 */ lw $t9, 0x28($sp) -/* 07AC24 8007A024 3C01800E */ lui $at, %hi(D_800DE758) # $at, 0x800e -/* 07AC28 8007A028 AC20E758 */ sw $zero, %lo(D_800DE758)($at) -/* 07AC2C 8007A02C 16110002 */ bne $s0, $s1, .L8007A038 -/* 07AC30 8007A030 AF300274 */ sw $s0, 0x274($t9) -/* 07AC34 8007A034 AF310278 */ sw $s1, 0x278($t9) -.L8007A038: -/* 07AC38 8007A038 1220000D */ beqz $s1, .L8007A070 -/* 07AC3C 8007A03C 8FBF001C */ lw $ra, 0x1c($sp) -/* 07AC40 8007A040 1230000B */ beq $s1, $s0, .L8007A070 -/* 07AC44 8007A044 8FBF001C */ lw $ra, 0x1c($sp) -/* 07AC48 8007A048 8E28003C */ lw $t0, 0x3c($s1) -/* 07AC4C 8007A04C 8E240038 */ lw $a0, 0x38($s1) -/* 07AC50 8007A050 8D060000 */ lw $a2, ($t0) -/* 07AC54 8007A054 8D070004 */ lw $a3, 4($t0) -/* 07AC58 8007A058 0C034638 */ jal osDpSetNextBuffer -/* 07AC5C 8007A05C 00000000 */ nop -/* 07AC60 8007A060 8FA90028 */ lw $t1, 0x28($sp) -/* 07AC64 8007A064 00000000 */ nop -/* 07AC68 8007A068 AD310278 */ sw $s1, 0x278($t1) -/* 07AC6C 8007A06C 8FBF001C */ lw $ra, 0x1c($sp) -.L8007A070: -/* 07AC70 8007A070 8FB00014 */ lw $s0, 0x14($sp) -/* 07AC74 8007A074 8FB10018 */ lw $s1, 0x18($sp) -/* 07AC78 8007A078 03E00008 */ jr $ra -/* 07AC7C 8007A07C 27BD0028 */ addiu $sp, $sp, 0x28 - diff --git a/src/unknown_079F50.c b/src/unknown_079F50.c index 317d9805..6862b7a6 100644 --- a/src/unknown_079F50.c +++ b/src/unknown_079F50.c @@ -59,8 +59,12 @@ typedef struct{ u8 pad00[0x50]; }unk800E3900; +extern u32 D_800DE754; +extern u32 D_800DE758; extern OSViMode D_800E3900[];//osViModeTable; +extern s32 D_80126120; + void __scMain(void); void osCreateScheduler(OSSched *sc, void *stack, OSPri priority, u8 mode, u8 numFields){ @@ -111,7 +115,6 @@ void osScAddClient(OSSched *sc, OSScClient *c, OSMesgQueue *msgQ, u8 arg3){ osSetIntMask(mask); } - void osScRemoveClient(OSSched *sc, OSScClient *c) { OSScClient *client = sc->clientList; @@ -148,7 +151,35 @@ GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079D5C.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079DE8.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079E40.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079F40.s") -GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_80079FA8.s") + +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 &= ~(OS_SC_YIELD | OS_SC_YIELDED); + sp->state &= -49; + osSpTaskLoad(&sp->list); + osSpTaskStartGo(&sp->list); + D_800DE754 = 0; + D_800DE758 = 0; + sc->curRSPTask = sp; + + if (sp == dp) + sc->curRDPTask = dp; + } + + if (dp && (dp != sp)) { + osDpSetNextBuffer(dp->list.t.output_buff, + *dp->list.t.output_buff_size); + sc->curRDPTask = dp; + } +} + GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007A080.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007A0D4.s") GLOBAL_ASM("asm/non_matchings/unknown_079F50/func_8007A2D0.s")