From 355d0ef767c7ce9c897efaaf218cdbfa46b8d189 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 18 Sep 2021 14:48:41 +1000 Subject: [PATCH] Decompile pakRepair --- ld/pd.ld | 3 - src/game/pak/pak.c | 182 +++++++++---------------------------- src/include/game/pak/pak.h | 2 +- src/include/types.h | 2 +- 4 files changed, 45 insertions(+), 144 deletions(-) diff --git a/ld/pd.ld b/ld/pd.ld index d41558bad..556c39ac2 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -113,7 +113,6 @@ SECTIONS _val7f11aef4 = 0x0f38; _val7f11bb48 = 0x1131; _val7f11c1d0 = 0x128d; - _val7f11c378 = 0x12c8; #elif VERSION >= VERSION_NTSC_FINAL _val7f116f34 = 0x0339; _val7f117634 = 0x0422; @@ -129,7 +128,6 @@ SECTIONS _val7f11aef4 = 0x0f31; _val7f11bb48 = 0x112a; _val7f11c1d0 = 0x1286; - _val7f11c378 = 0x12c1; #else _val7f116f34 = 0x0336; _val7f117634 = 0x041f; @@ -145,7 +143,6 @@ SECTIONS _val7f11aef4 = 0x0e6e; _val7f11bb48 = 0x1067; _val7f11c1d0 = 0x11c3; - _val7f11c378 = 0x11fe; #endif #if VERSION >= VERSION_PAL_FINAL diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index 9939c9f4d..9312fcd03 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -11406,149 +11406,53 @@ glabel pak0f11bc54 ); #endif +bool pakRepair(s8 device) +{ + s32 result; + + switch (g_Paks[device].unk010) { + case 14: + case 19: + break; + default: #if VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel pakRepair -/* f11c2ac: 27bdffd8 */ addiu $sp,$sp,-40 -/* f11c2b0: afa40028 */ sw $a0,0x28($sp) -/* f11c2b4: 83ae002b */ lb $t6,0x2b($sp) -/* f11c2b8: 3c18800a */ lui $t8,%hi(g_Paks) -/* f11c2bc: 27182380 */ addiu $t8,$t8,%lo(g_Paks) -/* f11c2c0: 000e7880 */ sll $t7,$t6,0x2 -/* f11c2c4: 01ee7823 */ subu $t7,$t7,$t6 -/* f11c2c8: 000f7880 */ sll $t7,$t7,0x2 -/* f11c2cc: 01ee7823 */ subu $t7,$t7,$t6 -/* f11c2d0: 000f7880 */ sll $t7,$t7,0x2 -/* f11c2d4: 01ee7821 */ addu $t7,$t7,$t6 -/* f11c2d8: 000f7880 */ sll $t7,$t7,0x2 -/* f11c2dc: 01ee7823 */ subu $t7,$t7,$t6 -/* f11c2e0: 000f7880 */ sll $t7,$t7,0x2 -/* f11c2e4: 01f81021 */ addu $v0,$t7,$t8 -/* f11c2e8: 8c450010 */ lw $a1,0x10($v0) -/* f11c2ec: 2401000e */ addiu $at,$zero,0xe -/* f11c2f0: afbf0014 */ sw $ra,0x14($sp) -/* f11c2f4: 10a10024 */ beq $a1,$at,.L0f11c388 -/* f11c2f8: 24010013 */ addiu $at,$zero,0x13 -/* f11c2fc: 50a10023 */ beql $a1,$at,.L0f11c38c -/* f11c300: 00001025 */ or $v0,$zero,$zero -/* f11c304: 0c00543a */ jal joy000150e8 -/* f11c308: afa2001c */ sw $v0,0x1c($sp) -/* f11c30c: 83a2002b */ lb $v0,0x2b($sp) -/* f11c310: 24010004 */ addiu $at,$zero,0x4 -/* f11c314: 3c08800a */ lui $t0,%hi(g_Pfses) -/* f11c318: 14410003 */ bne $v0,$at,.L0f11c328 -/* f11c31c: 0002c880 */ sll $t9,$v0,0x2 -/* f11c320: 10000007 */ beqz $zero,.L0f11c340 -/* f11c324: 00002825 */ or $a1,$zero,$zero -.L0f11c328: -/* f11c328: 0322c823 */ subu $t9,$t9,$v0 -/* f11c32c: 0019c880 */ sll $t9,$t9,0x2 -/* f11c330: 0322c821 */ addu $t9,$t9,$v0 -/* f11c334: 0019c8c0 */ sll $t9,$t9,0x3 -/* f11c338: 25083180 */ addiu $t0,$t0,%lo(g_Pfses) -/* f11c33c: 03282821 */ addu $a1,$t9,$t0 -.L0f11c340: -/* f11c340: 0c0135bc */ jal osPfsChecker -/* f11c344: 00a02025 */ or $a0,$a1,$zero -/* f11c348: 0c005451 */ jal joy00015144 -/* f11c34c: afa20024 */ sw $v0,0x24($sp) -/* f11c350: 8fa40024 */ lw $a0,0x24($sp) -/* f11c354: 24090002 */ addiu $t1,$zero,0x2 -/* f11c358: 83a5002b */ lb $a1,0x2b($sp) -/* f11c35c: 14800005 */ bnez $a0,.L0f11c374 -/* f11c360: 00003025 */ or $a2,$zero,$zero -/* f11c364: 8faa001c */ lw $t2,0x1c($sp) -/* f11c368: 24020001 */ addiu $v0,$zero,0x1 -/* f11c36c: 10000007 */ beqz $zero,.L0f11c38c -/* f11c370: ad490010 */ sw $t1,0x10($t2) -.L0f11c374: -/* f11c374: 0fc470e7 */ jal pak0f11c39c -/* f11c378: 240712c1 */ addiu $a3,$zero,_val7f11c378 -/* f11c37c: 8fac001c */ lw $t4,0x1c($sp) -/* f11c380: 240b0016 */ addiu $t3,$zero,0x16 -/* f11c384: ad8b0010 */ sw $t3,0x10($t4) -.L0f11c388: -/* f11c388: 00001025 */ or $v0,$zero,$zero -.L0f11c38c: -/* f11c38c: 8fbf0014 */ lw $ra,0x14($sp) -/* f11c390: 27bd0028 */ addiu $sp,$sp,0x28 -/* f11c394: 03e00008 */ jr $ra -/* f11c398: 00000000 */ sll $zero,$zero,0x0 -); + joy000150e8(); + result = osPfsChecker(PFS(device)); + joy00015144(); #else -GLOBAL_ASM( -glabel pakRepair -/* f116230: 27bdffd8 */ addiu $sp,$sp,-40 -/* f116234: afa40028 */ sw $a0,0x28($sp) -/* f116238: 83ae002b */ lb $t6,0x2b($sp) -/* f11623c: 3c18800a */ lui $t8,0x800a -/* f116240: 27186870 */ addiu $t8,$t8,0x6870 -/* f116244: 000e7880 */ sll $t7,$t6,0x2 -/* f116248: 01ee7823 */ subu $t7,$t7,$t6 -/* f11624c: 000f7880 */ sll $t7,$t7,0x2 -/* f116250: 01ee7823 */ subu $t7,$t7,$t6 -/* f116254: 000f78c0 */ sll $t7,$t7,0x3 -/* f116258: 01ee7821 */ addu $t7,$t7,$t6 -/* f11625c: 000f78c0 */ sll $t7,$t7,0x3 -/* f116260: 01f8c821 */ addu $t9,$t7,$t8 -/* f116264: afbf0014 */ sw $ra,0x14($sp) -/* f116268: afb9001c */ sw $t9,0x1c($sp) -/* f11626c: 8f250010 */ lw $a1,0x10($t9) -/* f116270: 2401000e */ addiu $at,$zero,0xe -/* f116274: 10a10025 */ beq $a1,$at,.NB0f11630c -/* f116278: 24010013 */ addiu $at,$zero,0x13 -/* f11627c: 10a10023 */ beq $a1,$at,.NB0f11630c -/* f116280: 24041149 */ addiu $a0,$zero,0x1149 -/* f116284: 3c057f1b */ lui $a1,0x7f1b -/* f116288: 0c00581b */ jal joy000150e8 -/* f11628c: 24a5e624 */ addiu $a1,$a1,-6620 -/* f116290: 83a2002b */ lb $v0,0x2b($sp) -/* f116294: 24010004 */ addiu $at,$zero,0x4 -/* f116298: 3c09800a */ lui $t1,0x800a -/* f11629c: 14410003 */ bne $v0,$at,.NB0f1162ac -/* f1162a0: 00024080 */ sll $t0,$v0,0x2 -/* f1162a4: 10000007 */ beqz $zero,.NB0f1162c4 -/* f1162a8: 00002825 */ or $a1,$zero,$zero -.NB0f1162ac: -/* f1162ac: 01024023 */ subu $t0,$t0,$v0 -/* f1162b0: 00084080 */ sll $t0,$t0,0x2 -/* f1162b4: 01024021 */ addu $t0,$t0,$v0 -/* f1162b8: 000840c0 */ sll $t0,$t0,0x3 -/* f1162bc: 25297658 */ addiu $t1,$t1,0x7658 -/* f1162c0: 01092821 */ addu $a1,$t0,$t1 -.NB0f1162c4: -/* f1162c4: 0c013a9c */ jal osPfsChecker -/* f1162c8: 00a02025 */ or $a0,$a1,$zero -/* f1162cc: 3c057f1b */ lui $a1,0x7f1b -/* f1162d0: afa20024 */ sw $v0,0x24($sp) -/* f1162d4: 24a5e62c */ addiu $a1,$a1,-6612 -/* f1162d8: 0c005834 */ jal joy00015144 -/* f1162dc: 2404114b */ addiu $a0,$zero,0x114b -/* f1162e0: 8fa40024 */ lw $a0,0x24($sp) -/* f1162e4: 240a0002 */ addiu $t2,$zero,0x2 -/* f1162e8: 83a5002b */ lb $a1,0x2b($sp) -/* f1162ec: 14800005 */ bnez $a0,.NB0f116304 -/* f1162f0: 00003025 */ or $a2,$zero,$zero -/* f1162f4: 8fab001c */ lw $t3,0x1c($sp) -/* f1162f8: 24020001 */ addiu $v0,$zero,0x1 -/* f1162fc: 10000007 */ beqz $zero,.NB0f11631c -/* f116300: ad6a0010 */ sw $t2,0x10($t3) -.NB0f116304: -/* f116304: 0fc458cb */ jal pak0f11c39c -/* f116308: 24071154 */ addiu $a3,$zero,0x1154 -.NB0f11630c: -/* f11630c: 8fad001c */ lw $t5,0x1c($sp) -/* f116310: 240c0016 */ addiu $t4,$zero,0x16 -/* f116314: 00001025 */ or $v0,$zero,$zero -/* f116318: adac0010 */ sw $t4,0x10($t5) -.NB0f11631c: -/* f11631c: 8fbf0014 */ lw $ra,0x14($sp) -/* f116320: 27bd0028 */ addiu $sp,$sp,0x28 -/* f116324: 03e00008 */ jr $ra -/* f116328: 00000000 */ sll $zero,$zero,0x0 -); + joy000150e8(4425, "pak.c"); + result = osPfsChecker(PFS(device)); + joy00015144(4427, "pak.c"); #endif + if (result == PAKERROR_OK) { + g_Paks[device].unk010 = 2; + return true; + } + +#if VERSION >= VERSION_PAL_FINAL + pak0f11c39c(result, device, 0, 4808); +#elif VERSION >= VERSION_NTSC_FINAL + pak0f11c39c(result, device, 0, 4801); +#elif VERSION >= VERSION_NTSC_1_0 + pak0f11c39c(result, device, 0, 4606); +#else + pak0f11c39c(result, device, 0, 4436); +#endif + +#if VERSION >= VERSION_NTSC_1_0 + g_Paks[device].unk010 = 22; +#endif + break; + } + +#if VERSION < VERSION_NTSC_1_0 + g_Paks[device].unk010 = 22; +#endif + + return false; +} + #if VERSION >= VERSION_NTSC_1_0 GLOBAL_ASM( glabel pak0f11c39c diff --git a/src/include/game/pak/pak.h b/src/include/game/pak/pak.h index 9329f9b4f..6a96aa7df 100644 --- a/src/include/game/pak/pak.h +++ b/src/include/game/pak/pak.h @@ -99,7 +99,7 @@ u32 pak0f11b75c(void); u32 pak0f11b86c(void); u32 pak0f11bbd8(void); s32 pak0f11bc54(s8 device, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8); -bool pakRepair(s32 arg0); +bool pakRepair(s8 device); u32 pak0f11c39c(u32 arg0, s8 device, u32 ar2, u32 arg3); void pak0f11c54c(void); void pak0f11c6d0(void); diff --git a/src/include/types.h b/src/include/types.h index 275d8c0a8..4e58d5328 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5025,7 +5025,7 @@ struct pak { /*0x004*/ u32 unk004; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; - /*0x010*/ u32 unk010; // 1 if disconnected, 2 if connected? + /*0x010*/ u32 unk010; /*0x014*/ u8 unk014; /*0x018*/ struct pakdata pakdata; /*0x25c*/ u32 unk25c;