diff --git a/src/game/data/data_003dc0.c b/src/game/data/data_003dc0.c index 093e6b6fd..346485a82 100644 --- a/src/game/data/data_003dc0.c +++ b/src/game/data/data_003dc0.c @@ -2295,7 +2295,7 @@ OSThread *__osRunningThread = NULL; u32 var80060944 = 0x00000000; u32 var80060948 = 0x00000000; u32 var8006094c = 0x00000000; -u32 var80060950 = 0x00000000; +u32 __osSiAccessQueueEnabled = 0x00000000; u32 var80060954 = 0x00000000; u32 var80060958 = 0x00000000; u32 var8006095c = 0x00000000; diff --git a/src/include/game/data/data_000000.h b/src/include/game/data/data_000000.h index ff08b61a9..7454e6a15 100644 --- a/src/include/game/data/data_000000.h +++ b/src/include/game/data/data_000000.h @@ -187,6 +187,7 @@ extern u32 __osThreadTail; extern OSThread *__osRunQueue; extern OSThread *__osActiveQueue; extern OSThread *__osRunningThread; +extern u32 __osSiAccessQueueEnabled; extern u32 var80060970; extern u32 var800609a0; extern u32 var800609c4; diff --git a/src/lib/ultra/io/siacs.c b/src/lib/ultra/io/siacs.c index 7b82f84d2..d25e2670b 100644 --- a/src/lib/ultra/io/siacs.c +++ b/src/lib/ultra/io/siacs.c @@ -1,4 +1,5 @@ #include +#include "game/data/data_000000.h" #include "gvars/gvars.h" GLOBAL_ASM( @@ -6,10 +7,10 @@ glabel __osSiCreateAccessQueue /* 4a810: 27bdffe8 */ addiu $sp,$sp,-24 /* 4a814: afbf0014 */ sw $ra,0x14($sp) /* 4a818: 240e0001 */ addiu $t6,$zero,0x1 -/* 4a81c: 3c018006 */ lui $at,%hi(var80060950) +/* 4a81c: 3c018006 */ lui $at,%hi(__osSiAccessQueueEnabled) /* 4a820: 3c04800a */ lui $a0,%hi(__osSiAccessQueue) /* 4a824: 3c05800a */ lui $a1,%hi(var8009c7c0) -/* 4a828: ac2e0950 */ sw $t6,%lo(var80060950)($at) +/* 4a828: ac2e0950 */ sw $t6,%lo(__osSiAccessQueueEnabled)($at) /* 4a82c: 24a5c7c0 */ addiu $a1,$a1,%lo(var8009c7c0) /* 4a830: 2484c7c8 */ addiu $a0,$a0,%lo(__osSiAccessQueue) /* 4a834: 0c0120d0 */ jal osCreateMesgQueue @@ -25,27 +26,16 @@ glabel __osSiCreateAccessQueue /* 4a85c: 00000000 */ nop ); -GLOBAL_ASM( -glabel __osSiGetAccess -/* 4a860: 3c0e8006 */ lui $t6,%hi(var80060950) -/* 4a864: 8dce0950 */ lw $t6,%lo(var80060950)($t6) -/* 4a868: 27bdffe0 */ addiu $sp,$sp,-32 -/* 4a86c: afbf0014 */ sw $ra,0x14($sp) -/* 4a870: 15c00003 */ bnez $t6,.L0004a880 -/* 4a874: 00000000 */ nop -/* 4a878: 0c012a04 */ jal __osSiCreateAccessQueue -/* 4a87c: 00000000 */ nop -.L0004a880: -/* 4a880: 3c04800a */ lui $a0,%hi(__osSiAccessQueue) -/* 4a884: 2484c7c8 */ addiu $a0,$a0,%lo(__osSiAccessQueue) -/* 4a888: 27a5001c */ addiu $a1,$sp,0x1c -/* 4a88c: 0c0121bc */ jal osRecvMesg -/* 4a890: 24060001 */ addiu $a2,$zero,0x1 -/* 4a894: 8fbf0014 */ lw $ra,0x14($sp) -/* 4a898: 27bd0020 */ addiu $sp,$sp,0x20 -/* 4a89c: 03e00008 */ jr $ra -/* 4a8a0: 00000000 */ nop -); +void __osSiGetAccess(void) +{ + OSMesg dummyMesg; + + if (!__osSiAccessQueueEnabled) { + __osSiCreateAccessQueue(); + } + + osRecvMesg(&__osSiAccessQueue, &dummyMesg, OS_MESG_BLOCK); +} void __osSiRelAccess(void) {