From cde3ceea271b819f15745ef4ca83e8f51ae88210 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 17 Mar 2021 12:13:40 +1000 Subject: [PATCH] Decompile __osPfsGetInitData --- src/include/bss.h | 1 + src/lib/ultra/io/pfsisplug.c | 74 ++++++++++++------------------------ 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/src/include/bss.h b/src/include/bss.h index c8cc8f368..555bdb5d2 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -67,6 +67,7 @@ extern u32 __osViIntrCount; extern OSMesgQueue __osPiAccessQueue; extern u32 __osContPifRam; extern u8 __osContLastCmd; +extern u8 __osMaxControllers; extern u32 __osEepromTimer; extern OSMesgQueue __osEepromTimerQ; extern OSMesg __osEepromTimerMsg; diff --git a/src/lib/ultra/io/pfsisplug.c b/src/lib/ultra/io/pfsisplug.c index 268b7cd2b..cc263cdf5 100644 --- a/src/lib/ultra/io/pfsisplug.c +++ b/src/lib/ultra/io/pfsisplug.c @@ -1,4 +1,5 @@ #include +#include "bss.h" #include "data.h" u32 __osPfsPifRam; @@ -181,52 +182,27 @@ glabel __osPfsRequestData /* 59ac: 27bd0010 */ addiu $sp,$sp,0x10 ); -GLOBAL_ASM( -glabel __osPfsGetInitData -/* 59b0: 3c07800a */ lui $a3,%hi(__osContLastCmd+0x1) -/* 59b4: 24e7c821 */ addiu $a3,$a3,%lo(__osContLastCmd+0x1) -/* 59b8: 90ee0000 */ lbu $t6,0x0($a3) -/* 59bc: 3c038009 */ lui $v1,%hi(__osPfsPifRam) -/* 59c0: 27bdffe8 */ addiu $sp,$sp,-24 -/* 59c4: 00001025 */ or $v0,$zero,$zero -/* 59c8: 24630a20 */ addiu $v1,$v1,%lo(__osPfsPifRam) -/* 59cc: 19c00020 */ blez $t6,.L00005a50 -/* 59d0: 00003025 */ or $a2,$zero,$zero -/* 59d4: 27a8000c */ addiu $t0,$sp,0xc -.L000059d8: -/* 59d8: 88610000 */ lwl $at,0x0($v1) -/* 59dc: 98610003 */ lwr $at,0x3($v1) -/* 59e0: ad010000 */ sw $at,0x0($t0) -/* 59e4: 88780004 */ lwl $t8,0x4($v1) -/* 59e8: 98780007 */ lwr $t8,0x7($v1) -/* 59ec: ad180004 */ sw $t8,0x4($t0) -/* 59f0: 93b9000e */ lbu $t9,0xe($sp) -/* 59f4: 332900c0 */ andi $t1,$t9,0xc0 -/* 59f8: 00095103 */ sra $t2,$t1,0x4 -/* 59fc: 314b00ff */ andi $t3,$t2,0xff -/* 5a00: 1560000d */ bnez $t3,.L00005a38 -/* 5a04: a0aa0003 */ sb $t2,0x3($a1) -/* 5a08: 93ac0011 */ lbu $t4,0x11($sp) -/* 5a0c: 93ae0010 */ lbu $t6,0x10($sp) -/* 5a10: 24190001 */ addiu $t9,$zero,0x1 -/* 5a14: 000c6a00 */ sll $t5,$t4,0x8 -/* 5a18: 01ae7825 */ or $t7,$t5,$t6 -/* 5a1c: a4af0000 */ sh $t7,0x0($a1) -/* 5a20: 93b80012 */ lbu $t8,0x12($sp) -/* 5a24: 00d94804 */ sllv $t1,$t9,$a2 -/* 5a28: 00491025 */ or $v0,$v0,$t1 -/* 5a2c: 304a00ff */ andi $t2,$v0,0xff -/* 5a30: 01401025 */ or $v0,$t2,$zero -/* 5a34: a0b80002 */ sb $t8,0x2($a1) -.L00005a38: -/* 5a38: 90eb0000 */ lbu $t3,0x0($a3) -/* 5a3c: 24c60001 */ addiu $a2,$a2,0x1 -/* 5a40: 24630008 */ addiu $v1,$v1,0x8 -/* 5a44: 00cb082a */ slt $at,$a2,$t3 -/* 5a48: 1420ffe3 */ bnez $at,.L000059d8 -/* 5a4c: 24a50004 */ addiu $a1,$a1,0x4 -.L00005a50: -/* 5a50: a0820000 */ sb $v0,0x0($a0) -/* 5a54: 03e00008 */ jr $ra -/* 5a58: 27bd0018 */ addiu $sp,$sp,0x18 -); +void __osPfsGetInitData(u8 *pattern, OSContStatus *data) +{ + u8 *ptr; + __OSContRequestFormat requestformat; + int i; + u8 bits; + bits = 0; + ptr = (u8 *)&__osPfsPifRam; + + for (i = 0; i < __osMaxControllers; i++, ptr += sizeof(__OSContRequestFormat)) { + requestformat = *(__OSContRequestFormat *)ptr; + data->errno = CHNL_ERR(requestformat); + + if (data->errno == 0) { + data->type = (requestformat.typel << 8) | (requestformat.typeh); + data->status = requestformat.status; + bits |= 1 << i; + } + + data++; + } + + *pattern = bits; +}