mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
osPfsFileState matched from libreultra
This commit is contained in:
@@ -1,209 +0,0 @@
|
||||
glabel osPfsFileState
|
||||
/* 0D1180 800D0580 27BDFEB0 */ addiu $sp, $sp, -0x150
|
||||
/* 0D1184 800D0584 AFA40150 */ sw $a0, 0x150($sp)
|
||||
/* 0D1188 800D0588 8FAF0150 */ lw $t7, 0x150($sp)
|
||||
/* 0D118C 800D058C AFA50154 */ sw $a1, 0x154($sp)
|
||||
/* 0D1190 800D0590 AFBF0014 */ sw $ra, 0x14($sp)
|
||||
/* 0D1194 800D0594 AFA60158 */ sw $a2, 0x158($sp)
|
||||
/* 0D1198 800D0598 8FAE0154 */ lw $t6, 0x154($sp)
|
||||
/* 0D119C 800D059C 8DF80050 */ lw $t8, 0x50($t7)
|
||||
/* 0D11A0 800D05A0 01D8082A */ slt $at, $t6, $t8
|
||||
/* 0D11A4 800D05A4 10200003 */ beqz $at, .L800D05B4
|
||||
/* 0D11A8 800D05A8 00000000 */ nop
|
||||
/* 0D11AC 800D05AC 05C10003 */ bgez $t6, .L800D05BC
|
||||
/* 0D11B0 800D05B0 00000000 */ nop
|
||||
.L800D05B4:
|
||||
/* 0D11B4 800D05B4 100000AA */ b .L800D0860
|
||||
/* 0D11B8 800D05B8 24020005 */ li $v0, 5
|
||||
.L800D05BC:
|
||||
/* 0D11BC 800D05BC 8FB90150 */ lw $t9, 0x150($sp)
|
||||
/* 0D11C0 800D05C0 8F280000 */ lw $t0, ($t9)
|
||||
/* 0D11C4 800D05C4 31090001 */ andi $t1, $t0, 1
|
||||
/* 0D11C8 800D05C8 15200003 */ bnez $t1, .L800D05D8
|
||||
/* 0D11CC 800D05CC 00000000 */ nop
|
||||
/* 0D11D0 800D05D0 100000A3 */ b .L800D0860
|
||||
/* 0D11D4 800D05D4 24020005 */ li $v0, 5
|
||||
.L800D05D8:
|
||||
/* 0D11D8 800D05D8 0C0356F0 */ jal __osCheckId
|
||||
/* 0D11DC 800D05DC 8FA40150 */ lw $a0, 0x150($sp)
|
||||
/* 0D11E0 800D05E0 24010002 */ li $at, 2
|
||||
/* 0D11E4 800D05E4 14410003 */ bne $v0, $at, .L800D05F4
|
||||
/* 0D11E8 800D05E8 00000000 */ nop
|
||||
/* 0D11EC 800D05EC 1000009C */ b .L800D0860
|
||||
/* 0D11F0 800D05F0 24020002 */ li $v0, 2
|
||||
.L800D05F4:
|
||||
/* 0D11F4 800D05F4 8FAA0150 */ lw $t2, 0x150($sp)
|
||||
/* 0D11F8 800D05F8 914B0065 */ lbu $t3, 0x65($t2)
|
||||
/* 0D11FC 800D05FC 1160000A */ beqz $t3, .L800D0628
|
||||
/* 0D1200 800D0600 00000000 */ nop
|
||||
/* 0D1204 800D0604 A1400065 */ sb $zero, 0x65($t2)
|
||||
/* 0D1208 800D0608 0C0357F7 */ jal __osPfsSelectBank
|
||||
/* 0D120C 800D060C 8FA40150 */ lw $a0, 0x150($sp)
|
||||
/* 0D1210 800D0610 AFA2014C */ sw $v0, 0x14c($sp)
|
||||
/* 0D1214 800D0614 8FAC014C */ lw $t4, 0x14c($sp)
|
||||
/* 0D1218 800D0618 11800003 */ beqz $t4, .L800D0628
|
||||
/* 0D121C 800D061C 00000000 */ nop
|
||||
/* 0D1220 800D0620 1000008F */ b .L800D0860
|
||||
/* 0D1224 800D0624 01801025 */ move $v0, $t4
|
||||
.L800D0628:
|
||||
/* 0D1228 800D0628 8FAD0150 */ lw $t5, 0x150($sp)
|
||||
/* 0D122C 800D062C 8FB80154 */ lw $t8, 0x154($sp)
|
||||
/* 0D1230 800D0630 27A70028 */ addiu $a3, $sp, 0x28
|
||||
/* 0D1234 800D0634 8DAF005C */ lw $t7, 0x5c($t5)
|
||||
/* 0D1238 800D0638 8DA40004 */ lw $a0, 4($t5)
|
||||
/* 0D123C 800D063C 8DA50008 */ lw $a1, 8($t5)
|
||||
/* 0D1240 800D0640 0C033728 */ jal __osContRamRead
|
||||
/* 0D1244 800D0644 01F83021 */ addu $a2, $t7, $t8
|
||||
/* 0D1248 800D0648 AFA2014C */ sw $v0, 0x14c($sp)
|
||||
/* 0D124C 800D064C 8FAE014C */ lw $t6, 0x14c($sp)
|
||||
/* 0D1250 800D0650 11C00003 */ beqz $t6, .L800D0660
|
||||
/* 0D1254 800D0654 00000000 */ nop
|
||||
/* 0D1258 800D0658 10000081 */ b .L800D0860
|
||||
/* 0D125C 800D065C 01C01025 */ move $v0, $t6
|
||||
.L800D0660:
|
||||
/* 0D1260 800D0660 97B9002C */ lhu $t9, 0x2c($sp)
|
||||
/* 0D1264 800D0664 13200004 */ beqz $t9, .L800D0678
|
||||
/* 0D1268 800D0668 00000000 */ nop
|
||||
/* 0D126C 800D066C 8FA80028 */ lw $t0, 0x28($sp)
|
||||
/* 0D1270 800D0670 15000003 */ bnez $t0, .L800D0680
|
||||
/* 0D1274 800D0674 00000000 */ nop
|
||||
.L800D0678:
|
||||
/* 0D1278 800D0678 10000079 */ b .L800D0860
|
||||
/* 0D127C 800D067C 24020005 */ li $v0, 5
|
||||
.L800D0680:
|
||||
/* 0D1280 800D0680 8FAB0150 */ lw $t3, 0x150($sp)
|
||||
/* 0D1284 800D0684 97A9002E */ lhu $t1, 0x2e($sp)
|
||||
/* 0D1288 800D0688 8D6A0060 */ lw $t2, 0x60($t3)
|
||||
/* 0D128C 800D068C 012A082A */ slt $at, $t1, $t2
|
||||
/* 0D1290 800D0690 10200003 */ beqz $at, .L800D06A0
|
||||
/* 0D1294 800D0694 00000000 */ nop
|
||||
/* 0D1298 800D0698 10000071 */ b .L800D0860
|
||||
/* 0D129C 800D069C 24020003 */ li $v0, 3
|
||||
.L800D06A0:
|
||||
/* 0D12A0 800D06A0 93AC002F */ lbu $t4, 0x2f($sp)
|
||||
/* 0D12A4 800D06A4 93AD002E */ lbu $t5, 0x2e($sp)
|
||||
/* 0D12A8 800D06A8 8FAF0150 */ lw $t7, 0x150($sp)
|
||||
/* 0D12AC 800D06AC AFA00148 */ sw $zero, 0x148($sp)
|
||||
/* 0D12B0 800D06B0 A3AC001E */ sb $t4, 0x1e($sp)
|
||||
/* 0D12B4 800D06B4 A3AD001F */ sb $t5, 0x1f($sp)
|
||||
/* 0D12B8 800D06B8 91F80064 */ lbu $t8, 0x64($t7)
|
||||
/* 0D12BC 800D06BC 01B8082A */ slt $at, $t5, $t8
|
||||
/* 0D12C0 800D06C0 1020003E */ beqz $at, .L800D07BC
|
||||
/* 0D12C4 800D06C4 00000000 */ nop
|
||||
.L800D06C8:
|
||||
/* 0D12C8 800D06C8 8FA40150 */ lw $a0, 0x150($sp)
|
||||
/* 0D12CC 800D06CC 27A50048 */ addiu $a1, $sp, 0x48
|
||||
/* 0D12D0 800D06D0 00003025 */ move $a2, $zero
|
||||
/* 0D12D4 800D06D4 0C03572F */ jal __osPfsRWInode
|
||||
/* 0D12D8 800D06D8 93A7001F */ lbu $a3, 0x1f($sp)
|
||||
/* 0D12DC 800D06DC AFA2014C */ sw $v0, 0x14c($sp)
|
||||
/* 0D12E0 800D06E0 8FAE014C */ lw $t6, 0x14c($sp)
|
||||
/* 0D12E4 800D06E4 11C00003 */ beqz $t6, .L800D06F4
|
||||
/* 0D12E8 800D06E8 00000000 */ nop
|
||||
/* 0D12EC 800D06EC 1000005C */ b .L800D0860
|
||||
/* 0D12F0 800D06F0 01C01025 */ move $v0, $t6
|
||||
.L800D06F4:
|
||||
/* 0D12F4 800D06F4 93A8001E */ lbu $t0, 0x1e($sp)
|
||||
/* 0D12F8 800D06F8 27A90048 */ addiu $t1, $sp, 0x48
|
||||
/* 0D12FC 800D06FC 27B90024 */ addiu $t9, $sp, 0x24
|
||||
/* 0D1300 800D0700 00085840 */ sll $t3, $t0, 1
|
||||
/* 0D1304 800D0704 01695021 */ addu $t2, $t3, $t1
|
||||
/* 0D1308 800D0708 95410000 */ lhu $at, ($t2)
|
||||
/* 0D130C 800D070C A7210000 */ sh $at, ($t9)
|
||||
/* 0D1310 800D0710 8FAD0148 */ lw $t5, 0x148($sp)
|
||||
/* 0D1314 800D0714 8FA80150 */ lw $t0, 0x150($sp)
|
||||
/* 0D1318 800D0718 97AE0024 */ lhu $t6, 0x24($sp)
|
||||
/* 0D131C 800D071C 25B80001 */ addiu $t8, $t5, 1
|
||||
/* 0D1320 800D0720 AFB80148 */ sw $t8, 0x148($sp)
|
||||
/* 0D1324 800D0724 8D0B0060 */ lw $t3, 0x60($t0)
|
||||
/* 0D1328 800D0728 01CB082A */ slt $at, $t6, $t3
|
||||
/* 0D132C 800D072C 14200019 */ bnez $at, .L800D0794
|
||||
/* 0D1330 800D0730 00000000 */ nop
|
||||
.L800D0734:
|
||||
/* 0D1334 800D0734 8FA90148 */ lw $t1, 0x148($sp)
|
||||
/* 0D1338 800D0738 93AA0025 */ lbu $t2, 0x25($sp)
|
||||
/* 0D133C 800D073C 27AD0048 */ addiu $t5, $sp, 0x48
|
||||
/* 0D1340 800D0740 252C0001 */ addiu $t4, $t1, 1
|
||||
/* 0D1344 800D0744 000A7840 */ sll $t7, $t2, 1
|
||||
/* 0D1348 800D0748 AFAC0148 */ sw $t4, 0x148($sp)
|
||||
/* 0D134C 800D074C 01EDC021 */ addu $t8, $t7, $t5
|
||||
/* 0D1350 800D0750 97010000 */ lhu $at, ($t8)
|
||||
/* 0D1354 800D0754 27B90024 */ addiu $t9, $sp, 0x24
|
||||
/* 0D1358 800D0758 A7210000 */ sh $at, ($t9)
|
||||
/* 0D135C 800D075C 93AC001F */ lbu $t4, 0x1f($sp)
|
||||
/* 0D1360 800D0760 93A90024 */ lbu $t1, 0x24($sp)
|
||||
/* 0D1364 800D0764 112C0005 */ beq $t1, $t4, .L800D077C
|
||||
/* 0D1368 800D0768 00000000 */ nop
|
||||
/* 0D136C 800D076C 93AA0025 */ lbu $t2, 0x25($sp)
|
||||
/* 0D1370 800D0770 A3A9001F */ sb $t1, 0x1f($sp)
|
||||
/* 0D1374 800D0774 10000007 */ b .L800D0794
|
||||
/* 0D1378 800D0778 A3AA001E */ sb $t2, 0x1e($sp)
|
||||
.L800D077C:
|
||||
/* 0D137C 800D077C 8FAD0150 */ lw $t5, 0x150($sp)
|
||||
/* 0D1380 800D0780 97AF0024 */ lhu $t7, 0x24($sp)
|
||||
/* 0D1384 800D0784 8DAE0060 */ lw $t6, 0x60($t5)
|
||||
/* 0D1388 800D0788 01EE082A */ slt $at, $t7, $t6
|
||||
/* 0D138C 800D078C 1020FFE9 */ beqz $at, .L800D0734
|
||||
/* 0D1390 800D0790 00000000 */ nop
|
||||
.L800D0794:
|
||||
/* 0D1394 800D0794 97A80024 */ lhu $t0, 0x24($sp)
|
||||
/* 0D1398 800D0798 24010001 */ li $at, 1
|
||||
/* 0D139C 800D079C 11010007 */ beq $t0, $at, .L800D07BC
|
||||
/* 0D13A0 800D07A0 00000000 */ nop
|
||||
/* 0D13A4 800D07A4 8FB80150 */ lw $t8, 0x150($sp)
|
||||
/* 0D13A8 800D07A8 93B9001F */ lbu $t9, 0x1f($sp)
|
||||
/* 0D13AC 800D07AC 930B0064 */ lbu $t3, 0x64($t8)
|
||||
/* 0D13B0 800D07B0 032B082A */ slt $at, $t9, $t3
|
||||
/* 0D13B4 800D07B4 1420FFC4 */ bnez $at, .L800D06C8
|
||||
/* 0D13B8 800D07B8 00000000 */ nop
|
||||
.L800D07BC:
|
||||
/* 0D13BC 800D07BC 97AC0024 */ lhu $t4, 0x24($sp)
|
||||
/* 0D13C0 800D07C0 24010001 */ li $at, 1
|
||||
/* 0D13C4 800D07C4 11810003 */ beq $t4, $at, .L800D07D4
|
||||
/* 0D13C8 800D07C8 00000000 */ nop
|
||||
/* 0D13CC 800D07CC 10000024 */ b .L800D0860
|
||||
/* 0D13D0 800D07D0 24020003 */ li $v0, 3
|
||||
.L800D07D4:
|
||||
/* 0D13D4 800D07D4 8FA90148 */ lw $t1, 0x148($sp)
|
||||
/* 0D13D8 800D07D8 8FAD0158 */ lw $t5, 0x158($sp)
|
||||
/* 0D13DC 800D07DC 00095200 */ sll $t2, $t1, 8
|
||||
/* 0D13E0 800D07E0 ADAA0000 */ sw $t2, ($t5)
|
||||
/* 0D13E4 800D07E4 8FAE0158 */ lw $t6, 0x158($sp)
|
||||
/* 0D13E8 800D07E8 97AF002C */ lhu $t7, 0x2c($sp)
|
||||
/* 0D13EC 800D07EC A5CF0008 */ sh $t7, 8($t6)
|
||||
/* 0D13F0 800D07F0 8FB80158 */ lw $t8, 0x158($sp)
|
||||
/* 0D13F4 800D07F4 8FA80028 */ lw $t0, 0x28($sp)
|
||||
/* 0D13F8 800D07F8 AF080004 */ sw $t0, 4($t8)
|
||||
/* 0D13FC 800D07FC AFA00020 */ sw $zero, 0x20($sp)
|
||||
.L800D0800:
|
||||
/* 0D1400 800D0800 8FB90020 */ lw $t9, 0x20($sp)
|
||||
/* 0D1404 800D0804 8FAC0158 */ lw $t4, 0x158($sp)
|
||||
/* 0D1408 800D0808 03B95821 */ addu $t3, $sp, $t9
|
||||
/* 0D140C 800D080C 916B0038 */ lbu $t3, 0x38($t3)
|
||||
/* 0D1410 800D0810 01994821 */ addu $t1, $t4, $t9
|
||||
/* 0D1414 800D0814 A12B000E */ sb $t3, 0xe($t1)
|
||||
/* 0D1418 800D0818 8FAA0020 */ lw $t2, 0x20($sp)
|
||||
/* 0D141C 800D081C 254D0001 */ addiu $t5, $t2, 1
|
||||
/* 0D1420 800D0820 29A10010 */ slti $at, $t5, 0x10
|
||||
/* 0D1424 800D0824 1420FFF6 */ bnez $at, .L800D0800
|
||||
/* 0D1428 800D0828 AFAD0020 */ sw $t5, 0x20($sp)
|
||||
/* 0D142C 800D082C AFA00020 */ sw $zero, 0x20($sp)
|
||||
.L800D0830:
|
||||
/* 0D1430 800D0830 8FAF0020 */ lw $t7, 0x20($sp)
|
||||
/* 0D1434 800D0834 8FA80158 */ lw $t0, 0x158($sp)
|
||||
/* 0D1438 800D0838 03AF7021 */ addu $t6, $sp, $t7
|
||||
/* 0D143C 800D083C 91CE0034 */ lbu $t6, 0x34($t6)
|
||||
/* 0D1440 800D0840 010FC021 */ addu $t8, $t0, $t7
|
||||
/* 0D1444 800D0844 A30E000A */ sb $t6, 0xa($t8)
|
||||
/* 0D1448 800D0848 8FAC0020 */ lw $t4, 0x20($sp)
|
||||
/* 0D144C 800D084C 25990001 */ addiu $t9, $t4, 1
|
||||
/* 0D1450 800D0850 2B210004 */ slti $at, $t9, 4
|
||||
/* 0D1454 800D0854 1420FFF6 */ bnez $at, .L800D0830
|
||||
/* 0D1458 800D0858 AFB90020 */ sw $t9, 0x20($sp)
|
||||
/* 0D145C 800D085C 00001025 */ move $v0, $zero
|
||||
.L800D0860:
|
||||
/* 0D1460 800D0860 8FBF0014 */ lw $ra, 0x14($sp)
|
||||
/* 0D1464 800D0864 27BD0150 */ addiu $sp, $sp, 0x150
|
||||
/* 0D1468 800D0868 03E00008 */ jr $ra
|
||||
/* 0D146C 800D086C 00000000 */ nop
|
||||
|
||||
@@ -3,8 +3,64 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "macros.h"
|
||||
#include "libultra_internal.h"
|
||||
#include "controller.h"
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D1180/osPfsFileState.s")
|
||||
s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state)
|
||||
{
|
||||
s32 ret;
|
||||
int pages;
|
||||
__OSInode inode;
|
||||
__OSDir dir;
|
||||
__OSInodeUnit next_page;
|
||||
int j;
|
||||
u8 bank;
|
||||
u8 start_page;
|
||||
if (file_no >= pfs->dir_size || file_no < 0)
|
||||
return PFS_ERR_INVALID;
|
||||
PFS_CHECK_STATUS;
|
||||
PFS_CHECK_ID;
|
||||
SET_ACTIVEBANK_TO_ZERO;
|
||||
|
||||
ERRCK(__osContRamRead(pfs->queue, pfs->channel, pfs->dir_table + file_no, (u8*)&dir));
|
||||
if (dir.company_code == 0 || dir.game_code == 0)
|
||||
return PFS_ERR_INVALID;
|
||||
if (dir.start_page.ipage < pfs->inode_start_page)
|
||||
return PFS_ERR_INCONSISTENT;
|
||||
pages = 0;
|
||||
start_page = dir.start_page.inode_t.page;
|
||||
bank = dir.start_page.inode_t.bank;
|
||||
while (bank < pfs->banks)
|
||||
{
|
||||
ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank));
|
||||
next_page = inode.inode_page[start_page];
|
||||
pages++;
|
||||
while (next_page.ipage >= pfs->inode_start_page)
|
||||
{
|
||||
pages++;
|
||||
next_page = inode.inode_page[next_page.inode_t.page];
|
||||
if (next_page.inode_t.bank != bank)
|
||||
{
|
||||
bank = next_page.inode_t.bank;
|
||||
start_page = next_page.inode_t.page;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (next_page.ipage == 1)
|
||||
break;
|
||||
}
|
||||
if (next_page.ipage != 1)
|
||||
return PFS_ERR_INCONSISTENT;
|
||||
|
||||
state->file_size = pages << PFS_ONE_PAGE;
|
||||
state->company_code = dir.company_code;
|
||||
state->game_code = dir.game_code;
|
||||
for (j = 0; j < ARRLEN(state->game_name); j++)
|
||||
state->game_name[j] = dir.game_name[j];
|
||||
for (j = 0; j < ARRLEN(state->ext_name); j++)
|
||||
state->ext_name[j] = dir.ext_name[j];
|
||||
return 0;
|
||||
}
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D1180/osPfsDeleteFile.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D1180/__osPfsReleasePages.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D1180/__osBlockSum.s")
|
||||
|
||||
Reference in New Issue
Block a user