Decompile osMotorProbe
This commit is contained in:
parent
34098d6f59
commit
f47c37603f
2
Makefile
2
Makefile
|
|
@ -69,10 +69,10 @@ $(B_DIR)/lib/ultra/io/conteepwrite.o: LOOPUNROLL :=
|
|||
$(B_DIR)/lib/ultra/io/contpfs.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/contramread.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/contramwrite.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/motor.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/pfschecker.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/pfsfreeblocks.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/ultra/io/pfsgetstatus.o: LOOPUNROLL :=
|
||||
$(B_DIR)/lib/lib_4f5e0.o: LOOPUNROLL :=
|
||||
|
||||
$(B_DIR)/lib/ultra/libc/ll.o: MIPSISET := -mips3 -o32
|
||||
$(B_DIR)/lib/ultra/libc/llcvt.o: MIPSISET := -mips3 -32
|
||||
|
|
|
|||
|
|
@ -184,7 +184,8 @@
|
|||
build/ROMID/lib/ultra/io/contquery.o (section); \
|
||||
build/ROMID/lib/ultra/io/pfsisplug.o (section); \
|
||||
build/ROMID/lib/ultra/io/contreaddata.o (section); \
|
||||
build/ROMID/lib/lib_4f5e0.o (section); \
|
||||
build/ROMID/lib/ultra/io/motor.o (section); \
|
||||
build/ROMID/lib/lib_4f9b0.o (section); \
|
||||
build/ROMID/lib/ultra/gu/ortho.o (section); \
|
||||
build/ROMID/lib/ultra/gu/frustum.o (section); \
|
||||
build/ROMID/lib/lib_4fff0.o (section); \
|
||||
|
|
|
|||
|
|
@ -180,7 +180,8 @@
|
|||
build/ROMID/lib/ultra/libc/xprintf.o (section); \
|
||||
build/ROMID/lib/ultra/io/contquery.o (section); \
|
||||
build/ROMID/lib/ultra/io/contreaddata.o (section); \
|
||||
build/ROMID/lib/lib_4f5e0.o (section); \
|
||||
build/ROMID/lib/ultra/io/motor.o (section); \
|
||||
build/ROMID/lib/lib_4f9b0.o (section); \
|
||||
build/ROMID/lib/ultra/gu/ortho.o (section); \
|
||||
build/ROMID/lib/ultra/gu/frustum.o (section); \
|
||||
build/ROMID/lib/lib_4fff0.o (section); \
|
||||
|
|
|
|||
|
|
@ -180,7 +180,8 @@
|
|||
build/ROMID/lib/ultra/libc/xprintf.o (section); \
|
||||
build/ROMID/lib/ultra/io/contquery.o (section); \
|
||||
build/ROMID/lib/ultra/io/contreaddata.o (section); \
|
||||
build/ROMID/lib/lib_4f5e0.o (section); \
|
||||
build/ROMID/lib/ultra/io/motor.o (section); \
|
||||
build/ROMID/lib/lib_4f9b0.o (section); \
|
||||
build/ROMID/lib/ultra/gu/ortho.o (section); \
|
||||
build/ROMID/lib/ultra/gu/frustum.o (section); \
|
||||
build/ROMID/lib/lib_4fff0.o (section); \
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@
|
|||
#include "lib/memory.h"
|
||||
#include "lib/rng.h"
|
||||
#include "lib/lib_4e090.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "lib/lib_50480.h"
|
||||
#include "lib/lib_513b0.h"
|
||||
#include "data.h"
|
||||
|
|
@ -8805,7 +8804,7 @@ glabel func0f11ac7c
|
|||
/* f11ade0: 018d2821 */ addu $a1,$t4,$t5
|
||||
.L0f11ade4:
|
||||
/* f11ade4: 02003025 */ or $a2,$s0,$zero
|
||||
/* f11ade8: 0c013e15 */ jal func0004f854
|
||||
/* f11ade8: 0c013e15 */ jal osMotorProbe
|
||||
/* f11adec: afa30024 */ sw $v1,0x24($sp)
|
||||
/* f11adf0: 00102e00 */ sll $a1,$s0,0x18
|
||||
/* f11adf4: 00057603 */ sra $t6,$a1,0x18
|
||||
|
|
@ -8997,7 +8996,7 @@ glabel func0f114c08nb
|
|||
/* f114cec: 01092821 */ addu $a1,$t0,$t1
|
||||
.NB0f114cf0:
|
||||
/* f114cf0: 2484e5d8 */ addiu $a0,$a0,-6696
|
||||
/* f114cf4: 0c01440d */ jal func0004f854
|
||||
/* f114cf4: 0c01440d */ jal osMotorProbe
|
||||
/* f114cf8: 02003025 */ or $a2,$s0,$zero
|
||||
/* f114cfc: 00102e00 */ sll $a1,$s0,0x18
|
||||
/* f114d00: 00055603 */ sra $t2,$a1,0x18
|
||||
|
|
@ -9140,7 +9139,7 @@ glabel func0f114dd4nb
|
|||
/* f114eec: 03282821 */ addu $a1,$t9,$t0
|
||||
.NB0f114ef0:
|
||||
/* f114ef0: 2484e5d8 */ addiu $a0,$a0,-6696
|
||||
/* f114ef4: 0c01440d */ jal func0004f854
|
||||
/* f114ef4: 0c01440d */ jal osMotorProbe
|
||||
/* f114ef8: 02203025 */ or $a2,$s1,$zero
|
||||
/* f114efc: 3c057f1b */ lui $a1,0x7f1b
|
||||
/* f114f00: afa20020 */ sw $v0,0x20($sp)
|
||||
|
|
|
|||
|
|
@ -106,8 +106,9 @@ typedef struct {
|
|||
#define PFS_WRITE 1
|
||||
#define PFS_CREATE 2
|
||||
|
||||
#define PFS_INITIALIZED 0x1
|
||||
#define PFS_CORRUPTED 0x2
|
||||
#define PFS_INITIALIZED 0x1
|
||||
#define PFS_CORRUPTED 0x2
|
||||
#define PFS_MOTOR_INITIALIZED 0x8
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
|
|
@ -150,12 +151,16 @@ typedef struct {
|
|||
*
|
||||
*/
|
||||
|
||||
extern s32 osPfsIsPlug(OSMesgQueue *, u8 *);
|
||||
s32 osPfsIsPlug(OSMesgQueue *, u8 *);
|
||||
s32 osPfsAllocateFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 num_bytes, s32 *file_no);
|
||||
s32 osPfsFindFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name, s32 *file_no);
|
||||
s32 osPfsDeleteFile(OSPfs *pfs, u16 company_code, u32 game_code, char *game_name, char *ext_name);
|
||||
s32 osPfsFileState(OSPfs *pfs, s32 file_no, OSPfsState *state);
|
||||
|
||||
s32 osMotorAccess(OSPfs *pfs, u32 vibrate);
|
||||
void osSetUpMempakWrite(s32 channel, OSPifRam* buf);
|
||||
s32 osMotorProbe(OSMesgQueue *mq, OSPfs *pfs, s32 channel);
|
||||
|
||||
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
|
||||
|
||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
#ifndef _IN_LIB_LIB_4F5E0_H
|
||||
#define _IN_LIB_LIB_4F5E0_H
|
||||
#include <ultra64.h>
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
s32 osMotorAccess(OSPfs *pfs, u32 vibrate);
|
||||
void osSetUpMempakWrite(s32 channel, OSPifRam* buf);
|
||||
bool func0004f854(OSMesgQueue *mq, OSPfs *pfs, s32 arg2);
|
||||
u32 func0004f9b0(void);
|
||||
u32 func0004fbc0(void);
|
||||
u32 func0004fbf0(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef _IN_LIB_LIB_4F9B0_H
|
||||
#define _IN_LIB_LIB_4F9B0_H
|
||||
#include <ultra64.h>
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
u32 func0004f9b0(void);
|
||||
u32 func0004fbc0(void);
|
||||
u32 func0004fbf0(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -4,7 +4,6 @@
|
|||
#include "bss.h"
|
||||
#include "lib/main.h"
|
||||
#include "lib/joy.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
|
|
@ -1312,7 +1311,7 @@ void joy0001519c(void)
|
|||
osSetEventMesg(OS_EVENT_SI, &var80099e78, 0);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (!func0004f854(&var80099e78, PFS(i), i)) {
|
||||
if (!osMotorProbe(&var80099e78, PFS(i), i)) {
|
||||
osMotorAccess(PFS(i), 0);
|
||||
osMotorAccess(PFS(i), 0);
|
||||
osMotorAccess(PFS(i), 0);
|
||||
|
|
@ -1351,7 +1350,7 @@ void joy000153c4(s8 arg0, s32 arg1)
|
|||
joy000150e8();
|
||||
}
|
||||
|
||||
if (func0004f854(&var80099e78, PFS(arg0), arg0) == 0) {
|
||||
if (osMotorProbe(&var80099e78, PFS(arg0), arg0) == 0) {
|
||||
osMotorAccess(PFS(arg0), 0);
|
||||
osMotorAccess(PFS(arg0), 0);
|
||||
osMotorAccess(PFS(arg0), 0);
|
||||
|
|
@ -1429,7 +1428,7 @@ glabel joy000153c4
|
|||
.NB00016370:
|
||||
/* 16370: 2484e5d8 */ addiu $a0,$a0,-6696
|
||||
/* 16374: 00e02825 */ or $a1,$a3,$zero
|
||||
/* 16378: 0c01440d */ jal func0004f854
|
||||
/* 16378: 0c01440d */ jal osMotorProbe
|
||||
/* 1637c: afa60024 */ sw $a2,0x24($sp)
|
||||
/* 16380: 14400032 */ bnez $v0,.NB0001644c
|
||||
/* 16384: 8fa60024 */ lw $a2,0x24($sp)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include "bss.h"
|
||||
#include "lib/lib_159b0.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include "bss.h"
|
||||
#include "lib/lib_159b0.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include "bss.h"
|
||||
#include "lib/lib_159b0.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,9 @@
|
|||
#include "constants.h"
|
||||
#include "bss.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
OSPifRam osPifBuffers[MAXCONTROLLERS];
|
||||
u32 var8009ca70;
|
||||
|
||||
u32 var800609f0 = 0x00000032;
|
||||
|
|
@ -524,176 +522,6 @@ u32 var800611ec = 0x7ffe7fff;
|
|||
|
||||
const u32 var70059fd0[] = {0x3c8efa35};
|
||||
|
||||
s32 osMotorAccess(OSPfs *pfs, u32 vibrate)
|
||||
{
|
||||
s32 i;
|
||||
s32 ret;
|
||||
u8* buf = (u8*)&osPifBuffers[pfs->channel];
|
||||
|
||||
if (!(pfs->status & 8)) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
__osSiGetAccess();
|
||||
osPifBuffers[pfs->channel].pifstatus = 1;
|
||||
buf += pfs->channel;
|
||||
|
||||
for (i = 0; i < BLOCKSIZE; i++) {
|
||||
((__OSContRamReadFormat*)buf)->data[i] = vibrate;
|
||||
}
|
||||
|
||||
__osContLastCmd = CONT_CMD_END;
|
||||
__osSiRawStartDma(OS_WRITE, &osPifBuffers[pfs->channel]);
|
||||
osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK);
|
||||
__osSiRawStartDma(OS_READ, &osPifBuffers[pfs->channel]);
|
||||
osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
ret = ((__OSContRamReadFormat*)buf)->rxsize & 0xc0;
|
||||
|
||||
if (!ret) {
|
||||
if (!vibrate) {
|
||||
if (((__OSContRamReadFormat*)buf)->datacrc != 0) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
} else {
|
||||
if (((__OSContRamReadFormat*)buf)->datacrc != 0xeb) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__osSiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void osSetUpMempakWrite(s32 channel, OSPifRam* buf)
|
||||
{
|
||||
u8* bufptr = (u8*)buf;
|
||||
__OSContRamReadFormat mempakwr;
|
||||
s32 i;
|
||||
|
||||
mempakwr.dummy = 0xff;
|
||||
mempakwr.txsize = 0x23;
|
||||
mempakwr.rxsize = 1;
|
||||
mempakwr.cmd = 3;
|
||||
mempakwr.hi = 0x600 >> 3;
|
||||
mempakwr.lo = (u8)(__osContAddressCrc(0x600) | (0x600 << 5));
|
||||
|
||||
if (channel != 0) {
|
||||
for (i = 0; i < channel; ++i) {
|
||||
*bufptr++ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
*(__OSContRamReadFormat*)bufptr = mempakwr;
|
||||
bufptr += sizeof(mempakwr);
|
||||
*bufptr = 0xfe;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0004f854
|
||||
/* 4f854: 27bdffb8 */ addiu $sp,$sp,-72
|
||||
/* 4f858: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* 4f85c: afb00018 */ sw $s0,0x18($sp)
|
||||
/* 4f860: afa40048 */ sw $a0,0x48($sp)
|
||||
/* 4f864: afa60050 */ sw $a2,0x50($sp)
|
||||
/* 4f868: aca40004 */ sw $a0,0x4($a1)
|
||||
/* 4f86c: 8faf0050 */ lw $t7,0x50($sp)
|
||||
/* 4f870: 241800ff */ addiu $t8,$zero,0xff
|
||||
/* 4f874: 00a08025 */ or $s0,$a1,$zero
|
||||
/* 4f878: a0b80065 */ sb $t8,0x65($a1)
|
||||
/* 4f87c: aca00000 */ sw $zero,0x0($a1)
|
||||
/* 4f880: 00a02025 */ or $a0,$a1,$zero
|
||||
/* 4f884: acaf0008 */ sw $t7,0x8($a1)
|
||||
/* 4f888: 0c013378 */ jal __osPfsSelectBank
|
||||
/* 4f88c: 240500fe */ addiu $a1,$zero,0xfe
|
||||
/* 4f890: 24010002 */ addiu $at,$zero,0x2
|
||||
/* 4f894: 14410005 */ bne $v0,$at,.L0004f8ac
|
||||
/* 4f898: 00401825 */ or $v1,$v0,$zero
|
||||
/* 4f89c: 02002025 */ or $a0,$s0,$zero
|
||||
/* 4f8a0: 0c013378 */ jal __osPfsSelectBank
|
||||
/* 4f8a4: 24050080 */ addiu $a1,$zero,0x80
|
||||
/* 4f8a8: 00401825 */ or $v1,$v0,$zero
|
||||
.L0004f8ac:
|
||||
/* 4f8ac: 10400003 */ beqz $v0,.L0004f8bc
|
||||
/* 4f8b0: 8fa40048 */ lw $a0,0x48($sp)
|
||||
/* 4f8b4: 10000039 */ b .L0004f99c
|
||||
/* 4f8b8: 00601025 */ or $v0,$v1,$zero
|
||||
.L0004f8bc:
|
||||
/* 4f8bc: 8fa50050 */ lw $a1,0x50($sp)
|
||||
/* 4f8c0: 24060400 */ addiu $a2,$zero,0x400
|
||||
/* 4f8c4: 0c012e18 */ jal __osContRamRead
|
||||
/* 4f8c8: 27a70024 */ addiu $a3,$sp,0x24
|
||||
/* 4f8cc: 24010002 */ addiu $at,$zero,0x2
|
||||
/* 4f8d0: 14410002 */ bne $v0,$at,.L0004f8dc
|
||||
/* 4f8d4: 00401825 */ or $v1,$v0,$zero
|
||||
/* 4f8d8: 24030004 */ addiu $v1,$zero,0x4
|
||||
.L0004f8dc:
|
||||
/* 4f8dc: 10600003 */ beqz $v1,.L0004f8ec
|
||||
/* 4f8e0: 93b90043 */ lbu $t9,0x43($sp)
|
||||
/* 4f8e4: 1000002d */ b .L0004f99c
|
||||
/* 4f8e8: 00601025 */ or $v0,$v1,$zero
|
||||
.L0004f8ec:
|
||||
/* 4f8ec: 240100fe */ addiu $at,$zero,0xfe
|
||||
/* 4f8f0: 17210003 */ bne $t9,$at,.L0004f900
|
||||
/* 4f8f4: 02002025 */ or $a0,$s0,$zero
|
||||
/* 4f8f8: 10000028 */ b .L0004f99c
|
||||
/* 4f8fc: 2402000b */ addiu $v0,$zero,0xb
|
||||
.L0004f900:
|
||||
/* 4f900: 0c013378 */ jal __osPfsSelectBank
|
||||
/* 4f904: 24050080 */ addiu $a1,$zero,0x80
|
||||
/* 4f908: 24010002 */ addiu $at,$zero,0x2
|
||||
/* 4f90c: 14410002 */ bne $v0,$at,.L0004f918
|
||||
/* 4f910: 00401825 */ or $v1,$v0,$zero
|
||||
/* 4f914: 24030004 */ addiu $v1,$zero,0x4
|
||||
.L0004f918:
|
||||
/* 4f918: 10600003 */ beqz $v1,.L0004f928
|
||||
/* 4f91c: 8fa40048 */ lw $a0,0x48($sp)
|
||||
/* 4f920: 1000001e */ b .L0004f99c
|
||||
/* 4f924: 00601025 */ or $v0,$v1,$zero
|
||||
.L0004f928:
|
||||
/* 4f928: 8fa50050 */ lw $a1,0x50($sp)
|
||||
/* 4f92c: 24060400 */ addiu $a2,$zero,0x400
|
||||
/* 4f930: 0c012e18 */ jal __osContRamRead
|
||||
/* 4f934: 27a70024 */ addiu $a3,$sp,0x24
|
||||
/* 4f938: 24010002 */ addiu $at,$zero,0x2
|
||||
/* 4f93c: 14410002 */ bne $v0,$at,.L0004f948
|
||||
/* 4f940: 00401825 */ or $v1,$v0,$zero
|
||||
/* 4f944: 24030004 */ addiu $v1,$zero,0x4
|
||||
.L0004f948:
|
||||
/* 4f948: 10600003 */ beqz $v1,.L0004f958
|
||||
/* 4f94c: 93a80043 */ lbu $t0,0x43($sp)
|
||||
/* 4f950: 10000012 */ b .L0004f99c
|
||||
/* 4f954: 00601025 */ or $v0,$v1,$zero
|
||||
.L0004f958:
|
||||
/* 4f958: 24010080 */ addiu $at,$zero,0x80
|
||||
/* 4f95c: 51010004 */ beql $t0,$at,.L0004f970
|
||||
/* 4f960: 8e090000 */ lw $t1,0x0($s0)
|
||||
/* 4f964: 1000000d */ b .L0004f99c
|
||||
/* 4f968: 2402000b */ addiu $v0,$zero,0xb
|
||||
/* 4f96c: 8e090000 */ lw $t1,0x0($s0)
|
||||
.L0004f970:
|
||||
/* 4f970: 8fa40050 */ lw $a0,0x50($sp)
|
||||
/* 4f974: 3c0d800a */ lui $t5,%hi(osPifBuffers)
|
||||
/* 4f978: 312a0008 */ andi $t2,$t1,0x8
|
||||
/* 4f97c: 15400004 */ bnez $t2,.L0004f990
|
||||
/* 4f980: 00046180 */ sll $t4,$a0,0x6
|
||||
/* 4f984: 25adc970 */ addiu $t5,$t5,%lo(osPifBuffers)
|
||||
/* 4f988: 0c013dd2 */ jal osSetUpMempakWrite
|
||||
/* 4f98c: 018d2821 */ addu $a1,$t4,$t5
|
||||
.L0004f990:
|
||||
/* 4f990: 240e0008 */ addiu $t6,$zero,0x8
|
||||
/* 4f994: ae0e0000 */ sw $t6,0x0($s0)
|
||||
/* 4f998: 00001025 */ or $v0,$zero,$zero
|
||||
.L0004f99c:
|
||||
/* 4f99c: 8fbf001c */ lw $ra,0x1c($sp)
|
||||
/* 4f9a0: 8fb00018 */ lw $s0,0x18($sp)
|
||||
/* 4f9a4: 27bd0048 */ addiu $sp,$sp,0x48
|
||||
/* 4f9a8: 03e00008 */ jr $ra
|
||||
/* 4f9ac: 00000000 */ nop
|
||||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0004f9b0
|
||||
/* 4f9b0: 27bdffd0 */ addiu $sp,$sp,-48
|
||||
|
|
@ -809,6 +637,10 @@ glabel func0004f9b0
|
|||
/* 4fb64: 27bd0030 */ addiu $sp,$sp,0x30
|
||||
/* 4fb68: 03e00008 */ jr $ra
|
||||
/* 4fb6c: 00000000 */ nop
|
||||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0004fb70
|
||||
/* 4fb70: 44856000 */ mtc1 $a1,$f12
|
||||
/* 4fb74: 44867000 */ mtc1 $a2,$f14
|
||||
/* 4fb78: 44878000 */ mtc1 $a3,$f16
|
||||
|
|
@ -13,7 +13,6 @@
|
|||
#include "lib/lib_159b0.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "lib/lib_233c0.h"
|
||||
#include "lib/lib_4f5e0.h"
|
||||
#include "lib/model.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,142 @@
|
|||
#include <ultra64.h>
|
||||
#include "constants.h"
|
||||
#include "bss.h"
|
||||
#include "lib/lib_16110.h"
|
||||
#include "data.h"
|
||||
#include "types.h"
|
||||
|
||||
OSPifRam osPifBuffers[MAXCONTROLLERS];
|
||||
|
||||
s32 osMotorAccess(OSPfs *pfs, u32 vibrate)
|
||||
{
|
||||
s32 i;
|
||||
s32 ret;
|
||||
u8* buf = (u8*)&osPifBuffers[pfs->channel];
|
||||
|
||||
if (!(pfs->status & 8)) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
__osSiGetAccess();
|
||||
osPifBuffers[pfs->channel].pifstatus = 1;
|
||||
buf += pfs->channel;
|
||||
|
||||
for (i = 0; i < BLOCKSIZE; i++) {
|
||||
((__OSContRamReadFormat*)buf)->data[i] = vibrate;
|
||||
}
|
||||
|
||||
__osContLastCmd = CONT_CMD_END;
|
||||
__osSiRawStartDma(OS_WRITE, &osPifBuffers[pfs->channel]);
|
||||
osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK);
|
||||
__osSiRawStartDma(OS_READ, &osPifBuffers[pfs->channel]);
|
||||
osRecvMesg(pfs->queue, NULL, OS_MESG_BLOCK);
|
||||
|
||||
ret = ((__OSContRamReadFormat*)buf)->rxsize & 0xc0;
|
||||
|
||||
if (!ret) {
|
||||
if (!vibrate) {
|
||||
if (((__OSContRamReadFormat*)buf)->datacrc != 0) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
} else {
|
||||
if (((__OSContRamReadFormat*)buf)->datacrc != 0xeb) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
__osSiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void osSetUpMempakWrite(s32 channel, OSPifRam* buf)
|
||||
{
|
||||
u8* bufptr = (u8*)buf;
|
||||
__OSContRamReadFormat mempakwr;
|
||||
s32 i;
|
||||
|
||||
mempakwr.dummy = 0xff;
|
||||
mempakwr.txsize = 0x23;
|
||||
mempakwr.rxsize = 1;
|
||||
mempakwr.cmd = 3;
|
||||
mempakwr.hi = 0x600 >> 3;
|
||||
mempakwr.lo = (u8)(__osContAddressCrc(0x600) | (0x600 << 5));
|
||||
|
||||
if (channel != 0) {
|
||||
for (i = 0; i < channel; ++i) {
|
||||
*bufptr++ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
*(__OSContRamReadFormat*)bufptr = mempakwr;
|
||||
bufptr += sizeof(mempakwr);
|
||||
*bufptr = 0xfe;
|
||||
}
|
||||
|
||||
s32 osMotorProbe(OSMesgQueue* ctrlrqueue, OSPfs* pfs, s32 channel)
|
||||
{
|
||||
s32 ret;
|
||||
u8 sp24[BLOCKSIZE];
|
||||
|
||||
pfs->queue = ctrlrqueue;
|
||||
pfs->channel = channel;
|
||||
pfs->activebank = 0xff;
|
||||
pfs->status = 0;
|
||||
|
||||
ret = __osPfsSelectBank(pfs, 0xfe);
|
||||
|
||||
if (ret == PFS_ERR_NEW_PACK) {
|
||||
ret = __osPfsSelectBank(pfs, 0x80);
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = __osContRamRead(ctrlrqueue, channel, 0x400, sp24);
|
||||
|
||||
if (ret == PFS_ERR_NEW_PACK) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (sp24[BLOCKSIZE - 1] == 0xfe) {
|
||||
return PFS_ERR_DEVICE;
|
||||
}
|
||||
|
||||
ret = __osPfsSelectBank(pfs, 0x80);
|
||||
|
||||
if (ret == PFS_ERR_NEW_PACK) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = __osContRamRead(ctrlrqueue, channel, 0x400, sp24);
|
||||
|
||||
if (ret == PFS_ERR_NEW_PACK) {
|
||||
ret = PFS_ERR_CONTRFAIL;
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (sp24[BLOCKSIZE - 1] != 0x80) {
|
||||
return PFS_ERR_DEVICE;
|
||||
}
|
||||
|
||||
if ((pfs->status & PFS_MOTOR_INITIALIZED) == 0) {
|
||||
osSetUpMempakWrite(channel, &osPifBuffers[channel]);
|
||||
}
|
||||
|
||||
pfs->status = PFS_MOTOR_INITIALIZED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue