mirror of
https://github.com/zeldaret/mm.git
synced 2026-07-03 12:00:16 -04:00
Decomp controller.c
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user