mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-30 15:53:34 -04:00
Decompile __osPfsGetStatus
This commit is contained in:
@@ -2308,7 +2308,7 @@ u32 var80060974 = 0x00000000;
|
||||
u32 var80060978 = 0x00000000;
|
||||
u32 var8006097c = 0x00000000;
|
||||
u32 var80060980 = 0xffffffff;
|
||||
u32 var80060984 = 0xfa000000;
|
||||
u8 var80060984 = 0xfa;
|
||||
u32 var80060988 = 0x00000000;
|
||||
u32 var8006098c = 0x00000000;
|
||||
u32 var80060990 = 0x00000000;
|
||||
|
||||
+12
-1
@@ -76,13 +76,24 @@ typedef struct {
|
||||
|
||||
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
|
||||
|
||||
#define PFS_ERR_NOPACK 1 /* no memory card is plugged */
|
||||
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a different one */
|
||||
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker */
|
||||
#define PFS_ERR_CONTRFAIL 4
|
||||
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist */
|
||||
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad */
|
||||
#define PFS_DATA_FULL 7 /* no free pages on ram pack */
|
||||
#define PFS_DIR_FULL 8 /* no free directories on ram pack */
|
||||
#define PFS_ERR_EXIST 9 /* file exists */
|
||||
#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
|
||||
#define PFS_ERR_DEVICE 11 /* wrong device type */
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* Macro definitions
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* Extern variables
|
||||
|
||||
@@ -195,6 +195,7 @@ extern OSThread *__osRunningThread;
|
||||
extern OSThread *__osFaultedThread;
|
||||
extern u32 __osSiAccessQueueEnabled;
|
||||
extern u32 var80060970;
|
||||
extern u8 var80060984;
|
||||
extern u32 var800609a0;
|
||||
extern u32 var800609c4;
|
||||
extern u32 var800611f0;
|
||||
|
||||
@@ -1,65 +1,40 @@
|
||||
#include <libultra_internal.h>
|
||||
#include "game/data/data_000000.h"
|
||||
#include "gvars/gvars.h"
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel __osPfsGetStatus
|
||||
/* 4ba90: 27bdffd0 */ addiu $sp,$sp,-48
|
||||
/* 4ba94: afa40030 */ sw $a0,0x30($sp)
|
||||
/* 4ba98: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* 4ba9c: afa50034 */ sw $a1,0x34($sp)
|
||||
/* 4baa0: 240e00fa */ addiu $t6,$zero,0xfa
|
||||
/* 4baa4: 3c018006 */ lui $at,%hi(var80060984)
|
||||
/* 4baa8: 00a02025 */ or $a0,$a1,$zero
|
||||
/* 4baac: a02e0984 */ sb $t6,%lo(var80060984)($at)
|
||||
/* 4bab0: 0c012ed8 */ jal __osPfsRequestOneChannel
|
||||
/* 4bab4: 00002825 */ or $a1,$zero,$zero
|
||||
/* 4bab8: 3c058009 */ lui $a1,%hi(__osPfsPifRam)
|
||||
/* 4babc: 24a50a20 */ addiu $a1,$a1,%lo(__osPfsPifRam)
|
||||
/* 4bac0: 0c012a34 */ jal __osSiRawStartDma
|
||||
/* 4bac4: 24040001 */ addiu $a0,$zero,0x1
|
||||
/* 4bac8: 8fa40030 */ lw $a0,0x30($sp)
|
||||
/* 4bacc: 27a50028 */ addiu $a1,$sp,0x28
|
||||
/* 4bad0: 0c0121bc */ jal osRecvMesg
|
||||
/* 4bad4: 24060001 */ addiu $a2,$zero,0x1
|
||||
/* 4bad8: 3c058009 */ lui $a1,%hi(__osPfsPifRam)
|
||||
/* 4badc: 24a50a20 */ addiu $a1,$a1,%lo(__osPfsPifRam)
|
||||
/* 4bae0: 0c012a34 */ jal __osSiRawStartDma
|
||||
/* 4bae4: 00002025 */ or $a0,$zero,$zero
|
||||
/* 4bae8: afa2002c */ sw $v0,0x2c($sp)
|
||||
/* 4baec: 8fa40030 */ lw $a0,0x30($sp)
|
||||
/* 4baf0: 27a50028 */ addiu $a1,$sp,0x28
|
||||
/* 4baf4: 0c0121bc */ jal osRecvMesg
|
||||
/* 4baf8: 24060001 */ addiu $a2,$zero,0x1
|
||||
/* 4bafc: 8fa40034 */ lw $a0,0x34($sp)
|
||||
/* 4bb00: 0c012f09 */ jal __osPfsGetOneChannelData
|
||||
/* 4bb04: 27a50024 */ addiu $a1,$sp,0x24
|
||||
/* 4bb08: 93a20026 */ lbu $v0,0x26($sp)
|
||||
/* 4bb0c: 93b80027 */ lbu $t8,0x27($sp)
|
||||
/* 4bb10: 8fbf0014 */ lw $ra,0x14($sp)
|
||||
/* 4bb14: 30430001 */ andi $v1,$v0,0x1
|
||||
/* 4bb18: 10600005 */ beqz $v1,.L0004bb30
|
||||
/* 4bb1c: 304f0002 */ andi $t7,$v0,0x2
|
||||
/* 4bb20: 11e00003 */ beqz $t7,.L0004bb30
|
||||
/* 4bb24: 00000000 */ nop
|
||||
/* 4bb28: 1000000b */ b .L0004bb58
|
||||
/* 4bb2c: 24020002 */ addiu $v0,$zero,0x2
|
||||
.L0004bb30:
|
||||
/* 4bb30: 17000003 */ bnez $t8,.L0004bb40
|
||||
/* 4bb34: 00000000 */ nop
|
||||
/* 4bb38: 14600003 */ bnez $v1,.L0004bb48
|
||||
/* 4bb3c: 30590004 */ andi $t9,$v0,0x4
|
||||
.L0004bb40:
|
||||
/* 4bb40: 10000005 */ b .L0004bb58
|
||||
/* 4bb44: 24020001 */ addiu $v0,$zero,0x1
|
||||
.L0004bb48:
|
||||
/* 4bb48: 13200003 */ beqz $t9,.L0004bb58
|
||||
/* 4bb4c: 8fa2002c */ lw $v0,0x2c($sp)
|
||||
/* 4bb50: 10000001 */ b .L0004bb58
|
||||
/* 4bb54: 24020004 */ addiu $v0,$zero,0x4
|
||||
.L0004bb58:
|
||||
/* 4bb58: 03e00008 */ jr $ra
|
||||
/* 4bb5c: 27bd0030 */ addiu $sp,$sp,0x30
|
||||
);
|
||||
void __osPfsRequestOneChannel(int channel, int cmd);
|
||||
void __osPfsGetOneChannelData(int channel, OSContStatus *data);
|
||||
|
||||
s32 __osPfsGetStatus(OSMesgQueue *queue, int channel)
|
||||
{
|
||||
s32 ret;
|
||||
OSMesg dummy;
|
||||
OSContStatus data;
|
||||
|
||||
ret = 0;
|
||||
var80060984 = 0xfa;
|
||||
|
||||
__osPfsRequestOneChannel(channel, 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);
|
||||
__osPfsGetOneChannelData(channel, &data);
|
||||
|
||||
if ((data.status & CONT_CARD_ON) && (data.status & CONT_CARD_PULL)) {
|
||||
return PFS_ERR_NEW_PACK;
|
||||
}
|
||||
|
||||
if (data.errno != 0 || (data.status & CONT_CARD_ON) == 0) {
|
||||
return PFS_ERR_NOPACK;
|
||||
}
|
||||
|
||||
if (data.status & CONT_ADDR_CRC_ER) {
|
||||
return PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel __osPfsRequestOneChannel
|
||||
|
||||
Reference in New Issue
Block a user