From 1359630bcdc70f5e7ec80b7ada8c29be78a2d851 Mon Sep 17 00:00:00 2001 From: Alejandro Javier Asenjo Nitti Date: Mon, 16 Oct 2023 13:36:10 -0300 Subject: [PATCH] decompile __osContGetInitData --- include/PR/controller.h | 1 + src/libultra/io/controller.c | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/PR/controller.h b/include/PR/controller.h index 51ca97e6..d2b0b812 100644 --- a/include/PR/controller.h +++ b/include/PR/controller.h @@ -46,5 +46,6 @@ extern OSMesgQueue __osEepromTimerQ; extern OSMesg __osEepromTimerMsg; void __osPackRequestData(u8 poll); +void __osContGetInitData(u8* pattern, OSContStatus* data); #endif diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 923ffc57..90bf1169 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -38,7 +38,26 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { return ret; } -#pragma GLOBAL_ASM("asm/us/nonmatchings/libultra/io/controller/__osContGetInitData.s") +void __osContGetInitData(u8* pattern, OSContStatus* data) { + u8* ptr; + __OSContRequestHeader requestHeader; + s32 i; + u8 bits; + + bits = 0; + ptr = (u8*)__osContPifRam.ramarray; + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(requestHeader), data++) { + requestHeader = *(__OSContRequestHeader*)ptr; + data->errno = (requestHeader.rxsize & 0xC0) >> 4; + if (data->errno == 0) { + data->type = requestHeader.typel << 8 | requestHeader.typeh; + data->status = requestHeader.status; + + bits |= 1 << i; + } + } + *pattern = bits; +} void __osPackRequestData(u8 poll) { u8* ptr;