From 066b501cd1d52aff0dce93791f5c579017b9cb5a Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Sun, 3 Oct 2021 16:29:27 -0400 Subject: [PATCH] si lib functions matched --- include/PR/os_cont.h | 2 +- .../unknown_0CE200/__osSiCreateAccessQueue.s | 22 ------------- .../unknown_0CE200/__osSiGetAccess.s | 20 ----------- .../unknown_0CE200/__osSiRelAccess.s | 13 -------- lib/src/os/controller.c | 6 ++-- lib/src/os/unknown_0CE200.c | 33 +++++++++++++------ 6 files changed, 27 insertions(+), 69 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s delete mode 100644 lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s diff --git a/include/PR/os_cont.h b/include/PR/os_cont.h index 7eee1f89..6e9c14f2 100644 --- a/include/PR/os_cont.h +++ b/include/PR/os_cont.h @@ -187,7 +187,7 @@ typedef struct { /* Controller interface */ -extern s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *status); +extern s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data); extern s32 osContReset(OSMesgQueue *, OSContStatus *); extern s32 osContStartQuery(OSMesgQueue *); extern s32 osContStartReadData(OSMesgQueue *mq); diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s b/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s deleted file mode 100644 index d764dd04..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s +++ /dev/null @@ -1,22 +0,0 @@ -glabel __osSiCreateAccessQueue -/* 0CE200 800CD600 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CE204 800CD604 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE208 800CD608 240E0001 */ li $t6, 1 -/* 0CE20C 800CD60C 3C01800E */ lui $at, %hi(D_800E38D0) # $at, 0x800e -/* 0CE210 800CD610 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE214 800CD614 3C058013 */ lui $a1, %hi(D_8012CE20) # $a1, 0x8013 -/* 0CE218 800CD618 AC2E38D0 */ sw $t6, %lo(D_800E38D0)($at) -/* 0CE21C 800CD61C 24A5CE20 */ addiu $a1, %lo(D_8012CE20) # addiu $a1, $a1, -0x31e0 -/* 0CE220 800CD620 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE224 800CD624 0C032208 */ jal osCreateMesgQueue -/* 0CE228 800CD628 24060001 */ li $a2, 1 -/* 0CE22C 800CD62C 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE230 800CD630 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE234 800CD634 00002825 */ move $a1, $zero -/* 0CE238 800CD638 0C03238C */ jal osSendMesg -/* 0CE23C 800CD63C 00003025 */ move $a2, $zero -/* 0CE240 800CD640 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE244 800CD644 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CE248 800CD648 03E00008 */ jr $ra -/* 0CE24C 800CD64C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s b/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s deleted file mode 100644 index 67fc3e8d..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s +++ /dev/null @@ -1,20 +0,0 @@ -glabel __osSiGetAccess -/* 0CE250 800CD650 3C0E800E */ lui $t6, %hi(D_800E38D0) # $t6, 0x800e -/* 0CE254 800CD654 8DCE38D0 */ lw $t6, %lo(D_800E38D0)($t6) -/* 0CE258 800CD658 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0CE25C 800CD65C AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE260 800CD660 15C00003 */ bnez $t6, .L800CD670 -/* 0CE264 800CD664 00000000 */ nop -/* 0CE268 800CD668 0C033580 */ jal __osSiCreateAccessQueue -/* 0CE26C 800CD66C 00000000 */ nop -.L800CD670: -/* 0CE270 800CD670 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE274 800CD674 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE278 800CD678 27A5001C */ addiu $a1, $sp, 0x1c -/* 0CE27C 800CD67C 0C0322EC */ jal osRecvMesg -/* 0CE280 800CD680 24060001 */ li $a2, 1 -/* 0CE284 800CD684 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE288 800CD688 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0CE28C 800CD68C 03E00008 */ jr $ra -/* 0CE290 800CD690 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s b/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s deleted file mode 100644 index 9478af5f..00000000 --- a/lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s +++ /dev/null @@ -1,13 +0,0 @@ -glabel __osSiRelAccess -/* 0CE294 800CD694 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0CE298 800CD698 AFBF0014 */ sw $ra, 0x14($sp) -/* 0CE29C 800CD69C 3C048013 */ lui $a0, %hi(D_8012CE28) # $a0, 0x8013 -/* 0CE2A0 800CD6A0 2484CE28 */ addiu $a0, %lo(D_8012CE28) # addiu $a0, $a0, -0x31d8 -/* 0CE2A4 800CD6A4 00002825 */ move $a1, $zero -/* 0CE2A8 800CD6A8 0C03238C */ jal osSendMesg -/* 0CE2AC 800CD6AC 00003025 */ move $a2, $zero -/* 0CE2B0 800CD6B0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0CE2B4 800CD6B4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0CE2B8 800CD6B8 03E00008 */ jr $ra -/* 0CE2BC 800CD6BC 00000000 */ nop - diff --git a/lib/src/os/controller.c b/lib/src/os/controller.c index c3879f28..23108dec 100644 --- a/lib/src/os/controller.c +++ b/lib/src/os/controller.c @@ -8,7 +8,7 @@ #define HALF_MIL_CYLCES 500000U #define ONE_MIL_CYLCES 1000000U -#define HALF_SECOND HALF_MIL_CYLCES * osClockRate / ONE_MIL_CYLCES +#define HALF_A_SECOND HALF_MIL_CYLCES * osClockRate / ONE_MIL_CYLCES u32 __osContinitialized = 0; OSPifRam __osContPifRam; @@ -33,9 +33,9 @@ s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data) { } __osContinitialized = TRUE; t = osGetTime(); - if (HALF_SECOND > t) { + if (HALF_A_SECOND > t) { osCreateMesgQueue(&timerMesgQueue, &dummy, 1); - osSetTimer(&mytimer, HALF_SECOND - t, 0, &timerMesgQueue, &dummy); + osSetTimer(&mytimer, HALF_A_SECOND - t, 0, &timerMesgQueue, &dummy); osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); } __osMaxControllers = MAXCONTROLLERS; diff --git a/lib/src/os/unknown_0CE200.c b/lib/src/os/unknown_0CE200.c index b4c7853e..54ee0a5b 100644 --- a/lib/src/os/unknown_0CE200.c +++ b/lib/src/os/unknown_0CE200.c @@ -4,18 +4,18 @@ #include "types.h" #include "macros.h" #include "libultra_internal.h" +#include "controller.h" #include "src/memory.h" -s32 D_800E38D0 = 0; +u32 __osSiAccessQueueEnabled = 0; // Ok, so I completely gave up on the rest of these bss variables. // This is probably not the right place for them, but we can always // fix that later. - -s32 D_8012CE20[2]; -s32 D_8012CE28[6]; -s32 __osEepPifRam[15]; -s32 D_8012CE7C; //__osEepPifRam.pifstatus +#define SI_Q_BUF_LEN 1 +static OSMesg siAccessBuf[SI_Q_BUF_LEN]; +OSMesgQueue __osSiAccessQueue; +OSPifRam __osEepPifRam; s32 viThread[172]; s32 viEventQueue[6]; s32 viEventBuf[6]; @@ -25,7 +25,8 @@ u16 retrace; //Used in viMgrMain, but it's supposed to be static in that functio u16 D_8012D192; s32 D_8012D194[2]; s32 D_8012D1A0[16]; -s32 piAccessBuf[2]; //Should be static, but this works for now +#define PI_Q_BUF_LEN 1 +OSMesg piAccessBuf[PI_Q_BUF_LEN]; //Should be static, but this works for now s32 __osPiAccessQueue[6]; OSTimer D_8012D200; OSTime __osCurrentTime; @@ -36,7 +37,19 @@ u32 D_8012D234[2]; s32 D_8012D240[108]; MemoryPoolSlot *gMainMemoryPool; -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiCreateAccessQueue.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiGetAccess.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiRelAccess.s") +void __osSiCreateAccessQueue(void) { + __osSiAccessQueueEnabled = 1; + osCreateMesgQueue(&__osSiAccessQueue, siAccessBuf, SI_Q_BUF_LEN); + osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); +} +void __osSiGetAccess(void) { + OSMesg dummyMesg; + if (!__osSiAccessQueueEnabled) + __osSiCreateAccessQueue(); + osRecvMesg(&__osSiAccessQueue, &dummyMesg, OS_MESG_BLOCK); +} +void __osSiRelAccess(void) { + osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK); +} + GLOBAL_ASM("lib/asm/non_matchings/unknown_0CE200/__osSiRawStartDma.s")