Decomp controller.c

This commit is contained in:
rozlette
2020-01-11 08:54:07 -06:00
parent 727a546fcf
commit bb9de27a16
14 changed files with 140 additions and 73 deletions
+3 -3
View File
@@ -6,9 +6,9 @@ void CIC6105_Nop80081820(void) {}
void CIC6105_Nop80081828(void) {}
void CIC6105_PrintRomInfo(void) {
FaultDraw_DrawText(80, 200, &D_80098280, (UNK_PTR)(*(u32*)0xA4040010));
FaultDraw_DrawText(40, 184, &D_80098290, &D_800994D0);
FaultDraw_DrawText(56, 192, &D_800982A4, &D_800994DC);
FaultDraw_DrawText(80, 200, D_80098280, (UNK_PTR)(*(u32*)0xA4040010));
FaultDraw_DrawText(40, 184, D_80098290, &D_800994D0);
FaultDraw_DrawText(56, 192, D_800982A4, &D_800994DC);
}
void CIC6105_AddRomInfoFaultPage(void) {
+8 -8
View File
@@ -1,32 +1,32 @@
#include <osint.h>
#include "controller.h"
#include "io/controller.h"
#include "siint.h"
s32 osContStartQuery(OSMesgQueue* mq)
{
s32 ret;
__osSiGetAccess();
if (__osContLastCmd != 0) {
__osPackRequestData(0);
__osSiRawStartDma(1, &__osContPifRam);
osRecvMesg(mq, NULL, 1);
}
ret = __osSiRawStartDma(0, &__osContPifRam);
__osContLastCmd = 0;
__osSiRelAccess();
return ret;
}
void osContGetQuery(OSContStatus* data)
{
u8 pattern;
__osContGetInitData(&pattern, data);
}
+88
View File
@@ -0,0 +1,88 @@
#include <ultra64.h>
#include <global.h>
s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) {
OSMesg dummy;
s32 ret = 0;
OSTime t;
OSTimer mytimer;
OSMesgQueue timerMesgQueue;
if (D_80097E40 != 0) {
return 0;
}
D_80097E40 = 1;
t = osGetTime();
if (t < 0x165A0BC) {
osCreateMesgQueue(&timerMesgQueue, &dummy, 1);
osSetTimer(&mytimer, 0x165A0BC - t, 0, &timerMesgQueue, &dummy);
osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK);
}
__osMaxControllers = 4;
__osPackRequestData(0);
ret = __osSiRawStartDma(1, &__osContPifRam);
osRecvMesg(mq, &dummy, 1);
ret = __osSiRawStartDma(0, &__osContPifRam);
osRecvMesg(mq, &dummy, 1);
__osContGetInitData(bitpattern, data);
__osContLastCmd = 0;
__osSiCreateAccessQueue();
osCreateMesgQueue(&D_8009CF38, D_8009CF50, 1);
return ret;
}
void __osContGetInitData(u8* pattern, OSContStatus* data) {
u8* ptr;
__OSContRequesFormat requestformat;
int i;
u8 bits;
bits = 0;
ptr = (u8*)__osContPifRam.ramarray;
for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestformat), data++) {
requestformat = *(__OSContRequesFormat*)ptr;
data->errno = (requestformat.rxsize & 0xc0) >> 4;
if (data->errno == 0) {
data->type = requestformat.typel << 8 | requestformat.typeh;
data->status = requestformat.status;
bits |= 1 << i;
}
}
*pattern = bits;
}
void __osPackRequestData(u8 cmd) {
u8* ptr;
__OSContRequesFormat requestformat;
int i;
for (i = 0; i < 0xF; i++) {
__osContPifRam.ramarray[i] = 0;
}
__osContPifRam.pifstatus = 1;
ptr = (u8*)__osContPifRam.ramarray;
requestformat.dummy = 255;
requestformat.txsize = 1;
requestformat.rxsize = 3;
requestformat.cmd = cmd;
requestformat.typeh = 255;
requestformat.typel = 255;
requestformat.status = 255;
requestformat.dummy1 = 255;
for (i = 0; i < __osMaxControllers; i++) {
*(__OSContRequesFormat*)ptr = requestformat;
ptr += sizeof(requestformat);
}
*ptr = 254;
}
-60
View File
@@ -1,60 +0,0 @@
#ifndef _CONTROLLER_H_
#define _CONTROLLER_H_
typedef struct {
/* 0x00 */ u32 ramarray[15];
/* 0x3C */ u32 pifstatus;
} OSPifRam;
typedef struct {
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u16 button;
/* 0x6 */ s8 stick_x;
/* 0x7 */ s8 stick_y;
} __OSContReadFormat;
typedef struct {
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u8 typeh;
/* 0x5 */ u8 typel;
/* 0x6 */ u8 status;
/* 0x7 */ u8 dummy1;
} __OSContRequesFormat;
typedef struct {
/* 0x00 */ u8 dummy;
/* 0x01 */ u8 txsize;
/* 0x02 */ u8 rxsize;
/* 0x03 */ u8 cmd;
/* 0x04 */ u16 address;
/* 0x06 */ u8 data[32];
/* 0x26 */ u8 datacrc;
} __OSContRamReadFormat;
typedef struct {
/* 0x00 */ u16 company_code;
/* 0x02 */ u16 game_code;
/* 0x04 */ u8 start_page;
/* 0x05 */ u8 status;
/* 0x06 */ u16 data_sum;
/* 0x08 */ unsigned char ext_name[4];
/* 0x0C */ unsigned char game_name[16];
/* 0x1C */ s32 reserved;
} __OSDir;
typedef struct {
/* 0x0 */ u8 inode_page[256];
} __OSInode;
#endif