Matched more os funcs

This commit is contained in:
Ryan Myers
2021-09-27 10:42:09 -04:00
parent ba61849bfa
commit 44ef5ecaf5
6 changed files with 200 additions and 393 deletions
+2 -2
View File
@@ -80,7 +80,7 @@ typedef struct {
int inode_table; /* block location */
int minode_table; /* mirrioring inode_table */
int dir_table; /* block location */
int inodeStartPage; /* page # */
int inode_start_page; /* page # */
u8 banks;
u8 activebank;
} OSPfs;
@@ -102,7 +102,7 @@ typedef union {
} __OSInodeUnit;
typedef struct {
__OSInodeUnit inodePage[128];
__OSInodeUnit inode_page[128];
} __OSInode;
typedef struct {
@@ -1,95 +0,0 @@
glabel osPfsNumFiles
/* 0D0F90 800D0390 27BDFFB8 */ addiu $sp, $sp, -0x48
/* 0D0F94 800D0394 AFA40048 */ sw $a0, 0x48($sp)
/* 0D0F98 800D0398 8FAE0048 */ lw $t6, 0x48($sp)
/* 0D0F9C 800D039C AFBF0014 */ sw $ra, 0x14($sp)
/* 0D0FA0 800D03A0 AFA5004C */ sw $a1, 0x4c($sp)
/* 0D0FA4 800D03A4 AFA60050 */ sw $a2, 0x50($sp)
/* 0D0FA8 800D03A8 AFA0001C */ sw $zero, 0x1c($sp)
/* 0D0FAC 800D03AC 8DCF0000 */ lw $t7, ($t6)
/* 0D0FB0 800D03B0 31F80001 */ andi $t8, $t7, 1
/* 0D0FB4 800D03B4 17000003 */ bnez $t8, .L800D03C4
/* 0D0FB8 800D03B8 00000000 */ nop
/* 0D0FBC 800D03BC 10000041 */ b .L800D04C4
/* 0D0FC0 800D03C0 24020005 */ li $v0, 5
.L800D03C4:
/* 0D0FC4 800D03C4 0C0356F0 */ jal __osCheckId
/* 0D0FC8 800D03C8 8FA40048 */ lw $a0, 0x48($sp)
/* 0D0FCC 800D03CC 24010002 */ li $at, 2
/* 0D0FD0 800D03D0 14410003 */ bne $v0, $at, .L800D03E0
/* 0D0FD4 800D03D4 00000000 */ nop
/* 0D0FD8 800D03D8 1000003A */ b .L800D04C4
/* 0D0FDC 800D03DC 24020002 */ li $v0, 2
.L800D03E0:
/* 0D0FE0 800D03E0 8FB90048 */ lw $t9, 0x48($sp)
/* 0D0FE4 800D03E4 93280065 */ lbu $t0, 0x65($t9)
/* 0D0FE8 800D03E8 1100000A */ beqz $t0, .L800D0414
/* 0D0FEC 800D03EC 00000000 */ nop
/* 0D0FF0 800D03F0 A3200065 */ sb $zero, 0x65($t9)
/* 0D0FF4 800D03F4 0C0357F7 */ jal __osPfsSelectBank
/* 0D0FF8 800D03F8 8FA40048 */ lw $a0, 0x48($sp)
/* 0D0FFC 800D03FC AFA20040 */ sw $v0, 0x40($sp)
/* 0D1000 800D0400 8FA90040 */ lw $t1, 0x40($sp)
/* 0D1004 800D0404 11200003 */ beqz $t1, .L800D0414
/* 0D1008 800D0408 00000000 */ nop
/* 0D100C 800D040C 1000002D */ b .L800D04C4
/* 0D1010 800D0410 01201025 */ move $v0, $t1
.L800D0414:
/* 0D1014 800D0414 8FAA0048 */ lw $t2, 0x48($sp)
/* 0D1018 800D0418 AFA00044 */ sw $zero, 0x44($sp)
/* 0D101C 800D041C 8D4B0050 */ lw $t3, 0x50($t2)
/* 0D1020 800D0420 19600020 */ blez $t3, .L800D04A4
/* 0D1024 800D0424 00000000 */ nop
.L800D0428:
/* 0D1028 800D0428 8FAC0048 */ lw $t4, 0x48($sp)
/* 0D102C 800D042C 8FAE0044 */ lw $t6, 0x44($sp)
/* 0D1030 800D0430 27A70020 */ addiu $a3, $sp, 0x20
/* 0D1034 800D0434 8D8D005C */ lw $t5, 0x5c($t4)
/* 0D1038 800D0438 8D840004 */ lw $a0, 4($t4)
/* 0D103C 800D043C 8D850008 */ lw $a1, 8($t4)
/* 0D1040 800D0440 0C033728 */ jal __osContRamRead
/* 0D1044 800D0444 01AE3021 */ addu $a2, $t5, $t6
/* 0D1048 800D0448 AFA20040 */ sw $v0, 0x40($sp)
/* 0D104C 800D044C 8FAF0040 */ lw $t7, 0x40($sp)
/* 0D1050 800D0450 11E00003 */ beqz $t7, .L800D0460
/* 0D1054 800D0454 00000000 */ nop
/* 0D1058 800D0458 1000001A */ b .L800D04C4
/* 0D105C 800D045C 01E01025 */ move $v0, $t7
.L800D0460:
/* 0D1060 800D0460 97B80024 */ lhu $t8, 0x24($sp)
/* 0D1064 800D0464 13000007 */ beqz $t8, .L800D0484
/* 0D1068 800D0468 00000000 */ nop
/* 0D106C 800D046C 8FA80020 */ lw $t0, 0x20($sp)
/* 0D1070 800D0470 11000004 */ beqz $t0, .L800D0484
/* 0D1074 800D0474 00000000 */ nop
/* 0D1078 800D0478 8FB9001C */ lw $t9, 0x1c($sp)
/* 0D107C 800D047C 27290001 */ addiu $t1, $t9, 1
/* 0D1080 800D0480 AFA9001C */ sw $t1, 0x1c($sp)
.L800D0484:
/* 0D1084 800D0484 8FAA0044 */ lw $t2, 0x44($sp)
/* 0D1088 800D0488 8FAC0048 */ lw $t4, 0x48($sp)
/* 0D108C 800D048C 254B0001 */ addiu $t3, $t2, 1
/* 0D1090 800D0490 AFAB0044 */ sw $t3, 0x44($sp)
/* 0D1094 800D0494 8D8D0050 */ lw $t5, 0x50($t4)
/* 0D1098 800D0498 016D082A */ slt $at, $t3, $t5
/* 0D109C 800D049C 1420FFE2 */ bnez $at, .L800D0428
/* 0D10A0 800D04A0 00000000 */ nop
.L800D04A4:
/* 0D10A4 800D04A4 8FAE001C */ lw $t6, 0x1c($sp)
/* 0D10A8 800D04A8 8FAF0050 */ lw $t7, 0x50($sp)
/* 0D10AC 800D04AC 00001025 */ move $v0, $zero
/* 0D10B0 800D04B0 ADEE0000 */ sw $t6, ($t7)
/* 0D10B4 800D04B4 8FB80048 */ lw $t8, 0x48($sp)
/* 0D10B8 800D04B8 8FB9004C */ lw $t9, 0x4c($sp)
/* 0D10BC 800D04BC 8F080050 */ lw $t0, 0x50($t8)
/* 0D10C0 800D04C0 AF280000 */ sw $t0, ($t9)
.L800D04C4:
/* 0D10C4 800D04C4 8FBF0014 */ lw $ra, 0x14($sp)
/* 0D10C8 800D04C8 27BD0048 */ addiu $sp, $sp, 0x48
/* 0D10CC 800D04CC 03E00008 */ jr $ra
/* 0D10D0 800D04D0 00000000 */ nop
/* 0D10D4 800D04D4 00000000 */ nop
/* 0D10D8 800D04D8 00000000 */ nop
/* 0D10DC 800D04DC 00000000 */ nop
@@ -1,279 +0,0 @@
glabel osPfsReFormat
/* 0D0B90 800CFF90 27BDFEB0 */ addiu $sp, $sp, -0x150
/* 0D0B94 800CFF94 AFBF001C */ sw $ra, 0x1c($sp)
/* 0D0B98 800CFF98 AFA40150 */ sw $a0, 0x150($sp)
/* 0D0B9C 800CFF9C AFA50154 */ sw $a1, 0x154($sp)
/* 0D0BA0 800CFFA0 0C033594 */ jal __osSiGetAccess
/* 0D0BA4 800CFFA4 AFA60158 */ sw $a2, 0x158($sp)
/* 0D0BA8 800CFFA8 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0BAC 800CFFAC 0C033B75 */ jal __osPfsGetStatus
/* 0D0BB0 800CFFB0 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0BB4 800CFFB4 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0BB8 800CFFB8 8FAE0020 */ lw $t6, 0x20($sp)
/* 0D0BBC 800CFFBC 11C00003 */ beqz $t6, .L800CFFCC
/* 0D0BC0 800CFFC0 00000000 */ nop
/* 0D0BC4 800CFFC4 100000EE */ b .L800D0380
/* 0D0BC8 800CFFC8 01C01025 */ move $v0, $t6
.L800CFFCC:
/* 0D0BCC 800CFFCC 8FAF0150 */ lw $t7, 0x150($sp)
/* 0D0BD0 800CFFD0 8DF80000 */ lw $t8, ($t7)
/* 0D0BD4 800CFFD4 3B190001 */ xori $t9, $t8, 1
/* 0D0BD8 800CFFD8 ADF90000 */ sw $t9, ($t7)
/* 0D0BDC 800CFFDC 8FA90150 */ lw $t1, 0x150($sp)
/* 0D0BE0 800CFFE0 8FA80154 */ lw $t0, 0x154($sp)
/* 0D0BE4 800CFFE4 AD280004 */ sw $t0, 4($t1)
/* 0D0BE8 800CFFE8 8FAB0150 */ lw $t3, 0x150($sp)
/* 0D0BEC 800CFFEC 8FAA0158 */ lw $t2, 0x158($sp)
/* 0D0BF0 800CFFF0 0C0335A5 */ jal __osSiRelAccess
/* 0D0BF4 800CFFF4 AD6A0008 */ sw $t2, 8($t3)
/* 0D0BF8 800CFFF8 0C035659 */ jal __osGetId
/* 0D0BFC 800CFFFC 8FA40150 */ lw $a0, 0x150($sp)
/* 0D0C00 800D0000 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0C04 800D0004 8FAC0020 */ lw $t4, 0x20($sp)
/* 0D0C08 800D0008 11800003 */ beqz $t4, .L800D0018
/* 0D0C0C 800D000C 00000000 */ nop
/* 0D0C10 800D0010 100000DB */ b .L800D0380
/* 0D0C14 800D0014 01801025 */ move $v0, $t4
.L800D0018:
/* 0D0C18 800D0018 8FAD0150 */ lw $t5, 0x150($sp)
/* 0D0C1C 800D001C 91AE0065 */ lbu $t6, 0x65($t5)
/* 0D0C20 800D0020 11C0000A */ beqz $t6, .L800D004C
/* 0D0C24 800D0024 00000000 */ nop
/* 0D0C28 800D0028 A1A00065 */ sb $zero, 0x65($t5)
/* 0D0C2C 800D002C 0C0357F7 */ jal __osPfsSelectBank
/* 0D0C30 800D0030 8FA40150 */ lw $a0, 0x150($sp)
/* 0D0C34 800D0034 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0C38 800D0038 8FB80020 */ lw $t8, 0x20($sp)
/* 0D0C3C 800D003C 13000003 */ beqz $t8, .L800D004C
/* 0D0C40 800D0040 00000000 */ nop
/* 0D0C44 800D0044 100000CE */ b .L800D0380
/* 0D0C48 800D0048 03001025 */ move $v0, $t8
.L800D004C:
/* 0D0C4C 800D004C AFA0014C */ sw $zero, 0x14c($sp)
.L800D0050:
/* 0D0C50 800D0050 8FB9014C */ lw $t9, 0x14c($sp)
/* 0D0C54 800D0054 03B97821 */ addu $t7, $sp, $t9
/* 0D0C58 800D0058 A1E00028 */ sb $zero, 0x28($t7)
/* 0D0C5C 800D005C 8FA8014C */ lw $t0, 0x14c($sp)
/* 0D0C60 800D0060 25090001 */ addiu $t1, $t0, 1
/* 0D0C64 800D0064 29210020 */ slti $at, $t1, 0x20
/* 0D0C68 800D0068 1420FFF9 */ bnez $at, .L800D0050
/* 0D0C6C 800D006C AFA9014C */ sw $t1, 0x14c($sp)
/* 0D0C70 800D0070 8FAA0150 */ lw $t2, 0x150($sp)
/* 0D0C74 800D0074 AFA0014C */ sw $zero, 0x14c($sp)
/* 0D0C78 800D0078 8D4B0050 */ lw $t3, 0x50($t2)
/* 0D0C7C 800D007C 19600018 */ blez $t3, .L800D00E0
/* 0D0C80 800D0080 00000000 */ nop
.L800D0084:
/* 0D0C84 800D0084 8FAC0150 */ lw $t4, 0x150($sp)
/* 0D0C88 800D0088 8FAD014C */ lw $t5, 0x14c($sp)
/* 0D0C8C 800D008C 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0C90 800D0090 8D8E005C */ lw $t6, 0x5c($t4)
/* 0D0C94 800D0094 AFA00010 */ sw $zero, 0x10($sp)
/* 0D0C98 800D0098 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0C9C 800D009C 27A70028 */ addiu $a3, $sp, 0x28
/* 0D0CA0 800D00A0 0C03363C */ jal __osContRamWrite
/* 0D0CA4 800D00A4 01CD3021 */ addu $a2, $t6, $t5
/* 0D0CA8 800D00A8 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0CAC 800D00AC 8FB80020 */ lw $t8, 0x20($sp)
/* 0D0CB0 800D00B0 13000003 */ beqz $t8, .L800D00C0
/* 0D0CB4 800D00B4 00000000 */ nop
/* 0D0CB8 800D00B8 100000B1 */ b .L800D0380
/* 0D0CBC 800D00BC 03001025 */ move $v0, $t8
.L800D00C0:
/* 0D0CC0 800D00C0 8FB9014C */ lw $t9, 0x14c($sp)
/* 0D0CC4 800D00C4 8FA80150 */ lw $t0, 0x150($sp)
/* 0D0CC8 800D00C8 272F0001 */ addiu $t7, $t9, 1
/* 0D0CCC 800D00CC AFAF014C */ sw $t7, 0x14c($sp)
/* 0D0CD0 800D00D0 8D090050 */ lw $t1, 0x50($t0)
/* 0D0CD4 800D00D4 01E9082A */ slt $at, $t7, $t1
/* 0D0CD8 800D00D8 1420FFEA */ bnez $at, .L800D0084
/* 0D0CDC 800D00DC 00000000 */ nop
.L800D00E0:
/* 0D0CE0 800D00E0 8FAA0150 */ lw $t2, 0x150($sp)
/* 0D0CE4 800D00E4 AFA0014C */ sw $zero, 0x14c($sp)
/* 0D0CE8 800D00E8 8D4B0060 */ lw $t3, 0x60($t2)
/* 0D0CEC 800D00EC 1960000D */ blez $t3, .L800D0124
/* 0D0CF0 800D00F0 00000000 */ nop
.L800D00F4:
/* 0D0CF4 800D00F4 8FAC014C */ lw $t4, 0x14c($sp)
/* 0D0CF8 800D00F8 000C7040 */ sll $t6, $t4, 1
/* 0D0CFC 800D00FC 03AE6821 */ addu $t5, $sp, $t6
/* 0D0D00 800D0100 A5A00048 */ sh $zero, 0x48($t5)
/* 0D0D04 800D0104 8FB8014C */ lw $t8, 0x14c($sp)
/* 0D0D08 800D0108 8FA80150 */ lw $t0, 0x150($sp)
/* 0D0D0C 800D010C 27190001 */ addiu $t9, $t8, 1
/* 0D0D10 800D0110 AFB9014C */ sw $t9, 0x14c($sp)
/* 0D0D14 800D0114 8D0F0060 */ lw $t7, 0x60($t0)
/* 0D0D18 800D0118 032F082A */ slt $at, $t9, $t7
/* 0D0D1C 800D011C 1420FFF5 */ bnez $at, .L800D00F4
/* 0D0D20 800D0120 00000000 */ nop
.L800D0124:
/* 0D0D24 800D0124 8FA90150 */ lw $t1, 0x150($sp)
/* 0D0D28 800D0128 8D2A0060 */ lw $t2, 0x60($t1)
/* 0D0D2C 800D012C 29410080 */ slti $at, $t2, 0x80
/* 0D0D30 800D0130 1020000B */ beqz $at, .L800D0160
/* 0D0D34 800D0134 AFAA014C */ sw $t2, 0x14c($sp)
.L800D0138:
/* 0D0D38 800D0138 8FAC014C */ lw $t4, 0x14c($sp)
/* 0D0D3C 800D013C 240B0003 */ li $t3, 3
/* 0D0D40 800D0140 000C7040 */ sll $t6, $t4, 1
/* 0D0D44 800D0144 03AE6821 */ addu $t5, $sp, $t6
/* 0D0D48 800D0148 A5AB0048 */ sh $t3, 0x48($t5)
/* 0D0D4C 800D014C 8FB8014C */ lw $t8, 0x14c($sp)
/* 0D0D50 800D0150 27080001 */ addiu $t0, $t8, 1
/* 0D0D54 800D0154 29010080 */ slti $at, $t0, 0x80
/* 0D0D58 800D0158 1420FFF7 */ bnez $at, .L800D0138
/* 0D0D5C 800D015C AFA8014C */ sw $t0, 0x14c($sp)
.L800D0160:
/* 0D0D60 800D0160 8FB90150 */ lw $t9, 0x150($sp)
/* 0D0D64 800D0164 27AA0048 */ addiu $t2, $sp, 0x48
/* 0D0D68 800D0168 8F2F0060 */ lw $t7, 0x60($t9)
/* 0D0D6C 800D016C 000F2823 */ negu $a1, $t7
/* 0D0D70 800D0170 00056040 */ sll $t4, $a1, 1
/* 0D0D74 800D0174 01802825 */ move $a1, $t4
/* 0D0D78 800D0178 000F4840 */ sll $t1, $t7, 1
/* 0D0D7C 800D017C 012A2021 */ addu $a0, $t1, $t2
/* 0D0D80 800D0180 0C0354BC */ jal __osSumcalc
/* 0D0D84 800D0184 24A50100 */ addiu $a1, $a1, 0x100
/* 0D0D88 800D0188 27AB0048 */ addiu $t3, $sp, 0x48
/* 0D0D8C 800D018C A5620000 */ sh $v0, ($t3)
/* 0D0D90 800D0190 27AE0048 */ addiu $t6, $sp, 0x48
/* 0D0D94 800D0194 AFAE0024 */ sw $t6, 0x24($sp)
/* 0D0D98 800D0198 AFA0014C */ sw $zero, 0x14c($sp)
.L800D019C:
/* 0D0D9C 800D019C 8FAD0150 */ lw $t5, 0x150($sp)
/* 0D0DA0 800D01A0 8FA8014C */ lw $t0, 0x14c($sp)
/* 0D0DA4 800D01A4 8FA90024 */ lw $t1, 0x24($sp)
/* 0D0DA8 800D01A8 8DB80054 */ lw $t8, 0x54($t5)
/* 0D0DAC 800D01AC 0008C940 */ sll $t9, $t0, 5
/* 0D0DB0 800D01B0 AFA00010 */ sw $zero, 0x10($sp)
/* 0D0DB4 800D01B4 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0DB8 800D01B8 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0DBC 800D01BC 03293821 */ addu $a3, $t9, $t1
/* 0D0DC0 800D01C0 0C03363C */ jal __osContRamWrite
/* 0D0DC4 800D01C4 03083021 */ addu $a2, $t8, $t0
/* 0D0DC8 800D01C8 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0DCC 800D01CC 8FAA0020 */ lw $t2, 0x20($sp)
/* 0D0DD0 800D01D0 11400003 */ beqz $t2, .L800D01E0
/* 0D0DD4 800D01D4 00000000 */ nop
/* 0D0DD8 800D01D8 10000069 */ b .L800D0380
/* 0D0DDC 800D01DC 01401025 */ move $v0, $t2
.L800D01E0:
/* 0D0DE0 800D01E0 8FAF0150 */ lw $t7, 0x150($sp)
/* 0D0DE4 800D01E4 8FAB014C */ lw $t3, 0x14c($sp)
/* 0D0DE8 800D01E8 8FAD0024 */ lw $t5, 0x24($sp)
/* 0D0DEC 800D01EC 8DEC0058 */ lw $t4, 0x58($t7)
/* 0D0DF0 800D01F0 000B7140 */ sll $t6, $t3, 5
/* 0D0DF4 800D01F4 AFA00010 */ sw $zero, 0x10($sp)
/* 0D0DF8 800D01F8 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0DFC 800D01FC 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0E00 800D0200 01CD3821 */ addu $a3, $t6, $t5
/* 0D0E04 800D0204 0C03363C */ jal __osContRamWrite
/* 0D0E08 800D0208 018B3021 */ addu $a2, $t4, $t3
/* 0D0E0C 800D020C AFA20020 */ sw $v0, 0x20($sp)
/* 0D0E10 800D0210 8FB80020 */ lw $t8, 0x20($sp)
/* 0D0E14 800D0214 13000003 */ beqz $t8, .L800D0224
/* 0D0E18 800D0218 00000000 */ nop
/* 0D0E1C 800D021C 10000058 */ b .L800D0380
/* 0D0E20 800D0220 03001025 */ move $v0, $t8
.L800D0224:
/* 0D0E24 800D0224 8FA8014C */ lw $t0, 0x14c($sp)
/* 0D0E28 800D0228 25190001 */ addiu $t9, $t0, 1
/* 0D0E2C 800D022C 2B210008 */ slti $at, $t9, 8
/* 0D0E30 800D0230 1420FFDA */ bnez $at, .L800D019C
/* 0D0E34 800D0234 AFB9014C */ sw $t9, 0x14c($sp)
/* 0D0E38 800D0238 8FAA0150 */ lw $t2, 0x150($sp)
/* 0D0E3C 800D023C 24090001 */ li $t1, 1
/* 0D0E40 800D0240 AFA90148 */ sw $t1, 0x148($sp)
/* 0D0E44 800D0244 914F0064 */ lbu $t7, 0x64($t2)
/* 0D0E48 800D0248 29E10002 */ slti $at, $t7, 2
/* 0D0E4C 800D024C 1420004B */ bnez $at, .L800D037C
/* 0D0E50 800D0250 00000000 */ nop
.L800D0254:
/* 0D0E54 800D0254 240C0001 */ li $t4, 1
/* 0D0E58 800D0258 AFAC014C */ sw $t4, 0x14c($sp)
.L800D025C:
/* 0D0E5C 800D025C 8FAE014C */ lw $t6, 0x14c($sp)
/* 0D0E60 800D0260 240B0003 */ li $t3, 3
/* 0D0E64 800D0264 000E6840 */ sll $t5, $t6, 1
/* 0D0E68 800D0268 03ADC021 */ addu $t8, $sp, $t5
/* 0D0E6C 800D026C A70B0048 */ sh $t3, 0x48($t8)
/* 0D0E70 800D0270 8FA8014C */ lw $t0, 0x14c($sp)
/* 0D0E74 800D0274 25190001 */ addiu $t9, $t0, 1
/* 0D0E78 800D0278 2B210080 */ slti $at, $t9, 0x80
/* 0D0E7C 800D027C 1420FFF7 */ bnez $at, .L800D025C
/* 0D0E80 800D0280 AFB9014C */ sw $t9, 0x14c($sp)
/* 0D0E84 800D0284 27A40048 */ addiu $a0, $sp, 0x48
/* 0D0E88 800D0288 24840002 */ addiu $a0, $a0, 2
/* 0D0E8C 800D028C 0C0354BC */ jal __osSumcalc
/* 0D0E90 800D0290 240500FE */ li $a1, 254
/* 0D0E94 800D0294 27A90048 */ addiu $t1, $sp, 0x48
/* 0D0E98 800D0298 A5220000 */ sh $v0, ($t1)
/* 0D0E9C 800D029C 27AA0048 */ addiu $t2, $sp, 0x48
/* 0D0EA0 800D02A0 AFAA0024 */ sw $t2, 0x24($sp)
/* 0D0EA4 800D02A4 AFA0014C */ sw $zero, 0x14c($sp)
.L800D02A8:
/* 0D0EA8 800D02A8 8FAF0150 */ lw $t7, 0x150($sp)
/* 0D0EAC 800D02AC 8FAE0148 */ lw $t6, 0x148($sp)
/* 0D0EB0 800D02B0 8FB8014C */ lw $t8, 0x14c($sp)
/* 0D0EB4 800D02B4 8DEC0054 */ lw $t4, 0x54($t7)
/* 0D0EB8 800D02B8 8FB90024 */ lw $t9, 0x24($sp)
/* 0D0EBC 800D02BC 000E58C0 */ sll $t3, $t6, 3
/* 0D0EC0 800D02C0 00184140 */ sll $t0, $t8, 5
/* 0D0EC4 800D02C4 018B6821 */ addu $t5, $t4, $t3
/* 0D0EC8 800D02C8 AFA00010 */ sw $zero, 0x10($sp)
/* 0D0ECC 800D02CC 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0ED0 800D02D0 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0ED4 800D02D4 01B83021 */ addu $a2, $t5, $t8
/* 0D0ED8 800D02D8 0C03363C */ jal __osContRamWrite
/* 0D0EDC 800D02DC 01193821 */ addu $a3, $t0, $t9
/* 0D0EE0 800D02E0 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0EE4 800D02E4 8FA90020 */ lw $t1, 0x20($sp)
/* 0D0EE8 800D02E8 11200003 */ beqz $t1, .L800D02F8
/* 0D0EEC 800D02EC 00000000 */ nop
/* 0D0EF0 800D02F0 10000023 */ b .L800D0380
/* 0D0EF4 800D02F4 01201025 */ move $v0, $t1
.L800D02F8:
/* 0D0EF8 800D02F8 8FAA0150 */ lw $t2, 0x150($sp)
/* 0D0EFC 800D02FC 8FAE0148 */ lw $t6, 0x148($sp)
/* 0D0F00 800D0300 8FAD014C */ lw $t5, 0x14c($sp)
/* 0D0F04 800D0304 8D4F0058 */ lw $t7, 0x58($t2)
/* 0D0F08 800D0308 8FA80024 */ lw $t0, 0x24($sp)
/* 0D0F0C 800D030C 000E60C0 */ sll $t4, $t6, 3
/* 0D0F10 800D0310 000DC140 */ sll $t8, $t5, 5
/* 0D0F14 800D0314 01EC5821 */ addu $t3, $t7, $t4
/* 0D0F18 800D0318 AFA00010 */ sw $zero, 0x10($sp)
/* 0D0F1C 800D031C 8FA40154 */ lw $a0, 0x154($sp)
/* 0D0F20 800D0320 8FA50158 */ lw $a1, 0x158($sp)
/* 0D0F24 800D0324 016D3021 */ addu $a2, $t3, $t5
/* 0D0F28 800D0328 0C03363C */ jal __osContRamWrite
/* 0D0F2C 800D032C 03083821 */ addu $a3, $t8, $t0
/* 0D0F30 800D0330 AFA20020 */ sw $v0, 0x20($sp)
/* 0D0F34 800D0334 8FB90020 */ lw $t9, 0x20($sp)
/* 0D0F38 800D0338 13200003 */ beqz $t9, .L800D0348
/* 0D0F3C 800D033C 00000000 */ nop
/* 0D0F40 800D0340 1000000F */ b .L800D0380
/* 0D0F44 800D0344 03201025 */ move $v0, $t9
.L800D0348:
/* 0D0F48 800D0348 8FA9014C */ lw $t1, 0x14c($sp)
/* 0D0F4C 800D034C 252A0001 */ addiu $t2, $t1, 1
/* 0D0F50 800D0350 29410008 */ slti $at, $t2, 8
/* 0D0F54 800D0354 1420FFD4 */ bnez $at, .L800D02A8
/* 0D0F58 800D0358 AFAA014C */ sw $t2, 0x14c($sp)
/* 0D0F5C 800D035C 8FAE0148 */ lw $t6, 0x148($sp)
/* 0D0F60 800D0360 8FAC0150 */ lw $t4, 0x150($sp)
/* 0D0F64 800D0364 25CF0001 */ addiu $t7, $t6, 1
/* 0D0F68 800D0368 AFAF0148 */ sw $t7, 0x148($sp)
/* 0D0F6C 800D036C 918B0064 */ lbu $t3, 0x64($t4)
/* 0D0F70 800D0370 01EB082A */ slt $at, $t7, $t3
/* 0D0F74 800D0374 1420FFB7 */ bnez $at, .L800D0254
/* 0D0F78 800D0378 00000000 */ nop
.L800D037C:
/* 0D0F7C 800D037C 00001025 */ move $v0, $zero
.L800D0380:
/* 0D0F80 800D0380 8FBF001C */ lw $ra, 0x1c($sp)
/* 0D0F84 800D0384 27BD0150 */ addiu $sp, $sp, 0x150
/* 0D0F88 800D0388 03E00008 */ jr $ra
/* 0D0F8C 800D038C 00000000 */ nop
+186 -5
View File
@@ -1,10 +1,191 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800CF530 */
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
#include "controller.h"
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D0130/osPfsChecker.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D0130/corrupted_init.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D0130/corrupted.s")
s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache);
s32 corrupted(OSPfs *pfs, __OSInodeUnit fpage, __OSInodeCache *cache);
s32 osPfsChecker(OSPfs *pfs) {
int j; //1156
s32 ret; //1152
__OSInodeUnit next_page;
__OSInode checked_inode;
__OSInode tmp_inode; //636
__OSDir tmp_dir;
__OSInodeUnit file_next_node[16];
__OSInodeCache cache; //56
int fixed; //52
u8 bank; //51
s32 cc; //44
s32 cl; //40
int offset; //36
fixed = 0;
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) {
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;
ret = __osPfsRWInode(pfs, &tmp_inode, OS_READ, 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)
continue;
tmp_dir.company_code = 0;
tmp_dir.game_code = 0;
tmp_dir.start_page.ipage = 0;
tmp_dir.status = DIR_STATUS_EMPTY;
tmp_dir.data_sum = 0;
SET_ACTIVEBANK_TO_ZERO;
ERRCK(__osContRamWrite(pfs->queue, pfs->channel, pfs->dir_table + j, (u8*)&tmp_dir, FALSE));
fixed++;
} else {
if (tmp_dir.company_code == 0 && tmp_dir.game_code == 0)
continue;
tmp_dir.company_code = 0;
tmp_dir.game_code = 0;
tmp_dir.start_page.ipage = 0;
tmp_dir.status = DIR_STATUS_EMPTY;
tmp_dir.data_sum = 0;
SET_ACTIVEBANK_TO_ZERO;
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 >= (u16)pfs->inode_start_page) {
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 >= (u16)pfs->inode_start_page) {
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;
}
s32 corrupted_init(OSPfs *pfs, __OSInodeCache *cache) {
int i;
int n;
int offset;
u8 bank;
__OSInodeUnit tpage;
__OSInode tmp_inode;
s32 ret;
for (i = 0; i < ARRLEN(cache->map); i++)
cache->map[i] = 0;
cache->bank = -1;
for (bank = 0; bank < pfs->banks; bank++) {
if (bank > 0)
offset = 1;
else
offset = pfs->inode_start_page;
ret = __osPfsRWInode(pfs, &tmp_inode, OS_READ, bank);
if (ret != 0 && ret != PFS_ERR_INCONSISTENT)
return ret;
for (i = offset; i < ARRLEN(tmp_inode.inode_page); i++) {
tpage = tmp_inode.inode_page[i];
if (tpage.ipage >= pfs->inode_start_page && tpage.inode_t.bank != bank) {
n = (tpage.inode_t.page / 4) + ((tpage.inode_t.bank % PFS_ONE_PAGE) * BLOCKSIZE);
cache->map[n] |= 1 << (bank % PFS_ONE_PAGE);
}
}
}
return 0;
}
s32 corrupted(OSPfs *pfs, __OSInodeUnit fpage, __OSInodeCache *cache) {
int j;
int n;
int hit;
u8 bank;
int offset;
s32 ret;
hit = 0;
ret = 0;
n = (fpage.inode_t.page / 4) + (fpage.inode_t.bank % 8) * BLOCKSIZE;
for (bank = 0; bank < pfs->banks; bank++) {
if (bank > 0)
offset = 1;
else
offset = pfs->inode_start_page;
if (bank == fpage.inode_t.bank || cache->map[n] & (1 << (bank % 8))) {
if (bank != cache->bank) {
ret = __osPfsRWInode(pfs, &cache->inode, 0, bank);
if (ret != 0 && ret != PFS_ERR_INCONSISTENT)
return ret;
cache->bank = bank;
}
for (j = offset; hit < 2 && (j < ARRLEN(cache->inode.inode_page)); j++) {
if (cache->inode.inode_page[j].ipage == fpage.ipage)
hit++;
}
if (1 < hit)
return PFS_ERR_NEW_PACK;
}
}
return hit;
}
+3 -3
View File
@@ -20,9 +20,9 @@ s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used) {
if (bank > 0)
offset = 1;
else
offset = pfs->inodeStartPage;
for (j = offset; j < ARRLEN(inode.inodePage); j++) {
if (inode.inodePage[j].ipage == 3)
offset = pfs->inode_start_page;
for (j = offset; j < ARRLEN(inode.inode_page); j++) {
if (inode.inode_page[j].ipage == 3)
pages++;
}
}
+9 -9
View File
@@ -36,14 +36,14 @@ s32 osPfsReFormat(OSPfs *pfs, OSMesgQueue *queue, int channel) {
ERRCK(__osContRamWrite(queue, channel, pfs->dir_table + j, tmp_data, FALSE));
}
for (j = 0; j < pfs->inodeStartPage; j++)
inode.inodePage[j].ipage = 0;
for (j = 0; j < pfs->inode_start_page; j++)
inode.inode_page[j].ipage = 0;
for (j = pfs->inodeStartPage; j < ARRLEN(inode.inodePage); j++)
inode.inodePage[j].ipage = 3;
for (j = pfs->inode_start_page; j < ARRLEN(inode.inode_page); j++)
inode.inode_page[j].ipage = 3;
inode.inodePage[0].ipage = __osSumcalc((u8*)&inode.inodePage[pfs->inodeStartPage],
sizeof(__OSInodeUnit) * -pfs->inodeStartPage + sizeof(inode.inodePage));
inode.inode_page[0].ipage = __osSumcalc((u8*)&inode.inode_page[pfs->inode_start_page],
sizeof(__OSInodeUnit) * -pfs->inode_start_page + sizeof(inode.inode_page));
ptr = (u8 *)&inode;
for (j = 0; j < PFS_ONE_PAGE; j++){
@@ -52,9 +52,9 @@ s32 osPfsReFormat(OSPfs *pfs, OSMesgQueue *queue, int channel) {
}
for (i = 1; i < pfs->banks; i++) {
for (j = 1; j < ARRLEN(inode.inodePage); j++)
inode.inodePage[j].ipage = 3;
inode.inodePage[0].ipage = __osSumcalc((u8*)&inode.inodePage[1], -sizeof(__OSInodeUnit) + sizeof(inode.inodePage));
for (j = 1; j < ARRLEN(inode.inode_page); j++)
inode.inode_page[j].ipage = 3;
inode.inode_page[0].ipage = __osSumcalc((u8*)&inode.inode_page[1], -sizeof(__OSInodeUnit) + sizeof(inode.inode_page));
ptr = (u8 *)&inode;
for (j = 0; j < PFS_ONE_PAGE; j++) {
ERRCK(__osContRamWrite(queue, channel, pfs->inode_table + i * PFS_ONE_PAGE + j, ptr + j * BLOCKSIZE, FALSE));