Decompile osContStartQuery

This commit is contained in:
Ryan Dwyer
2021-01-31 00:31:05 +10:00
parent dcee55681d
commit 6a4a5c7a43
2 changed files with 54 additions and 40 deletions
+34 -3
View File
@@ -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)
+20 -37
View File
@@ -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)
{