From 11238a7fd75133b01f1100b299654934bcdd30c9 Mon Sep 17 00:00:00 2001 From: Mittenshugg Date: Fri, 31 Jul 2020 20:11:28 -0500 Subject: [PATCH] c_src: guMtxUtil.c, osViSwapBuffer.c --- Makefile | 1 + .../unknown_07AF10/func_8007A98C.s | 2 +- .../non_matchings/unknown_0D3020/guMtxF2L.s | 69 ------------ .../unknown_0D3020/guMtxIdentF.s | 103 ------------------ .../{func_800D2420.s => osViSwapBuffer.s} | 2 +- lib/src/guMtxUtil.c | 64 +++++++++++ lib/src/osViSwapBuffer.c | 13 +++ lib/src/unknown_0D3020.c | 7 +- lib/src/unknown_0D56B0.c | 8 ++ 9 files changed, 89 insertions(+), 180 deletions(-) delete mode 100644 lib/asm/non_matchings/unknown_0D3020/guMtxF2L.s delete mode 100644 lib/asm/non_matchings/unknown_0D3020/guMtxIdentF.s rename lib/asm/non_matchings/unknown_0D3020/{func_800D2420.s => osViSwapBuffer.s} (98%) create mode 100644 lib/src/guMtxUtil.c create mode 100644 lib/src/osViSwapBuffer.c create mode 100644 lib/src/unknown_0D56B0.c diff --git a/Makefile b/Makefile index b89f8166..414075d8 100755 --- a/Makefile +++ b/Makefile @@ -175,6 +175,7 @@ $(BUILD_DIR)/lib/%.o: MIPSISET := -mips2 $(BUILD_DIR)/lib/src/osSetTimer.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osTimer.o: OPT_FLAGS := -O1 $(BUILD_DIR)/lib/src/osViBlack.o: OPT_FLAGS := -O1 +$(BUILD_DIR)/lib/src/osViSwapBuffer.o : OPT_FLAGS := -O1 ######################## Targets ############################# diff --git a/asm/non_matchings/unknown_07AF10/func_8007A98C.s b/asm/non_matchings/unknown_07AF10/func_8007A98C.s index adea8d87..76eefa3c 100644 --- a/asm/non_matchings/unknown_07AF10/func_8007A98C.s +++ b/asm/non_matchings/unknown_07AF10/func_8007A98C.s @@ -98,7 +98,7 @@ glabel func_8007A98C .L8007AAE8: /* 07B6E8 8007AAE8 3C048012 */ lui $a0, %hi(D_801262D8) # $a0, 0x8012 /* 07B6EC 8007AAEC 8C8462D8 */ lw $a0, %lo(D_801262D8)($a0) -/* 07B6F0 8007AAF0 0C034908 */ jal func_800D2420 +/* 07B6F0 8007AAF0 0C034908 */ jal osViSwapBuffer /* 07B6F4 8007AAF4 AFA30028 */ sw $v1, 0x28($sp) /* 07B6F8 8007AAF8 02402025 */ move $a0, $s2 /* 07B6FC 8007AAFC 00002825 */ move $a1, $zero diff --git a/lib/asm/non_matchings/unknown_0D3020/guMtxF2L.s b/lib/asm/non_matchings/unknown_0D3020/guMtxF2L.s deleted file mode 100644 index d21fd55f..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/guMtxF2L.s +++ /dev/null @@ -1,69 +0,0 @@ -glabel guMtxF2L -/* 0D5440 800D4840 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0D5444 800D4844 44810000 */ mtc1 $at, $f0 -/* 0D5448 800D4848 00A01025 */ move $v0, $a1 -/* 0D544C 800D484C 24A30020 */ addiu $v1, $a1, 0x20 -/* 0D5450 800D4850 00003025 */ move $a2, $zero -/* 0D5454 800D4854 00803825 */ move $a3, $a0 -/* 0D5458 800D4858 240C0004 */ li $t4, 4 -/* 0D545C 800D485C 240B0002 */ li $t3, 2 -/* 0D5460 800D4860 3C0AFFFF */ lui $t2, 0xffff -.L800D4864: -/* 0D5464 800D4864 00002025 */ move $a0, $zero -/* 0D5468 800D4868 00E04025 */ move $t0, $a3 -/* 0D546C 800D486C C50E0004 */ lwc1 $f14, 4($t0) -/* 0D5470 800D4870 24840001 */ addiu $a0, $a0, 1 -/* 0D5474 800D4874 C5120000 */ lwc1 $f18, ($t0) -/* 0D5478 800D4878 46007402 */ mul.s $f16, $f14, $f0 -/* 0D547C 800D487C 108B0019 */ beq $a0, $t3, .L800D48E4 -/* 0D5480 800D4880 00000000 */ nop -.L800D4884: -/* 0D5484 800D4884 46009382 */ mul.s $f14, $f18, $f0 -/* 0D5488 800D4888 24840001 */ addiu $a0, $a0, 1 -/* 0D548C 800D488C 24420004 */ addiu $v0, $v0, 4 -/* 0D5490 800D4890 24630004 */ addiu $v1, $v1, 4 -/* 0D5494 800D4894 25080008 */ addiu $t0, $t0, 8 -/* 0D5498 800D4898 4600830D */ trunc.w.s $f12, $f16 -/* 0D549C 800D489C 4600738D */ trunc.w.s $f14, $f14 -/* 0D54A0 800D48A0 44096000 */ mfc1 $t1, $f12 -/* 0D54A4 800D48A4 44057000 */ mfc1 $a1, $f14 -/* 0D54A8 800D48A8 0009CC03 */ sra $t9, $t1, 0x10 -/* 0D54AC 800D48AC 332DFFFF */ andi $t5, $t9, 0xffff -/* 0D54B0 800D48B0 00AAC024 */ and $t8, $a1, $t2 -/* 0D54B4 800D48B4 030D7025 */ or $t6, $t8, $t5 -/* 0D54B8 800D48B8 00057C00 */ sll $t7, $a1, 0x10 -/* 0D54BC 800D48BC 01EAC824 */ and $t9, $t7, $t2 -/* 0D54C0 800D48C0 AC4EFFFC */ sw $t6, -4($v0) -/* 0D54C4 800D48C4 3138FFFF */ andi $t8, $t1, 0xffff -/* 0D54C8 800D48C8 03386825 */ or $t5, $t9, $t8 -/* 0D54CC 800D48CC AC6DFFFC */ sw $t5, -4($v1) -/* 0D54D0 800D48D0 C50E0004 */ lwc1 $f14, 4($t0) -/* 0D54D4 800D48D4 C5120000 */ lwc1 $f18, ($t0) -/* 0D54D8 800D48D8 46007402 */ mul.s $f16, $f14, $f0 -/* 0D54DC 800D48DC 148BFFE9 */ bne $a0, $t3, .L800D4884 -/* 0D54E0 800D48E0 00000000 */ nop -.L800D48E4: -/* 0D54E4 800D48E4 46009382 */ mul.s $f14, $f18, $f0 -/* 0D54E8 800D48E8 25080008 */ addiu $t0, $t0, 8 -/* 0D54EC 800D48EC 24420004 */ addiu $v0, $v0, 4 -/* 0D54F0 800D48F0 24630004 */ addiu $v1, $v1, 4 -/* 0D54F4 800D48F4 4600830D */ trunc.w.s $f12, $f16 -/* 0D54F8 800D48F8 4600738D */ trunc.w.s $f14, $f14 -/* 0D54FC 800D48FC 44096000 */ mfc1 $t1, $f12 -/* 0D5500 800D4900 44057000 */ mfc1 $a1, $f14 -/* 0D5504 800D4904 0009CC03 */ sra $t9, $t1, 0x10 -/* 0D5508 800D4908 332DFFFF */ andi $t5, $t9, 0xffff -/* 0D550C 800D490C 00AAC024 */ and $t8, $a1, $t2 -/* 0D5510 800D4910 030D7025 */ or $t6, $t8, $t5 -/* 0D5514 800D4914 00057C00 */ sll $t7, $a1, 0x10 -/* 0D5518 800D4918 01EAC824 */ and $t9, $t7, $t2 -/* 0D551C 800D491C 3138FFFF */ andi $t8, $t1, 0xffff -/* 0D5520 800D4920 AC4EFFFC */ sw $t6, -4($v0) -/* 0D5524 800D4924 03386825 */ or $t5, $t9, $t8 -/* 0D5528 800D4928 AC6DFFFC */ sw $t5, -4($v1) -/* 0D552C 800D492C 24C60001 */ addiu $a2, $a2, 1 -/* 0D5530 800D4930 14CCFFCC */ bne $a2, $t4, .L800D4864 -/* 0D5534 800D4934 24E70010 */ addiu $a3, $a3, 0x10 -/* 0D5538 800D4938 03E00008 */ jr $ra -/* 0D553C 800D493C 00000000 */ nop - diff --git a/lib/asm/non_matchings/unknown_0D3020/guMtxIdentF.s b/lib/asm/non_matchings/unknown_0D3020/guMtxIdentF.s deleted file mode 100644 index 923119af..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/guMtxIdentF.s +++ /dev/null @@ -1,103 +0,0 @@ -glabel guMtxIdentF -/* 0D5540 800D4940 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D5544 800D4944 00801825 */ move $v1, $a0 -/* 0D5548 800D4948 44810000 */ mtc1 $at, $f0 -/* 0D554C 800D494C 44801000 */ mtc1 $zero, $f2 -/* 0D5550 800D4950 24040001 */ li $a0, 1 -/* 0D5554 800D4954 00001025 */ move $v0, $zero -/* 0D5558 800D4958 24070004 */ li $a3, 4 -/* 0D555C 800D495C 24060003 */ li $a2, 3 -/* 0D5560 800D4960 24050002 */ li $a1, 2 -.L800D4964: -/* 0D5564 800D4964 54400004 */ bnezl $v0, .L800D4978 -/* 0D5568 800D4968 E4620000 */ swc1 $f2, ($v1) -/* 0D556C 800D496C 10000002 */ b .L800D4978 -/* 0D5570 800D4970 E4600000 */ swc1 $f0, ($v1) -/* 0D5574 800D4974 E4620000 */ swc1 $f2, ($v1) -.L800D4978: -/* 0D5578 800D4978 54440004 */ bnel $v0, $a0, .L800D498C -/* 0D557C 800D497C E4620004 */ swc1 $f2, 4($v1) -/* 0D5580 800D4980 10000002 */ b .L800D498C -/* 0D5584 800D4984 E4600004 */ swc1 $f0, 4($v1) -/* 0D5588 800D4988 E4620004 */ swc1 $f2, 4($v1) -.L800D498C: -/* 0D558C 800D498C 54450004 */ bnel $v0, $a1, .L800D49A0 -/* 0D5590 800D4990 E4620008 */ swc1 $f2, 8($v1) -/* 0D5594 800D4994 10000002 */ b .L800D49A0 -/* 0D5598 800D4998 E4600008 */ swc1 $f0, 8($v1) -/* 0D559C 800D499C E4620008 */ swc1 $f2, 8($v1) -.L800D49A0: -/* 0D55A0 800D49A0 54460004 */ bnel $v0, $a2, .L800D49B4 -/* 0D55A4 800D49A4 E462000C */ swc1 $f2, 0xc($v1) -/* 0D55A8 800D49A8 10000002 */ b .L800D49B4 -/* 0D55AC 800D49AC E460000C */ swc1 $f0, 0xc($v1) -/* 0D55B0 800D49B0 E462000C */ swc1 $f2, 0xc($v1) -.L800D49B4: -/* 0D55B4 800D49B4 24420001 */ addiu $v0, $v0, 1 -/* 0D55B8 800D49B8 1447FFEA */ bne $v0, $a3, .L800D4964 -/* 0D55BC 800D49BC 24630010 */ addiu $v1, $v1, 0x10 -/* 0D55C0 800D49C0 03E00008 */ jr $ra -/* 0D55C4 800D49C4 00000000 */ nop - -/* 0D55C8 800D49C8 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0D55CC 800D49CC AFBF0014 */ sw $ra, 0x14($sp) -/* 0D55D0 800D49D0 AFA40058 */ sw $a0, 0x58($sp) -/* 0D55D4 800D49D4 0C035250 */ jal guMtxIdentF -/* 0D55D8 800D49D8 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D55DC 800D49DC 27A40018 */ addiu $a0, $sp, 0x18 -/* 0D55E0 800D49E0 0C035210 */ jal guMtxF2L -/* 0D55E4 800D49E4 8FA50058 */ lw $a1, 0x58($sp) -/* 0D55E8 800D49E8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D55EC 800D49EC 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0D55F0 800D49F0 03E00008 */ jr $ra -/* 0D55F4 800D49F4 00000000 */ nop - -/* 0D55F8 800D49F8 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0D55FC 800D49FC 44810000 */ mtc1 $at, $f0 -/* 0D5600 800D4A00 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0D5604 800D4A04 00A01025 */ move $v0, $a1 -/* 0D5608 800D4A08 24A30020 */ addiu $v1, $a1, 0x20 -/* 0D560C 800D4A0C 00003025 */ move $a2, $zero -/* 0D5610 800D4A10 00804025 */ move $t0, $a0 -/* 0D5614 800D4A14 240C0004 */ li $t4, 4 -/* 0D5618 800D4A18 240B0002 */ li $t3, 2 -/* 0D561C 800D4A1C 3C0AFFFF */ lui $t2, 0xffff -.L800D4A20: -/* 0D5620 800D4A20 00002025 */ move $a0, $zero -/* 0D5624 800D4A24 01004825 */ move $t1, $t0 -.L800D4A28: -/* 0D5628 800D4A28 8C6E0000 */ lw $t6, ($v1) -/* 0D562C 800D4A2C 8C590000 */ lw $t9, ($v0) -/* 0D5630 800D4A30 24840001 */ addiu $a0, $a0, 1 -/* 0D5634 800D4A34 000E7C02 */ srl $t7, $t6, 0x10 -/* 0D5638 800D4A38 31F8FFFF */ andi $t8, $t7, 0xffff -/* 0D563C 800D4A3C 032A6824 */ and $t5, $t9, $t2 -/* 0D5640 800D4A40 030D7025 */ or $t6, $t8, $t5 -/* 0D5644 800D4A44 AFAE0004 */ sw $t6, 4($sp) -/* 0D5648 800D4A48 8C6F0000 */ lw $t7, ($v1) -/* 0D564C 800D4A4C 8C580000 */ lw $t8, ($v0) -/* 0D5650 800D4A50 8FA50004 */ lw $a1, 4($sp) -/* 0D5654 800D4A54 31F9FFFF */ andi $t9, $t7, 0xffff -/* 0D5658 800D4A58 00186C00 */ sll $t5, $t8, 0x10 -/* 0D565C 800D4A5C 44859000 */ mtc1 $a1, $f18 -/* 0D5660 800D4A60 01AA7024 */ and $t6, $t5, $t2 -/* 0D5664 800D4A64 032E3825 */ or $a3, $t9, $t6 -/* 0D5668 800D4A68 468094A0 */ cvt.s.w $f18, $f18 -/* 0D566C 800D4A6C 44878000 */ mtc1 $a3, $f16 -/* 0D5670 800D4A70 AFA70000 */ sw $a3, ($sp) -/* 0D5674 800D4A74 24420004 */ addiu $v0, $v0, 4 -/* 0D5678 800D4A78 24630004 */ addiu $v1, $v1, 4 -/* 0D567C 800D4A7C 46808420 */ cvt.s.w $f16, $f16 -/* 0D5680 800D4A80 25290008 */ addiu $t1, $t1, 8 -/* 0D5684 800D4A84 46009483 */ div.s $f18, $f18, $f0 -/* 0D5688 800D4A88 46008403 */ div.s $f16, $f16, $f0 -/* 0D568C 800D4A8C E532FFF8 */ swc1 $f18, -8($t1) -/* 0D5690 800D4A90 148BFFE5 */ bne $a0, $t3, .L800D4A28 -/* 0D5694 800D4A94 E530FFFC */ swc1 $f16, -4($t1) -/* 0D5698 800D4A98 24C60001 */ addiu $a2, $a2, 1 -/* 0D569C 800D4A9C 14CCFFE0 */ bne $a2, $t4, .L800D4A20 -/* 0D56A0 800D4AA0 25080010 */ addiu $t0, $t0, 0x10 -/* 0D56A4 800D4AA4 03E00008 */ jr $ra -/* 0D56A8 800D4AA8 27BD0010 */ addiu $sp, $sp, 0x10 - -/* 0D56AC 800D4AAC 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/func_800D2420.s b/lib/asm/non_matchings/unknown_0D3020/osViSwapBuffer.s similarity index 98% rename from lib/asm/non_matchings/unknown_0D3020/func_800D2420.s rename to lib/asm/non_matchings/unknown_0D3020/osViSwapBuffer.s index 28de7bf4..3b6db105 100644 --- a/lib/asm/non_matchings/unknown_0D3020/func_800D2420.s +++ b/lib/asm/non_matchings/unknown_0D3020/osViSwapBuffer.s @@ -1,4 +1,4 @@ -glabel func_800D2420 +glabel osViSwapBuffer /* 0D3020 800D2420 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0D3024 800D2424 AFBF0014 */ sw $ra, 0x14($sp) /* 0D3028 800D2428 0C034958 */ jal __osDisableInt diff --git a/lib/src/guMtxUtil.c b/lib/src/guMtxUtil.c new file mode 100644 index 00000000..5979d8e1 --- /dev/null +++ b/lib/src/guMtxUtil.c @@ -0,0 +1,64 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D4840 */ + +#include "libultra_internal.h" + +void guMtxF2L(float mf[4][4], Mtx *m) { + int r, c; + s32 tmp1; + s32 tmp2; + s32 *m1 = &m->m[0][0]; + s32 *m2 = &m->m[2][0]; + for (r = 0; r < 4; r++) { + for (c = 0; c < 2; c++) { + tmp1 = mf[r][2 * c] * 65536.0f; + tmp2 = mf[r][2 * c + 1] * 65536.0f; + *m1++ = (tmp1 & 0xffff0000) | ((tmp2 >> 0x10) & 0xffff); + *m2++ = ((tmp1 << 0x10) & 0xffff0000) | (tmp2 & 0xffff); + } + } +} + +void guMtxIdentF(float mf[4][4]) { + int r, c; + for (r = 0; r < 4; r++) { + for (c = 0; c < 4; c++) { + if (r == c) { + mf[r][c] = 1.0f; + } else { + mf[r][c] = 0.0f; + } + } + } +} + +void guMtxIdent(Mtx *m) { +#ifndef GBI_FLOATS + float mf[4][4]; + guMtxIdentF(mf); + guMtxF2L(mf, m); +#else + guMtxIdentF(m->m); +#endif +} + +void guMtxL2F(float mf[4][4], Mtx *m) { + int r, c; + u32 tmp1; + u32 tmp2; + u32 *m1; + u32 *m2; + s32 stmp1, stmp2; + m1 = (u32 *) &m->m[0][0]; + m2 = (u32 *) &m->m[2][0]; + for (r = 0; r < 4; r++) { + for (c = 0; c < 2; c++) { + tmp1 = (*m1 & 0xffff0000) | ((*m2 >> 0x10) & 0xffff); + tmp2 = ((*m1++ << 0x10) & 0xffff0000) | (*m2++ & 0xffff); + stmp1 = *(s32 *) &tmp1; + stmp2 = *(s32 *) &tmp2; + mf[r][c * 2 + 0] = stmp1 / 65536.0f; + mf[r][c * 2 + 1] = stmp2 / 65536.0f; + } + } +} \ No newline at end of file diff --git a/lib/src/osViSwapBuffer.c b/lib/src/osViSwapBuffer.c new file mode 100644 index 00000000..a0086baa --- /dev/null +++ b/lib/src/osViSwapBuffer.c @@ -0,0 +1,13 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D2420 */ + +#include "libultra_internal.h" + +extern OSViContext* D_800E4874; + +void osViSwapBuffer(void* frameBufPtr){ + u32 saveMask = __osDisableInt(); + D_800E4874->buffer = frameBufPtr; + D_800E4874->unk00 |= 0x10; + __osRestoreInt(saveMask); +} \ No newline at end of file diff --git a/lib/src/unknown_0D3020.c b/lib/src/unknown_0D3020.c index b837542c..e193437f 100644 --- a/lib/src/unknown_0D3020.c +++ b/lib/src/unknown_0D3020.c @@ -1,10 +1,9 @@ /* The comment below is needed for this file to be picked up by generate_ld */ -/* RAM_POS: 0x800D2420 */ +/* RAM_POS: 0x800D2470 */ #include "types.h" #include "macros.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D2420.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D2470.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osPiCreateAccessQueue.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osGetThreadPri.s") @@ -41,7 +40,3 @@ GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osWritebackICache.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osMapTLBRdb.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osPiRawWriteIo.s") GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D47F0.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/guMtxF2L.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/guMtxIdentF.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/cosf.s") -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") diff --git a/lib/src/unknown_0D56B0.c b/lib/src/unknown_0D56B0.c new file mode 100644 index 00000000..6bf4a972 --- /dev/null +++ b/lib/src/unknown_0D56B0.c @@ -0,0 +1,8 @@ +/* The comment below is needed for this file to be picked up by generate_ld */ +/* RAM_POS: 0x800D4AB0 */ + +#include "types.h" +#include "macros.h" + +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/cosf.s") +GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") \ No newline at end of file