diff --git a/Makefile b/Makefile index 80cd9491d..660d2ab53 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ $(B_DIR)/lib/ultra/gu/ortho.o: LOOPUNROLL := $(B_DIR)/lib/ultra/io/pfsgetstatus.o: LOOPUNROLL := $(B_DIR)/lib/ultra/io/conteepread.o: LOOPUNROLL := $(B_DIR)/lib/ultra/io/conteepwrite.o: LOOPUNROLL := -$(B_DIR)/lib/lib_4c090.o: LOOPUNROLL := +$(B_DIR)/lib/ultra/io/contpfs.o: LOOPUNROLL := $(B_DIR)/lib/ultra/libc/ll.o: MIPSISET := -mips3 -o32 $(B_DIR)/lib/ultra/libc/llcvt.o: MIPSISET := -mips3 -32 diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index d9d4eea83..f17f1392b 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.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/controller.o (section); \ - build/ROMID/lib/lib_4c090.o (section); \ + build/ROMID/lib/ultra/io/contpfs.o (section); \ build/ROMID/lib/lib_4cc10.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/lib_4ce60.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index 303fe8e36..b503d1cab 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -161,7 +161,7 @@ build/ROMID/lib/ultra/io/contramread.o (section); \ build/ROMID/lib/ultra/io/pfsgetstatus.o (section); \ build/ROMID/lib/ultra/io/conteepwrite.o (section); \ - build/ROMID/lib/lib_4c090.o (section); \ + build/ROMID/lib/ultra/io/contpfs.o (section); \ build/ROMID/lib/lib_4cc10.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/lib_4ce60.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index cb8beca6a..2335f4e46 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -160,7 +160,7 @@ build/ROMID/lib/ultra/io/contramread.o (section); \ build/ROMID/lib/ultra/io/pfsgetstatus.o (section); \ build/ROMID/lib/ultra/io/conteepwrite.o (section); \ - build/ROMID/lib/lib_4c090.o (section); \ + build/ROMID/lib/ultra/io/contpfs.o (section); \ build/ROMID/lib/lib_4cc10.o (section); \ build/ROMID/lib/ultra/io/pfsselectbank.o (section); \ build/ROMID/lib/lib_4ce60.o (section); \ diff --git a/src/include/lib/lib_4c090.h b/src/include/lib/lib_4c090.h deleted file mode 100644 index a816c672c..000000000 --- a/src/include/lib/lib_4c090.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _IN_LIB_LIB_4C090_H -#define _IN_LIB_LIB_4C090_H -#include -#include "data.h" -#include "types.h" - -u16 __osSumCalc(u8 *ptr, int length); -s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum); -s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid); -s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp); -s32 __osGetId(OSPfs *pfs); -u32 func0004c860(void); -s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank); - -#endif diff --git a/src/include/lib/lib_4d6f0.h b/src/include/lib/lib_4d6f0.h index 9caa20255..b9e373dd7 100644 --- a/src/include/lib/lib_4d6f0.h +++ b/src/include/lib/lib_4d6f0.h @@ -7,7 +7,7 @@ s32 osPfsChecker(OSPfs *pfs); u32 func0004dc28(void); u32 func0004def4(void); -u32 func0004e090(void); +s32 func0004e090(u8 *id, u8 *buffer, u32 len); void osMapTLB(s32 index, OSPageMask pm, void *vaddr, u32 evenpaddr, u32 oddpaddr, s32 asid); #endif diff --git a/src/include/libultra_internal.h b/src/include/libultra_internal.h index 72bcfcf65..3a79b97ca 100644 --- a/src/include/libultra_internal.h +++ b/src/include/libultra_internal.h @@ -51,5 +51,12 @@ void __osDispatchThread(); u32 __osGetCause(); s32 __osAtomicDec(u32*); s32 __osPfsSelectBank(OSPfs *pfs, u8 bank); +u16 __osSumCalc(u8 *ptr, int length); +s32 __osIdCheckSum(u16 *ptr, u16 *csum, u16 *icsum); +s32 __osRepairPackId(OSPfs *pfs, __OSPackId *badid, __OSPackId *newid); +s32 __osCheckPackId(OSPfs *pfs, __OSPackId *temp); +s32 __osGetId(OSPfs *pfs); +s32 __osCheckId(OSPfs *pfs); +s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank); #endif diff --git a/src/lib/lib_06550.c b/src/lib/lib_06550.c index 809cd2a60..fa29609a5 100644 --- a/src/lib/lib_06550.c +++ b/src/lib/lib_06550.c @@ -1,9 +1,9 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_06550.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4cc10.h" #include "lib/lib_4ce60.h" #include "lib/lib_4d000.h" @@ -54,7 +54,7 @@ glabel func00006550 /* 65d8: 24020005 */ addiu $v0,$zero,0x5 .L000065dc: /* 65dc: 02a02025 */ or $a0,$s5,$zero -/* 65e0: 0c013218 */ jal func0004c860 +/* 65e0: 0c013218 */ jal __osCheckId /* 65e4: afa20054 */ sw $v0,0x54($sp) /* 65e8: 24010002 */ addiu $at,$zero,0x2 /* 65ec: 14410003 */ bne $v0,$at,.L000065fc diff --git a/src/lib/lib_4cc10.c b/src/lib/lib_4cc10.c index e7c557ea7..178d5d3d7 100644 --- a/src/lib/lib_4cc10.c +++ b/src/lib/lib_4cc10.c @@ -1,7 +1,7 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4c090.h" #include "data.h" #include "types.h" @@ -29,7 +29,7 @@ glabel func0004cc10 /* 4cc5c: 10000051 */ b .L0004cda4 /* 4cc60: 24020005 */ addiu $v0,$zero,0x5 .L0004cc64: -/* 4cc64: 0c013218 */ jal func0004c860 +/* 4cc64: 0c013218 */ jal __osCheckId /* 4cc68: 02402025 */ or $a0,$s2,$zero /* 4cc6c: 50400004 */ beqzl $v0,.L0004cc80 /* 4cc70: 8e580050 */ lw $t8,0x50($s2) diff --git a/src/lib/lib_4ce60.c b/src/lib/lib_4ce60.c index 81706bb9f..686a837f1 100644 --- a/src/lib/lib_4ce60.c +++ b/src/lib/lib_4ce60.c @@ -1,7 +1,7 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4c090.h" #include "data.h" #include "types.h" @@ -25,7 +25,7 @@ glabel func0004ce60 /* 4ce9c: 1000004d */ b .L0004cfd4 /* 4cea0: 24020005 */ addiu $v0,$zero,0x5 .L0004cea4: -/* 4cea4: 0c013218 */ jal func0004c860 +/* 4cea4: 0c013218 */ jal __osCheckId /* 4cea8: 02802025 */ or $a0,$s4,$zero /* 4ceac: 50400004 */ beqzl $v0,.L0004cec0 /* 4ceb0: 92980064 */ lbu $t8,0x64($s4) diff --git a/src/lib/lib_4d000.c b/src/lib/lib_4d000.c index 666f54d01..7cf334f6c 100644 --- a/src/lib/lib_4d000.c +++ b/src/lib/lib_4d000.c @@ -1,8 +1,8 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4cc10.h" #include "lib/lib_4ce60.h" #include "lib/lib_4d000.h" diff --git a/src/lib/lib_4d480.c b/src/lib/lib_4d480.c index c951726a8..d462e3aed 100644 --- a/src/lib/lib_4d480.c +++ b/src/lib/lib_4d480.c @@ -1,8 +1,8 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/libc/ll.h" -#include "lib/lib_4c090.h" #include "lib/lib_4cc10.h" #include "lib/lib_4d480.h" #include "data.h" diff --git a/src/lib/lib_4d6f0.c b/src/lib/lib_4d6f0.c index 9aff46448..d9a2c4545 100644 --- a/src/lib/lib_4d6f0.c +++ b/src/lib/lib_4d6f0.c @@ -1,8 +1,8 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/libc/ll.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "data.h" #include "types.h" @@ -22,7 +22,7 @@ glabel osPfsChecker /* 4d718: afb10024 */ sw $s1,0x24($sp) /* 4d71c: afb00020 */ sw $s0,0x20($sp) /* 4d720: afa00074 */ sw $zero,0x74($sp) -/* 4d724: 0c013218 */ jal func0004c860 +/* 4d724: 0c013218 */ jal __osCheckId /* 4d728: 241e00fe */ addiu $s8,$zero,0xfe /* 4d72c: 24010002 */ addiu $at,$zero,0x2 /* 4d730: 14410004 */ bne $v0,$at,.L0004d744 diff --git a/src/lib/lib_50480.c b/src/lib/lib_50480.c index e6c2ec45e..c0edbb993 100644 --- a/src/lib/lib_50480.c +++ b/src/lib/lib_50480.c @@ -1,7 +1,7 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4c090.h" #include "lib/lib_50480.h" #include "data.h" #include "types.h" @@ -114,7 +114,7 @@ glabel func00050554 /* 505dc: 100000b4 */ b .L000508b0 /* 505e0: 24020005 */ addiu $v0,$zero,0x5 .L000505e4: -/* 505e4: 0c013218 */ jal func0004c860 +/* 505e4: 0c013218 */ jal __osCheckId /* 505e8: afa50174 */ sw $a1,0x174($sp) /* 505ec: 24010002 */ addiu $at,$zero,0x2 /* 505f0: 54410004 */ bnel $v0,$at,.L00050604 diff --git a/src/lib/lib_508d0.c b/src/lib/lib_508d0.c index 53bcea6bf..c37872e64 100644 --- a/src/lib/lib_508d0.c +++ b/src/lib/lib_508d0.c @@ -1,7 +1,7 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" -#include "lib/lib_4c090.h" #include "lib/lib_50480.h" #include "data.h" #include "types.h" @@ -25,7 +25,7 @@ glabel func000508d0 /* 50908: 10000034 */ b .L000509dc /* 5090c: 24020005 */ addiu $v0,$zero,0x5 .L00050910: -/* 50910: 0c013218 */ jal func0004c860 +/* 50910: 0c013218 */ jal __osCheckId /* 50914: 02202025 */ or $a0,$s1,$zero /* 50918: 50400004 */ beqzl $v0,.L0005092c /* 5091c: 92380065 */ lbu $t8,0x65($s1) diff --git a/src/lib/lib_50a00.c b/src/lib/lib_50a00.c index 1c1f2c22e..6bea68fdf 100644 --- a/src/lib/lib_50a00.c +++ b/src/lib/lib_50a00.c @@ -1,10 +1,10 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" @@ -40,7 +40,7 @@ glabel func00050a00 /* 50a58: 10000058 */ b .L00050bbc /* 50a5c: 24020005 */ addiu $v0,$zero,0x5 .L00050a60: -/* 50a60: 0c013218 */ jal func0004c860 +/* 50a60: 0c013218 */ jal __osCheckId /* 50a64: 02602025 */ or $a0,$s3,$zero /* 50a68: 50400004 */ beqzl $v0,.L00050a7c /* 50a6c: 92790065 */ lbu $t9,0x65($s3) diff --git a/src/lib/lib_50be0.c b/src/lib/lib_50be0.c index 8ae6f4c39..fd4a72fd7 100644 --- a/src/lib/lib_50be0.c +++ b/src/lib/lib_50be0.c @@ -1,10 +1,10 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" diff --git a/src/lib/lib_50d60.c b/src/lib/lib_50d60.c index f3f6233e5..f8e5b1d21 100644 --- a/src/lib/lib_50d60.c +++ b/src/lib/lib_50d60.c @@ -1,10 +1,10 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" diff --git a/src/lib/lib_513b0.c b/src/lib/lib_513b0.c index 7fd4e4718..ebd729906 100644 --- a/src/lib/lib_513b0.c +++ b/src/lib/lib_513b0.c @@ -1,8 +1,8 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "lib/lib_513b0.h" #include "lib/lib_52360.h" diff --git a/src/lib/lib_51570.c b/src/lib/lib_51570.c index ae5b042e2..39ef45a34 100644 --- a/src/lib/lib_51570.c +++ b/src/lib/lib_51570.c @@ -1,8 +1,8 @@ #include +#include "libultra_internal.h" #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "lib/lib_513b0.h" #include "lib/lib_52360.h" diff --git a/src/lib/lib_4c090.c b/src/lib/ultra/io/contpfs.c similarity index 86% rename from src/lib/lib_4c090.c rename to src/lib/ultra/io/contpfs.c index a28529e25..a2e9477ae 100644 --- a/src/lib/lib_4c090.c +++ b/src/lib/ultra/io/contpfs.c @@ -3,7 +3,6 @@ #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4c090.h" #include "lib/lib_4d6f0.h" #include "data.h" #include "types.h" @@ -478,69 +477,39 @@ s32 __osGetId(OSPfs *pfs) return 0; } -GLOBAL_ASM( -glabel func0004c860 -/* 4c860: 27bdffb8 */ addiu $sp,$sp,-72 -/* 4c864: afbf001c */ sw $ra,0x1c($sp) -/* 4c868: afb00018 */ sw $s0,0x18($sp) -/* 4c86c: 908e0065 */ lbu $t6,0x65($a0) -/* 4c870: 00808025 */ or $s0,$a0,$zero -/* 4c874: 51c0000f */ beqzl $t6,.L0004c8b4 -/* 4c878: 8e040004 */ lw $a0,0x4($s0) -/* 4c87c: 0c013378 */ jal __osPfsSelectBank -/* 4c880: 00002825 */ or $a1,$zero,$zero -/* 4c884: 24010002 */ addiu $at,$zero,0x2 -/* 4c888: 14410005 */ bne $v0,$at,.L0004c8a0 -/* 4c88c: 00401825 */ or $v1,$v0,$zero -/* 4c890: 02002025 */ or $a0,$s0,$zero -/* 4c894: 0c013378 */ jal __osPfsSelectBank -/* 4c898: 00002825 */ or $a1,$zero,$zero -/* 4c89c: 00401825 */ or $v1,$v0,$zero -.L0004c8a0: -/* 4c8a0: 50400004 */ beqzl $v0,.L0004c8b4 -/* 4c8a4: 8e040004 */ lw $a0,0x4($s0) -/* 4c8a8: 1000001d */ b .L0004c920 -/* 4c8ac: 00601025 */ or $v0,$v1,$zero -/* 4c8b0: 8e040004 */ lw $a0,0x4($s0) -.L0004c8b4: -/* 4c8b4: 8e050008 */ lw $a1,0x8($s0) -/* 4c8b8: 24060001 */ addiu $a2,$zero,0x1 -/* 4c8bc: 0c012e18 */ jal __osContRamRead -/* 4c8c0: 27a70028 */ addiu $a3,$sp,0x28 -/* 4c8c4: 1040000d */ beqz $v0,.L0004c8fc -/* 4c8c8: 24010002 */ addiu $at,$zero,0x2 -/* 4c8cc: 10410003 */ beq $v0,$at,.L0004c8dc -/* 4c8d0: 24060001 */ addiu $a2,$zero,0x1 -/* 4c8d4: 10000013 */ b .L0004c924 -/* 4c8d8: 8fbf001c */ lw $ra,0x1c($sp) -.L0004c8dc: -/* 4c8dc: 8e040004 */ lw $a0,0x4($s0) -/* 4c8e0: 8e050008 */ lw $a1,0x8($s0) -/* 4c8e4: 0c012e18 */ jal __osContRamRead -/* 4c8e8: 27a70028 */ addiu $a3,$sp,0x28 -/* 4c8ec: 50400004 */ beqzl $v0,.L0004c900 -/* 4c8f0: 2604000c */ addiu $a0,$s0,0xc -/* 4c8f4: 1000000b */ b .L0004c924 -/* 4c8f8: 8fbf001c */ lw $ra,0x1c($sp) -.L0004c8fc: -/* 4c8fc: 2604000c */ addiu $a0,$s0,0xc -.L0004c900: -/* 4c900: 27a50028 */ addiu $a1,$sp,0x28 -/* 4c904: 0c013824 */ jal func0004e090 -/* 4c908: 24060020 */ addiu $a2,$zero,0x20 -/* 4c90c: 50400004 */ beqzl $v0,.L0004c920 -/* 4c910: 00001025 */ or $v0,$zero,$zero -/* 4c914: 10000002 */ b .L0004c920 -/* 4c918: 24020002 */ addiu $v0,$zero,0x2 -/* 4c91c: 00001025 */ or $v0,$zero,$zero -.L0004c920: -/* 4c920: 8fbf001c */ lw $ra,0x1c($sp) -.L0004c924: -/* 4c924: 8fb00018 */ lw $s0,0x18($sp) -/* 4c928: 27bd0048 */ addiu $sp,$sp,0x48 -/* 4c92c: 03e00008 */ jr $ra -/* 4c930: 00000000 */ nop -); +s32 __osCheckId(OSPfs *pfs) +{ + u8 temp[32]; + s32 ret; + + if (pfs->activebank != 0) { + ret = __osPfsSelectBank(pfs, 0); + + if (ret == PFS_ERR_NEW_PACK) { + ret = __osPfsSelectBank(pfs, 0); + } + + if (ret != 0) { + return ret; + } + } + + ret = __osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp); + + if (ret != 0) { + if (ret != PFS_ERR_NEW_PACK) { + return ret; + } + + ERRCK(__osContRamRead(pfs->queue, pfs->channel, 1, (u8*)temp)); + } + + if (func0004e090(pfs->id, temp, 0x20) != 0) { + return PFS_ERR_NEW_PACK; + } + + return 0; +} s32 __osPfsRWInode(OSPfs *pfs, __OSInode *inode, u8 flag, u8 bank) {