From 584d5c6a532b3c8ff8afcf8939b8e8e288470f4d Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 25 Mar 2021 16:54:57 +1000 Subject: [PATCH] Decompile osPfsFindFile --- ld/libfiles.ntsc-beta.inc | 2 +- ld/libfiles.ntsc-final.inc | 2 +- ld/libfiles.pal-final.inc | 2 +- src/game/pak/pak.c | 1 - src/include/PR/os_pfs.h | 1 + src/include/lib/lib_4cc10.h | 9 -- src/lib/lib_06550.c | 1 - src/lib/lib_4cc10.c | 138 -------------------- src/lib/lib_4d480.c | 1 - src/lib/ultra/io/pfsallocatefile.c | 1 - src/lib/ultra/io/pfsfindfile.c | 196 +++++++++++++++++++++++++++++ 11 files changed, 200 insertions(+), 154 deletions(-) delete mode 100644 src/include/lib/lib_4cc10.h delete mode 100644 src/lib/lib_4cc10.c create mode 100644 src/lib/ultra/io/pfsfindfile.c diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index bacda9c47..cf787e83b 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -163,7 +163,7 @@ build/ROMID/lib/ultra/io/conteepwrite.o (section); \ build/ROMID/lib/ultra/io/controller.o (section); \ build/ROMID/lib/ultra/io/contpfs.o (section); \ - build/ROMID/lib/lib_4cc10.o (section); \ + build/ROMID/lib/ultra/io/pfsfindfile.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/ultra/io/pfsfreeblocks.o (section); \ build/ROMID/lib/ultra/io/pfsallocatefile.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index 28e0a6f76..2cc27b285 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -162,7 +162,7 @@ build/ROMID/lib/ultra/io/pfsgetstatus.o (section); \ build/ROMID/lib/ultra/io/conteepwrite.o (section); \ build/ROMID/lib/ultra/io/contpfs.o (section); \ - build/ROMID/lib/lib_4cc10.o (section); \ + build/ROMID/lib/ultra/io/pfsfindfile.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/ultra/io/pfsfreeblocks.o (section); \ build/ROMID/lib/ultra/io/pfsallocatefile.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index ccb97ad0f..35551f512 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -161,7 +161,7 @@ build/ROMID/lib/ultra/io/pfsgetstatus.o (section); \ build/ROMID/lib/ultra/io/conteepwrite.o (section); \ build/ROMID/lib/ultra/io/contpfs.o (section); \ - build/ROMID/lib/lib_4cc10.o (section); \ + build/ROMID/lib/ultra/io/pfsfindfile.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/ultra/io/pfsfreeblocks.o (section); \ build/ROMID/lib/ultra/io/pfsallocatefile.o (section); \ diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index 8e136a111..10a852fb2 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -15,7 +15,6 @@ #include "lib/main.h" #include "lib/memory.h" #include "lib/rng.h" -#include "lib/lib_4cc10.h" #include "lib/lib_4d480.h" #include "lib/lib_4e090.h" #include "lib/lib_4f5e0.h" diff --git a/src/include/PR/os_pfs.h b/src/include/PR/os_pfs.h index df793c98a..9e557a69b 100644 --- a/src/include/PR/os_pfs.h +++ b/src/include/PR/os_pfs.h @@ -152,6 +152,7 @@ typedef struct { extern s32 osPfsIsPlug(OSMesgQueue *, u8 *); s32 osPfsAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 num_bytes, s32 *file_no); +s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 *file_no); #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ diff --git a/src/include/lib/lib_4cc10.h b/src/include/lib/lib_4cc10.h deleted file mode 100644 index 129da6c1e..000000000 --- a/src/include/lib/lib_4cc10.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_4CC10_H -#define _IN_LIB_LIB_4CC10_H -#include -#include "data.h" -#include "types.h" - -s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 *file_no); - -#endif diff --git a/src/lib/lib_06550.c b/src/lib/lib_06550.c index b307fbb69..40ab34975 100644 --- a/src/lib/lib_06550.c +++ b/src/lib/lib_06550.c @@ -4,7 +4,6 @@ #include "bss.h" #include "lib/lib_06550.h" #include "lib/lib_4b170.h" -#include "lib/lib_4cc10.h" #include "lib/lib_4d480.h" #include "lib/lib_4e090.h" #include "data.h" diff --git a/src/lib/lib_4cc10.c b/src/lib/lib_4cc10.c deleted file mode 100644 index 5327b6806..000000000 --- a/src/lib/lib_4cc10.c +++ /dev/null @@ -1,138 +0,0 @@ -#include -#include "libultra_internal.h" -#include "constants.h" -#include "bss.h" -#include "data.h" -#include "types.h" - -GLOBAL_ASM( -glabel osPfsFindFile -/* 4cc10: 27bdff88 */ addiu $sp,$sp,-120 -/* 4cc14: afbf003c */ sw $ra,0x3c($sp) -/* 4cc18: afbe0038 */ sw $s8,0x38($sp) -/* 4cc1c: afb70034 */ sw $s7,0x34($sp) -/* 4cc20: afb60030 */ sw $s6,0x30($sp) -/* 4cc24: afb5002c */ sw $s5,0x2c($sp) -/* 4cc28: afb40028 */ sw $s4,0x28($sp) -/* 4cc2c: afb30024 */ sw $s3,0x24($sp) -/* 4cc30: afb20020 */ sw $s2,0x20($sp) -/* 4cc34: afb1001c */ sw $s1,0x1c($sp) -/* 4cc38: afb00018 */ sw $s0,0x18($sp) -/* 4cc3c: afa5007c */ sw $a1,0x7c($sp) -/* 4cc40: 8c8e0000 */ lw $t6,0x0($a0) -/* 4cc44: 00809025 */ or $s2,$a0,$zero -/* 4cc48: 00e0a825 */ or $s5,$a3,$zero -/* 4cc4c: 31cf0001 */ andi $t7,$t6,0x1 -/* 4cc50: 30b7ffff */ andi $s7,$a1,0xffff -/* 4cc54: 15e00003 */ bnez $t7,.L0004cc64 -/* 4cc58: 00c0f025 */ or $s8,$a2,$zero -/* 4cc5c: 10000051 */ b .L0004cda4 -/* 4cc60: 24020005 */ addiu $v0,$zero,0x5 -.L0004cc64: -/* 4cc64: 0c013218 */ jal __osCheckId -/* 4cc68: 02402025 */ or $a0,$s2,$zero -/* 4cc6c: 50400004 */ beqzl $v0,.L0004cc80 -/* 4cc70: 8e580050 */ lw $t8,0x50($s2) -/* 4cc74: 1000004c */ b .L0004cda8 -/* 4cc78: 8fbf003c */ lw $ra,0x3c($sp) -/* 4cc7c: 8e580050 */ lw $t8,0x50($s2) -.L0004cc80: -/* 4cc80: 00009825 */ or $s3,$zero,$zero -/* 4cc84: 27b60050 */ addiu $s6,$sp,0x50 -/* 4cc88: 1b000042 */ blez $t8,.L0004cd94 -/* 4cc8c: 8fb40088 */ lw $s4,0x88($sp) -/* 4cc90: 27b10060 */ addiu $s1,$sp,0x60 -/* 4cc94: 27b00054 */ addiu $s0,$sp,0x54 -/* 4cc98: 8e59005c */ lw $t9,0x5c($s2) -.L0004cc9c: -/* 4cc9c: 8e440004 */ lw $a0,0x4($s2) -/* 4cca0: 8e450008 */ lw $a1,0x8($s2) -/* 4cca4: 03333021 */ addu $a2,$t9,$s3 -/* 4cca8: 30c8ffff */ andi $t0,$a2,0xffff -/* 4ccac: 01003025 */ or $a2,$t0,$zero -/* 4ccb0: 0c012e18 */ jal __osContRamRead -/* 4ccb4: 02c03825 */ or $a3,$s6,$zero -/* 4ccb8: 50400004 */ beqzl $v0,.L0004cccc -/* 4ccbc: 8e440004 */ lw $a0,0x4($s2) -/* 4ccc0: 10000039 */ b .L0004cda8 -/* 4ccc4: 8fbf003c */ lw $ra,0x3c($sp) -/* 4ccc8: 8e440004 */ lw $a0,0x4($s2) -.L0004cccc: -/* 4cccc: 0c012ea4 */ jal __osPfsGetStatus -/* 4ccd0: 8e450008 */ lw $a1,0x8($s2) -/* 4ccd4: 10400003 */ beqz $v0,.L0004cce4 -/* 4ccd8: 00403025 */ or $a2,$v0,$zero -/* 4ccdc: 10000032 */ b .L0004cda8 -/* 4cce0: 8fbf003c */ lw $ra,0x3c($sp) -.L0004cce4: -/* 4cce4: 97a90054 */ lhu $t1,0x54($sp) -/* 4cce8: 8faa0050 */ lw $t2,0x50($sp) -/* 4ccec: 56e90025 */ bnel $s7,$t1,.L0004cd84 -/* 4ccf0: 8e580050 */ lw $t8,0x50($s2) -/* 4ccf4: 555e0023 */ bnel $t2,$s8,.L0004cd84 -/* 4ccf8: 8e580050 */ lw $t8,0x50($s2) -/* 4ccfc: 12a0000c */ beqz $s5,.L0004cd30 -/* 4cd00: 00002025 */ or $a0,$zero,$zero -/* 4cd04: 27a20050 */ addiu $v0,$sp,0x50 -/* 4cd08: 02a01825 */ or $v1,$s5,$zero -.L0004cd0c: -/* 4cd0c: 904b0010 */ lbu $t3,0x10($v0) -/* 4cd10: 906c0000 */ lbu $t4,0x0($v1) -/* 4cd14: 24420001 */ addiu $v0,$v0,0x1 -/* 4cd18: 116c0003 */ beq $t3,$t4,.L0004cd28 -/* 4cd1c: 00000000 */ nop -/* 4cd20: 10000003 */ b .L0004cd30 -/* 4cd24: 24040001 */ addiu $a0,$zero,0x1 -.L0004cd28: -/* 4cd28: 1451fff8 */ bne $v0,$s1,.L0004cd0c -/* 4cd2c: 24630001 */ addiu $v1,$v1,0x1 -.L0004cd30: -/* 4cd30: 1280000d */ beqz $s4,.L0004cd68 -/* 4cd34: 00000000 */ nop -/* 4cd38: 1480000b */ bnez $a0,.L0004cd68 -/* 4cd3c: 27a20050 */ addiu $v0,$sp,0x50 -/* 4cd40: 02801825 */ or $v1,$s4,$zero -.L0004cd44: -/* 4cd44: 904d000c */ lbu $t5,0xc($v0) -/* 4cd48: 906e0000 */ lbu $t6,0x0($v1) -/* 4cd4c: 24420001 */ addiu $v0,$v0,0x1 -/* 4cd50: 11ae0003 */ beq $t5,$t6,.L0004cd60 -/* 4cd54: 00000000 */ nop -/* 4cd58: 10000003 */ b .L0004cd68 -/* 4cd5c: 24040001 */ addiu $a0,$zero,0x1 -.L0004cd60: -/* 4cd60: 1450fff8 */ bne $v0,$s0,.L0004cd44 -/* 4cd64: 24630001 */ addiu $v1,$v1,0x1 -.L0004cd68: -/* 4cd68: 54800006 */ bnezl $a0,.L0004cd84 -/* 4cd6c: 8e580050 */ lw $t8,0x50($s2) -/* 4cd70: 8faf008c */ lw $t7,0x8c($sp) -/* 4cd74: 00c01025 */ or $v0,$a2,$zero -/* 4cd78: 1000000a */ b .L0004cda4 -/* 4cd7c: adf30000 */ sw $s3,0x0($t7) -/* 4cd80: 8e580050 */ lw $t8,0x50($s2) -.L0004cd84: -/* 4cd84: 26730001 */ addiu $s3,$s3,0x1 -/* 4cd88: 0278082a */ slt $at,$s3,$t8 -/* 4cd8c: 5420ffc3 */ bnezl $at,.L0004cc9c -/* 4cd90: 8e59005c */ lw $t9,0x5c($s2) -.L0004cd94: -/* 4cd94: 8fa8008c */ lw $t0,0x8c($sp) -/* 4cd98: 2419ffff */ addiu $t9,$zero,-1 -/* 4cd9c: 24020005 */ addiu $v0,$zero,0x5 -/* 4cda0: ad190000 */ sw $t9,0x0($t0) -.L0004cda4: -/* 4cda4: 8fbf003c */ lw $ra,0x3c($sp) -.L0004cda8: -/* 4cda8: 8fb00018 */ lw $s0,0x18($sp) -/* 4cdac: 8fb1001c */ lw $s1,0x1c($sp) -/* 4cdb0: 8fb20020 */ lw $s2,0x20($sp) -/* 4cdb4: 8fb30024 */ lw $s3,0x24($sp) -/* 4cdb8: 8fb40028 */ lw $s4,0x28($sp) -/* 4cdbc: 8fb5002c */ lw $s5,0x2c($sp) -/* 4cdc0: 8fb60030 */ lw $s6,0x30($sp) -/* 4cdc4: 8fb70034 */ lw $s7,0x34($sp) -/* 4cdc8: 8fbe0038 */ lw $s8,0x38($sp) -/* 4cdcc: 03e00008 */ jr $ra -/* 4cdd0: 27bd0078 */ addiu $sp,$sp,0x78 -); diff --git a/src/lib/lib_4d480.c b/src/lib/lib_4d480.c index fa977735e..d9ef86df7 100644 --- a/src/lib/lib_4d480.c +++ b/src/lib/lib_4d480.c @@ -3,7 +3,6 @@ #include "constants.h" #include "bss.h" #include "lib/libc/ll.h" -#include "lib/lib_4cc10.h" #include "lib/lib_4d480.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfsallocatefile.c b/src/lib/ultra/io/pfsallocatefile.c index 6438fedf2..8fbe7fe8d 100644 --- a/src/lib/ultra/io/pfsallocatefile.c +++ b/src/lib/ultra/io/pfsallocatefile.c @@ -3,7 +3,6 @@ #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4cc10.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfsfindfile.c b/src/lib/ultra/io/pfsfindfile.c new file mode 100644 index 000000000..217afa816 --- /dev/null +++ b/src/lib/ultra/io/pfsfindfile.c @@ -0,0 +1,196 @@ +#include +#include "libultra_internal.h" +#include "constants.h" +#include "bss.h" +#include "data.h" +#include "types.h" + +//GLOBAL_ASM( +//glabel osPfsFindFile +///* 4cc10: 27bdff88 */ addiu $sp,$sp,-120 +///* 4cc14: afbf003c */ sw $ra,0x3c($sp) +///* 4cc18: afbe0038 */ sw $s8,0x38($sp) +///* 4cc1c: afb70034 */ sw $s7,0x34($sp) +///* 4cc20: afb60030 */ sw $s6,0x30($sp) +///* 4cc24: afb5002c */ sw $s5,0x2c($sp) +///* 4cc28: afb40028 */ sw $s4,0x28($sp) +///* 4cc2c: afb30024 */ sw $s3,0x24($sp) +///* 4cc30: afb20020 */ sw $s2,0x20($sp) +///* 4cc34: afb1001c */ sw $s1,0x1c($sp) +///* 4cc38: afb00018 */ sw $s0,0x18($sp) +///* 4cc3c: afa5007c */ sw $a1,0x7c($sp) +///* 4cc40: 8c8e0000 */ lw $t6,0x0($a0) +///* 4cc44: 00809025 */ or $s2,$a0,$zero +///* 4cc48: 00e0a825 */ or $s5,$a3,$zero +///* 4cc4c: 31cf0001 */ andi $t7,$t6,0x1 +///* 4cc50: 30b7ffff */ andi $s7,$a1,0xffff +///* 4cc54: 15e00003 */ bnez $t7,.L0004cc64 +///* 4cc58: 00c0f025 */ or $s8,$a2,$zero +///* 4cc5c: 10000051 */ b .L0004cda4 +///* 4cc60: 24020005 */ addiu $v0,$zero,0x5 +//.L0004cc64: +///* 4cc64: 0c013218 */ jal __osCheckId +///* 4cc68: 02402025 */ or $a0,$s2,$zero +///* 4cc6c: 50400004 */ beqzl $v0,.L0004cc80 +///* 4cc70: 8e580050 */ lw $t8,0x50($s2) +///* 4cc74: 1000004c */ b .L0004cda8 +///* 4cc78: 8fbf003c */ lw $ra,0x3c($sp) +///* 4cc7c: 8e580050 */ lw $t8,0x50($s2) +//.L0004cc80: +///* 4cc80: 00009825 */ or $s3,$zero,$zero +///* 4cc84: 27b60050 */ addiu $s6,$sp,0x50 +///* 4cc88: 1b000042 */ blez $t8,.L0004cd94 +///* 4cc8c: 8fb40088 */ lw $s4,0x88($sp) +///* 4cc90: 27b10060 */ addiu $s1,$sp,0x60 +///* 4cc94: 27b00054 */ addiu $s0,$sp,0x54 +///* 4cc98: 8e59005c */ lw $t9,0x5c($s2) +//.L0004cc9c: +///* 4cc9c: 8e440004 */ lw $a0,0x4($s2) +///* 4cca0: 8e450008 */ lw $a1,0x8($s2) +///* 4cca4: 03333021 */ addu $a2,$t9,$s3 +///* 4cca8: 30c8ffff */ andi $t0,$a2,0xffff +///* 4ccac: 01003025 */ or $a2,$t0,$zero +///* 4ccb0: 0c012e18 */ jal __osContRamRead +///* 4ccb4: 02c03825 */ or $a3,$s6,$zero +///* 4ccb8: 50400004 */ beqzl $v0,.L0004cccc +///* 4ccbc: 8e440004 */ lw $a0,0x4($s2) +///* 4ccc0: 10000039 */ b .L0004cda8 +///* 4ccc4: 8fbf003c */ lw $ra,0x3c($sp) +///* 4ccc8: 8e440004 */ lw $a0,0x4($s2) +//.L0004cccc: +///* 4cccc: 0c012ea4 */ jal __osPfsGetStatus +///* 4ccd0: 8e450008 */ lw $a1,0x8($s2) +///* 4ccd4: 10400003 */ beqz $v0,.L0004cce4 +///* 4ccd8: 00403025 */ or $a2,$v0,$zero +///* 4ccdc: 10000032 */ b .L0004cda8 +///* 4cce0: 8fbf003c */ lw $ra,0x3c($sp) +//.L0004cce4: +///* 4cce4: 97a90054 */ lhu $t1,0x54($sp) +///* 4cce8: 8faa0050 */ lw $t2,0x50($sp) +///* 4ccec: 56e90025 */ bnel $s7,$t1,.L0004cd84 +///* 4ccf0: 8e580050 */ lw $t8,0x50($s2) +///* 4ccf4: 555e0023 */ bnel $t2,$s8,.L0004cd84 +///* 4ccf8: 8e580050 */ lw $t8,0x50($s2) +///* 4ccfc: 12a0000c */ beqz $s5,.L0004cd30 +///* 4cd00: 00002025 */ or $a0,$zero,$zero +///* 4cd04: 27a20050 */ addiu $v0,$sp,0x50 +///* 4cd08: 02a01825 */ or $v1,$s5,$zero +//.L0004cd0c: +///* 4cd0c: 904b0010 */ lbu $t3,0x10($v0) +///* 4cd10: 906c0000 */ lbu $t4,0x0($v1) +///* 4cd14: 24420001 */ addiu $v0,$v0,0x1 +///* 4cd18: 116c0003 */ beq $t3,$t4,.L0004cd28 +///* 4cd1c: 00000000 */ nop +///* 4cd20: 10000003 */ b .L0004cd30 +///* 4cd24: 24040001 */ addiu $a0,$zero,0x1 +//.L0004cd28: +///* 4cd28: 1451fff8 */ bne $v0,$s1,.L0004cd0c +///* 4cd2c: 24630001 */ addiu $v1,$v1,0x1 +//.L0004cd30: +///* 4cd30: 1280000d */ beqz $s4,.L0004cd68 +///* 4cd34: 00000000 */ nop +///* 4cd38: 1480000b */ bnez $a0,.L0004cd68 +///* 4cd3c: 27a20050 */ addiu $v0,$sp,0x50 +///* 4cd40: 02801825 */ or $v1,$s4,$zero +//.L0004cd44: +///* 4cd44: 904d000c */ lbu $t5,0xc($v0) +///* 4cd48: 906e0000 */ lbu $t6,0x0($v1) +///* 4cd4c: 24420001 */ addiu $v0,$v0,0x1 +///* 4cd50: 11ae0003 */ beq $t5,$t6,.L0004cd60 +///* 4cd54: 00000000 */ nop +///* 4cd58: 10000003 */ b .L0004cd68 +///* 4cd5c: 24040001 */ addiu $a0,$zero,0x1 +//.L0004cd60: +///* 4cd60: 1450fff8 */ bne $v0,$s0,.L0004cd44 +///* 4cd64: 24630001 */ addiu $v1,$v1,0x1 +//.L0004cd68: +///* 4cd68: 54800006 */ bnezl $a0,.L0004cd84 +///* 4cd6c: 8e580050 */ lw $t8,0x50($s2) +///* 4cd70: 8faf008c */ lw $t7,0x8c($sp) +///* 4cd74: 00c01025 */ or $v0,$a2,$zero +///* 4cd78: 1000000a */ b .L0004cda4 +///* 4cd7c: adf30000 */ sw $s3,0x0($t7) +///* 4cd80: 8e580050 */ lw $t8,0x50($s2) +//.L0004cd84: +///* 4cd84: 26730001 */ addiu $s3,$s3,0x1 +///* 4cd88: 0278082a */ slt $at,$s3,$t8 +///* 4cd8c: 5420ffc3 */ bnezl $at,.L0004cc9c +///* 4cd90: 8e59005c */ lw $t9,0x5c($s2) +//.L0004cd94: +///* 4cd94: 8fa8008c */ lw $t0,0x8c($sp) +///* 4cd98: 2419ffff */ addiu $t9,$zero,-1 +///* 4cd9c: 24020005 */ addiu $v0,$zero,0x5 +///* 4cda0: ad190000 */ sw $t9,0x0($t0) +//.L0004cda4: +///* 4cda4: 8fbf003c */ lw $ra,0x3c($sp) +//.L0004cda8: +///* 4cda8: 8fb00018 */ lw $s0,0x18($sp) +///* 4cdac: 8fb1001c */ lw $s1,0x1c($sp) +///* 4cdb0: 8fb20020 */ lw $s2,0x20($sp) +///* 4cdb4: 8fb30024 */ lw $s3,0x24($sp) +///* 4cdb8: 8fb40028 */ lw $s4,0x28($sp) +///* 4cdbc: 8fb5002c */ lw $s5,0x2c($sp) +///* 4cdc0: 8fb60030 */ lw $s6,0x30($sp) +///* 4cdc4: 8fb70034 */ lw $s7,0x34($sp) +///* 4cdc8: 8fbe0038 */ lw $s8,0x38($sp) +///* 4cdcc: 03e00008 */ jr $ra +///* 4cdd0: 27bd0078 */ addiu $sp,$sp,0x78 +//); + +s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 *ext_name, s32 *file_no) +{ + s32 j; + s32 i; + __OSDir dir; + s32 ret = 0; + s32 err; + + if (!(pfs->status & PFS_INITIALIZED)) { + return PFS_ERR_INVALID; + } + + if ((ret = __osCheckId(pfs)) != 0) { + return ret; + } + + for (j = 0; j < pfs->dir_size; j++) { + if ((ret = __osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&dir)) != 0) { + return ret; + } + + if ((ret = __osPfsGetStatus(pfs->queue, pfs->channel)) != 0) { + return ret; + } + + if (dir.company_code == company_code && dir.game_code == game_code) { + err = 0; + + if (game_name != NULL) { + for (i = 0; i < PFS_FILE_NAME_LEN; i++) { + if (dir.game_name[i] != game_name[i]) { + err = 1; + break; + } + } + } + + if (ext_name != NULL && err == 0) { + for (i = 0; i < PFS_FILE_EXT_LEN; i++) { + if (dir.ext_name[i] != ext_name[i]) { + err = 1; + break; + } + } + } + + if (err == 0) { + *file_no = j; + return ret; + } + } + } + + *file_no = -1; + + return PFS_ERR_INVALID; +}