diff --git a/src/boot/boot.c b/src/boot/boot.c index 6b2eebf21..58f89bc40 100644 --- a/src/boot/boot.c +++ b/src/boot/boot.c @@ -1746,7 +1746,7 @@ glabel func00001e94 .L00001f34: /* 1f34: 0c00081e */ jal func00002078 /* 1f38: 02202025 */ or $a0,$s1,$zero -/* 1f3c: 0c000852 */ jal func00002148 +/* 1f3c: 0c000852 */ jal __scHandleRetrace /* 1f40: 02202025 */ or $a0,$s1,$zero /* 1f44: 1000000b */ b .L00001f74 /* 1f48: 00000000 */ nop @@ -1760,7 +1760,7 @@ glabel func00001e94 /* 1f60: 24040008 */ addiu $a0,$zero,0x8 /* 1f64: 0c00098b */ jal func0000262c /* 1f68: 02202025 */ or $a0,$s1,$zero -/* 1f6c: 0c000852 */ jal func00002148 +/* 1f6c: 0c000852 */ jal __scHandleRetrace /* 1f70: 02202025 */ or $a0,$s1,$zero .L00001f74: /* 1f74: 52e0ffdb */ beqzl $s7,.L00001ee4 @@ -1804,7 +1804,7 @@ glabel func00001fa8 /* 1ffc: 8e0f00c8 */ lw $t7,0xc8($s0) /* 2000: 51e00006 */ beqzl $t7,.L0000201c /* 2004: 8e1800c8 */ lw $t8,0xc8($s0) -/* 2008: 0c000adc */ jal func00002b70 +/* 2008: 0c000adc */ jal __scYield /* 200c: 02002025 */ or $a0,$s0,$zero /* 2010: 10000012 */ b .L0000205c /* 2014: 00002025 */ or $a0,$zero,$zero @@ -1816,7 +1816,7 @@ glabel func00001fa8 /* 2028: 00194040 */ sll $t0,$t9,0x1 /* 202c: 2d2a0001 */ sltiu $t2,$t1,0x1 /* 2030: 010a3825 */ or $a3,$t0,$t2 -/* 2034: 0c000aeb */ jal func00002bac +/* 2034: 0c000aeb */ jal __scSchedule /* 2038: afa7002c */ sw $a3,0x2c($sp) /* 203c: 8fa7002c */ lw $a3,0x2c($sp) /* 2040: 02002025 */ or $a0,$s0,$zero @@ -1896,215 +1896,58 @@ glabel func00002078 ); #if VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel func00002148 -/* 2148: 27bdffa8 */ addiu $sp,$sp,-88 -/* 214c: afbf0024 */ sw $ra,0x24($sp) -/* 2150: afb10018 */ sw $s1,0x18($sp) -/* 2154: 00808825 */ or $s1,$a0,$zero -/* 2158: afb30020 */ sw $s3,0x20($sp) -/* 215c: afb2001c */ sw $s2,0x1c($sp) -/* 2160: afb00014 */ sw $s0,0x14($sp) -/* 2164: afa00050 */ sw $zero,0x50($sp) -/* 2168: afa00048 */ sw $zero,0x48($sp) -/* 216c: 0c0026a2 */ jal func00009a88 -/* 2170: afa00044 */ sw $zero,0x44($sp) -/* 2174: 27b30050 */ addiu $s3,$sp,0x50 -/* 2178: 26320078 */ addiu $s2,$s1,0x78 -/* 217c: 02402025 */ or $a0,$s2,$zero -/* 2180: 02602825 */ or $a1,$s3,$zero -/* 2184: 0c0121bc */ jal osRecvMesg -/* 2188: 00003025 */ or $a2,$zero,$zero -/* 218c: 2410ffff */ addiu $s0,$zero,-1 -/* 2190: 10500009 */ beq $v0,$s0,.L000021b8 -/* 2194: 02202025 */ or $a0,$s1,$zero -.L00002198: -/* 2198: 0c000a87 */ jal __scAppendList -/* 219c: 8fa50050 */ lw $a1,0x50($sp) -/* 21a0: 02402025 */ or $a0,$s2,$zero -/* 21a4: 02602825 */ or $a1,$s3,$zero -/* 21a8: 0c0121bc */ jal osRecvMesg -/* 21ac: 00003025 */ or $a2,$zero,$zero -/* 21b0: 5450fff9 */ bnel $v0,$s0,.L00002198 -/* 21b4: 02202025 */ or $a0,$s1,$zero -.L000021b8: -/* 21b8: 8e2e00d4 */ lw $t6,0xd4($s1) -/* 21bc: 02202025 */ or $a0,$s1,$zero -/* 21c0: 27a50048 */ addiu $a1,$sp,0x48 -/* 21c4: 51c00009 */ beqzl $t6,.L000021ec -/* 21c8: 8e3800c8 */ lw $t8,0xc8($s1) -/* 21cc: 8e2f00c8 */ lw $t7,0xc8($s1) -/* 21d0: 51e00006 */ beqzl $t7,.L000021ec -/* 21d4: 8e3800c8 */ lw $t8,0xc8($s1) -/* 21d8: 0c000adc */ jal func00002b70 -/* 21dc: 02202025 */ or $a0,$s1,$zero -/* 21e0: 10000010 */ b .L00002224 -/* 21e4: 8e3000b4 */ lw $s0,0xb4($s1) -/* 21e8: 8e3800c8 */ lw $t8,0xc8($s1) -.L000021ec: -/* 21ec: 8e2900cc */ lw $t1,0xcc($s1) -/* 21f0: 27a60044 */ addiu $a2,$sp,0x44 -/* 21f4: 2f190001 */ sltiu $t9,$t8,0x1 -/* 21f8: 00194040 */ sll $t0,$t9,0x1 -/* 21fc: 2d2a0001 */ sltiu $t2,$t1,0x1 -/* 2200: 010a8025 */ or $s0,$t0,$t2 -/* 2204: 0c000aeb */ jal func00002bac -/* 2208: 02003825 */ or $a3,$s0,$zero -/* 220c: 10500004 */ beq $v0,$s0,.L00002220 -/* 2210: 02202025 */ or $a0,$s1,$zero -/* 2214: 8fa50048 */ lw $a1,0x48($sp) -/* 2218: 0c000aa1 */ jal __scExec -/* 221c: 8fa60044 */ lw $a2,0x44($sp) -.L00002220: -/* 2220: 8e3000b4 */ lw $s0,0xb4($s1) -.L00002224: -/* 2224: 1200000f */ beqz $s0,.L00002264 -/* 2228: 00000000 */ nop -/* 222c: 8e0b0008 */ lw $t3,0x8($s0) -.L00002230: -/* 2230: 02202825 */ or $a1,$s1,$zero -/* 2234: 00003025 */ or $a2,$zero,$zero -/* 2238: 11600005 */ beqz $t3,.L00002250 -/* 223c: 00000000 */ nop -/* 2240: 8e2c00d0 */ lw $t4,0xd0($s1) -/* 2244: 318d0001 */ andi $t5,$t4,0x1 -/* 2248: 55a00004 */ bnezl $t5,.L0000225c -/* 224c: 8e100000 */ lw $s0,0x0($s0) -.L00002250: -/* 2250: 0c012238 */ jal osSendMesg -/* 2254: 8e040004 */ lw $a0,0x4($s0) -/* 2258: 8e100000 */ lw $s0,0x0($s0) -.L0000225c: -/* 225c: 5600fff4 */ bnezl $s0,.L00002230 -/* 2260: 8e0b0008 */ lw $t3,0x8($s0) -.L00002264: -/* 2264: 3c057000 */ lui $a1,%hi(allocateStack) -/* 2268: 3c067000 */ lui $a2,%hi(func000016cc) -/* 226c: 24a418ac */ addiu $a0,$a1,%lo(allocateStack) -/* 2270: 24c216cc */ addiu $v0,$a2,%lo(func000016cc) -/* 2274: 0044082b */ sltu $at,$v0,$a0 -/* 2278: 10200006 */ beqz $at,.L00002294 -/* 227c: 00001825 */ or $v1,$zero,$zero -.L00002280: -/* 2280: 8c4e0000 */ lw $t6,0x0($v0) -/* 2284: 24420004 */ addiu $v0,$v0,0x4 -/* 2288: 0044082b */ sltu $at,$v0,$a0 -/* 228c: 1420fffc */ bnez $at,.L00002280 -/* 2290: 006e1826 */ xor $v1,$v1,$t6 -.L00002294: -/* 2294: 3c019144 */ lui $at,0x99aa -/* 2298: 34212ce7 */ ori $at,$at,0xbbcc -/* 229c: 10610009 */ beq $v1,$at,.L000022c4 -/* 22a0: 00001025 */ or $v0,$zero,$zero -/* 22a4: 3c038009 */ lui $v1,%hi(var80095210) -/* 22a8: 24635210 */ addiu $v1,$v1,%lo(var80095210) -/* 22ac: 24050028 */ addiu $a1,$zero,0x28 -/* 22b0: 240400ff */ addiu $a0,$zero,0xff -.L000022b4: -/* 22b4: 00627821 */ addu $t7,$v1,$v0 -/* 22b8: 24420001 */ addiu $v0,$v0,0x1 -/* 22bc: 1445fffd */ bne $v0,$a1,.L000022b4 -/* 22c0: a1e40004 */ sb $a0,0x4($t7) -.L000022c4: -/* 22c4: 8fbf0024 */ lw $ra,0x24($sp) -/* 22c8: 8fb00014 */ lw $s0,0x14($sp) -/* 22cc: 8fb10018 */ lw $s1,0x18($sp) -/* 22d0: 8fb2001c */ lw $s2,0x1c($sp) -/* 22d4: 8fb30020 */ lw $s3,0x20($sp) -/* 22d8: 03e00008 */ jr $ra -/* 22dc: 27bd0058 */ addiu $sp,$sp,0x58 -); -#else -GLOBAL_ASM( -glabel func00002148 -/* 23a0: 27bdffc0 */ addiu $sp,$sp,-64 -/* 23a4: afbf0024 */ sw $ra,0x24($sp) -/* 23a8: afb10018 */ sw $s1,0x18($sp) -/* 23ac: 00808825 */ move $s1,$a0 -/* 23b0: afb30020 */ sw $s3,0x20($sp) -/* 23b4: afb2001c */ sw $s2,0x1c($sp) -/* 23b8: afb00014 */ sw $s0,0x14($sp) -/* 23bc: afa00038 */ sw $zero,0x38($sp) -/* 23c0: afa00030 */ sw $zero,0x30($sp) -/* 23c4: 0c00270a */ jal 0x9c28 -/* 23c8: afa0002c */ sw $zero,0x2c($sp) -/* 23cc: 27b30038 */ addiu $s3,$sp,0x38 -/* 23d0: 26320078 */ addiu $s2,$s1,0x78 -/* 23d4: 02402025 */ move $a0,$s2 -/* 23d8: 02602825 */ move $a1,$s3 -/* 23dc: 0c0126b0 */ jal 0x49ac0 -/* 23e0: 00003025 */ move $a2,$zero -/* 23e4: 2410ffff */ li $s0,-1 -/* 23e8: 10500009 */ beq $v0,$s0,.L00002410 -/* 23ec: 02202025 */ move $a0,$s1 -.L000023f0: -/* 23f0: 0c000b05 */ jal 0x2c14 -/* 23f4: 8fa50038 */ lw $a1,0x38($sp) -/* 23f8: 02402025 */ move $a0,$s2 -/* 23fc: 02602825 */ move $a1,$s3 -/* 2400: 0c0126b0 */ jal 0x49ac0 -/* 2404: 00003025 */ move $a2,$zero -/* 2408: 5450fff9 */ bnel $v0,$s0,.L000023f0 -/* 240c: 02202025 */ move $a0,$s1 -.L00002410: -/* 2410: 8e2e00d4 */ lw $t6,0xd4($s1) -/* 2414: 02202025 */ move $a0,$s1 -/* 2418: 27a50030 */ addiu $a1,$sp,0x30 -/* 241c: 51c00009 */ beqzl $t6,.L00002444 -/* 2420: 8e3800c8 */ lw $t8,0xc8($s1) -/* 2424: 8e2f00c8 */ lw $t7,0xc8($s1) -/* 2428: 51e00006 */ beqzl $t7,.L00002444 -/* 242c: 8e3800c8 */ lw $t8,0xc8($s1) -/* 2430: 0c000b64 */ jal 0x2d90 -/* 2434: 02202025 */ move $a0,$s1 -/* 2438: 10000010 */ b .L0000247c -/* 243c: 8e3000b4 */ lw $s0,0xb4($s1) -/* 2440: 8e3800c8 */ lw $t8,0xc8($s1) -.L00002444: -/* 2444: 8e2900cc */ lw $t1,0xcc($s1) -/* 2448: 27a6002c */ addiu $a2,$sp,0x2c -/* 244c: 2f190001 */ sltiu $t9,$t8,0x1 -/* 2450: 00194040 */ sll $t0,$t9,0x1 -/* 2454: 2d2a0001 */ sltiu $t2,$t1,0x1 -/* 2458: 010a8025 */ or $s0,$t0,$t2 -/* 245c: 0c000b73 */ jal 0x2dcc -/* 2460: 02003825 */ move $a3,$s0 -/* 2464: 10500004 */ beq $v0,$s0,.L00002478 -/* 2468: 02202025 */ move $a0,$s1 -/* 246c: 8fa50030 */ lw $a1,0x30($sp) -/* 2470: 0c000b1f */ jal 0x2c7c -/* 2474: 8fa6002c */ lw $a2,0x2c($sp) -.L00002478: -/* 2478: 8e3000b4 */ lw $s0,0xb4($s1) -.L0000247c: -/* 247c: 52000010 */ beqzl $s0,.L000024c0 -/* 2480: 8fbf0024 */ lw $ra,0x24($sp) -/* 2484: 8e0b0008 */ lw $t3,0x8($s0) -.L00002488: -/* 2488: 02202825 */ move $a1,$s1 -/* 248c: 00003025 */ move $a2,$zero -/* 2490: 11600005 */ beqz $t3,.L000024a8 -/* 2494: 00000000 */ nop -/* 2498: 8e2c00d0 */ lw $t4,0xd0($s1) -/* 249c: 318d0001 */ andi $t5,$t4,0x1 -/* 24a0: 55a00004 */ bnezl $t5,.L000024b4 -/* 24a4: 8e100000 */ lw $s0,0x0($s0) -.L000024a8: -/* 24a8: 0c01272c */ jal 0x49cb0 -/* 24ac: 8e040004 */ lw $a0,0x4($s0) -/* 24b0: 8e100000 */ lw $s0,0x0($s0) -.L000024b4: -/* 24b4: 5600fff4 */ bnezl $s0,.L00002488 -/* 24b8: 8e0b0008 */ lw $t3,0x8($s0) -/* 24bc: 8fbf0024 */ lw $ra,0x24($sp) -.L000024c0: -/* 24c0: 8fb00014 */ lw $s0,0x14($sp) -/* 24c4: 8fb10018 */ lw $s1,0x18($sp) -/* 24c8: 8fb2001c */ lw $s2,0x1c($sp) -/* 24cc: 8fb30020 */ lw $s3,0x20($sp) -/* 24d0: 03e00008 */ jr $ra -/* 24d4: 27bd0040 */ addiu $sp,$sp,0x40 -); +void __scHandleRetrace(OSSched *sc) +{ + s32 state; + OSScTask *rspTask = 0; + OSScClient *client; + OSScTask *sp = 0; + OSScTask *dp = 0; + + func00009a88(); + + while (osRecvMesg(&sc->cmdQ, (OSMesg*)&rspTask, OS_MESG_NOBLOCK) != -1) { + __scAppendList(sc, rspTask); + } + + 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); + } + } + + for (client = sc->clientList; client != 0; client = client->next) { + if ((*((s32*)client + 2) == 0) || ((sc->frameCount & 1) == 0)) { + osSendMesg(client->msgQ, (OSMesg) &sc->retraceMsg, OS_MESG_NOBLOCK); + } + } + +#if PIRACYCHECKS + { + u32 checksum = 0; + s32 *end = (s32 *)&allocateStack; + s32 *ptr = (s32 *)&func000016cc; + s32 i; + + while (ptr < end) { + checksum ^= *ptr; + ptr++; + } + + if (checksum != CHECKSUM_PLACEHOLDER) { + u8 *addr = var80095210; + + for (i = 0; i < 40; i++) { + addr[4 + i] = 0xff; + } + } + } +#endif +} #endif GLOBAL_ASM( @@ -2168,7 +2011,7 @@ glabel func000022e0 /* 23b0: 03293825 */ or $a3,$t9,$t1 /* 23b4: afa70020 */ sw $a3,0x20($sp) /* 23b8: 27a50028 */ addiu $a1,$sp,0x28 -/* 23bc: 0c000aeb */ jal func00002bac +/* 23bc: 0c000aeb */ jal __scSchedule /* 23c0: 27a60024 */ addiu $a2,$sp,0x24 /* 23c4: 8fa70020 */ lw $a3,0x20($sp) /* 23c8: 02002025 */ or $a0,$s0,$zero @@ -2346,7 +2189,7 @@ glabel func0000262c /* 26c0: 014c3825 */ or $a3,$t2,$t4 /* 26c4: afa70020 */ sw $a3,0x20($sp) /* 26c8: 27a50028 */ addiu $a1,$sp,0x28 -/* 26cc: 0c000aeb */ jal func00002bac +/* 26cc: 0c000aeb */ jal __scSchedule /* 26d0: 27a60024 */ addiu $a2,$sp,0x24 /* 26d4: 8fa70020 */ lw $a3,0x20($sp) /* 26d8: 02002025 */ or $a0,$s0,$zero @@ -2658,7 +2501,7 @@ glabel func00002d68nb #endif GLOBAL_ASM( -glabel func00002b70 +glabel __scYield /* 2b70: 27bdffe8 */ addiu $sp,$sp,-24 /* 2b74: afbf0014 */ sw $ra,0x14($sp) /* 2b78: 8c8200c8 */ lw $v0,0xc8($a0) @@ -2678,7 +2521,7 @@ glabel func00002b70 ); GLOBAL_ASM( -glabel func00002bac +glabel __scSchedule /* 2bac: 27bdffd8 */ addiu $sp,$sp,-40 /* 2bb0: afb10018 */ sw $s1,0x18($sp) /* 2bb4: 00808825 */ or $s1,$a0,$zero diff --git a/src/game/cheats.c b/src/game/cheats.c index 01135e204..bbd21ec2b 100644 --- a/src/game/cheats.c +++ b/src/game/cheats.c @@ -478,9 +478,9 @@ glabel cheatMenuHandleDialog /* f1079c4: 0fc43c4f */ jal savefileSetFlag /* f1079c8: 24040023 */ addiu $a0,$zero,0x23 .L0f1079cc: -/* f1079cc: 3c067000 */ lui $a2,%hi(func00002148) +/* f1079cc: 3c067000 */ lui $a2,%hi(__scHandleRetrace) /* f1079d0: 3c057000 */ lui $a1,%hi(func000022e0) -/* f1079d4: 24c62148 */ addiu $a2,$a2,%lo(func00002148) +/* f1079d4: 24c62148 */ addiu $a2,$a2,%lo(__scHandleRetrace) /* f1079d8: 24a422e0 */ addiu $a0,$a1,%lo(func000022e0) /* f1079dc: 00c4082b */ sltu $at,$a2,$a0 /* f1079e0: 00c01025 */ or $v0,$a2,$zero @@ -530,7 +530,7 @@ glabel cheatMenuHandleDialog ); // Mismatch because it optimises the `end = &ptr[4]` line. -// It's calculating it as &func00002148 + 24 rather than ptr + 4. +// It's calculating it as &__scHandleRetrace + 24 rather than ptr + 4. //bool cheatMenuHandleDialog(u32 operation, struct menudialog *dialog, struct menu *menu) //{ // if (operation == MENUOP_OPEN) { @@ -542,7 +542,7 @@ glabel cheatMenuHandleDialog // //#if PIRACYCHECKS // { -// u32 *ptr = (u32 *)&func00002148; +// u32 *ptr = (u32 *)&__scHandleRetrace; // u32 *end = (u32 *)&func000022e0; // u32 checksum = 0; // @@ -552,7 +552,7 @@ glabel cheatMenuHandleDialog // } // // if (checksum != 0x6f764531) { -// ptr = (u32 *)&func00002148 + 20; +// ptr = (u32 *)&__scHandleRetrace + 20; // end = &ptr[4]; // // while (ptr < end) { diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index bac7b0b61..b24be9c15 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -9725,7 +9725,7 @@ void func0f028590(f32 arg0) #if PIRACYCHECKS { s32 *i = (s32 *)&func00002078; - s32 *end = (s32 *)&func00002148; + s32 *end = (s32 *)&__scHandleRetrace; u32 checksum = 0; while (i < end) { diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 9d2536ad7..5f53c736d 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -7627,7 +7627,7 @@ u32 var80095200 = 0; u32 var80095204 = 0; u32 var80095208 = 0; u32 var8009520c = 0; -u32 var80095210 = 0; +u8 var80095210[1] = {0}; u32 var80095214 = 0; u32 var80095218 = 0; u32 var8009521c = 0; diff --git a/src/include/boot/boot.h b/src/include/boot/boot.h index d677aa363..e4ea636aa 100644 --- a/src/include/boot/boot.h +++ b/src/include/boot/boot.h @@ -5,15 +5,17 @@ s32 func000010a4(void); s32 func0000113c(void); s32 func00001180(void); +s32 func000016cc(void); s32 osGetMemSize(void); void *allocateStack(s32 threadid, s32 size); void func00001b28(u32 arg0); s32 func00001e30(void); s32 func00001fa8(void); s32 func00002078(void); -s32 func00002148(void); -s32 func00002148(void); s32 func000022e0(void); +void __scHandleRetrace(OSSched *sc); +void __scAppendList(OSSched *sc, OSScTask *t); +void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); struct bootbufferthing *func0000244c(void); void func000024e8(void); void func00002510(void); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 68d919df4..acfda623e 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -412,7 +412,8 @@ extern u32 var800951f0; extern u32 var80095200; extern u32 var80095208; extern u32 var8009520c; -extern u32 var80095210; +extern u8 var80095210[]; +extern u32 var80095214; extern u32 var80099024; extern u32 var800992e4; extern struct memorypool g_OnboardMemoryPools[9]; diff --git a/tools/patchpiracysums b/tools/patchpiracysums index 3e10e9e21..2aa69c75a 100755 --- a/tools/patchpiracysums +++ b/tools/patchpiracysums @@ -185,8 +185,8 @@ class Tool: self.fd = open(sys.argv[1], 'rb+') - self.patch(algo01, 'func00002148', 'func000016cc') - self.patch(algo02, 'cheatMenuHandleDialog', 'func00002148') + self.patch(algo01, '__scHandleRetrace', 'func000016cc') + self.patch(algo02, 'cheatMenuHandleDialog', '__scHandleRetrace') self.patch(algo03, 'propobjHandlePickupByAibot', 'func0f08e2ac') self.patch(algo04, 'chrUncloak', 'propobjHandlePickupByAibot') self.patch(algo05, 'func0f028590', 'func00002078')