diff options
| author | rozlette <uberpanzermensch@gmail.com> | 2020-01-11 08:54:07 -0600 |
|---|---|---|
| committer | rozlette <uberpanzermensch@gmail.com> | 2020-01-11 08:54:07 -0600 |
| commit | bb9de27a16fcfa731c96ae552eecdb7a60ee8e91 (patch) | |
| tree | ac9a3118c8f3319dfeaa6628d37233c55aa8e456 /src | |
| parent | 727a546fcf1894061f3ec4295fa7c80083768aba (diff) | |
Decomp controller.c
Diffstat (limited to 'src')
| -rw-r--r-- | src/boot_O2_g3/CIC6105.c | 6 | ||||
| -rw-r--r-- | src/libultra/io/contquery.c | 16 | ||||
| -rw-r--r-- | src/libultra/io/controller.c | 88 | ||||
| -rw-r--r-- | src/libultra/io/controller.h | 60 |
4 files changed, 99 insertions, 71 deletions
diff --git a/src/boot_O2_g3/CIC6105.c b/src/boot_O2_g3/CIC6105.c index 5080aff92..e52bc7542 100644 --- a/src/boot_O2_g3/CIC6105.c +++ b/src/boot_O2_g3/CIC6105.c @@ -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) { diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c index 5d520d1e4..fa6cf4926 100644 --- a/src/libultra/io/contquery.c +++ b/src/libultra/io/contquery.c @@ -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); } diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c new file mode 100644 index 000000000..da7e41e33 --- /dev/null +++ b/src/libultra/io/controller.c @@ -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; +} diff --git a/src/libultra/io/controller.h b/src/libultra/io/controller.h deleted file mode 100644 index b76c4cbf7..000000000 --- a/src/libultra/io/controller.h +++ /dev/null @@ -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 |
