Match __osPfsGetStatus

This commit is contained in:
Ryan Myers
2021-10-06 21:14:55 -04:00
parent 71eb248636
commit f9a8b01e7c
2 changed files with 27 additions and 117 deletions
@@ -1,74 +0,0 @@
glabel __osPfsGetStatus
/* 0CF9D4 800CEDD4 27BDFFC8 */ addiu $sp, $sp, -0x38
/* 0CF9D8 800CEDD8 AFBF0014 */ sw $ra, 0x14($sp)
/* 0CF9DC 800CEDDC AFA40038 */ sw $a0, 0x38($sp)
/* 0CF9E0 800CEDE0 AFA5003C */ sw $a1, 0x3c($sp)
/* 0CF9E4 800CEDE4 AFA00034 */ sw $zero, 0x34($sp)
/* 0CF9E8 800CEDE8 0C03350C */ jal __osPfsRequestData
/* 0CF9EC 800CEDEC 00002025 */ move $a0, $zero
/* 0CF9F0 800CEDF0 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013
/* 0CF9F4 800CEDF4 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220
/* 0CF9F8 800CEDF8 0C0335B0 */ jal __osSiRawStartDma
/* 0CF9FC 800CEDFC 24040001 */ li $a0, 1
/* 0CFA00 800CEE00 AFA20034 */ sw $v0, 0x34($sp)
/* 0CFA04 800CEE04 8FA40038 */ lw $a0, 0x38($sp)
/* 0CFA08 800CEE08 27A50030 */ addiu $a1, $sp, 0x30
/* 0CFA0C 800CEE0C 0C0322EC */ jal osRecvMesg
/* 0CFA10 800CEE10 24060001 */ li $a2, 1
/* 0CFA14 800CEE14 3C058013 */ lui $a1, %hi(__osPfsPifRam) # $a1, 0x8013
/* 0CFA18 800CEE18 24A5CDE0 */ addiu $a1, %lo(__osPfsPifRam) # addiu $a1, $a1, -0x3220
/* 0CFA1C 800CEE1C 0C0335B0 */ jal __osSiRawStartDma
/* 0CFA20 800CEE20 00002025 */ move $a0, $zero
/* 0CFA24 800CEE24 AFA20034 */ sw $v0, 0x34($sp)
/* 0CFA28 800CEE28 8FA40038 */ lw $a0, 0x38($sp)
/* 0CFA2C 800CEE2C 27A50030 */ addiu $a1, $sp, 0x30
/* 0CFA30 800CEE30 0C0322EC */ jal osRecvMesg
/* 0CFA34 800CEE34 24060001 */ li $a2, 1
/* 0CFA38 800CEE38 27A4002F */ addiu $a0, $sp, 0x2f
/* 0CFA3C 800CEE3C 0C03354B */ jal __osPfsGetInitData
/* 0CFA40 800CEE40 27A5001C */ addiu $a1, $sp, 0x1c
/* 0CFA44 800CEE44 8FAE003C */ lw $t6, 0x3c($sp)
/* 0CFA48 800CEE48 000E7880 */ sll $t7, $t6, 2
/* 0CFA4C 800CEE4C 03AFC021 */ addu $t8, $sp, $t7
/* 0CFA50 800CEE50 9318001E */ lbu $t8, 0x1e($t8)
/* 0CFA54 800CEE54 33190001 */ andi $t9, $t8, 1
/* 0CFA58 800CEE58 13200006 */ beqz $t9, .L800CEE74
/* 0CFA5C 800CEE5C 00000000 */ nop
/* 0CFA60 800CEE60 33080002 */ andi $t0, $t8, 2
/* 0CFA64 800CEE64 11000003 */ beqz $t0, .L800CEE74
/* 0CFA68 800CEE68 00000000 */ nop
/* 0CFA6C 800CEE6C 10000018 */ b .L800CEED0
/* 0CFA70 800CEE70 24020002 */ li $v0, 2
.L800CEE74:
/* 0CFA74 800CEE74 8FA9003C */ lw $t1, 0x3c($sp)
/* 0CFA78 800CEE78 27AB001C */ addiu $t3, $sp, 0x1c
/* 0CFA7C 800CEE7C 00095080 */ sll $t2, $t1, 2
/* 0CFA80 800CEE80 014B6021 */ addu $t4, $t2, $t3
/* 0CFA84 800CEE84 918D0003 */ lbu $t5, 3($t4)
/* 0CFA88 800CEE88 15A00005 */ bnez $t5, .L800CEEA0
/* 0CFA8C 800CEE8C 00000000 */ nop
/* 0CFA90 800CEE90 918E0002 */ lbu $t6, 2($t4)
/* 0CFA94 800CEE94 31CF0001 */ andi $t7, $t6, 1
/* 0CFA98 800CEE98 15E00003 */ bnez $t7, .L800CEEA8
/* 0CFA9C 800CEE9C 00000000 */ nop
.L800CEEA0:
/* 0CFAA0 800CEEA0 1000000B */ b .L800CEED0
/* 0CFAA4 800CEEA4 24020001 */ li $v0, 1
.L800CEEA8:
/* 0CFAA8 800CEEA8 8FB9003C */ lw $t9, 0x3c($sp)
/* 0CFAAC 800CEEAC 0019C080 */ sll $t8, $t9, 2
/* 0CFAB0 800CEEB0 03B84021 */ addu $t0, $sp, $t8
/* 0CFAB4 800CEEB4 9108001E */ lbu $t0, 0x1e($t0)
/* 0CFAB8 800CEEB8 31090004 */ andi $t1, $t0, 4
/* 0CFABC 800CEEBC 11200003 */ beqz $t1, .L800CEECC
/* 0CFAC0 800CEEC0 00000000 */ nop
/* 0CFAC4 800CEEC4 10000002 */ b .L800CEED0
/* 0CFAC8 800CEEC8 24020004 */ li $v0, 4
.L800CEECC:
/* 0CFACC 800CEECC 8FA20034 */ lw $v0, 0x34($sp)
.L800CEED0:
/* 0CFAD0 800CEED0 8FBF0014 */ lw $ra, 0x14($sp)
/* 0CFAD4 800CEED4 27BD0038 */ addiu $sp, $sp, 0x38
/* 0CFAD8 800CEED8 03E00008 */ jr $ra
/* 0CFADC 800CEEDC 00000000 */ nop
+27 -43
View File
@@ -26,51 +26,35 @@ s32 osPfsInit(OSMesgQueue *queue, OSPfs *pfs, int channel) {
return ret;
}
#if 1
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CF330/__osPfsGetStatus.s")
#else
s32 osPfsIsPlug(OSMesgQueue *queue, u8 *pattern)
{
//I would think this should be in it's own file, but it only works here
s32 __osPfsGetStatus(OSMesgQueue *queue, int channel) {
s32 ret;
OSMesg dummy;
u8 bitpattern;
u8 pattern;
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;
}
ret = 0;
__osPfsRequestData(0);
ret = __osSiRawStartDma(OS_WRITE, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPfsPifRam);
osRecvMesg(queue, &dummy, OS_MESG_BLOCK);
__osPfsGetInitData(&pattern, data);
if (data[channel].status & CONT_CARD_ON && data[channel].status & CONT_CARD_PULL) {
return PFS_ERR_NEW_PACK;
}
if (data[channel].errno || !(data[channel].status & CONT_CARD_ON)) {
return PFS_ERR_NOPACK;
}
if (data[channel].status & CONT_ADDR_CRC_ER) {
return PFS_ERR_CONTRFAIL;
}
return ret;
}
#endif