Identify and match osPfsInit

This commit is contained in:
Ryan Myers
2021-10-06 21:01:16 -04:00
parent fa6280f3de
commit 71eb248636
6 changed files with 82 additions and 58 deletions
@@ -52,7 +52,7 @@ glabel func_80074B34
/* 0757F4 80074BF4 15C00004 */ bnez $t6, .L80074C08
/* 0757F8 80074BF8 3C048012 */ lui $a0, %hi(D_80124010) # $a0, 0x8012
/* 0757FC 80074BFC 8C844010 */ lw $a0, %lo(D_80124010)($a0)
/* 075800 80074C00 0C033B48 */ jal func_800CED20
/* 075800 80074C00 0C033B48 */ jal osPfsInit
/* 075804 80074C04 03203025 */ move $a2, $t9
.L80074C08:
/* 075808 80074C08 8FA40058 */ lw $a0, 0x58($sp)
@@ -68,7 +68,7 @@ glabel func_800758DC
/* 0765D0 800759D0 00401825 */ move $v1, $v0
/* 0765D4 800759D4 8E840000 */ lw $a0, ($s4)
/* 0765D8 800759D8 02602825 */ move $a1, $s3
/* 0765DC 800759DC 0C033B48 */ jal func_800CED20
/* 0765DC 800759DC 0C033B48 */ jal osPfsInit
/* 0765E0 800759E0 02A03025 */ move $a2, $s5
/* 0765E4 800759E4 00401825 */ move $v1, $v0
.L800759E8:
@@ -90,7 +90,7 @@ glabel func_800758DC
/* 07661C 80075A1C 24010001 */ li $at, 1
/* 076620 80075A20 8E840000 */ lw $a0, ($s4)
/* 076624 80075A24 02602825 */ move $a1, $s3
/* 076628 80075A28 0C033B48 */ jal func_800CED20
/* 076628 80075A28 0C033B48 */ jal osPfsInit
/* 07662C 80075A2C 02A03025 */ move $a2, $s5
/* 076630 80075A30 14520008 */ bne $v0, $s2, .L80075A54
/* 076634 80075A34 02602825 */ move $a1, $s3
@@ -67,13 +67,13 @@ glabel func_80075B18
/* 076818 80075C18 018D9021 */ addu $s2, $t4, $t5
/* 07681C 80075C1C 8E840000 */ lw $a0, ($s4)
/* 076820 80075C20 02402825 */ move $a1, $s2
/* 076824 80075C24 0C033B48 */ jal func_800CED20
/* 076824 80075C24 0C033B48 */ jal osPfsInit
/* 076828 80075C28 02003025 */ move $a2, $s0
/* 07682C 80075C2C 24010002 */ li $at, 2
/* 076830 80075C30 14410004 */ bne $v0, $at, .L80075C44
/* 076834 80075C34 02402825 */ move $a1, $s2
/* 076838 80075C38 8E840000 */ lw $a0, ($s4)
/* 07683C 80075C3C 0C033B48 */ jal func_800CED20
/* 07683C 80075C3C 0C033B48 */ jal osPfsInit
/* 076840 80075C40 02003025 */ move $a2, $s0
.L80075C44:
/* 076844 80075C44 14400006 */ bnez $v0, .L80075C60
@@ -1,50 +0,0 @@
glabel func_800CED20
/* 0CF920 800CED20 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 0CF924 800CED24 AFBF0014 */ sw $ra, 0x14($sp)
/* 0CF928 800CED28 AFA40020 */ sw $a0, 0x20($sp)
/* 0CF92C 800CED2C AFA50024 */ sw $a1, 0x24($sp)
/* 0CF930 800CED30 AFA60028 */ sw $a2, 0x28($sp)
/* 0CF934 800CED34 0C033594 */ jal __osSiGetAccess
/* 0CF938 800CED38 AFA0001C */ sw $zero, 0x1c($sp)
/* 0CF93C 800CED3C 8FA40020 */ lw $a0, 0x20($sp)
/* 0CF940 800CED40 0C033B75 */ jal __osPfsGetStatus
/* 0CF944 800CED44 8FA50028 */ lw $a1, 0x28($sp)
/* 0CF948 800CED48 0C0335A5 */ jal __osSiRelAccess
/* 0CF94C 800CED4C AFA2001C */ sw $v0, 0x1c($sp)
/* 0CF950 800CED50 8FAE001C */ lw $t6, 0x1c($sp)
/* 0CF954 800CED54 11C00003 */ beqz $t6, .L800CED64
/* 0CF958 800CED58 00000000 */ nop
/* 0CF95C 800CED5C 10000019 */ b .L800CEDC4
/* 0CF960 800CED60 01C01025 */ move $v0, $t6
.L800CED64:
/* 0CF964 800CED64 8FAF0020 */ lw $t7, 0x20($sp)
/* 0CF968 800CED68 8FB80024 */ lw $t8, 0x24($sp)
/* 0CF96C 800CED6C AF0F0004 */ sw $t7, 4($t8)
/* 0CF970 800CED70 8FA80024 */ lw $t0, 0x24($sp)
/* 0CF974 800CED74 8FB90028 */ lw $t9, 0x28($sp)
/* 0CF978 800CED78 AD190008 */ sw $t9, 8($t0)
/* 0CF97C 800CED7C 8FA90024 */ lw $t1, 0x24($sp)
/* 0CF980 800CED80 AD200000 */ sw $zero, ($t1)
/* 0CF984 800CED84 0C035659 */ jal __osGetId
/* 0CF988 800CED88 8FA40024 */ lw $a0, 0x24($sp)
/* 0CF98C 800CED8C AFA2001C */ sw $v0, 0x1c($sp)
/* 0CF990 800CED90 8FAA001C */ lw $t2, 0x1c($sp)
/* 0CF994 800CED94 11400003 */ beqz $t2, .L800CEDA4
/* 0CF998 800CED98 00000000 */ nop
/* 0CF99C 800CED9C 10000009 */ b .L800CEDC4
/* 0CF9A0 800CEDA0 01401025 */ move $v0, $t2
.L800CEDA4:
/* 0CF9A4 800CEDA4 0C033D4C */ jal osPfsChecker
/* 0CF9A8 800CEDA8 8FA40024 */ lw $a0, 0x24($sp)
/* 0CF9AC 800CEDAC 8FAB0024 */ lw $t3, 0x24($sp)
/* 0CF9B0 800CEDB0 AFA2001C */ sw $v0, 0x1c($sp)
/* 0CF9B4 800CEDB4 8D6C0000 */ lw $t4, ($t3)
/* 0CF9B8 800CEDB8 358D0001 */ ori $t5, $t4, 1
/* 0CF9BC 800CEDBC AD6D0000 */ sw $t5, ($t3)
/* 0CF9C0 800CEDC0 8FA2001C */ lw $v0, 0x1c($sp)
.L800CEDC4:
/* 0CF9C4 800CEDC4 8FBF0014 */ lw $ra, 0x14($sp)
/* 0CF9C8 800CEDC8 27BD0020 */ addiu $sp, $sp, 0x20
/* 0CF9CC 800CEDCC 03E00008 */ jr $ra
/* 0CF9D0 800CEDD0 00000000 */ nop
+76
View File
@@ -0,0 +1,76 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800CED20 */
#include "macros.h"
#include "libultra_internal.h"
#include "controller.h"
#include "siint.h"
s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel) {
s32 ret;
ret = 0;
__osSiGetAccess();
ret = __osPfsGetStatus(queue, channel);
__osSiRelAccess();
if (ret != 0)
return ret;
pfs->queue = queue;
pfs->channel = channel;
pfs->status = 0;
//pfs->activebank = -1; //Single difference between this an libreultra
ERRCK(__osGetId(pfs));
ret = osPfsChecker(pfs);
pfs->status |= PFS_INITIALIZED;
return ret;
}
#if 1
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s")
#else
s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern)
{
s32 ret;
OSMesg dummy;
u8 bitpattern;
OSContStatus data[MAXCONTROLLERS];
int channel;
u8 bits;
int crc_error_cnt;
ret = 0;
bits = 0;
crc_error_cnt = 3;
__osSiGetAccess();
while (TRUE)
{
__osPfsRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
__osPfsGetInitData(&bitpattern, data);
for (channel = 0; channel < __osMaxControllers; channel++)
{
if ((data[channel].status & CONT_ADDR_CRC_ER) == 0)
{
crc_error_cnt--;
break;
}
}
if (__osMaxControllers == channel)
crc_error_cnt = 0;
if (crc_error_cnt < 1)
{
for (channel = 0; channel < __osMaxControllers; channel++)
{
if (data[channel].errno == 0 && (data[channel].status & CONT_CARD_ON) != 0)
bits |= 1 << channel;
}
__osSiRelAccess();
*pattern = bits;
return ret;
}
}
}
#endif
+1 -3
View File
@@ -1,10 +1,8 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800CED20 */
/* RAM_POS: 0x800CEEE0 */
#include "types.h"
#include "macros.h"
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/func_800CED20.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetNextPage.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/osPfsReadWriteFile.s")