From bfe4858ca2215febf44b7c86adcf718b5d8aef08 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Tue, 4 Aug 2020 16:17:46 -0500 Subject: [PATCH] c: osPiGetCmdQueue --- Makefile | 2 + .../non_matchings/unknown_0D4270/osJamMesg.s | 94 ------------------- .../unknown_0D4270/osPiGetCmdQueue.s | 16 ---- .../_Printf.s | 0 .../_Putfld.s | 0 .../func_800D3820.s | 0 lib/src/__osSiRawReadIo.c | 3 - lib/src/osJamMesg.c | 35 +++++++ lib/src/osPiGetCmdQueue.c | 13 +++ lib/src/unknown_0D4270.c | 5 - lib/src/unknown_0D43F0.c | 9 ++ 11 files changed, 59 insertions(+), 118 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D4270/osJamMesg.s delete mode 100644 lib/asm/non_matchings/unknown_0D4270/osPiGetCmdQueue.s rename lib/asm/non_matchings/{unknown_0D4270 => unknown_0D43F0}/_Printf.s (100%) rename lib/asm/non_matchings/{unknown_0D4270 => unknown_0D43F0}/_Putfld.s (100%) rename lib/asm/non_matchings/{unknown_0D4270 => unknown_0D43F0}/func_800D3820.s (100%) create mode 100644 lib/src/osJamMesg.c create mode 100644 lib/src/osPiGetCmdQueue.c create mode 100644 lib/src/unknown_0D43F0.c diff --git a/Makefile b/Makefile index 024dca4b..7bf24e22 100755 --- a/Makefile +++ b/Makefile @@ -183,7 +183,9 @@ $(BUILD_DIR)/lib/src/unknown_0CDE90.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/unknown_0D3160.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osJamMesg.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osPfsFreeBlocks.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osPiGetCmdQueue.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osPiStartDma.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osRecvMesg.o : OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osSendMesg.o : OPT_FLAGS := -O1 diff --git a/lib/asm/non_matchings/unknown_0D4270/osJamMesg.s b/lib/asm/non_matchings/unknown_0D4270/osJamMesg.s deleted file mode 100644 index ac5e04a3..00000000 --- a/lib/asm/non_matchings/unknown_0D4270/osJamMesg.s +++ /dev/null @@ -1,94 +0,0 @@ -glabel osJamMesg -/* 0D42A0 800D36A0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D42A4 800D36A4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D42A8 800D36A8 AFA40028 */ sw $a0, 0x28($sp) -/* 0D42AC 800D36AC AFA5002C */ sw $a1, 0x2c($sp) -/* 0D42B0 800D36B0 AFA60030 */ sw $a2, 0x30($sp) -/* 0D42B4 800D36B4 AFB10018 */ sw $s1, 0x18($sp) -/* 0D42B8 800D36B8 0C034958 */ jal __osDisableInt -/* 0D42BC 800D36BC AFB00014 */ sw $s0, 0x14($sp) -/* 0D42C0 800D36C0 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D42C4 800D36C4 00408025 */ move $s0, $v0 -/* 0D42C8 800D36C8 8DCF0008 */ lw $t7, 8($t6) -/* 0D42CC 800D36CC 8DD80010 */ lw $t8, 0x10($t6) -/* 0D42D0 800D36D0 01F8082A */ slt $at, $t7, $t8 -/* 0D42D4 800D36D4 14200018 */ bnez $at, .L800D3738 -/* 0D42D8 800D36D8 00000000 */ nop -.L800D36DC: -/* 0D42DC 800D36DC 8FB90030 */ lw $t9, 0x30($sp) -/* 0D42E0 800D36E0 24010001 */ li $at, 1 -/* 0D42E4 800D36E4 1721000A */ bne $t9, $at, .L800D3710 -/* 0D42E8 800D36E8 00000000 */ nop -/* 0D42EC 800D36EC 3C09800E */ lui $t1, %hi(__osRunningThread) # $t1, 0x800e -/* 0D42F0 800D36F0 8D294890 */ lw $t1, %lo(__osRunningThread)($t1) -/* 0D42F4 800D36F4 24080008 */ li $t0, 8 -/* 0D42F8 800D36F8 A5280010 */ sh $t0, 0x10($t1) -/* 0D42FC 800D36FC 8FA40028 */ lw $a0, 0x28($sp) -/* 0D4300 800D3700 0C034CB3 */ jal __osEnqueueAndYield -/* 0D4304 800D3704 24840004 */ addiu $a0, $a0, 4 -/* 0D4308 800D3708 10000005 */ b .L800D3720 -/* 0D430C 800D370C 00000000 */ nop -.L800D3710: -/* 0D4310 800D3710 0C034960 */ jal __osRestoreInt -/* 0D4314 800D3714 02002025 */ move $a0, $s0 -/* 0D4318 800D3718 10000030 */ b .L800D37DC -/* 0D431C 800D371C 2402FFFF */ li $v0, -1 -.L800D3720: -/* 0D4320 800D3720 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D4324 800D3724 8D4B0008 */ lw $t3, 8($t2) -/* 0D4328 800D3728 8D4C0010 */ lw $t4, 0x10($t2) -/* 0D432C 800D372C 016C082A */ slt $at, $t3, $t4 -/* 0D4330 800D3730 1020FFEA */ beqz $at, .L800D36DC -/* 0D4334 800D3734 00000000 */ nop -.L800D3738: -/* 0D4338 800D3738 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D433C 800D373C 8DAE000C */ lw $t6, 0xc($t5) -/* 0D4340 800D3740 8DAF0010 */ lw $t7, 0x10($t5) -/* 0D4344 800D3744 01CFC021 */ addu $t8, $t6, $t7 -/* 0D4348 800D3748 2719FFFF */ addiu $t9, $t8, -1 -/* 0D434C 800D374C 032F001A */ div $zero, $t9, $t7 -/* 0D4350 800D3750 00004010 */ mfhi $t0 -/* 0D4354 800D3754 ADA8000C */ sw $t0, 0xc($t5) -/* 0D4358 800D3758 8FAA0028 */ lw $t2, 0x28($sp) -/* 0D435C 800D375C 8FA9002C */ lw $t1, 0x2c($sp) -/* 0D4360 800D3760 15E00002 */ bnez $t7, .L800D376C -/* 0D4364 800D3764 00000000 */ nop -/* 0D4368 800D3768 0007000D */ break 7 -.L800D376C: -/* 0D436C 800D376C 2401FFFF */ li $at, -1 -/* 0D4370 800D3770 15E10004 */ bne $t7, $at, .L800D3784 -/* 0D4374 800D3774 3C018000 */ lui $at, 0x8000 -/* 0D4378 800D3778 17210002 */ bne $t9, $at, .L800D3784 -/* 0D437C 800D377C 00000000 */ nop -/* 0D4380 800D3780 0006000D */ break 6 -.L800D3784: -/* 0D4384 800D3784 8D4C000C */ lw $t4, 0xc($t2) -/* 0D4388 800D3788 8D4B0014 */ lw $t3, 0x14($t2) -/* 0D438C 800D378C 000C7080 */ sll $t6, $t4, 2 -/* 0D4390 800D3790 016EC021 */ addu $t8, $t3, $t6 -/* 0D4394 800D3794 AF090000 */ sw $t1, ($t8) -/* 0D4398 800D3798 8FB90028 */ lw $t9, 0x28($sp) -/* 0D439C 800D379C 8F2F0008 */ lw $t7, 8($t9) -/* 0D43A0 800D37A0 25E80001 */ addiu $t0, $t7, 1 -/* 0D43A4 800D37A4 AF280008 */ sw $t0, 8($t9) -/* 0D43A8 800D37A8 8FAD0028 */ lw $t5, 0x28($sp) -/* 0D43AC 800D37AC 8DAA0000 */ lw $t2, ($t5) -/* 0D43B0 800D37B0 8D4C0000 */ lw $t4, ($t2) -/* 0D43B4 800D37B4 11800006 */ beqz $t4, .L800D37D0 -/* 0D43B8 800D37B8 00000000 */ nop -/* 0D43BC 800D37BC 0C034D05 */ jal __osPopThread -/* 0D43C0 800D37C0 01A02025 */ move $a0, $t5 -/* 0D43C4 800D37C4 00408825 */ move $s1, $v0 -/* 0D43C8 800D37C8 0C032268 */ jal osStartThread -/* 0D43CC 800D37CC 02202025 */ move $a0, $s1 -.L800D37D0: -/* 0D43D0 800D37D0 0C034960 */ jal __osRestoreInt -/* 0D43D4 800D37D4 02002025 */ move $a0, $s0 -/* 0D43D8 800D37D8 00001025 */ move $v0, $zero -.L800D37DC: -/* 0D43DC 800D37DC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D43E0 800D37E0 8FB00014 */ lw $s0, 0x14($sp) -/* 0D43E4 800D37E4 8FB10018 */ lw $s1, 0x18($sp) -/* 0D43E8 800D37E8 03E00008 */ jr $ra -/* 0D43EC 800D37EC 27BD0028 */ addiu $sp, $sp, 0x28 - diff --git a/lib/asm/non_matchings/unknown_0D4270/osPiGetCmdQueue.s b/lib/asm/non_matchings/unknown_0D4270/osPiGetCmdQueue.s deleted file mode 100644 index f10ad9b1..00000000 --- a/lib/asm/non_matchings/unknown_0D4270/osPiGetCmdQueue.s +++ /dev/null @@ -1,16 +0,0 @@ -glabel osPiGetCmdQueue -/* 0D43F0 800D37F0 3C0E800E */ lui $t6, %hi(__osPiDevMgr) # $t6, 0x800e -/* 0D43F4 800D37F4 8DCE3740 */ lw $t6, %lo(__osPiDevMgr)($t6) -/* 0D43F8 800D37F8 15C00003 */ bnez $t6, .L800D3808 -/* 0D43FC 800D37FC 00000000 */ nop -/* 0D4400 800D3800 03E00008 */ jr $ra -/* 0D4404 800D3804 00001025 */ move $v0, $zero - -.L800D3808: -/* 0D4408 800D3808 3C02800E */ lui $v0, %hi(D_800E3748) # $v0, 0x800e -/* 0D440C 800D380C 8C423748 */ lw $v0, %lo(D_800E3748)($v0) -/* 0D4410 800D3810 03E00008 */ jr $ra -/* 0D4414 800D3814 00000000 */ nop - -/* 0D4418 800D3818 00000000 */ nop -/* 0D441C 800D381C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D4270/_Printf.s b/lib/asm/non_matchings/unknown_0D43F0/_Printf.s similarity index 100% rename from lib/asm/non_matchings/unknown_0D4270/_Printf.s rename to lib/asm/non_matchings/unknown_0D43F0/_Printf.s diff --git a/lib/asm/non_matchings/unknown_0D4270/_Putfld.s b/lib/asm/non_matchings/unknown_0D43F0/_Putfld.s similarity index 100% rename from lib/asm/non_matchings/unknown_0D4270/_Putfld.s rename to lib/asm/non_matchings/unknown_0D43F0/_Putfld.s diff --git a/lib/asm/non_matchings/unknown_0D4270/func_800D3820.s b/lib/asm/non_matchings/unknown_0D43F0/func_800D3820.s similarity index 100% rename from lib/asm/non_matchings/unknown_0D4270/func_800D3820.s rename to lib/asm/non_matchings/unknown_0D43F0/func_800D3820.s diff --git a/lib/src/__osSiRawReadIo.c b/lib/src/__osSiRawReadIo.c index 3da94aef..5ceee26b 100644 --- a/lib/src/__osSiRawReadIo.c +++ b/lib/src/__osSiRawReadIo.c @@ -2,13 +2,10 @@ /* RAM_POS: 0x800D4590 */ #include "types.h" -//#include "macros.h" #define PHYS_TO_K1(x) ((u32)(x)|0xA0000000) /* physical to kseg1 */ #define IO_READ(addr) (*(vu32 *)PHYS_TO_K1(addr)) -//GLOBAL_ASM("lib/asm/non_matchings/unknown_0D5190/__osSiRawReadIo.s") - s32 __osSiRawReadIo(u32 devAddr, u32 *data) { if (__osSiDeviceBusy()) diff --git a/lib/src/osJamMesg.c b/lib/src/osJamMesg.c new file mode 100644 index 00000000..1ae0e2cd --- /dev/null +++ b/lib/src/osJamMesg.c @@ -0,0 +1,35 @@ + +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D36A0 */ + +#include "libultra_internal.h" + +extern OSThread* __osRunningThread; + +s32 osJamMesg(OSMesgQueue *mq, OSMesg msg, s32 flag) +{ + register u32 saveMask = __osDisableInt(); + while (mq->validCount >= mq->msgCount) + { + if (flag == OS_MESG_BLOCK) + { + __osRunningThread->state = OS_STATE_WAITING; + __osEnqueueAndYield(&mq->fullqueue); + } + else + { + __osRestoreInt(saveMask); + return -1; + } + } + + mq->first = (mq->first + mq->msgCount - 1) % mq->msgCount; + mq->msg[mq->first] = msg; + mq->validCount++; + if (mq->mtqueue->next != NULL) + { + osStartThread(__osPopThread(&mq->mtqueue)); + } + __osRestoreInt(saveMask); + return 0; +} \ No newline at end of file diff --git a/lib/src/osPiGetCmdQueue.c b/lib/src/osPiGetCmdQueue.c new file mode 100644 index 00000000..493221cd --- /dev/null +++ b/lib/src/osPiGetCmdQueue.c @@ -0,0 +1,13 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D37F0 */ + +#include "libultra_internal.h" + +extern OSDevMgr __osPiDevMgr; + +OSMesgQueue *osPiGetCmdQueue(void) +{ + if (!__osPiDevMgr.active) + return NULL; + return __osPiDevMgr.cmdQueue; +} \ No newline at end of file diff --git a/lib/src/unknown_0D4270.c b/lib/src/unknown_0D4270.c index f9d02b98..ffeafe8a 100644 --- a/lib/src/unknown_0D4270.c +++ b/lib/src/unknown_0D4270.c @@ -5,8 +5,3 @@ #include "macros.h" GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/func_800D3670.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/osJamMesg.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/osPiGetCmdQueue.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/func_800D3820.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/_Putfld.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D4270/_Printf.s") diff --git a/lib/src/unknown_0D43F0.c b/lib/src/unknown_0D43F0.c new file mode 100644 index 00000000..9e2ec6f2 --- /dev/null +++ b/lib/src/unknown_0D43F0.c @@ -0,0 +1,9 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D3820 */ + +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D43F0/func_800D3820.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D43F0/_Putfld.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D43F0/_Printf.s") \ No newline at end of file