Decompile pakReadHeaderAtOffset

This commit is contained in:
Ryan Dwyer 2021-09-18 21:50:02 +10:00
parent cd3e03ca42
commit a89cff0718
4 changed files with 81 additions and 351 deletions

View File

@ -100,7 +100,6 @@ SECTIONS
#if VERSION >= VERSION_PAL_FINAL
_val7f116f34 = 0x0339;
_val7f117634 = 0x0422;
_val7f1183f8 = 0x070a;
_val7f118a44 = 0x0801;
_val7f11a650 = 0x0da5;
@ -115,7 +114,6 @@ SECTIONS
_val7f11c1d0 = 0x128d;
#elif VERSION >= VERSION_NTSC_FINAL
_val7f116f34 = 0x0339;
_val7f117634 = 0x0422;
_val7f1183f8 = 0x070a;
_val7f118a44 = 0x0801;
_val7f11a650 = 0x0d9e;
@ -130,7 +128,6 @@ SECTIONS
_val7f11c1d0 = 0x1286;
#else
_val7f116f34 = 0x0336;
_val7f117634 = 0x041f;
_val7f1183f8 = 0x06fc;
_val7f118a44 = 0x07e0;
_val7f11a650 = 0x0cda;

View File

@ -7,6 +7,7 @@
#include "game/pak/pak.h"
#include "game/utils.h"
#include "bss.h"
#include "lib/args.h"
#include "lib/joy.h"
#include "lib/lib_06100.h"
#include "lib/lib_06330.h"
@ -499,14 +500,6 @@ const char var7f1ad8a4nb[] = "Multi Gm";
const char var7f1ad8b0n0[] = "????????";
#endif
const char var7f1b3b80[] = "-forceversion";
#if VERSION >= VERSION_NTSC_1_0
const char var7f1b3b90[] = "Pak %d -> Header Cache 2 - FATAL ERROR\n";
#else
const char var7f1b3b90[] = "Pak %d -> Header Cache 2 - FATAL ERROR";
#endif
#if VERSION >= VERSION_NTSC_1_0
s32 pakDeleteFile2(s8 device, s32 fileid)
{
@ -884,341 +877,78 @@ glabel pak0f117430
);
#endif
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel pakReadHeaderAtOffset
/* f117520: 27bdff88 */ addiu $sp,$sp,-120
/* f117524: afbf0024 */ sw $ra,0x24($sp)
/* f117528: afa40078 */ sw $a0,0x78($sp)
/* f11752c: 10c00003 */ beqz $a2,.L0f11753c
/* f117530: afa5007c */ sw $a1,0x7c($sp)
/* f117534: 10000003 */ beqz $zero,.L0f117544
/* f117538: afa60064 */ sw $a2,0x64($sp)
.L0f11753c:
/* f11753c: 27ae0068 */ addiu $t6,$sp,0x68
/* f117540: afae0064 */ sw $t6,0x64($sp)
.L0f117544:
/* f117544: 0fc45974 */ jal pakGetAlignment
/* f117548: 83a4007b */ lb $a0,0x7b($sp)
/* f11754c: 8faf007c */ lw $t7,0x7c($sp)
/* f117550: 83a4007b */ lb $a0,0x7b($sp)
/* f117554: 3c19800a */ lui $t9,%hi(g_Paks)
/* f117558: 01e2001b */ divu $zero,$t7,$v0
/* f11755c: 0004c080 */ sll $t8,$a0,0x2
/* f117560: 0304c023 */ subu $t8,$t8,$a0
/* f117564: 0018c080 */ sll $t8,$t8,0x2
/* f117568: 0304c023 */ subu $t8,$t8,$a0
/* f11756c: 0018c080 */ sll $t8,$t8,0x2
/* f117570: 0304c021 */ addu $t8,$t8,$a0
/* f117574: 0018c080 */ sll $t8,$t8,0x2
/* f117578: 0304c023 */ subu $t8,$t8,$a0
/* f11757c: 0018c080 */ sll $t8,$t8,0x2
/* f117580: 27392380 */ addiu $t9,$t9,%lo(g_Paks)
/* f117584: 03194021 */ addu $t0,$t8,$t9
/* f117588: 8d0902a4 */ lw $t1,0x2a4($t0)
/* f11758c: 00001812 */ mflo $v1
/* f117590: 00602825 */ or $a1,$v1,$zero
/* f117594: 14400002 */ bnez $v0,.L0f1175a0
/* f117598: 00000000 */ sll $zero,$zero,0x0
/* f11759c: 0007000d */ break 0x7
.L0f1175a0:
/* f1175a0: 0069082b */ sltu $at,$v1,$t1
/* f1175a4: 14200003 */ bnez $at,.L0f1175b4
/* f1175a8: 8fa60064 */ lw $a2,0x64($sp)
/* f1175ac: 1000006b */ beqz $zero,.L0f11775c
/* f1175b0: 24020004 */ addiu $v0,$zero,0x4
.L0f1175b4:
/* f1175b4: afa50060 */ sw $a1,0x60($sp)
/* f1175b8: 0fc46d22 */ jal pak0f11b488
/* f1175bc: afa80030 */ sw $t0,0x30($sp)
/* f1175c0: 1440005e */ bnez $v0,.L0f11773c
/* f1175c4: 8fa80030 */ lw $t0,0x30($sp)
/* f1175c8: 83a4007b */ lb $a0,0x7b($sp)
/* f1175cc: 24010004 */ addiu $at,$zero,0x4
/* f1175d0: 00003825 */ or $a3,$zero,$zero
/* f1175d4: 14810003 */ bne $a0,$at,.L0f1175e4
/* f1175d8: 8fac007c */ lw $t4,0x7c($sp)
/* f1175dc: 10000009 */ beqz $zero,.L0f117604
/* f1175e0: 00002825 */ or $a1,$zero,$zero
.L0f1175e4:
/* f1175e4: 00045080 */ sll $t2,$a0,0x2
/* f1175e8: 01445023 */ subu $t2,$t2,$a0
/* f1175ec: 000a5080 */ sll $t2,$t2,0x2
/* f1175f0: 01445021 */ addu $t2,$t2,$a0
/* f1175f4: 3c0b800a */ lui $t3,%hi(g_Pfses)
/* f1175f8: 256b3180 */ addiu $t3,$t3,%lo(g_Pfses)
/* f1175fc: 000a50c0 */ sll $t2,$t2,0x3
/* f117600: 014b2821 */ addu $a1,$t2,$t3
.L0f117604:
/* f117604: 240d0020 */ addiu $t5,$zero,0x20
/* f117608: 27ae0038 */ addiu $t6,$sp,0x38
/* f11760c: afae0018 */ sw $t6,0x18($sp)
/* f117610: afad0014 */ sw $t5,0x14($sp)
/* f117614: 8d06029c */ lw $a2,0x29c($t0)
/* f117618: 0fc46941 */ jal pak0f11a504
/* f11761c: afac0010 */ sw $t4,0x10($sp)
/* f117620: afa2005c */ sw $v0,0x5c($sp)
/* f117624: 00402025 */ or $a0,$v0,$zero
/* f117628: 83a5007b */ lb $a1,0x7b($sp)
/* f11762c: 24060001 */ addiu $a2,$zero,0x1
/* f117630: 0fc470e7 */ jal pak0f11c39c
/* f117634: 24070422 */ addiu $a3,$zero,_val7f117634
/* f117638: 14400009 */ bnez $v0,.L0f117660
/* f11763c: 8fa40064 */ lw $a0,0x64($sp)
/* f117640: 8faf005c */ lw $t7,0x5c($sp)
/* f117644: 24010001 */ addiu $at,$zero,0x1
/* f117648: 15e10003 */ bne $t7,$at,.L0f117658
/* f11764c: 00000000 */ sll $zero,$zero,0x0
/* f117650: 10000042 */ beqz $zero,.L0f11775c
/* f117654: 24020001 */ addiu $v0,$zero,0x1
.L0f117658:
/* f117658: 10000040 */ beqz $zero,.L0f11775c
/* f11765c: 24020004 */ addiu $v0,$zero,0x4
.L0f117660:
/* f117660: 27a50038 */ addiu $a1,$sp,0x38
/* f117664: 0c012978 */ jal memcpy
/* f117668: 24060010 */ addiu $a2,$zero,0x10
/* f11766c: 27a40040 */ addiu $a0,$sp,0x40
/* f117670: 27a50048 */ addiu $a1,$sp,0x48
/* f117674: 0fc462b9 */ jal pakCalculateChecksum
/* f117678: 27a60058 */ addiu $a2,$sp,0x58
/* f11767c: 8fa20064 */ lw $v0,0x64($sp)
/* f117680: 97b90058 */ lhu $t9,0x58($sp)
/* f117684: 97aa005a */ lhu $t2,0x5a($sp)
/* f117688: 94580000 */ lhu $t8,0x0($v0)
/* f11768c: 17190004 */ bne $t8,$t9,.L0f1176a0
/* f117690: 00000000 */ sll $zero,$zero,0x0
/* f117694: 94490002 */ lhu $t1,0x2($v0)
/* f117698: 512a0004 */ beql $t1,$t2,.L0f1176ac
/* f11769c: 8c4b000c */ lw $t3,0xc($v0)
.L0f1176a0:
/* f1176a0: 1000002e */ beqz $zero,.L0f11775c
/* f1176a4: 24020007 */ addiu $v0,$zero,0x7
/* f1176a8: 8c4b000c */ lw $t3,0xc($v0)
.L0f1176ac:
/* f1176ac: 24040001 */ addiu $a0,$zero,0x1
/* f1176b0: 3c057f1b */ lui $a1,%hi(var7f1b3b80)
/* f1176b4: 000b6f80 */ sll $t5,$t3,0x1e
/* f1176b8: 05a00003 */ bltz $t5,.L0f1176c8
/* f1176bc: 00000000 */ sll $zero,$zero,0x0
/* f1176c0: 10000026 */ beqz $zero,.L0f11775c
/* f1176c4: 2402000f */ addiu $v0,$zero,0xf
.L0f1176c8:
/* f1176c8: 0c004c04 */ jal argFindByPrefix
/* f1176cc: 24a53b80 */ addiu $a1,$a1,%lo(var7f1b3b80)
/* f1176d0: 10400003 */ beqz $v0,.L0f1176e0
/* f1176d4: 8fae0064 */ lw $t6,0x64($sp)
/* f1176d8: 10000002 */ beqz $zero,.L0f1176e4
/* f1176dc: 24050001 */ addiu $a1,$zero,0x1
.L0f1176e0:
/* f1176e0: 00002825 */ or $a1,$zero,$zero
.L0f1176e4:
/* f1176e4: 8dcf000c */ lw $t7,0xc($t6)
/* f1176e8: 3c198007 */ lui $t9,%hi(g_PakDebugPakCache)
/* f1176ec: 31f80001 */ andi $t8,$t7,0x1
/* f1176f0: 10b80003 */ beq $a1,$t8,.L0f117700
/* f1176f4: 00000000 */ sll $zero,$zero,0x0
/* f1176f8: 10000018 */ beqz $zero,.L0f11775c
/* f1176fc: 24020009 */ addiu $v0,$zero,0x9
.L0f117700:
/* f117700: 8f395ce8 */ lw $t9,%lo(g_PakDebugPakCache)($t9)
/* f117704: 83a4007b */ lb $a0,0x7b($sp)
/* f117708: 8fa50060 */ lw $a1,0x60($sp)
/* f11770c: 5320000c */ beqzl $t9,.L0f117740
/* f117710: 8fa90064 */ lw $t1,0x64($sp)
/* f117714: 0fc46c5e */ jal pak0f11b178
/* f117718: 27a60038 */ addiu $a2,$sp,0x38
/* f11771c: 83a4007b */ lb $a0,0x7b($sp)
/* f117720: 8fa50060 */ lw $a1,0x60($sp)
/* f117724: 0fc46d22 */ jal pak0f11b488
/* f117728: 8fa60064 */ lw $a2,0x64($sp)
/* f11772c: 54400004 */ bnezl $v0,.L0f117740
/* f117730: 8fa90064 */ lw $t1,0x64($sp)
/* f117734: 10000009 */ beqz $zero,.L0f11775c
/* f117738: 2402000b */ addiu $v0,$zero,0xb
.L0f11773c:
/* f11773c: 8fa90064 */ lw $t1,0x64($sp)
.L0f117740:
/* f117740: 00001025 */ or $v0,$zero,$zero
/* f117744: 8d2a0008 */ lw $t2,0x8($t1)
/* f117748: 314b0fff */ andi $t3,$t2,0xfff
/* f11774c: 15600003 */ bnez $t3,.L0f11775c
/* f117750: 00000000 */ sll $zero,$zero,0x0
/* f117754: 10000001 */ beqz $zero,.L0f11775c
/* f117758: 2402000b */ addiu $v0,$zero,0xb
.L0f11775c:
/* f11775c: 8fbf0024 */ lw $ra,0x24($sp)
/* f117760: 27bd0078 */ addiu $sp,$sp,0x78
/* f117764: 03e00008 */ jr $ra
/* f117768: 00000000 */ sll $zero,$zero,0x0
);
u32 pakReadHeaderAtOffset(s8 device, u32 offset, struct pakfileheader *header)
{
struct pakfileheader localheader;
struct pakfileheader *headerptr;
u32 alignmult;
s32 result;
u16 checksum[2];
u8 sp38[0x20];
headerptr = header ? header : &localheader;
alignmult = offset / pakGetAlignment(device);
if (alignmult >= g_Paks[device].unk2a4) {
return 4;
}
if (pak0f11b488(device, alignmult, headerptr) == 0) {
result = pak0f11a504(device, PFS(device), g_Paks[device].noteindex, 0, offset, sizeof(sp38), sp38);
#if VERSION >= VERSION_PAL_FINAL
if (pak0f11c39c(result, device, 1, 1058) == 0)
#elif VERSION >= VERSION_NTSC_FINAL
if (pak0f11c39c(result, device, 1, 1058) == 0)
#elif VERSION >= VERSION_NTSC_1_0
if (pak0f11c39c(result, device, 1, 1055) == 0)
#else
GLOBAL_ASM(
glabel pakReadHeaderAtOffset
/* f11187c: 27bdff88 */ addiu $sp,$sp,-120
/* f111880: afbf0024 */ sw $ra,0x24($sp)
/* f111884: afa40078 */ sw $a0,0x78($sp)
/* f111888: 10c00003 */ beqz $a2,.NB0f111898
/* f11188c: afa5007c */ sw $a1,0x7c($sp)
/* f111890: 10000003 */ beqz $zero,.NB0f1118a0
/* f111894: afa60064 */ sw $a2,0x64($sp)
.NB0f111898:
/* f111898: 27ae0068 */ addiu $t6,$sp,0x68
/* f11189c: afae0064 */ sw $t6,0x64($sp)
.NB0f1118a0:
/* f1118a0: 0fc4428c */ jal pakGetAlignment
/* f1118a4: 83a4007b */ lb $a0,0x7b($sp)
/* f1118a8: 8faf007c */ lw $t7,0x7c($sp)
/* f1118ac: 83a4007b */ lb $a0,0x7b($sp)
/* f1118b0: 3c19800a */ lui $t9,0x800a
/* f1118b4: 01e2001b */ divu $zero,$t7,$v0
/* f1118b8: 0004c080 */ sll $t8,$a0,0x2
/* f1118bc: 0304c023 */ subu $t8,$t8,$a0
/* f1118c0: 0018c080 */ sll $t8,$t8,0x2
/* f1118c4: 0304c023 */ subu $t8,$t8,$a0
/* f1118c8: 0018c0c0 */ sll $t8,$t8,0x3
/* f1118cc: 0304c021 */ addu $t8,$t8,$a0
/* f1118d0: 0018c0c0 */ sll $t8,$t8,0x3
/* f1118d4: 27396870 */ addiu $t9,$t9,0x6870
/* f1118d8: 03194021 */ addu $t0,$t8,$t9
/* f1118dc: 8d0902a4 */ lw $t1,0x2a4($t0)
/* f1118e0: 00001812 */ mflo $v1
/* f1118e4: 00602825 */ or $a1,$v1,$zero
/* f1118e8: 14400002 */ bnez $v0,.NB0f1118f4
/* f1118ec: 00000000 */ sll $zero,$zero,0x0
/* f1118f0: 0007000d */ break 0x7
.NB0f1118f4:
/* f1118f4: 0069082b */ sltu $at,$v1,$t1
/* f1118f8: 14200003 */ bnez $at,.NB0f111908
/* f1118fc: 8fa60064 */ lw $a2,0x64($sp)
/* f111900: 1000006b */ beqz $zero,.NB0f111ab0
/* f111904: 24020004 */ addiu $v0,$zero,0x4
.NB0f111908:
/* f111908: afa50060 */ sw $a1,0x60($sp)
/* f11190c: 0fc45516 */ jal pak0f11b488
/* f111910: afa80030 */ sw $t0,0x30($sp)
/* f111914: 1440005e */ bnez $v0,.NB0f111a90
/* f111918: 8fa80030 */ lw $t0,0x30($sp)
/* f11191c: 83a4007b */ lb $a0,0x7b($sp)
/* f111920: 24010004 */ addiu $at,$zero,0x4
/* f111924: 00003825 */ or $a3,$zero,$zero
/* f111928: 14810003 */ bne $a0,$at,.NB0f111938
/* f11192c: 8fac007c */ lw $t4,0x7c($sp)
/* f111930: 10000009 */ beqz $zero,.NB0f111958
/* f111934: 00002825 */ or $a1,$zero,$zero
.NB0f111938:
/* f111938: 00045080 */ sll $t2,$a0,0x2
/* f11193c: 01445023 */ subu $t2,$t2,$a0
/* f111940: 000a5080 */ sll $t2,$t2,0x2
/* f111944: 01445021 */ addu $t2,$t2,$a0
/* f111948: 3c0b800a */ lui $t3,0x800a
/* f11194c: 256b7658 */ addiu $t3,$t3,0x7658
/* f111950: 000a50c0 */ sll $t2,$t2,0x3
/* f111954: 014b2821 */ addu $a1,$t2,$t3
.NB0f111958:
/* f111958: 240d0020 */ addiu $t5,$zero,0x20
/* f11195c: 27ae0038 */ addiu $t6,$sp,0x38
/* f111960: afae0018 */ sw $t6,0x18($sp)
/* f111964: afad0014 */ sw $t5,0x14($sp)
/* f111968: 8d06029c */ lw $a2,0x29c($t0)
/* f11196c: 0fc450ea */ jal pak0f11a504
/* f111970: afac0010 */ sw $t4,0x10($sp)
/* f111974: afa2005c */ sw $v0,0x5c($sp)
/* f111978: 00402025 */ or $a0,$v0,$zero
/* f11197c: 83a5007b */ lb $a1,0x7b($sp)
/* f111980: 24060001 */ addiu $a2,$zero,0x1
/* f111984: 0fc458cb */ jal pak0f11c39c
/* f111988: 240703e2 */ addiu $a3,$zero,0x3e2
/* f11198c: 14400009 */ bnez $v0,.NB0f1119b4
/* f111990: 8fa40064 */ lw $a0,0x64($sp)
/* f111994: 8faf005c */ lw $t7,0x5c($sp)
/* f111998: 24010001 */ addiu $at,$zero,0x1
/* f11199c: 15e10003 */ bne $t7,$at,.NB0f1119ac
/* f1119a0: 00000000 */ sll $zero,$zero,0x0
/* f1119a4: 10000042 */ beqz $zero,.NB0f111ab0
/* f1119a8: 24020001 */ addiu $v0,$zero,0x1
.NB0f1119ac:
/* f1119ac: 10000040 */ beqz $zero,.NB0f111ab0
/* f1119b0: 24020004 */ addiu $v0,$zero,0x4
.NB0f1119b4:
/* f1119b4: 27a50038 */ addiu $a1,$sp,0x38
/* f1119b8: 0c012e88 */ jal memcpy
/* f1119bc: 24060010 */ addiu $a2,$zero,0x10
/* f1119c0: 27a40040 */ addiu $a0,$sp,0x40
/* f1119c4: 27a50048 */ addiu $a1,$sp,0x48
/* f1119c8: 0fc44b9b */ jal pakCalculateChecksum
/* f1119cc: 27a60058 */ addiu $a2,$sp,0x58
/* f1119d0: 8fa20064 */ lw $v0,0x64($sp)
/* f1119d4: 97b90058 */ lhu $t9,0x58($sp)
/* f1119d8: 97aa005a */ lhu $t2,0x5a($sp)
/* f1119dc: 94580000 */ lhu $t8,0x0($v0)
/* f1119e0: 17190004 */ bne $t8,$t9,.NB0f1119f4
/* f1119e4: 00000000 */ sll $zero,$zero,0x0
/* f1119e8: 94490002 */ lhu $t1,0x2($v0)
/* f1119ec: 512a0004 */ beql $t1,$t2,.NB0f111a00
/* f1119f0: 8c4b000c */ lw $t3,0xc($v0)
.NB0f1119f4:
/* f1119f4: 1000002e */ beqz $zero,.NB0f111ab0
/* f1119f8: 24020007 */ addiu $v0,$zero,0x7
/* f1119fc: 8c4b000c */ lw $t3,0xc($v0)
.NB0f111a00:
/* f111a00: 24040001 */ addiu $a0,$zero,0x1
/* f111a04: 3c057f1b */ lui $a1,0x7f1b
/* f111a08: 000b6f80 */ sll $t5,$t3,0x1e
/* f111a0c: 05a00003 */ bltz $t5,.NB0f111a1c
/* f111a10: 00000000 */ sll $zero,$zero,0x0
/* f111a14: 10000026 */ beqz $zero,.NB0f111ab0
/* f111a18: 2402000f */ addiu $v0,$zero,0xf
.NB0f111a1c:
/* f111a1c: 0c004e18 */ jal argFindByPrefix
/* f111a20: 24a5d8bc */ addiu $a1,$a1,-10052
/* f111a24: 10400003 */ beqz $v0,.NB0f111a34
/* f111a28: 8fae0064 */ lw $t6,0x64($sp)
/* f111a2c: 10000002 */ beqz $zero,.NB0f111a38
/* f111a30: 24050001 */ addiu $a1,$zero,0x1
.NB0f111a34:
/* f111a34: 00002825 */ or $a1,$zero,$zero
.NB0f111a38:
/* f111a38: 8dcf000c */ lw $t7,0xc($t6)
/* f111a3c: 3c198008 */ lui $t9,0x8008
/* f111a40: 31f80001 */ andi $t8,$t7,0x1
/* f111a44: 10b80003 */ beq $a1,$t8,.NB0f111a54
/* f111a48: 00000000 */ sll $zero,$zero,0x0
/* f111a4c: 10000018 */ beqz $zero,.NB0f111ab0
/* f111a50: 24020009 */ addiu $v0,$zero,0x9
.NB0f111a54:
/* f111a54: 8f3980b0 */ lw $t9,-0x7f50($t9)
/* f111a58: 83a4007b */ lb $a0,0x7b($sp)
/* f111a5c: 8fa50060 */ lw $a1,0x60($sp)
/* f111a60: 5320000c */ beqzl $t9,.NB0f111a94
/* f111a64: 8fa90064 */ lw $t1,0x64($sp)
/* f111a68: 0fc45454 */ jal pak0f11b178
/* f111a6c: 27a60038 */ addiu $a2,$sp,0x38
/* f111a70: 83a4007b */ lb $a0,0x7b($sp)
/* f111a74: 8fa50060 */ lw $a1,0x60($sp)
/* f111a78: 0fc45516 */ jal pak0f11b488
/* f111a7c: 8fa60064 */ lw $a2,0x64($sp)
/* f111a80: 54400004 */ bnezl $v0,.NB0f111a94
/* f111a84: 8fa90064 */ lw $t1,0x64($sp)
/* f111a88: 10000009 */ beqz $zero,.NB0f111ab0
/* f111a8c: 2402000b */ addiu $v0,$zero,0xb
.NB0f111a90:
/* f111a90: 8fa90064 */ lw $t1,0x64($sp)
.NB0f111a94:
/* f111a94: 00001025 */ or $v0,$zero,$zero
/* f111a98: 8d2a0008 */ lw $t2,0x8($t1)
/* f111a9c: 314b0fff */ andi $t3,$t2,0xfff
/* f111aa0: 15600003 */ bnez $t3,.NB0f111ab0
/* f111aa4: 00000000 */ sll $zero,$zero,0x0
/* f111aa8: 10000001 */ beqz $zero,.NB0f111ab0
/* f111aac: 2402000b */ addiu $v0,$zero,0xb
.NB0f111ab0:
/* f111ab0: 8fbf0024 */ lw $ra,0x24($sp)
/* f111ab4: 27bd0078 */ addiu $sp,$sp,0x78
/* f111ab8: 03e00008 */ jr $ra
/* f111abc: 00000000 */ sll $zero,$zero,0x0
);
if (pak0f11c39c(result, device, 1, 994) == 0)
#endif
{
if (result == 1) {
return 1;
}
return 4;
}
memcpy(headerptr, sp38, sizeof(struct pakfileheader));
pakCalculateChecksum(&sp38[0x08], &sp38[0x10], checksum);
if (headerptr->headersum1 != checksum[0] || headerptr->headersum2 != checksum[1]) {
return 7;
}
if (!headerptr->unk0c_30) {
return 15;
}
if ((argFindByPrefix(1, "-forceversion") ? 1 : 0) != headerptr->version) {
return 9;
}
if (g_PakDebugPakCache) {
pak0f11b178(device, alignmult, sp38);
if (!pak0f11b488(device, alignmult, headerptr)) {
#if VERSION >= VERSION_NTSC_1_0
osSyncPrintf("Pak %d -> Header Cache 2 - FATAL ERROR\n");
#else
osSyncPrintf("Pak %d -> Header Cache 2 - FATAL ERROR");
#endif
return 11;
}
}
}
if (headerptr->filelen == 0) {
return 11;
}
return 0;
}
void pakDumpBuffer(u8 *buffer, u32 len, char *name)
{
@ -3421,7 +3151,7 @@ s32 pak0f118bc8(s8 device, s32 fileid, u8 *body, s32 arg3)
if (!arg3) {
pakCalculateChecksum(body, body + header.bodylen, checksum);
if (header.sum1 != checksum[0] || header.sum2 != checksum[1]) {
if (header.bodysum1 != checksum[0] || header.bodysum2 != checksum[1]) {
return 8;
}
}

View File

@ -38,7 +38,7 @@ void pak0f117150(s8 device, u8 *ptr);
void pak0f1171b4(s8 device, s32 arg1, s32 arg2);
s32 pakGetUnk008(s8 device);
u32 pak0f117430(void);
u32 pakReadHeaderAtOffset(s8 device, u32 arg1, struct pakfileheader *header);
u32 pakReadHeaderAtOffset(s8 device, u32 offset, struct pakfileheader *header);
void pakDumpBuffer(u8 *buffer, u32 len, char *name);
void pakDumpEeprom(void);
s32 pak0f11789c(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, s32 arg5);
@ -92,8 +92,8 @@ u32 pak0f11a7dc(void);
u32 pak0f11a8f4(void);
u32 pak0f11ac7c(void);
void pakWipe(s8 device, u32 start, u32 end);
u32 pak0f11b178(void);
u32 pak0f11b488(void);
void pak0f11b178(s8 device, u32 arg1, u8 *arg2);
u32 pak0f11b488(s8 device, u32 arg1, struct pakfileheader *header);
s32 pakScrub(s8 device);
bool pak0f11b75c(s8 device, u32 *arg1);
s32 pak0f11b86c(s32 device, u32 uVar2, u8 *data, struct pakfileheader *header, s32 arg3);

View File

@ -6675,9 +6675,10 @@ struct pakthing {
};
struct pakfileheader {
u32 unk00;
u16 sum1;
u16 sum2;
u16 headersum1; // checksum from filetype to end of header
u16 headersum2;
u16 bodysum1;
u16 bodysum2;
u32 filetype : 9; // PAKFILETYPE constant
u32 bodylen : 11; // not aligned
u32 filelen : 12; // aligned to 0x10
@ -6685,6 +6686,8 @@ struct pakfileheader {
u32 fileid : 7;
u32 unk0c_21 : 9;
u32 occupied : 1;
u32 unk0c_30 : 1; // always 1?
u32 version : 1; // always 0?
};
struct var80067e6c {