diff --git a/Makefile b/Makefile index 660d2ab53..c057f9452 100644 --- a/Makefile +++ b/Makefile @@ -64,10 +64,11 @@ LOOPUNROLL := -Wo,-loopunroll,0 $(B_DIR)/lib/ultra/gu/frustum.o: LOOPUNROLL := $(B_DIR)/lib/ultra/gu/mtxutil.o: LOOPUNROLL := $(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/ultra/io/contpfs.o: LOOPUNROLL := +$(B_DIR)/lib/ultra/io/pfschecker.o: LOOPUNROLL := +$(B_DIR)/lib/ultra/io/pfsgetstatus.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 f17f1392b..b58a9bbb5 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -169,7 +169,8 @@ build/ROMID/lib/lib_4d000.o (section); \ build/ROMID/lib/lib_4d480.o (section); \ build/ROMID/lib/ultra/io/siacs.o (section); \ - build/ROMID/lib/lib_4d6f0.o (section); \ + build/ROMID/lib/ultra/io/pfschecker.o (section); \ + build/ROMID/lib/lib_4e090.o (section); \ build/ROMID/lib/ultra/os/getmemsize.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index b503d1cab..cc1d4ff34 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -167,7 +167,8 @@ build/ROMID/lib/lib_4ce60.o (section); \ build/ROMID/lib/lib_4d000.o (section); \ build/ROMID/lib/lib_4d480.o (section); \ - build/ROMID/lib/lib_4d6f0.o (section); \ + build/ROMID/lib/ultra/io/pfschecker.o (section); \ + build/ROMID/lib/lib_4e090.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ build/ROMID/lib/ultra/io/aisetnextbuf.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index 2335f4e46..e4e523199 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -166,7 +166,8 @@ build/ROMID/lib/lib_4ce60.o (section); \ build/ROMID/lib/lib_4d000.o (section); \ build/ROMID/lib/lib_4d480.o (section); \ - build/ROMID/lib/lib_4d6f0.o (section); \ + build/ROMID/lib/ultra/io/pfschecker.o (section); \ + build/ROMID/lib/lib_4e090.o (section); \ build/ROMID/lib/ultra/os/maptlb.o (section); \ build/ROMID/lib/ultra/io/aisetfreq.o (section); \ build/ROMID/lib/ultra/libc/ll.o (section); \ diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index ae2f53cda..1bf75e216 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -19,7 +19,7 @@ #include "lib/lib_4ce60.h" #include "lib/lib_4d000.h" #include "lib/lib_4d480.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_4f5e0.h" #include "lib/lib_50480.h" #include "lib/lib_50a00.h" diff --git a/src/include/lib/lib_4d6f0.h b/src/include/lib/lib_4d6f0.h deleted file mode 100644 index b9e373dd7..000000000 --- a/src/include/lib/lib_4d6f0.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef _IN_LIB_LIB_4D6F0_H -#define _IN_LIB_LIB_4D6F0_H -#include -#include "data.h" -#include "types.h" - -s32 osPfsChecker(OSPfs *pfs); -u32 func0004dc28(void); -u32 func0004def4(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/lib/lib_4e090.h b/src/include/lib/lib_4e090.h new file mode 100644 index 000000000..2b34e6f3c --- /dev/null +++ b/src/include/lib/lib_4e090.h @@ -0,0 +1,9 @@ +#ifndef _IN_LIB_LIB_4E090_H +#define _IN_LIB_LIB_4E090_H +#include +#include "data.h" +#include "types.h" + +s32 func0004e090(u8 *id, u8 *buffer, u32 len); + +#endif diff --git a/src/include/libultra_internal.h b/src/include/libultra_internal.h index 3a79b97ca..e7738f02e 100644 --- a/src/include/libultra_internal.h +++ b/src/include/libultra_internal.h @@ -13,6 +13,13 @@ typedef struct u64 force_align; } OSMgrArgs; +typedef struct +{ + /* 0x0 */ __OSInode inode; + /* 0x100 */ u8 bank; + /* 0x101 */ u8 map[256]; +} __OSInodeCache; + s32 __osDisableInt(); void __osRestoreInt(s32); s32 __osContRamRead(OSMesgQueue *mq, int channel, u16 address, u8 *buffer); diff --git a/src/lib/lib_06550.c b/src/lib/lib_06550.c index fa29609a5..527bd749e 100644 --- a/src/lib/lib_06550.c +++ b/src/lib/lib_06550.c @@ -8,7 +8,7 @@ #include "lib/lib_4ce60.h" #include "lib/lib_4d000.h" #include "lib/lib_4d480.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/lib_070d0.c b/src/lib/lib_070d0.c index 9346e3661..a22c3a83f 100644 --- a/src/lib/lib_070d0.c +++ b/src/lib/lib_070d0.c @@ -5,7 +5,7 @@ #include "lib/lib_074f0.h" #include "lib/dma.h" #include "lib/lib_48150.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/lib_4d6f0.c b/src/lib/lib_4d6f0.c deleted file mode 100644 index d9a2c4545..000000000 --- a/src/lib/lib_4d6f0.c +++ /dev/null @@ -1,805 +0,0 @@ -#include -#include "libultra_internal.h" -#include "constants.h" -#include "bss.h" -#include "lib/libc/ll.h" -#include "lib/lib_4d6f0.h" -#include "data.h" -#include "types.h" - -GLOBAL_ASM( -glabel osPfsChecker -/* 4d6f0: 27bdfb38 */ addiu $sp,$sp,-1224 -/* 4d6f4: afbf0044 */ sw $ra,0x44($sp) -/* 4d6f8: afbe0040 */ sw $s8,0x40($sp) -/* 4d6fc: afb3002c */ sw $s3,0x2c($sp) -/* 4d700: 00809825 */ or $s3,$a0,$zero -/* 4d704: afb7003c */ sw $s7,0x3c($sp) -/* 4d708: afb60038 */ sw $s6,0x38($sp) -/* 4d70c: afb50034 */ sw $s5,0x34($sp) -/* 4d710: afb40030 */ sw $s4,0x30($sp) -/* 4d714: afb20028 */ sw $s2,0x28($sp) -/* 4d718: afb10024 */ sw $s1,0x24($sp) -/* 4d71c: afb00020 */ sw $s0,0x20($sp) -/* 4d720: afa00074 */ sw $zero,0x74($sp) -/* 4d724: 0c013218 */ jal __osCheckId -/* 4d728: 241e00fe */ addiu $s8,$zero,0xfe -/* 4d72c: 24010002 */ addiu $at,$zero,0x2 -/* 4d730: 14410004 */ bne $v0,$at,.L0004d744 -/* 4d734: 0040b825 */ or $s7,$v0,$zero -/* 4d738: 0c0131ad */ jal __osGetId -/* 4d73c: 02602025 */ or $a0,$s3,$zero -/* 4d740: 0040b825 */ or $s7,$v0,$zero -.L0004d744: -/* 4d744: 10400003 */ beqz $v0,.L0004d754 -/* 4d748: 02602025 */ or $a0,$s3,$zero -/* 4d74c: 1000012a */ b .L0004dbf8 -/* 4d750: 02e01025 */ or $v0,$s7,$zero -.L0004d754: -/* 4d754: 0c01370a */ jal func0004dc28 -/* 4d758: 27a50078 */ addiu $a1,$sp,0x78 -/* 4d75c: 50400004 */ beqzl $v0,.L0004d770 -/* 4d760: 8e620050 */ lw $v0,0x50($s3) -/* 4d764: 10000125 */ b .L0004dbfc -/* 4d768: 8fbf0044 */ lw $ra,0x44($sp) -/* 4d76c: 8e620050 */ lw $v0,0x50($s3) -.L0004d770: -/* 4d770: 0000a025 */ or $s4,$zero,$zero -/* 4d774: 27b502bc */ addiu $s5,$sp,0x2bc -/* 4d778: 18400082 */ blez $v0,.L0004d984 -/* 4d77c: 27b204bc */ addiu $s2,$sp,0x4bc -/* 4d780: 8e6e005c */ lw $t6,0x5c($s3) -.L0004d784: -/* 4d784: 8e640004 */ lw $a0,0x4($s3) -/* 4d788: 8e650008 */ lw $a1,0x8($s3) -/* 4d78c: 01d43021 */ addu $a2,$t6,$s4 -/* 4d790: 30cfffff */ andi $t7,$a2,0xffff -/* 4d794: 01e03025 */ or $a2,$t7,$zero -/* 4d798: 0c012e18 */ jal __osContRamRead -/* 4d79c: 27a7029c */ addiu $a3,$sp,0x29c -/* 4d7a0: 10400003 */ beqz $v0,.L0004d7b0 -/* 4d7a4: 0040b825 */ or $s7,$v0,$zero -/* 4d7a8: 10000114 */ b .L0004dbfc -/* 4d7ac: 8fbf0044 */ lw $ra,0x44($sp) -.L0004d7b0: -/* 4d7b0: 97a202a0 */ lhu $v0,0x2a0($sp) -/* 4d7b4: 8fb8029c */ lw $t8,0x29c($sp) -/* 4d7b8: 14400003 */ bnez $v0,.L0004d7c8 -/* 4d7bc: 00000000 */ nop -/* 4d7c0: 5300006b */ beqzl $t8,.L0004d970 -/* 4d7c4: 8e620050 */ lw $v0,0x50($s3) -.L0004d7c8: -/* 4d7c8: 10400003 */ beqz $v0,.L0004d7d8 -/* 4d7cc: 8fb9029c */ lw $t9,0x29c($sp) -/* 4d7d0: 17200003 */ bnez $t9,.L0004d7e0 -/* 4d7d4: 27a902a2 */ addiu $t1,$sp,0x2a2 -.L0004d7d8: -/* 4d7d8: 10000044 */ b .L0004d8ec -/* 4d7dc: 2404ffff */ addiu $a0,$zero,-1 -.L0004d7e0: -/* 4d7e0: 95210000 */ lhu $at,0x0($t1) -/* 4d7e4: 00002025 */ or $a0,$zero,$zero -/* 4d7e8: 00008025 */ or $s0,$zero,$zero -/* 4d7ec: a6410000 */ sh $at,0x0($s2) -/* 4d7f0: 8e6d0060 */ lw $t5,0x60($s3) -/* 4d7f4: 97ac04bc */ lhu $t4,0x4bc($sp) -/* 4d7f8: 241600ff */ addiu $s6,$zero,0xff -/* 4d7fc: 93ae04bc */ lbu $t6,0x4bc($sp) -/* 4d800: 018d082a */ slt $at,$t4,$t5 -/* 4d804: 14200039 */ bnez $at,.L0004d8ec -/* 4d808: 00000000 */ nop -/* 4d80c: 926f0064 */ lbu $t7,0x64($s3) -/* 4d810: 93b804bd */ lbu $t8,0x4bd($sp) -/* 4d814: 01cf082a */ slt $at,$t6,$t7 -/* 4d818: 10200034 */ beqz $at,.L0004d8ec -/* 4d81c: 00000000 */ nop -/* 4d820: 1b000032 */ blez $t8,.L0004d8ec -/* 4d824: 2b010080 */ slti $at,$t8,0x80 -/* 4d828: 10200030 */ beqz $at,.L0004d8ec -/* 4d82c: 02c08825 */ or $s1,$s6,$zero -/* 4d830: 93b904bc */ lbu $t9,0x4bc($sp) -.L0004d834: -/* 4d834: 13310010 */ beq $t9,$s1,.L0004d878 -/* 4d838: 0320b025 */ or $s6,$t9,$zero -/* 4d83c: 133e0008 */ beq $t9,$s8,.L0004d860 -/* 4d840: 03208825 */ or $s1,$t9,$zero -/* 4d844: 02602025 */ or $a0,$s3,$zero -/* 4d848: 02a02825 */ or $a1,$s5,$zero -/* 4d84c: 00003025 */ or $a2,$zero,$zero -/* 4d850: 0c01324d */ jal __osPfsRWInode -/* 4d854: 332700ff */ andi $a3,$t9,0xff -/* 4d858: 0040b825 */ or $s7,$v0,$zero -/* 4d85c: 32de00ff */ andi $s8,$s6,0xff -.L0004d860: -/* 4d860: 12e00005 */ beqz $s7,.L0004d878 -/* 4d864: 24010003 */ addiu $at,$zero,0x3 -/* 4d868: 52e10004 */ beql $s7,$at,.L0004d87c -/* 4d86c: 96410000 */ lhu $at,0x0($s2) -/* 4d870: 100000e1 */ b .L0004dbf8 -/* 4d874: 02e01025 */ or $v0,$s7,$zero -.L0004d878: -/* 4d878: 96410000 */ lhu $at,0x0($s2) -.L0004d87c: -/* 4d87c: 02602025 */ or $a0,$s3,$zero -/* 4d880: 27a60078 */ addiu $a2,$sp,0x78 -/* 4d884: a7a10004 */ sh $at,0x4($sp) -/* 4d888: 0c0137bd */ jal func0004def4 -/* 4d88c: 8fa50004 */ lw $a1,0x4($sp) -/* 4d890: 00502023 */ subu $a0,$v0,$s0 -/* 4d894: 14800015 */ bnez $a0,.L0004d8ec -/* 4d898: 93ab04bd */ lbu $t3,0x4bd($sp) -/* 4d89c: 000b6040 */ sll $t4,$t3,0x1 -/* 4d8a0: 02ac6821 */ addu $t5,$s5,$t4 -/* 4d8a4: 95a10000 */ lhu $at,0x0($t5) -/* 4d8a8: 24100001 */ addiu $s0,$zero,0x1 -/* 4d8ac: a6410000 */ sh $at,0x0($s2) -/* 4d8b0: 8e790060 */ lw $t9,0x60($s3) -/* 4d8b4: 97b804bc */ lhu $t8,0x4bc($sp) -/* 4d8b8: 93ab04bd */ lbu $t3,0x4bd($sp) -/* 4d8bc: 93aa04bc */ lbu $t2,0x4bc($sp) -/* 4d8c0: 0319082a */ slt $at,$t8,$t9 -/* 4d8c4: 14200009 */ bnez $at,.L0004d8ec -/* 4d8c8: 00000000 */ nop -/* 4d8cc: 92690064 */ lbu $t1,0x64($s3) -/* 4d8d0: 0149082a */ slt $at,$t2,$t1 -/* 4d8d4: 10200005 */ beqz $at,.L0004d8ec -/* 4d8d8: 00000000 */ nop -/* 4d8dc: 19600003 */ blez $t3,.L0004d8ec -/* 4d8e0: 29610080 */ slti $at,$t3,0x80 -/* 4d8e4: 5420ffd3 */ bnezl $at,.L0004d834 -/* 4d8e8: 93b904bc */ lbu $t9,0x4bc($sp) -.L0004d8ec: -/* 4d8ec: 14800003 */ bnez $a0,.L0004d8fc -/* 4d8f0: 97ac04bc */ lhu $t4,0x4bc($sp) -/* 4d8f4: 24010001 */ addiu $at,$zero,0x1 -/* 4d8f8: 1181001c */ beq $t4,$at,.L0004d96c -.L0004d8fc: -/* 4d8fc: 27a4029c */ addiu $a0,$sp,0x29c -/* 4d900: 0c012c30 */ jal bzero -/* 4d904: 24050020 */ addiu $a1,$zero,0x20 -/* 4d908: 926e0065 */ lbu $t6,0x65($s3) -/* 4d90c: 02602025 */ or $a0,$s3,$zero -/* 4d910: 51c00008 */ beqzl $t6,.L0004d934 -/* 4d914: 8e6d005c */ lw $t5,0x5c($s3) -/* 4d918: 0c013378 */ jal __osPfsSelectBank -/* 4d91c: 00002825 */ or $a1,$zero,$zero -/* 4d920: 50400004 */ beqzl $v0,.L0004d934 -/* 4d924: 8e6d005c */ lw $t5,0x5c($s3) -/* 4d928: 100000b4 */ b .L0004dbfc -/* 4d92c: 8fbf0044 */ lw $ra,0x44($sp) -/* 4d930: 8e6d005c */ lw $t5,0x5c($s3) -.L0004d934: -/* 4d934: 8e640004 */ lw $a0,0x4($s3) -/* 4d938: 8e650008 */ lw $a1,0x8($s3) -/* 4d93c: 01b43021 */ addu $a2,$t5,$s4 -/* 4d940: 30cfffff */ andi $t7,$a2,0xffff -/* 4d944: 01e03025 */ or $a2,$t7,$zero -/* 4d948: afa00010 */ sw $zero,0x10($sp) -/* 4d94c: 0c012d84 */ jal __osContRamWrite -/* 4d950: 27a7029c */ addiu $a3,$sp,0x29c -/* 4d954: 10400003 */ beqz $v0,.L0004d964 -/* 4d958: 8fb80074 */ lw $t8,0x74($sp) -/* 4d95c: 100000a7 */ b .L0004dbfc -/* 4d960: 8fbf0044 */ lw $ra,0x44($sp) -.L0004d964: -/* 4d964: 27190001 */ addiu $t9,$t8,0x1 -/* 4d968: afb90074 */ sw $t9,0x74($sp) -.L0004d96c: -/* 4d96c: 8e620050 */ lw $v0,0x50($s3) -.L0004d970: -/* 4d970: 26940001 */ addiu $s4,$s4,0x1 -/* 4d974: 0282082a */ slt $at,$s4,$v0 -/* 4d978: 5420ff82 */ bnezl $at,.L0004d784 -/* 4d97c: 8e6e005c */ lw $t6,0x5c($s3) -/* 4d980: 0000a025 */ or $s4,$zero,$zero -.L0004d984: -/* 4d984: 18400021 */ blez $v0,.L0004da0c -/* 4d988: 27b502bc */ addiu $s5,$sp,0x2bc -/* 4d98c: 8e6a005c */ lw $t2,0x5c($s3) -.L0004d990: -/* 4d990: 8e640004 */ lw $a0,0x4($s3) -/* 4d994: 8e650008 */ lw $a1,0x8($s3) -/* 4d998: 01543021 */ addu $a2,$t2,$s4 -/* 4d99c: 30c9ffff */ andi $t1,$a2,0xffff -/* 4d9a0: 01203025 */ or $a2,$t1,$zero -/* 4d9a4: 0c012e18 */ jal __osContRamRead -/* 4d9a8: 27a7029c */ addiu $a3,$sp,0x29c -/* 4d9ac: 10400003 */ beqz $v0,.L0004d9bc -/* 4d9b0: 97ae02a0 */ lhu $t6,0x2a0($sp) -/* 4d9b4: 10000091 */ b .L0004dbfc -/* 4d9b8: 8fbf0044 */ lw $ra,0x44($sp) -.L0004d9bc: -/* 4d9bc: 00145840 */ sll $t3,$s4,0x1 -/* 4d9c0: 27ac027c */ addiu $t4,$sp,0x27c -/* 4d9c4: 11c0000b */ beqz $t6,.L0004d9f4 -/* 4d9c8: 016c2021 */ addu $a0,$t3,$t4 -/* 4d9cc: 8fad029c */ lw $t5,0x29c($sp) -/* 4d9d0: 97af02a2 */ lhu $t7,0x2a2($sp) -/* 4d9d4: 51a00008 */ beqzl $t5,.L0004d9f8 -/* 4d9d8: a4800000 */ sh $zero,0x0($a0) -/* 4d9dc: 96780062 */ lhu $t8,0x62($s3) -/* 4d9e0: 01f8082a */ slt $at,$t7,$t8 -/* 4d9e4: 54200004 */ bnezl $at,.L0004d9f8 -/* 4d9e8: a4800000 */ sh $zero,0x0($a0) -/* 4d9ec: 10000002 */ b .L0004d9f8 -/* 4d9f0: a48f0000 */ sh $t7,0x0($a0) -.L0004d9f4: -/* 4d9f4: a4800000 */ sh $zero,0x0($a0) -.L0004d9f8: -/* 4d9f8: 8e790050 */ lw $t9,0x50($s3) -/* 4d9fc: 26940001 */ addiu $s4,$s4,0x1 -/* 4da00: 0299082a */ slt $at,$s4,$t9 -/* 4da04: 5420ffe2 */ bnezl $at,.L0004d990 -/* 4da08: 8e6a005c */ lw $t2,0x5c($s3) -.L0004da0c: -/* 4da0c: 926a0064 */ lbu $t2,0x64($s3) -/* 4da10: 0000b025 */ or $s6,$zero,$zero -/* 4da14: 241e0003 */ addiu $s8,$zero,0x3 -/* 4da18: 1940006b */ blez $t2,.L0004dbc8 -/* 4da1c: 27b203bc */ addiu $s2,$sp,0x3bc -/* 4da20: 27b00060 */ addiu $s0,$sp,0x60 -.L0004da24: -/* 4da24: 02602025 */ or $a0,$s3,$zero -/* 4da28: 02a02825 */ or $a1,$s5,$zero -/* 4da2c: 00003025 */ or $a2,$zero,$zero -/* 4da30: 0c01324d */ jal __osPfsRWInode -/* 4da34: 32c700ff */ andi $a3,$s6,0xff -/* 4da38: 10400006 */ beqz $v0,.L0004da54 -/* 4da3c: 27a804bc */ addiu $t0,$sp,0x4bc -/* 4da40: 24010003 */ addiu $at,$zero,0x3 -/* 4da44: 50410004 */ beql $v0,$at,.L0004da58 -/* 4da48: 02c08825 */ or $s1,$s6,$zero -/* 4da4c: 1000006b */ b .L0004dbfc -/* 4da50: 8fbf0044 */ lw $ra,0x44($sp) -.L0004da54: -/* 4da54: 02c08825 */ or $s1,$s6,$zero -.L0004da58: -/* 4da58: 1ac00003 */ blez $s6,.L0004da68 -/* 4da5c: 0000a025 */ or $s4,$zero,$zero -/* 4da60: 10000002 */ b .L0004da6c -/* 4da64: 24050001 */ addiu $a1,$zero,0x1 -.L0004da68: -/* 4da68: 8e650060 */ lw $a1,0x60($s3) -.L0004da6c: -/* 4da6c: 18a0001c */ blez $a1,.L0004dae0 -/* 4da70: 30a70003 */ andi $a3,$a1,0x3 -/* 4da74: 10e0000b */ beqz $a3,.L0004daa4 -/* 4da78: 00e02025 */ or $a0,$a3,$zero -/* 4da7c: 00143040 */ sll $a2,$s4,0x1 -/* 4da80: 02461821 */ addu $v1,$s2,$a2 -/* 4da84: 02a61021 */ addu $v0,$s5,$a2 -.L0004da88: -/* 4da88: 94490000 */ lhu $t1,0x0($v0) -/* 4da8c: 26940001 */ addiu $s4,$s4,0x1 -/* 4da90: 24630002 */ addiu $v1,$v1,0x2 -/* 4da94: 24420002 */ addiu $v0,$v0,0x2 -/* 4da98: 1494fffb */ bne $a0,$s4,.L0004da88 -/* 4da9c: a469fffe */ sh $t1,-0x2($v1) -/* 4daa0: 1285000f */ beq $s4,$a1,.L0004dae0 -.L0004daa4: -/* 4daa4: 00143040 */ sll $a2,$s4,0x1 -/* 4daa8: 02461821 */ addu $v1,$s2,$a2 -/* 4daac: 02a61021 */ addu $v0,$s5,$a2 -.L0004dab0: -/* 4dab0: 944c0002 */ lhu $t4,0x2($v0) -/* 4dab4: 944e0004 */ lhu $t6,0x4($v0) -/* 4dab8: 944d0006 */ lhu $t5,0x6($v0) -/* 4dabc: 944b0000 */ lhu $t3,0x0($v0) -/* 4dac0: 26940004 */ addiu $s4,$s4,0x4 -/* 4dac4: 24630008 */ addiu $v1,$v1,0x8 -/* 4dac8: 24420008 */ addiu $v0,$v0,0x8 -/* 4dacc: a46cfffa */ sh $t4,-0x6($v1) -/* 4dad0: a46efffc */ sh $t6,-0x4($v1) -/* 4dad4: a46dfffe */ sh $t5,-0x2($v1) -/* 4dad8: 1685fff5 */ bne $s4,$a1,.L0004dab0 -/* 4dadc: a46bfff8 */ sh $t3,-0x8($v1) -.L0004dae0: -/* 4dae0: 2a810080 */ slti $at,$s4,0x80 -/* 4dae4: 10200007 */ beqz $at,.L0004db04 -/* 4dae8: 02402825 */ or $a1,$s2,$zero -/* 4daec: 0014c040 */ sll $t8,$s4,0x1 -/* 4daf0: 02581821 */ addu $v1,$s2,$t8 -.L0004daf4: -/* 4daf4: 24630002 */ addiu $v1,$v1,0x2 -/* 4daf8: 0068082b */ sltu $at,$v1,$t0 -/* 4dafc: 1420fffd */ bnez $at,.L0004daf4 -/* 4db00: a47efffe */ sh $s8,-0x2($v1) -.L0004db04: -/* 4db04: 8e6f0050 */ lw $t7,0x50($s3) -/* 4db08: 0000a025 */ or $s4,$zero,$zero -/* 4db0c: 24060001 */ addiu $a2,$zero,0x1 -/* 4db10: 19e00021 */ blez $t7,.L0004db98 -/* 4db14: 32c700ff */ andi $a3,$s6,0xff -/* 4db18: 27a4027c */ addiu $a0,$sp,0x27c -/* 4db1c: 90990000 */ lbu $t9,0x0($a0) -.L0004db20: -/* 4db20: 56390018 */ bnel $s1,$t9,.L0004db84 -/* 4db24: 8e6e0050 */ lw $t6,0x50($s3) -/* 4db28: 948a0000 */ lhu $t2,0x0($a0) -/* 4db2c: 96690062 */ lhu $t1,0x62($s3) -/* 4db30: 0149082a */ slt $at,$t2,$t1 -/* 4db34: 54200013 */ bnezl $at,.L0004db84 -/* 4db38: 8e6e0050 */ lw $t6,0x50($s3) -/* 4db3c: 90830001 */ lbu $v1,0x1($a0) -.L0004db40: -/* 4db40: 00031040 */ sll $v0,$v1,0x1 -/* 4db44: 02a25821 */ addu $t3,$s5,$v0 -/* 4db48: 95610000 */ lhu $at,0x0($t3) -/* 4db4c: 02426821 */ addu $t5,$s2,$v0 -/* 4db50: a6010000 */ sh $at,0x0($s0) -/* 4db54: a5a10000 */ sh $at,0x0($t5) -/* 4db58: 96010000 */ lhu $at,0x0($s0) -/* 4db5c: a4810000 */ sh $at,0x0($a0) -/* 4db60: 90890000 */ lbu $t1,0x0($a0) -/* 4db64: 56290007 */ bnel $s1,$t1,.L0004db84 -/* 4db68: 8e6e0050 */ lw $t6,0x50($s3) -/* 4db6c: 966b0062 */ lhu $t3,0x62($s3) -/* 4db70: 302cffff */ andi $t4,$at,0xffff -/* 4db74: 018b082a */ slt $at,$t4,$t3 -/* 4db78: 5020fff1 */ beqzl $at,.L0004db40 -/* 4db7c: 90830001 */ lbu $v1,0x1($a0) -/* 4db80: 8e6e0050 */ lw $t6,0x50($s3) -.L0004db84: -/* 4db84: 26940001 */ addiu $s4,$s4,0x1 -/* 4db88: 24840002 */ addiu $a0,$a0,0x2 -/* 4db8c: 028e082a */ slt $at,$s4,$t6 -/* 4db90: 5420ffe3 */ bnezl $at,.L0004db20 -/* 4db94: 90990000 */ lbu $t9,0x0($a0) -.L0004db98: -/* 4db98: 0c01324d */ jal __osPfsRWInode -/* 4db9c: 02602025 */ or $a0,$s3,$zero -/* 4dba0: 50400004 */ beqzl $v0,.L0004dbb4 -/* 4dba4: 926d0064 */ lbu $t5,0x64($s3) -/* 4dba8: 10000014 */ b .L0004dbfc -/* 4dbac: 8fbf0044 */ lw $ra,0x44($sp) -/* 4dbb0: 926d0064 */ lbu $t5,0x64($s3) -.L0004dbb4: -/* 4dbb4: 26d60001 */ addiu $s6,$s6,0x1 -/* 4dbb8: 32d800ff */ andi $t8,$s6,0xff -/* 4dbbc: 030d082a */ slt $at,$t8,$t5 -/* 4dbc0: 1420ff98 */ bnez $at,.L0004da24 -/* 4dbc4: 0300b025 */ or $s6,$t8,$zero -.L0004dbc8: -/* 4dbc8: 8faf0074 */ lw $t7,0x74($sp) -/* 4dbcc: 00001025 */ or $v0,$zero,$zero -/* 4dbd0: 51e00006 */ beqzl $t7,.L0004dbec -/* 4dbd4: 8e690000 */ lw $t1,0x0($s3) -/* 4dbd8: 8e790000 */ lw $t9,0x0($s3) -/* 4dbdc: 372a0002 */ ori $t2,$t9,0x2 -/* 4dbe0: 10000005 */ b .L0004dbf8 -/* 4dbe4: ae6a0000 */ sw $t2,0x0($s3) -/* 4dbe8: 8e690000 */ lw $t1,0x0($s3) -.L0004dbec: -/* 4dbec: 2401fffd */ addiu $at,$zero,-3 -/* 4dbf0: 01216024 */ and $t4,$t1,$at -/* 4dbf4: ae6c0000 */ sw $t4,0x0($s3) -.L0004dbf8: -/* 4dbf8: 8fbf0044 */ lw $ra,0x44($sp) -.L0004dbfc: -/* 4dbfc: 8fb00020 */ lw $s0,0x20($sp) -/* 4dc00: 8fb10024 */ lw $s1,0x24($sp) -/* 4dc04: 8fb20028 */ lw $s2,0x28($sp) -/* 4dc08: 8fb3002c */ lw $s3,0x2c($sp) -/* 4dc0c: 8fb40030 */ lw $s4,0x30($sp) -/* 4dc10: 8fb50034 */ lw $s5,0x34($sp) -/* 4dc14: 8fb60038 */ lw $s6,0x38($sp) -/* 4dc18: 8fb7003c */ lw $s7,0x3c($sp) -/* 4dc1c: 8fbe0040 */ lw $s8,0x40($sp) -/* 4dc20: 03e00008 */ jr $ra -/* 4dc24: 27bd04c8 */ addiu $sp,$sp,0x4c8 -); - -GLOBAL_ASM( -glabel func0004dc28 -/* 4dc28: 27bdfe98 */ addiu $sp,$sp,-360 -/* 4dc2c: afb30024 */ sw $s3,0x24($sp) -/* 4dc30: 00809825 */ or $s3,$a0,$zero -/* 4dc34: afb40028 */ sw $s4,0x28($sp) -/* 4dc38: 00a0a025 */ or $s4,$a1,$zero -/* 4dc3c: afbf003c */ sw $ra,0x3c($sp) -/* 4dc40: afbe0038 */ sw $s8,0x38($sp) -/* 4dc44: afb70034 */ sw $s7,0x34($sp) -/* 4dc48: afb60030 */ sw $s6,0x30($sp) -/* 4dc4c: afb5002c */ sw $s5,0x2c($sp) -/* 4dc50: afb20020 */ sw $s2,0x20($sp) -/* 4dc54: afb1001c */ sw $s1,0x1c($sp) -/* 4dc58: afb00018 */ sw $s0,0x18($sp) -/* 4dc5c: 24040100 */ addiu $a0,$zero,0x100 -/* 4dc60: 00001025 */ or $v0,$zero,$zero -/* 4dc64: 00a01825 */ or $v1,$a1,$zero -.L0004dc68: -/* 4dc68: 24420004 */ addiu $v0,$v0,0x4 -/* 4dc6c: a0600102 */ sb $zero,0x102($v1) -/* 4dc70: a0600103 */ sb $zero,0x103($v1) -/* 4dc74: a0600104 */ sb $zero,0x104($v1) -/* 4dc78: 24630004 */ addiu $v1,$v1,0x4 -/* 4dc7c: 1444fffa */ bne $v0,$a0,.L0004dc68 -/* 4dc80: a06000fd */ sb $zero,0xfd($v1) -/* 4dc84: 240e00ff */ addiu $t6,$zero,0xff -/* 4dc88: a28e0100 */ sb $t6,0x100($s4) -/* 4dc8c: 926f0064 */ lbu $t7,0x64($s3) -/* 4dc90: 0000b825 */ or $s7,$zero,$zero -/* 4dc94: 00008025 */ or $s0,$zero,$zero -/* 4dc98: 19e00089 */ blez $t7,.L0004dec0 -/* 4dc9c: 241e0080 */ addiu $s8,$zero,0x80 -/* 4dca0: 27b6015a */ addiu $s6,$sp,0x15a -/* 4dca4: 27b50058 */ addiu $s5,$sp,0x58 -/* 4dca8: 27b20158 */ addiu $s2,$sp,0x158 -.L0004dcac: -/* 4dcac: 1a000003 */ blez $s0,.L0004dcbc -/* 4dcb0: 02602025 */ or $a0,$s3,$zero -/* 4dcb4: 10000002 */ b .L0004dcc0 -/* 4dcb8: 24110001 */ addiu $s1,$zero,0x1 -.L0004dcbc: -/* 4dcbc: 8e710060 */ lw $s1,0x60($s3) -.L0004dcc0: -/* 4dcc0: 02a02825 */ or $a1,$s5,$zero -/* 4dcc4: 00003025 */ or $a2,$zero,$zero -/* 4dcc8: 0c01324d */ jal __osPfsRWInode -/* 4dccc: 32e700ff */ andi $a3,$s7,0xff -/* 4dcd0: 10400005 */ beqz $v0,.L0004dce8 -/* 4dcd4: 24010003 */ addiu $at,$zero,0x3 -/* 4dcd8: 50410004 */ beql $v0,$at,.L0004dcec -/* 4dcdc: 2a210080 */ slti $at,$s1,0x80 -/* 4dce0: 10000079 */ b .L0004dec8 -/* 4dce4: 8fbf003c */ lw $ra,0x3c($sp) -.L0004dce8: -/* 4dce8: 2a210080 */ slti $at,$s1,0x80 -.L0004dcec: -/* 4dcec: 1020006e */ beqz $at,.L0004dea8 -/* 4dcf0: 02201025 */ or $v0,$s1,$zero -/* 4dcf4: 03d11823 */ subu $v1,$s8,$s1 -/* 4dcf8: 30780001 */ andi $t8,$v1,0x1 -/* 4dcfc: 13000024 */ beqz $t8,.L0004dd90 -/* 4dd00: 0011c840 */ sll $t9,$s1,0x1 -/* 4dd04: 02b94021 */ addu $t0,$s5,$t9 -/* 4dd08: 95010000 */ lhu $at,0x0($t0) -/* 4dd0c: a6410000 */ sh $at,0x0($s2) -/* 4dd10: 8e6c0060 */ lw $t4,0x60($s3) -/* 4dd14: 97ab0158 */ lhu $t3,0x158($sp) -/* 4dd18: 93ad0158 */ lbu $t5,0x158($sp) -/* 4dd1c: 016c082a */ slt $at,$t3,$t4 -/* 4dd20: 5420001a */ bnezl $at,.L0004dd8c -/* 4dd24: 26220001 */ addiu $v0,$s1,0x1 -/* 4dd28: 120d0017 */ beq $s0,$t5,.L0004dd88 -/* 4dd2c: 93ae0159 */ lbu $t6,0x159($sp) -/* 4dd30: 05c10003 */ bgez $t6,.L0004dd40 -/* 4dd34: 000e7883 */ sra $t7,$t6,0x2 -/* 4dd38: 25c10003 */ addiu $at,$t6,0x3 -/* 4dd3c: 00017883 */ sra $t7,$at,0x2 -.L0004dd40: -/* 4dd40: 05a10004 */ bgez $t5,.L0004dd54 -/* 4dd44: 31b80007 */ andi $t8,$t5,0x7 -/* 4dd48: 13000002 */ beqz $t8,.L0004dd54 -/* 4dd4c: 00000000 */ nop -/* 4dd50: 2718fff8 */ addiu $t8,$t8,-8 -.L0004dd54: -/* 4dd54: 0018c940 */ sll $t9,$t8,0x5 -/* 4dd58: 01f91821 */ addu $v1,$t7,$t9 -/* 4dd5c: 02831021 */ addu $v0,$s4,$v1 -/* 4dd60: 90490101 */ lbu $t1,0x101($v0) -/* 4dd64: 06010004 */ bgez $s0,.L0004dd78 -/* 4dd68: 32080007 */ andi $t0,$s0,0x7 -/* 4dd6c: 11000002 */ beqz $t0,.L0004dd78 -/* 4dd70: 00000000 */ nop -/* 4dd74: 2508fff8 */ addiu $t0,$t0,-8 -.L0004dd78: -/* 4dd78: 240a0001 */ addiu $t2,$zero,0x1 -/* 4dd7c: 010a5804 */ sllv $t3,$t2,$t0 -/* 4dd80: 012b6025 */ or $t4,$t1,$t3 -/* 4dd84: a04c0101 */ sb $t4,0x101($v0) -.L0004dd88: -/* 4dd88: 26220001 */ addiu $v0,$s1,0x1 -.L0004dd8c: -/* 4dd8c: 105e0046 */ beq $v0,$s8,.L0004dea8 -.L0004dd90: -/* 4dd90: 00027040 */ sll $t6,$v0,0x1 -/* 4dd94: 02ae2821 */ addu $a1,$s5,$t6 -/* 4dd98: 24a40002 */ addiu $a0,$a1,0x2 -.L0004dd9c: -/* 4dd9c: 94a10000 */ lhu $at,0x0($a1) -/* 4dda0: a6410000 */ sh $at,0x0($s2) -/* 4dda4: 8e790060 */ lw $t9,0x60($s3) -/* 4dda8: 97af0158 */ lhu $t7,0x158($sp) -/* 4ddac: 93aa0158 */ lbu $t2,0x158($sp) -/* 4ddb0: 01f9082a */ slt $at,$t7,$t9 -/* 4ddb4: 5420001a */ bnezl $at,.L0004de20 -/* 4ddb8: 94810000 */ lhu $at,0x0($a0) -/* 4ddbc: 120a0017 */ beq $s0,$t2,.L0004de1c -/* 4ddc0: 93a80159 */ lbu $t0,0x159($sp) -/* 4ddc4: 05010003 */ bgez $t0,.L0004ddd4 -/* 4ddc8: 00084883 */ sra $t1,$t0,0x2 -/* 4ddcc: 25010003 */ addiu $at,$t0,0x3 -/* 4ddd0: 00014883 */ sra $t1,$at,0x2 -.L0004ddd4: -/* 4ddd4: 05410004 */ bgez $t2,.L0004dde8 -/* 4ddd8: 314b0007 */ andi $t3,$t2,0x7 -/* 4dddc: 11600002 */ beqz $t3,.L0004dde8 -/* 4dde0: 00000000 */ nop -/* 4dde4: 256bfff8 */ addiu $t3,$t3,-8 -.L0004dde8: -/* 4dde8: 000b6140 */ sll $t4,$t3,0x5 -/* 4ddec: 012c1821 */ addu $v1,$t1,$t4 -/* 4ddf0: 02831021 */ addu $v0,$s4,$v1 -/* 4ddf4: 904e0101 */ lbu $t6,0x101($v0) -/* 4ddf8: 06010004 */ bgez $s0,.L0004de0c -/* 4ddfc: 320d0007 */ andi $t5,$s0,0x7 -/* 4de00: 11a00002 */ beqz $t5,.L0004de0c -/* 4de04: 00000000 */ nop -/* 4de08: 25adfff8 */ addiu $t5,$t5,-8 -.L0004de0c: -/* 4de0c: 24180001 */ addiu $t8,$zero,0x1 -/* 4de10: 01b87804 */ sllv $t7,$t8,$t5 -/* 4de14: 01cfc825 */ or $t9,$t6,$t7 -/* 4de18: a0590101 */ sb $t9,0x101($v0) -.L0004de1c: -/* 4de1c: 94810000 */ lhu $at,0x0($a0) -.L0004de20: -/* 4de20: 24840004 */ addiu $a0,$a0,0x4 -/* 4de24: a6410000 */ sh $at,0x0($s2) -/* 4de28: 8e690060 */ lw $t1,0x60($s3) -/* 4de2c: 97ab0158 */ lhu $t3,0x158($sp) -/* 4de30: 93ac0158 */ lbu $t4,0x158($sp) -/* 4de34: 0169082a */ slt $at,$t3,$t1 -/* 4de38: 14200019 */ bnez $at,.L0004dea0 -/* 4de3c: 00000000 */ nop -/* 4de40: 120c0017 */ beq $s0,$t4,.L0004dea0 -/* 4de44: 93b80159 */ lbu $t8,0x159($sp) -/* 4de48: 07010003 */ bgez $t8,.L0004de58 -/* 4de4c: 00186883 */ sra $t5,$t8,0x2 -/* 4de50: 27010003 */ addiu $at,$t8,0x3 -/* 4de54: 00016883 */ sra $t5,$at,0x2 -.L0004de58: -/* 4de58: 05810004 */ bgez $t4,.L0004de6c -/* 4de5c: 318e0007 */ andi $t6,$t4,0x7 -/* 4de60: 11c00002 */ beqz $t6,.L0004de6c -/* 4de64: 00000000 */ nop -/* 4de68: 25cefff8 */ addiu $t6,$t6,-8 -.L0004de6c: -/* 4de6c: 000e7940 */ sll $t7,$t6,0x5 -/* 4de70: 01af1821 */ addu $v1,$t5,$t7 -/* 4de74: 02831021 */ addu $v0,$s4,$v1 -/* 4de78: 90590101 */ lbu $t9,0x101($v0) -/* 4de7c: 06010004 */ bgez $s0,.L0004de90 -/* 4de80: 32080007 */ andi $t0,$s0,0x7 -/* 4de84: 11000002 */ beqz $t0,.L0004de90 -/* 4de88: 00000000 */ nop -/* 4de8c: 2508fff8 */ addiu $t0,$t0,-8 -.L0004de90: -/* 4de90: 240a0001 */ addiu $t2,$zero,0x1 -/* 4de94: 010a5804 */ sllv $t3,$t2,$t0 -/* 4de98: 032b4825 */ or $t1,$t9,$t3 -/* 4de9c: a0490101 */ sb $t1,0x101($v0) -.L0004dea0: -/* 4dea0: 1496ffbe */ bne $a0,$s6,.L0004dd9c -/* 4dea4: 24a50004 */ addiu $a1,$a1,0x4 -.L0004dea8: -/* 4dea8: 926c0064 */ lbu $t4,0x64($s3) -/* 4deac: 26f70001 */ addiu $s7,$s7,0x1 -/* 4deb0: 32f000ff */ andi $s0,$s7,0xff -/* 4deb4: 020c082a */ slt $at,$s0,$t4 -/* 4deb8: 1420ff7c */ bnez $at,.L0004dcac -/* 4debc: 0200b825 */ or $s7,$s0,$zero -.L0004dec0: -/* 4dec0: 00001025 */ or $v0,$zero,$zero -/* 4dec4: 8fbf003c */ lw $ra,0x3c($sp) -.L0004dec8: -/* 4dec8: 8fb00018 */ lw $s0,0x18($sp) -/* 4decc: 8fb1001c */ lw $s1,0x1c($sp) -/* 4ded0: 8fb20020 */ lw $s2,0x20($sp) -/* 4ded4: 8fb30024 */ lw $s3,0x24($sp) -/* 4ded8: 8fb40028 */ lw $s4,0x28($sp) -/* 4dedc: 8fb5002c */ lw $s5,0x2c($sp) -/* 4dee0: 8fb60030 */ lw $s6,0x30($sp) -/* 4dee4: 8fb70034 */ lw $s7,0x34($sp) -/* 4dee8: 8fbe0038 */ lw $s8,0x38($sp) -/* 4deec: 03e00008 */ jr $ra -/* 4def0: 27bd0168 */ addiu $sp,$sp,0x168 -); - -GLOBAL_ASM( -glabel func0004def4 -/* 4def4: 27bdffc8 */ addiu $sp,$sp,-56 -/* 4def8: afa5003c */ sw $a1,0x3c($sp) -/* 4defc: 93b8003c */ lbu $t8,0x3c($sp) -/* 4df00: afb40028 */ sw $s4,0x28($sp) -/* 4df04: 93ae003d */ lbu $t6,0x3d($sp) -/* 4df08: 0080a025 */ or $s4,$a0,$zero -/* 4df0c: afbf0034 */ sw $ra,0x34($sp) -/* 4df10: afb60030 */ sw $s6,0x30($sp) -/* 4df14: afb5002c */ sw $s5,0x2c($sp) -/* 4df18: afb30024 */ sw $s3,0x24($sp) -/* 4df1c: afb20020 */ sw $s2,0x20($sp) -/* 4df20: afb1001c */ sw $s1,0x1c($sp) -/* 4df24: afb00018 */ sw $s0,0x18($sp) -/* 4df28: 92890064 */ lbu $t1,0x64($s4) -/* 4df2c: 00c09825 */ or $s3,$a2,$zero -/* 4df30: 00008025 */ or $s0,$zero,$zero -/* 4df34: 05c10003 */ bgez $t6,.L0004df44 -/* 4df38: 000e7883 */ sra $t7,$t6,0x2 -/* 4df3c: 25c10003 */ addiu $at,$t6,0x3 -/* 4df40: 00017883 */ sra $t7,$at,0x2 -.L0004df44: -/* 4df44: 07010004 */ bgez $t8,.L0004df58 -/* 4df48: 33190007 */ andi $t9,$t8,0x7 -/* 4df4c: 13200002 */ beqz $t9,.L0004df58 -/* 4df50: 00000000 */ nop -/* 4df54: 2739fff8 */ addiu $t9,$t9,-8 -.L0004df58: -/* 4df58: 00194140 */ sll $t0,$t9,0x5 -/* 4df5c: 01e8b021 */ addu $s6,$t7,$t0 -/* 4df60: 19200040 */ blez $t1,.L0004e064 -/* 4df64: 00009025 */ or $s2,$zero,$zero -/* 4df68: 00001025 */ or $v0,$zero,$zero -/* 4df6c: 24150003 */ addiu $s5,$zero,0x3 -.L0004df70: -/* 4df70: 18400003 */ blez $v0,.L0004df80 -/* 4df74: 93aa003c */ lbu $t2,0x3c($sp) -/* 4df78: 10000002 */ b .L0004df84 -/* 4df7c: 24110001 */ addiu $s1,$zero,0x1 -.L0004df80: -/* 4df80: 8e910060 */ lw $s1,0x60($s4) -.L0004df84: -/* 4df84: 1142000c */ beq $t2,$v0,.L0004dfb8 -/* 4df88: 02765821 */ addu $t3,$s3,$s6 -/* 4df8c: 916c0101 */ lbu $t4,0x101($t3) -/* 4df90: 04410004 */ bgez $v0,.L0004dfa4 -/* 4df94: 304d0007 */ andi $t5,$v0,0x7 -/* 4df98: 11a00002 */ beqz $t5,.L0004dfa4 -/* 4df9c: 00000000 */ nop -/* 4dfa0: 25adfff8 */ addiu $t5,$t5,-8 -.L0004dfa4: -/* 4dfa4: 240e0001 */ addiu $t6,$zero,0x1 -/* 4dfa8: 01aec004 */ sllv $t8,$t6,$t5 -/* 4dfac: 0198c824 */ and $t9,$t4,$t8 -/* 4dfb0: 53200027 */ beqzl $t9,.L0004e050 -/* 4dfb4: 928b0064 */ lbu $t3,0x64($s4) -.L0004dfb8: -/* 4dfb8: 926f0100 */ lbu $t7,0x100($s3) -/* 4dfbc: 02802025 */ or $a0,$s4,$zero -/* 4dfc0: 02602825 */ or $a1,$s3,$zero -/* 4dfc4: 11e2000a */ beq $t7,$v0,.L0004dff0 -/* 4dfc8: 00003025 */ or $a2,$zero,$zero -/* 4dfcc: 0c01324d */ jal __osPfsRWInode -/* 4dfd0: 324700ff */ andi $a3,$s2,0xff -/* 4dfd4: 50400006 */ beqzl $v0,.L0004dff0 -/* 4dfd8: a2720100 */ sb $s2,0x100($s3) -/* 4dfdc: 50550004 */ beql $v0,$s5,.L0004dff0 -/* 4dfe0: a2720100 */ sb $s2,0x100($s3) -/* 4dfe4: 10000021 */ b .L0004e06c -/* 4dfe8: 8fbf0034 */ lw $ra,0x34($sp) -/* 4dfec: a2720100 */ sb $s2,0x100($s3) -.L0004dff0: -/* 4dff0: 2a010002 */ slti $at,$s0,0x2 -/* 4dff4: 10200010 */ beqz $at,.L0004e038 -/* 4dff8: 2a210080 */ slti $at,$s1,0x80 -/* 4dffc: 1020000e */ beqz $at,.L0004e038 -/* 4e000: 00111040 */ sll $v0,$s1,0x1 -/* 4e004: 02621821 */ addu $v1,$s3,$v0 -/* 4e008: 97a8003c */ lhu $t0,0x3c($sp) -.L0004e00c: -/* 4e00c: 94690000 */ lhu $t1,0x0($v1) -/* 4e010: 24420002 */ addiu $v0,$v0,0x2 -/* 4e014: 55090003 */ bnel $t0,$t1,.L0004e024 -/* 4e018: 2a010002 */ slti $at,$s0,0x2 -/* 4e01c: 26100001 */ addiu $s0,$s0,0x1 -/* 4e020: 2a010002 */ slti $at,$s0,0x2 -.L0004e024: -/* 4e024: 10200004 */ beqz $at,.L0004e038 -/* 4e028: 24630002 */ addiu $v1,$v1,0x2 -/* 4e02c: 28410100 */ slti $at,$v0,0x100 -/* 4e030: 5420fff6 */ bnezl $at,.L0004e00c -/* 4e034: 97a8003c */ lhu $t0,0x3c($sp) -.L0004e038: -/* 4e038: 2a010002 */ slti $at,$s0,0x2 -/* 4e03c: 54200004 */ bnezl $at,.L0004e050 -/* 4e040: 928b0064 */ lbu $t3,0x64($s4) -/* 4e044: 10000008 */ b .L0004e068 -/* 4e048: 24020002 */ addiu $v0,$zero,0x2 -/* 4e04c: 928b0064 */ lbu $t3,0x64($s4) -.L0004e050: -/* 4e050: 26520001 */ addiu $s2,$s2,0x1 -/* 4e054: 324200ff */ andi $v0,$s2,0xff -/* 4e058: 004b082a */ slt $at,$v0,$t3 -/* 4e05c: 1420ffc4 */ bnez $at,.L0004df70 -/* 4e060: 00409025 */ or $s2,$v0,$zero -.L0004e064: -/* 4e064: 02001025 */ or $v0,$s0,$zero -.L0004e068: -/* 4e068: 8fbf0034 */ lw $ra,0x34($sp) -.L0004e06c: -/* 4e06c: 8fb00018 */ lw $s0,0x18($sp) -/* 4e070: 8fb1001c */ lw $s1,0x1c($sp) -/* 4e074: 8fb20020 */ lw $s2,0x20($sp) -/* 4e078: 8fb30024 */ lw $s3,0x24($sp) -/* 4e07c: 8fb40028 */ lw $s4,0x28($sp) -/* 4e080: 8fb5002c */ lw $s5,0x2c($sp) -/* 4e084: 8fb60030 */ lw $s6,0x30($sp) -/* 4e088: 03e00008 */ jr $ra -/* 4e08c: 27bd0038 */ addiu $sp,$sp,0x38 -); - -GLOBAL_ASM( -glabel func0004e090 -/* 4e090: 28c10010 */ slti $at,$a2,0x10 -/* 4e094: 14200037 */ bnez $at,.L0004e174 -/* 4e098: 00851026 */ xor $v0,$a0,$a1 -/* 4e09c: 30420003 */ andi $v0,$v0,0x3 -/* 4e0a0: 14400019 */ bnez $v0,.L0004e108 -/* 4e0a4: 0004c023 */ negu $t8,$a0 -/* 4e0a8: 33180003 */ andi $t8,$t8,0x3 -/* 4e0ac: 13000007 */ beqz $t8,.L0004e0cc -/* 4e0b0: 00d83023 */ subu $a2,$a2,$t8 -/* 4e0b4: 00601025 */ or $v0,$v1,$zero -/* 4e0b8: 88820000 */ lwl $v0,0x0($a0) -/* 4e0bc: 88a30000 */ lwl $v1,0x0($a1) -/* 4e0c0: 00982021 */ addu $a0,$a0,$t8 -/* 4e0c4: 00b82821 */ addu $a1,$a1,$t8 -/* 4e0c8: 14430036 */ bne $v0,$v1,.L0004e1a4 -.L0004e0cc: -/* 4e0cc: 2401fffc */ addiu $at,$zero,-4 -/* 4e0d0: 00c13824 */ and $a3,$a2,$at -/* 4e0d4: 10e00027 */ beqz $a3,.L0004e174 -/* 4e0d8: 00c73023 */ subu $a2,$a2,$a3 -/* 4e0dc: 00e43821 */ addu $a3,$a3,$a0 -/* 4e0e0: 8c820000 */ lw $v0,0x0($a0) -.L0004e0e4: -/* 4e0e4: 8ca30000 */ lw $v1,0x0($a1) -/* 4e0e8: 24840004 */ addiu $a0,$a0,0x4 -/* 4e0ec: 24a50004 */ addiu $a1,$a1,0x4 -/* 4e0f0: 1443002c */ bne $v0,$v1,.L0004e1a4 -/* 4e0f4: 00000000 */ nop -/* 4e0f8: 5487fffa */ bnel $a0,$a3,.L0004e0e4 -/* 4e0fc: 8c820000 */ lw $v0,0x0($a0) -/* 4e100: 1000001c */ b .L0004e174 -/* 4e104: 00000000 */ nop -.L0004e108: -/* 4e108: 00053823 */ negu $a3,$a1 -/* 4e10c: 30e70003 */ andi $a3,$a3,0x3 -/* 4e110: 10e0000a */ beqz $a3,.L0004e13c -/* 4e114: 00c73023 */ subu $a2,$a2,$a3 -/* 4e118: 00e43821 */ addu $a3,$a3,$a0 -/* 4e11c: 90820000 */ lbu $v0,0x0($a0) -.L0004e120: -/* 4e120: 90a30000 */ lbu $v1,0x0($a1) -/* 4e124: 24840001 */ addiu $a0,$a0,0x1 -/* 4e128: 24a50001 */ addiu $a1,$a1,0x1 -/* 4e12c: 1443001d */ bne $v0,$v1,.L0004e1a4 -/* 4e130: 00000000 */ nop -/* 4e134: 5487fffa */ bnel $a0,$a3,.L0004e120 -/* 4e138: 90820000 */ lbu $v0,0x0($a0) -.L0004e13c: -/* 4e13c: 2401fffc */ addiu $at,$zero,-4 -/* 4e140: 00c13824 */ and $a3,$a2,$at -/* 4e144: 10e0000b */ beqz $a3,.L0004e174 -/* 4e148: 00c73023 */ subu $a2,$a2,$a3 -/* 4e14c: 00e43821 */ addu $a3,$a3,$a0 -/* 4e150: 88820000 */ lwl $v0,0x0($a0) -.L0004e154: -/* 4e154: 8ca30000 */ lw $v1,0x0($a1) -/* 4e158: 98820003 */ lwr $v0,0x3($a0) -/* 4e15c: 24840004 */ addiu $a0,$a0,0x4 -/* 4e160: 24a50004 */ addiu $a1,$a1,0x4 -/* 4e164: 1443000f */ bne $v0,$v1,.L0004e1a4 -/* 4e168: 00000000 */ nop -/* 4e16c: 5487fff9 */ bnel $a0,$a3,.L0004e154 -/* 4e170: 88820000 */ lwl $v0,0x0($a0) -.L0004e174: -/* 4e174: 18c00009 */ blez $a2,.L0004e19c -/* 4e178: 00c43821 */ addu $a3,$a2,$a0 -/* 4e17c: 90820000 */ lbu $v0,0x0($a0) -.L0004e180: -/* 4e180: 90a30000 */ lbu $v1,0x0($a1) -/* 4e184: 24840001 */ addiu $a0,$a0,0x1 -/* 4e188: 24a50001 */ addiu $a1,$a1,0x1 -/* 4e18c: 14430005 */ bne $v0,$v1,.L0004e1a4 -/* 4e190: 00000000 */ nop -/* 4e194: 5487fffa */ bnel $a0,$a3,.L0004e180 -/* 4e198: 90820000 */ lbu $v0,0x0($a0) -.L0004e19c: -/* 4e19c: 03e00008 */ jr $ra -/* 4e1a0: 00001025 */ or $v0,$zero,$zero -.L0004e1a4: -/* 4e1a4: 03e00008 */ jr $ra -/* 4e1a8: 24020001 */ addiu $v0,$zero,0x1 -); diff --git a/src/lib/lib_4e090.c b/src/lib/lib_4e090.c new file mode 100644 index 000000000..28d69a368 --- /dev/null +++ b/src/lib/lib_4e090.c @@ -0,0 +1,93 @@ +#include +#include "libultra_internal.h" +#include "constants.h" +#include "bss.h" +#include "lib/libc/ll.h" +#include "lib/lib_4e090.h" +#include "data.h" +#include "types.h" + +GLOBAL_ASM( +glabel func0004e090 +/* 4e090: 28c10010 */ slti $at,$a2,0x10 +/* 4e094: 14200037 */ bnez $at,.L0004e174 +/* 4e098: 00851026 */ xor $v0,$a0,$a1 +/* 4e09c: 30420003 */ andi $v0,$v0,0x3 +/* 4e0a0: 14400019 */ bnez $v0,.L0004e108 +/* 4e0a4: 0004c023 */ negu $t8,$a0 +/* 4e0a8: 33180003 */ andi $t8,$t8,0x3 +/* 4e0ac: 13000007 */ beqz $t8,.L0004e0cc +/* 4e0b0: 00d83023 */ subu $a2,$a2,$t8 +/* 4e0b4: 00601025 */ or $v0,$v1,$zero +/* 4e0b8: 88820000 */ lwl $v0,0x0($a0) +/* 4e0bc: 88a30000 */ lwl $v1,0x0($a1) +/* 4e0c0: 00982021 */ addu $a0,$a0,$t8 +/* 4e0c4: 00b82821 */ addu $a1,$a1,$t8 +/* 4e0c8: 14430036 */ bne $v0,$v1,.L0004e1a4 +.L0004e0cc: +/* 4e0cc: 2401fffc */ addiu $at,$zero,-4 +/* 4e0d0: 00c13824 */ and $a3,$a2,$at +/* 4e0d4: 10e00027 */ beqz $a3,.L0004e174 +/* 4e0d8: 00c73023 */ subu $a2,$a2,$a3 +/* 4e0dc: 00e43821 */ addu $a3,$a3,$a0 +/* 4e0e0: 8c820000 */ lw $v0,0x0($a0) +.L0004e0e4: +/* 4e0e4: 8ca30000 */ lw $v1,0x0($a1) +/* 4e0e8: 24840004 */ addiu $a0,$a0,0x4 +/* 4e0ec: 24a50004 */ addiu $a1,$a1,0x4 +/* 4e0f0: 1443002c */ bne $v0,$v1,.L0004e1a4 +/* 4e0f4: 00000000 */ nop +/* 4e0f8: 5487fffa */ bnel $a0,$a3,.L0004e0e4 +/* 4e0fc: 8c820000 */ lw $v0,0x0($a0) +/* 4e100: 1000001c */ b .L0004e174 +/* 4e104: 00000000 */ nop +.L0004e108: +/* 4e108: 00053823 */ negu $a3,$a1 +/* 4e10c: 30e70003 */ andi $a3,$a3,0x3 +/* 4e110: 10e0000a */ beqz $a3,.L0004e13c +/* 4e114: 00c73023 */ subu $a2,$a2,$a3 +/* 4e118: 00e43821 */ addu $a3,$a3,$a0 +/* 4e11c: 90820000 */ lbu $v0,0x0($a0) +.L0004e120: +/* 4e120: 90a30000 */ lbu $v1,0x0($a1) +/* 4e124: 24840001 */ addiu $a0,$a0,0x1 +/* 4e128: 24a50001 */ addiu $a1,$a1,0x1 +/* 4e12c: 1443001d */ bne $v0,$v1,.L0004e1a4 +/* 4e130: 00000000 */ nop +/* 4e134: 5487fffa */ bnel $a0,$a3,.L0004e120 +/* 4e138: 90820000 */ lbu $v0,0x0($a0) +.L0004e13c: +/* 4e13c: 2401fffc */ addiu $at,$zero,-4 +/* 4e140: 00c13824 */ and $a3,$a2,$at +/* 4e144: 10e0000b */ beqz $a3,.L0004e174 +/* 4e148: 00c73023 */ subu $a2,$a2,$a3 +/* 4e14c: 00e43821 */ addu $a3,$a3,$a0 +/* 4e150: 88820000 */ lwl $v0,0x0($a0) +.L0004e154: +/* 4e154: 8ca30000 */ lw $v1,0x0($a1) +/* 4e158: 98820003 */ lwr $v0,0x3($a0) +/* 4e15c: 24840004 */ addiu $a0,$a0,0x4 +/* 4e160: 24a50004 */ addiu $a1,$a1,0x4 +/* 4e164: 1443000f */ bne $v0,$v1,.L0004e1a4 +/* 4e168: 00000000 */ nop +/* 4e16c: 5487fff9 */ bnel $a0,$a3,.L0004e154 +/* 4e170: 88820000 */ lwl $v0,0x0($a0) +.L0004e174: +/* 4e174: 18c00009 */ blez $a2,.L0004e19c +/* 4e178: 00c43821 */ addu $a3,$a2,$a0 +/* 4e17c: 90820000 */ lbu $v0,0x0($a0) +.L0004e180: +/* 4e180: 90a30000 */ lbu $v1,0x0($a1) +/* 4e184: 24840001 */ addiu $a0,$a0,0x1 +/* 4e188: 24a50001 */ addiu $a1,$a1,0x1 +/* 4e18c: 14430005 */ bne $v0,$v1,.L0004e1a4 +/* 4e190: 00000000 */ nop +/* 4e194: 5487fffa */ bnel $a0,$a3,.L0004e180 +/* 4e198: 90820000 */ lbu $v0,0x0($a0) +.L0004e19c: +/* 4e19c: 03e00008 */ jr $ra +/* 4e1a0: 00001025 */ or $v0,$zero,$zero +.L0004e1a4: +/* 4e1a4: 03e00008 */ jr $ra +/* 4e1a8: 24020001 */ addiu $v0,$zero,0x1 +); diff --git a/src/lib/lib_50a00.c b/src/lib/lib_50a00.c index 6bea68fdf..cc79fa48b 100644 --- a/src/lib/lib_50a00.c +++ b/src/lib/lib_50a00.c @@ -5,7 +5,7 @@ #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" #include "data.h" diff --git a/src/lib/lib_50be0.c b/src/lib/lib_50be0.c index fd4a72fd7..faae1fa7e 100644 --- a/src/lib/lib_50be0.c +++ b/src/lib/lib_50be0.c @@ -5,7 +5,7 @@ #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" #include "data.h" diff --git a/src/lib/lib_50d60.c b/src/lib/lib_50d60.c index f8e5b1d21..59da662b6 100644 --- a/src/lib/lib_50d60.c +++ b/src/lib/lib_50d60.c @@ -5,7 +5,7 @@ #include "lib/lib_06100.h" #include "lib/lib_06330.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" #include "data.h" diff --git a/src/lib/lib_50f20.c b/src/lib/lib_50f20.c index 6f12f01f9..8464644c3 100644 --- a/src/lib/lib_50f20.c +++ b/src/lib/lib_50f20.c @@ -3,7 +3,7 @@ #include "bss.h" #include "lib/lib_06330.h" #include "lib/libc/ll.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_50a00.h" #include "lib/lib_513b0.h" #include "data.h" diff --git a/src/lib/lib_513b0.c b/src/lib/lib_513b0.c index ebd729906..6f28ab816 100644 --- a/src/lib/lib_513b0.c +++ b/src/lib/lib_513b0.c @@ -3,7 +3,7 @@ #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_513b0.h" #include "lib/lib_52360.h" #include "data.h" diff --git a/src/lib/lib_51570.c b/src/lib/lib_51570.c index 39ef45a34..aaf862f64 100644 --- a/src/lib/lib_51570.c +++ b/src/lib/lib_51570.c @@ -3,7 +3,7 @@ #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "lib/lib_513b0.h" #include "lib/lib_52360.h" #include "data.h" diff --git a/src/lib/ultra/io/contpfs.c b/src/lib/ultra/io/contpfs.c index a2e9477ae..f04e13db5 100644 --- a/src/lib/ultra/io/contpfs.c +++ b/src/lib/ultra/io/contpfs.c @@ -3,7 +3,7 @@ #include "constants.h" #include "bss.h" #include "lib/lib_4b170.h" -#include "lib/lib_4d6f0.h" +#include "lib/lib_4e090.h" #include "data.h" #include "types.h" diff --git a/src/lib/ultra/io/pfschecker.c b/src/lib/ultra/io/pfschecker.c new file mode 100644 index 000000000..8d142445a --- /dev/null +++ b/src/lib/ultra/io/pfschecker.c @@ -0,0 +1,478 @@ +#include +#include "libultra_internal.h" +#include "constants.h" +#include "bss.h" +#include "lib/libc/ll.h" +#include "data.h" +#include "types.h" + +s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache); +s32 corrupted(OSPfs *pfs, __OSInodeUnit fpage, __OSInodeCache *cache); + +s32 osPfsChecker(OSPfs *pfs) +{ + int j; + s32 ret; + __OSInodeUnit next_page; + __OSInode checked_inode; + __OSInode tmp_inode; + __OSDir tmp_dir; + __OSInodeUnit file_next_node[16]; + __OSInodeCache cache; + int fixed; + u8 bank; + s32 cc; + s32 cl; + int offset; + u8 prevbank; + + fixed = 0; + prevbank = 254; + + ret = __osCheckId(pfs); + + if (ret == PFS_ERR_NEW_PACK) { + ret = __osGetId(pfs); + } + + if (ret != 0) { + return ret; + } + + ERRCK(corrupted_init(pfs, &cache)); + + for (j = 0; j < pfs->dir_size; j++) { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir)); + + if (tmp_dir.company_code != 0 || tmp_dir.game_code != 0) { + if (tmp_dir.company_code == 0 || tmp_dir.game_code == 0) { + cc = -1; + } else { + next_page = tmp_dir.start_page; + cc = 0; + cl = 0; + bank = 255; + + while (next_page.ipage >= pfs->inode_start_page + && next_page.inode_t.bank < pfs->banks + && next_page.inode_t.page > 0 + && next_page.inode_t.page < 128) { + if (bank != next_page.inode_t.bank) { + bank = next_page.inode_t.bank; + + if (prevbank != bank) { + ret = __osPfsRWInode(pfs, &tmp_inode, OS_READ, bank); + prevbank = bank; + } + + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) { + return ret; + } + } + + cc = corrupted(pfs, next_page, &cache) - cl; + + if (cc != 0) { + break; + } + + cl = 1; + next_page = tmp_inode.inode_page[next_page.inode_t.page]; + } + } + + if (cc != 0 || next_page.ipage != 1) { + bzero(&tmp_dir, sizeof(__OSDir)); + + if (pfs->activebank != 0) { + ERRCK(__osPfsSelectBank(pfs, 0)); + } + + ERRCK(__osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir, FALSE)); + + fixed++; + } + } + } + + for (j = 0; j < pfs->dir_size; j++) { + ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir)); + + if (tmp_dir.company_code != 0 + && tmp_dir.game_code != 0 + && tmp_dir.start_page.ipage >= ((__OSInodeUnit *)&(pfs->inode_start_page) + 1)->ipage) { + file_next_node[j].ipage = tmp_dir.start_page.ipage; + } else { + file_next_node[j].ipage = 0; + } + } + + for (bank = 0; bank < pfs->banks; bank++) { + ret = __osPfsRWInode(pfs, &tmp_inode, 0, bank); + + if (ret != 0 && ret != PFS_ERR_INCONSISTENT) { + return ret; + } + + if (bank > 0) { + offset = 1; + } else { + offset = pfs->inode_start_page; + } + + for (j = 0; j < offset; j++) { + checked_inode.inode_page[j].ipage = tmp_inode.inode_page[j].ipage; + } + + for (; j < 128; j++) { + checked_inode.inode_page[j].ipage = 3; + } + + for (j = 0; j < pfs->dir_size; j++) { + while (file_next_node[j].inode_t.bank == bank && file_next_node[j].ipage >= ((__OSInodeUnit *)&(pfs->inode_start_page) + 1)->ipage) { + u8 pp = file_next_node[j].inode_t.page; + file_next_node[j] = checked_inode.inode_page[pp] = tmp_inode.inode_page[pp]; + } + } + + ERRCK(__osPfsRWInode(pfs, &checked_inode, OS_WRITE, bank)); + } + + if (fixed) { + pfs->status |= PFS_CORRUPTED; + } else { + pfs->status &= ~PFS_CORRUPTED; + } + + return 0; +} + +GLOBAL_ASM( +glabel corrupted_init +/* 4dc28: 27bdfe98 */ addiu $sp,$sp,-360 +/* 4dc2c: afb30024 */ sw $s3,0x24($sp) +/* 4dc30: 00809825 */ or $s3,$a0,$zero +/* 4dc34: afb40028 */ sw $s4,0x28($sp) +/* 4dc38: 00a0a025 */ or $s4,$a1,$zero +/* 4dc3c: afbf003c */ sw $ra,0x3c($sp) +/* 4dc40: afbe0038 */ sw $s8,0x38($sp) +/* 4dc44: afb70034 */ sw $s7,0x34($sp) +/* 4dc48: afb60030 */ sw $s6,0x30($sp) +/* 4dc4c: afb5002c */ sw $s5,0x2c($sp) +/* 4dc50: afb20020 */ sw $s2,0x20($sp) +/* 4dc54: afb1001c */ sw $s1,0x1c($sp) +/* 4dc58: afb00018 */ sw $s0,0x18($sp) +/* 4dc5c: 24040100 */ addiu $a0,$zero,0x100 +/* 4dc60: 00001025 */ or $v0,$zero,$zero +/* 4dc64: 00a01825 */ or $v1,$a1,$zero +.L0004dc68: +/* 4dc68: 24420004 */ addiu $v0,$v0,0x4 +/* 4dc6c: a0600102 */ sb $zero,0x102($v1) +/* 4dc70: a0600103 */ sb $zero,0x103($v1) +/* 4dc74: a0600104 */ sb $zero,0x104($v1) +/* 4dc78: 24630004 */ addiu $v1,$v1,0x4 +/* 4dc7c: 1444fffa */ bne $v0,$a0,.L0004dc68 +/* 4dc80: a06000fd */ sb $zero,0xfd($v1) +/* 4dc84: 240e00ff */ addiu $t6,$zero,0xff +/* 4dc88: a28e0100 */ sb $t6,0x100($s4) +/* 4dc8c: 926f0064 */ lbu $t7,0x64($s3) +/* 4dc90: 0000b825 */ or $s7,$zero,$zero +/* 4dc94: 00008025 */ or $s0,$zero,$zero +/* 4dc98: 19e00089 */ blez $t7,.L0004dec0 +/* 4dc9c: 241e0080 */ addiu $s8,$zero,0x80 +/* 4dca0: 27b6015a */ addiu $s6,$sp,0x15a +/* 4dca4: 27b50058 */ addiu $s5,$sp,0x58 +/* 4dca8: 27b20158 */ addiu $s2,$sp,0x158 +.L0004dcac: +/* 4dcac: 1a000003 */ blez $s0,.L0004dcbc +/* 4dcb0: 02602025 */ or $a0,$s3,$zero +/* 4dcb4: 10000002 */ b .L0004dcc0 +/* 4dcb8: 24110001 */ addiu $s1,$zero,0x1 +.L0004dcbc: +/* 4dcbc: 8e710060 */ lw $s1,0x60($s3) +.L0004dcc0: +/* 4dcc0: 02a02825 */ or $a1,$s5,$zero +/* 4dcc4: 00003025 */ or $a2,$zero,$zero +/* 4dcc8: 0c01324d */ jal __osPfsRWInode +/* 4dccc: 32e700ff */ andi $a3,$s7,0xff +/* 4dcd0: 10400005 */ beqz $v0,.L0004dce8 +/* 4dcd4: 24010003 */ addiu $at,$zero,0x3 +/* 4dcd8: 50410004 */ beql $v0,$at,.L0004dcec +/* 4dcdc: 2a210080 */ slti $at,$s1,0x80 +/* 4dce0: 10000079 */ b .L0004dec8 +/* 4dce4: 8fbf003c */ lw $ra,0x3c($sp) +.L0004dce8: +/* 4dce8: 2a210080 */ slti $at,$s1,0x80 +.L0004dcec: +/* 4dcec: 1020006e */ beqz $at,.L0004dea8 +/* 4dcf0: 02201025 */ or $v0,$s1,$zero +/* 4dcf4: 03d11823 */ subu $v1,$s8,$s1 +/* 4dcf8: 30780001 */ andi $t8,$v1,0x1 +/* 4dcfc: 13000024 */ beqz $t8,.L0004dd90 +/* 4dd00: 0011c840 */ sll $t9,$s1,0x1 +/* 4dd04: 02b94021 */ addu $t0,$s5,$t9 +/* 4dd08: 95010000 */ lhu $at,0x0($t0) +/* 4dd0c: a6410000 */ sh $at,0x0($s2) +/* 4dd10: 8e6c0060 */ lw $t4,0x60($s3) +/* 4dd14: 97ab0158 */ lhu $t3,0x158($sp) +/* 4dd18: 93ad0158 */ lbu $t5,0x158($sp) +/* 4dd1c: 016c082a */ slt $at,$t3,$t4 +/* 4dd20: 5420001a */ bnezl $at,.L0004dd8c +/* 4dd24: 26220001 */ addiu $v0,$s1,0x1 +/* 4dd28: 120d0017 */ beq $s0,$t5,.L0004dd88 +/* 4dd2c: 93ae0159 */ lbu $t6,0x159($sp) +/* 4dd30: 05c10003 */ bgez $t6,.L0004dd40 +/* 4dd34: 000e7883 */ sra $t7,$t6,0x2 +/* 4dd38: 25c10003 */ addiu $at,$t6,0x3 +/* 4dd3c: 00017883 */ sra $t7,$at,0x2 +.L0004dd40: +/* 4dd40: 05a10004 */ bgez $t5,.L0004dd54 +/* 4dd44: 31b80007 */ andi $t8,$t5,0x7 +/* 4dd48: 13000002 */ beqz $t8,.L0004dd54 +/* 4dd4c: 00000000 */ nop +/* 4dd50: 2718fff8 */ addiu $t8,$t8,-8 +.L0004dd54: +/* 4dd54: 0018c940 */ sll $t9,$t8,0x5 +/* 4dd58: 01f91821 */ addu $v1,$t7,$t9 +/* 4dd5c: 02831021 */ addu $v0,$s4,$v1 +/* 4dd60: 90490101 */ lbu $t1,0x101($v0) +/* 4dd64: 06010004 */ bgez $s0,.L0004dd78 +/* 4dd68: 32080007 */ andi $t0,$s0,0x7 +/* 4dd6c: 11000002 */ beqz $t0,.L0004dd78 +/* 4dd70: 00000000 */ nop +/* 4dd74: 2508fff8 */ addiu $t0,$t0,-8 +.L0004dd78: +/* 4dd78: 240a0001 */ addiu $t2,$zero,0x1 +/* 4dd7c: 010a5804 */ sllv $t3,$t2,$t0 +/* 4dd80: 012b6025 */ or $t4,$t1,$t3 +/* 4dd84: a04c0101 */ sb $t4,0x101($v0) +.L0004dd88: +/* 4dd88: 26220001 */ addiu $v0,$s1,0x1 +.L0004dd8c: +/* 4dd8c: 105e0046 */ beq $v0,$s8,.L0004dea8 +.L0004dd90: +/* 4dd90: 00027040 */ sll $t6,$v0,0x1 +/* 4dd94: 02ae2821 */ addu $a1,$s5,$t6 +/* 4dd98: 24a40002 */ addiu $a0,$a1,0x2 +.L0004dd9c: +/* 4dd9c: 94a10000 */ lhu $at,0x0($a1) +/* 4dda0: a6410000 */ sh $at,0x0($s2) +/* 4dda4: 8e790060 */ lw $t9,0x60($s3) +/* 4dda8: 97af0158 */ lhu $t7,0x158($sp) +/* 4ddac: 93aa0158 */ lbu $t2,0x158($sp) +/* 4ddb0: 01f9082a */ slt $at,$t7,$t9 +/* 4ddb4: 5420001a */ bnezl $at,.L0004de20 +/* 4ddb8: 94810000 */ lhu $at,0x0($a0) +/* 4ddbc: 120a0017 */ beq $s0,$t2,.L0004de1c +/* 4ddc0: 93a80159 */ lbu $t0,0x159($sp) +/* 4ddc4: 05010003 */ bgez $t0,.L0004ddd4 +/* 4ddc8: 00084883 */ sra $t1,$t0,0x2 +/* 4ddcc: 25010003 */ addiu $at,$t0,0x3 +/* 4ddd0: 00014883 */ sra $t1,$at,0x2 +.L0004ddd4: +/* 4ddd4: 05410004 */ bgez $t2,.L0004dde8 +/* 4ddd8: 314b0007 */ andi $t3,$t2,0x7 +/* 4dddc: 11600002 */ beqz $t3,.L0004dde8 +/* 4dde0: 00000000 */ nop +/* 4dde4: 256bfff8 */ addiu $t3,$t3,-8 +.L0004dde8: +/* 4dde8: 000b6140 */ sll $t4,$t3,0x5 +/* 4ddec: 012c1821 */ addu $v1,$t1,$t4 +/* 4ddf0: 02831021 */ addu $v0,$s4,$v1 +/* 4ddf4: 904e0101 */ lbu $t6,0x101($v0) +/* 4ddf8: 06010004 */ bgez $s0,.L0004de0c +/* 4ddfc: 320d0007 */ andi $t5,$s0,0x7 +/* 4de00: 11a00002 */ beqz $t5,.L0004de0c +/* 4de04: 00000000 */ nop +/* 4de08: 25adfff8 */ addiu $t5,$t5,-8 +.L0004de0c: +/* 4de0c: 24180001 */ addiu $t8,$zero,0x1 +/* 4de10: 01b87804 */ sllv $t7,$t8,$t5 +/* 4de14: 01cfc825 */ or $t9,$t6,$t7 +/* 4de18: a0590101 */ sb $t9,0x101($v0) +.L0004de1c: +/* 4de1c: 94810000 */ lhu $at,0x0($a0) +.L0004de20: +/* 4de20: 24840004 */ addiu $a0,$a0,0x4 +/* 4de24: a6410000 */ sh $at,0x0($s2) +/* 4de28: 8e690060 */ lw $t1,0x60($s3) +/* 4de2c: 97ab0158 */ lhu $t3,0x158($sp) +/* 4de30: 93ac0158 */ lbu $t4,0x158($sp) +/* 4de34: 0169082a */ slt $at,$t3,$t1 +/* 4de38: 14200019 */ bnez $at,.L0004dea0 +/* 4de3c: 00000000 */ nop +/* 4de40: 120c0017 */ beq $s0,$t4,.L0004dea0 +/* 4de44: 93b80159 */ lbu $t8,0x159($sp) +/* 4de48: 07010003 */ bgez $t8,.L0004de58 +/* 4de4c: 00186883 */ sra $t5,$t8,0x2 +/* 4de50: 27010003 */ addiu $at,$t8,0x3 +/* 4de54: 00016883 */ sra $t5,$at,0x2 +.L0004de58: +/* 4de58: 05810004 */ bgez $t4,.L0004de6c +/* 4de5c: 318e0007 */ andi $t6,$t4,0x7 +/* 4de60: 11c00002 */ beqz $t6,.L0004de6c +/* 4de64: 00000000 */ nop +/* 4de68: 25cefff8 */ addiu $t6,$t6,-8 +.L0004de6c: +/* 4de6c: 000e7940 */ sll $t7,$t6,0x5 +/* 4de70: 01af1821 */ addu $v1,$t5,$t7 +/* 4de74: 02831021 */ addu $v0,$s4,$v1 +/* 4de78: 90590101 */ lbu $t9,0x101($v0) +/* 4de7c: 06010004 */ bgez $s0,.L0004de90 +/* 4de80: 32080007 */ andi $t0,$s0,0x7 +/* 4de84: 11000002 */ beqz $t0,.L0004de90 +/* 4de88: 00000000 */ nop +/* 4de8c: 2508fff8 */ addiu $t0,$t0,-8 +.L0004de90: +/* 4de90: 240a0001 */ addiu $t2,$zero,0x1 +/* 4de94: 010a5804 */ sllv $t3,$t2,$t0 +/* 4de98: 032b4825 */ or $t1,$t9,$t3 +/* 4de9c: a0490101 */ sb $t1,0x101($v0) +.L0004dea0: +/* 4dea0: 1496ffbe */ bne $a0,$s6,.L0004dd9c +/* 4dea4: 24a50004 */ addiu $a1,$a1,0x4 +.L0004dea8: +/* 4dea8: 926c0064 */ lbu $t4,0x64($s3) +/* 4deac: 26f70001 */ addiu $s7,$s7,0x1 +/* 4deb0: 32f000ff */ andi $s0,$s7,0xff +/* 4deb4: 020c082a */ slt $at,$s0,$t4 +/* 4deb8: 1420ff7c */ bnez $at,.L0004dcac +/* 4debc: 0200b825 */ or $s7,$s0,$zero +.L0004dec0: +/* 4dec0: 00001025 */ or $v0,$zero,$zero +/* 4dec4: 8fbf003c */ lw $ra,0x3c($sp) +.L0004dec8: +/* 4dec8: 8fb00018 */ lw $s0,0x18($sp) +/* 4decc: 8fb1001c */ lw $s1,0x1c($sp) +/* 4ded0: 8fb20020 */ lw $s2,0x20($sp) +/* 4ded4: 8fb30024 */ lw $s3,0x24($sp) +/* 4ded8: 8fb40028 */ lw $s4,0x28($sp) +/* 4dedc: 8fb5002c */ lw $s5,0x2c($sp) +/* 4dee0: 8fb60030 */ lw $s6,0x30($sp) +/* 4dee4: 8fb70034 */ lw $s7,0x34($sp) +/* 4dee8: 8fbe0038 */ lw $s8,0x38($sp) +/* 4deec: 03e00008 */ jr $ra +/* 4def0: 27bd0168 */ addiu $sp,$sp,0x168 +); + +GLOBAL_ASM( +glabel corrupted +/* 4def4: 27bdffc8 */ addiu $sp,$sp,-56 +/* 4def8: afa5003c */ sw $a1,0x3c($sp) +/* 4defc: 93b8003c */ lbu $t8,0x3c($sp) +/* 4df00: afb40028 */ sw $s4,0x28($sp) +/* 4df04: 93ae003d */ lbu $t6,0x3d($sp) +/* 4df08: 0080a025 */ or $s4,$a0,$zero +/* 4df0c: afbf0034 */ sw $ra,0x34($sp) +/* 4df10: afb60030 */ sw $s6,0x30($sp) +/* 4df14: afb5002c */ sw $s5,0x2c($sp) +/* 4df18: afb30024 */ sw $s3,0x24($sp) +/* 4df1c: afb20020 */ sw $s2,0x20($sp) +/* 4df20: afb1001c */ sw $s1,0x1c($sp) +/* 4df24: afb00018 */ sw $s0,0x18($sp) +/* 4df28: 92890064 */ lbu $t1,0x64($s4) +/* 4df2c: 00c09825 */ or $s3,$a2,$zero +/* 4df30: 00008025 */ or $s0,$zero,$zero +/* 4df34: 05c10003 */ bgez $t6,.L0004df44 +/* 4df38: 000e7883 */ sra $t7,$t6,0x2 +/* 4df3c: 25c10003 */ addiu $at,$t6,0x3 +/* 4df40: 00017883 */ sra $t7,$at,0x2 +.L0004df44: +/* 4df44: 07010004 */ bgez $t8,.L0004df58 +/* 4df48: 33190007 */ andi $t9,$t8,0x7 +/* 4df4c: 13200002 */ beqz $t9,.L0004df58 +/* 4df50: 00000000 */ nop +/* 4df54: 2739fff8 */ addiu $t9,$t9,-8 +.L0004df58: +/* 4df58: 00194140 */ sll $t0,$t9,0x5 +/* 4df5c: 01e8b021 */ addu $s6,$t7,$t0 +/* 4df60: 19200040 */ blez $t1,.L0004e064 +/* 4df64: 00009025 */ or $s2,$zero,$zero +/* 4df68: 00001025 */ or $v0,$zero,$zero +/* 4df6c: 24150003 */ addiu $s5,$zero,0x3 +.L0004df70: +/* 4df70: 18400003 */ blez $v0,.L0004df80 +/* 4df74: 93aa003c */ lbu $t2,0x3c($sp) +/* 4df78: 10000002 */ b .L0004df84 +/* 4df7c: 24110001 */ addiu $s1,$zero,0x1 +.L0004df80: +/* 4df80: 8e910060 */ lw $s1,0x60($s4) +.L0004df84: +/* 4df84: 1142000c */ beq $t2,$v0,.L0004dfb8 +/* 4df88: 02765821 */ addu $t3,$s3,$s6 +/* 4df8c: 916c0101 */ lbu $t4,0x101($t3) +/* 4df90: 04410004 */ bgez $v0,.L0004dfa4 +/* 4df94: 304d0007 */ andi $t5,$v0,0x7 +/* 4df98: 11a00002 */ beqz $t5,.L0004dfa4 +/* 4df9c: 00000000 */ nop +/* 4dfa0: 25adfff8 */ addiu $t5,$t5,-8 +.L0004dfa4: +/* 4dfa4: 240e0001 */ addiu $t6,$zero,0x1 +/* 4dfa8: 01aec004 */ sllv $t8,$t6,$t5 +/* 4dfac: 0198c824 */ and $t9,$t4,$t8 +/* 4dfb0: 53200027 */ beqzl $t9,.L0004e050 +/* 4dfb4: 928b0064 */ lbu $t3,0x64($s4) +.L0004dfb8: +/* 4dfb8: 926f0100 */ lbu $t7,0x100($s3) +/* 4dfbc: 02802025 */ or $a0,$s4,$zero +/* 4dfc0: 02602825 */ or $a1,$s3,$zero +/* 4dfc4: 11e2000a */ beq $t7,$v0,.L0004dff0 +/* 4dfc8: 00003025 */ or $a2,$zero,$zero +/* 4dfcc: 0c01324d */ jal __osPfsRWInode +/* 4dfd0: 324700ff */ andi $a3,$s2,0xff +/* 4dfd4: 50400006 */ beqzl $v0,.L0004dff0 +/* 4dfd8: a2720100 */ sb $s2,0x100($s3) +/* 4dfdc: 50550004 */ beql $v0,$s5,.L0004dff0 +/* 4dfe0: a2720100 */ sb $s2,0x100($s3) +/* 4dfe4: 10000021 */ b .L0004e06c +/* 4dfe8: 8fbf0034 */ lw $ra,0x34($sp) +/* 4dfec: a2720100 */ sb $s2,0x100($s3) +.L0004dff0: +/* 4dff0: 2a010002 */ slti $at,$s0,0x2 +/* 4dff4: 10200010 */ beqz $at,.L0004e038 +/* 4dff8: 2a210080 */ slti $at,$s1,0x80 +/* 4dffc: 1020000e */ beqz $at,.L0004e038 +/* 4e000: 00111040 */ sll $v0,$s1,0x1 +/* 4e004: 02621821 */ addu $v1,$s3,$v0 +/* 4e008: 97a8003c */ lhu $t0,0x3c($sp) +.L0004e00c: +/* 4e00c: 94690000 */ lhu $t1,0x0($v1) +/* 4e010: 24420002 */ addiu $v0,$v0,0x2 +/* 4e014: 55090003 */ bnel $t0,$t1,.L0004e024 +/* 4e018: 2a010002 */ slti $at,$s0,0x2 +/* 4e01c: 26100001 */ addiu $s0,$s0,0x1 +/* 4e020: 2a010002 */ slti $at,$s0,0x2 +.L0004e024: +/* 4e024: 10200004 */ beqz $at,.L0004e038 +/* 4e028: 24630002 */ addiu $v1,$v1,0x2 +/* 4e02c: 28410100 */ slti $at,$v0,0x100 +/* 4e030: 5420fff6 */ bnezl $at,.L0004e00c +/* 4e034: 97a8003c */ lhu $t0,0x3c($sp) +.L0004e038: +/* 4e038: 2a010002 */ slti $at,$s0,0x2 +/* 4e03c: 54200004 */ bnezl $at,.L0004e050 +/* 4e040: 928b0064 */ lbu $t3,0x64($s4) +/* 4e044: 10000008 */ b .L0004e068 +/* 4e048: 24020002 */ addiu $v0,$zero,0x2 +/* 4e04c: 928b0064 */ lbu $t3,0x64($s4) +.L0004e050: +/* 4e050: 26520001 */ addiu $s2,$s2,0x1 +/* 4e054: 324200ff */ andi $v0,$s2,0xff +/* 4e058: 004b082a */ slt $at,$v0,$t3 +/* 4e05c: 1420ffc4 */ bnez $at,.L0004df70 +/* 4e060: 00409025 */ or $s2,$v0,$zero +.L0004e064: +/* 4e064: 02001025 */ or $v0,$s0,$zero +.L0004e068: +/* 4e068: 8fbf0034 */ lw $ra,0x34($sp) +.L0004e06c: +/* 4e06c: 8fb00018 */ lw $s0,0x18($sp) +/* 4e070: 8fb1001c */ lw $s1,0x1c($sp) +/* 4e074: 8fb20020 */ lw $s2,0x20($sp) +/* 4e078: 8fb30024 */ lw $s3,0x24($sp) +/* 4e07c: 8fb40028 */ lw $s4,0x28($sp) +/* 4e080: 8fb5002c */ lw $s5,0x2c($sp) +/* 4e084: 8fb60030 */ lw $s6,0x30($sp) +/* 4e088: 03e00008 */ jr $ra +/* 4e08c: 27bd0038 */ addiu $sp,$sp,0x38 +);