mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-09-10 03:42:00 -04:00
Decompile osContStartQuery
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
|
||||
/*---------------------------------------------------------------------*
|
||||
Copyright (C) 1998 Nintendo. (Originated by SGI)
|
||||
|
||||
|
||||
$RCSfile: os_cont.h,v $
|
||||
$Revision: 1.1 $
|
||||
$Date: 1998/10/09 08:01:05 $
|
||||
@@ -47,7 +47,7 @@ extern "C" {
|
||||
*/
|
||||
|
||||
/*
|
||||
* Structure for controllers
|
||||
* Structure for controllers
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -96,7 +96,7 @@ typedef struct {
|
||||
#ifdef _HW_VERSION_1
|
||||
#define CONT_FRAME_ERROR 0x2
|
||||
#define CONT_COLLISION_ERROR 0x1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Controller type */
|
||||
|
||||
@@ -162,6 +162,37 @@ typedef struct {
|
||||
#define CONT_ERR_VOICE_WORD 14
|
||||
#define CONT_ERR_VOICE_NO_RESPONSE 15
|
||||
|
||||
#define CONT_CMD_REQUEST_STATUS 0
|
||||
#define CONT_CMD_READ_BUTTON 1
|
||||
#define CONT_CMD_READ_MEMPACK 2
|
||||
#define CONT_CMD_WRITE_MEMPACK 3
|
||||
#define CONT_CMD_READ_EEPROM 4
|
||||
#define CONT_CMD_WRITE_EEPROM 5
|
||||
#define CONT_CMD_RESET 0xff
|
||||
|
||||
#define CONT_CMD_REQUEST_STATUS_TX 1
|
||||
#define CONT_CMD_READ_BUTTON_TX 1
|
||||
#define CONT_CMD_READ_MEMPACK_TX 3
|
||||
#define CONT_CMD_WRITE_MEMPACK_TX 35
|
||||
#define CONT_CMD_READ_EEPROM_TX 2
|
||||
#define CONT_CMD_WRITE_EEPROM_TX 10
|
||||
#define CONT_CMD_RESET_TX 1
|
||||
|
||||
#define CONT_CMD_REQUEST_STATUS_RX 3
|
||||
#define CONT_CMD_READ_BUTTON_RX 4
|
||||
#define CONT_CMD_READ_MEMPACK_RX 33
|
||||
#define CONT_CMD_WRITE_MEMPACK_RX 1
|
||||
#define CONT_CMD_READ_EEPROM_RX 8
|
||||
#define CONT_CMD_WRITE_EEPROM_RX 1
|
||||
#define CONT_CMD_RESET_RX 3
|
||||
|
||||
#define CONT_CMD_NOP 0xff
|
||||
#define CONT_CMD_END 0xfe //indicates end of a command
|
||||
#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
|
||||
|
||||
#define DIR_STATUS_EMPTY 0
|
||||
#define DIR_STATUS_UNKNOWN 1
|
||||
#define DIR_STATUS_OCCUPIED 2
|
||||
|
||||
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
|
||||
|
||||
|
||||
@@ -1,42 +1,25 @@
|
||||
#include <libultra_internal.h>
|
||||
#include "gvars/gvars.h"
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel osContStartQuery
|
||||
/* 4f350: 27bdffe0 */ addiu $sp,$sp,-32
|
||||
/* 4f354: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* 4f358: afa40020 */ sw $a0,0x20($sp)
|
||||
/* 4f35c: 0c012a18 */ jal __osSiGetAccess
|
||||
/* 4f360: afa0001c */ sw $zero,0x1c($sp)
|
||||
/* 4f364: 3c0e800a */ lui $t6,%hi(__osContLastCmd)
|
||||
/* 4f368: 91cec820 */ lbu $t6,%lo(__osContLastCmd)($t6)
|
||||
/* 4f36c: 11c0000c */ beqz $t6,.L0004f3a0
|
||||
/* 4f370: 00000000 */ nop
|
||||
/* 4f374: 0c012af0 */ jal __osPackRequestData
|
||||
/* 4f378: 00002025 */ or $a0,$zero,$zero
|
||||
/* 4f37c: 3c05800a */ lui $a1,%hi(__osContPifRam)
|
||||
/* 4f380: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam)
|
||||
/* 4f384: 0c012a34 */ jal __osSiRawStartDma
|
||||
/* 4f388: 24040001 */ addiu $a0,$zero,0x1
|
||||
/* 4f38c: afa2001c */ sw $v0,0x1c($sp)
|
||||
/* 4f390: 8fa40020 */ lw $a0,0x20($sp)
|
||||
/* 4f394: 00002825 */ or $a1,$zero,$zero
|
||||
/* 4f398: 0c0121bc */ jal osRecvMesg
|
||||
/* 4f39c: 24060001 */ addiu $a2,$zero,0x1
|
||||
.L0004f3a0:
|
||||
/* 4f3a0: 3c05800a */ lui $a1,%hi(__osContPifRam)
|
||||
/* 4f3a4: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam)
|
||||
/* 4f3a8: 0c012a34 */ jal __osSiRawStartDma
|
||||
/* 4f3ac: 00002025 */ or $a0,$zero,$zero
|
||||
/* 4f3b0: 3c01800a */ lui $at,%hi(__osContLastCmd)
|
||||
/* 4f3b4: afa2001c */ sw $v0,0x1c($sp)
|
||||
/* 4f3b8: 0c012a29 */ jal __osSiRelAccess
|
||||
/* 4f3bc: a020c820 */ sb $zero,%lo(__osContLastCmd)($at)
|
||||
/* 4f3c0: 8fbf0014 */ lw $ra,0x14($sp)
|
||||
/* 4f3c4: 8fa2001c */ lw $v0,0x1c($sp)
|
||||
/* 4f3c8: 27bd0020 */ addiu $sp,$sp,0x20
|
||||
/* 4f3cc: 03e00008 */ jr $ra
|
||||
/* 4f3d0: 00000000 */ nop
|
||||
);
|
||||
s32 osContStartQuery(OSMesgQueue *mq)
|
||||
{
|
||||
s32 ret;
|
||||
ret = 0;
|
||||
|
||||
__osSiGetAccess();
|
||||
|
||||
if (__osContLastCmd != CONT_CMD_REQUEST_STATUS) {
|
||||
__osPackRequestData(CONT_CMD_REQUEST_STATUS);
|
||||
ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam);
|
||||
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
|
||||
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
|
||||
__osSiRelAccess();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void osContGetQuery(OSContStatus *data)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user