From 3f8a924a05941f7d5299f7957587146f2cd72ef0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 26 Jan 2021 23:30:20 +1000 Subject: [PATCH] Decompile osPiGetCmdQueue --- Makefile | 1 + src/game/data/data_000000.c | 8 +------- src/include/PR/os_pi.h | 11 +++++++++++ src/include/game/data/data_000000.h | 2 +- src/lib/ultra/io/pigetcmdq.c | 25 +++++++++---------------- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/Makefile b/Makefile index fcf396696..e225efe1f 100644 --- a/Makefile +++ b/Makefile @@ -66,6 +66,7 @@ $(B_DIR)/lib/libc/llcvt.o: MIPSISET := -mips3 -o32 $(B_DIR)/lib/libc/ll.o: OPT_LVL := -O1 $(B_DIR)/lib/libc/llcvt.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/dpctr.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/io/pigetcmdq.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/sp.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/spsetpc.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/sptaskyielded.o: OPT_LVL := -O1 diff --git a/src/game/data/data_000000.c b/src/game/data/data_000000.c index 20b76da38..cd6e6c8f6 100644 --- a/src/game/data/data_000000.c +++ b/src/game/data/data_000000.c @@ -3020,13 +3020,7 @@ u32 var8005cef0 = 0x00000000; u32 var8005cef4 = 0x00000000; u32 var8005cef8 = 0x00000000; u32 var8005cefc = 0x00000000; -u32 __osPiDevMgr = 0x00000000; -u32 var8005cf04 = 0x00000000; -u32 var8005cf08 = 0x00000000; -u32 var8005cf0c = 0x00000000; -u32 var8005cf10 = 0x00000000; -u32 var8005cf14 = 0x00000000; -u32 var8005cf18 = 0x00000000; +OSDevMgr __osPiDevMgr = {0}; u32 var8005cf1c = 0x00000000; u32 __osCurrentHandle = (u32) &var800902a0; u32 var8005cf24 = (u32) &var80090318; diff --git a/src/include/PR/os_pi.h b/src/include/PR/os_pi.h index 591264c91..a16836d60 100644 --- a/src/include/PR/os_pi.h +++ b/src/include/PR/os_pi.h @@ -64,6 +64,17 @@ typedef struct //OSPiHandle *piHandle; //from the official definition } OSIoMesg; +typedef struct { + s32 active; /* Status flag */ + OSThread *thread; /* Calling thread */ + OSMesgQueue *cmdQueue; /* Command queue */ + OSMesgQueue *evtQueue; /* Event queue */ + OSMesgQueue *acsQueue; /* Access queue */ + /* Raw DMA routine */ + s32 (*dma)(s32, u32, void *, u32); + s32 (*edma)(OSPiHandle *, s32, u32, void *, u32); +} OSDevMgr; + /* Definitions */ #define OS_READ 0 // device -> RDRAM diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index 2220dd70c..ff08b61a9 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -52,7 +52,7 @@ extern OSMesg var8005cea8; extern s8 var8005ced0; extern u32 __osViDevMgr; extern u32 var8005cefc; -extern u32 __osPiDevMgr; +extern OSDevMgr __osPiDevMgr; extern u32 var8005cf30; extern u32 var8005cf60; extern u32 osViClock; diff --git a/src/lib/ultra/io/pigetcmdq.c b/src/lib/ultra/io/pigetcmdq.c index cd0bfc751..fbaabcbc4 100644 --- a/src/lib/ultra/io/pigetcmdq.c +++ b/src/lib/ultra/io/pigetcmdq.c @@ -1,18 +1,11 @@ #include +#include "game/data/data_000000.h" -GLOBAL_ASM( -glabel osPiGetCmdQueue -/* 52040: 3c0e8006 */ lui $t6,%hi(__osPiDevMgr) -/* 52044: 8dcecf00 */ lw $t6,%lo(__osPiDevMgr)($t6) -/* 52048: 15c00003 */ bnez $t6,.L00052058 -/* 5204c: 00000000 */ nop -/* 52050: 03e00008 */ jr $ra -/* 52054: 00001025 */ or $v0,$zero,$zero -.L00052058: -/* 52058: 3c028006 */ lui $v0,%hi(__osPiDevMgr+0x8) -/* 5205c: 8c42cf08 */ lw $v0,%lo(__osPiDevMgr+0x8)($v0) -/* 52060: 03e00008 */ jr $ra -/* 52064: 00000000 */ nop -/* 52068: 00000000 */ nop -/* 5206c: 00000000 */ nop -); +OSMesgQueue *osPiGetCmdQueue(void) +{ + if (!__osPiDevMgr.active) { + return NULL; + } + + return __osPiDevMgr.cmdQueue; +}