diff --git a/Makefile b/Makefile index 367e8384f..00aa30349 100644 --- a/Makefile +++ b/Makefile @@ -61,8 +61,9 @@ MIPSISET := -mips2 -32 OPT_LVL := -O2 LOOPUNROLL := -Wo,-loopunroll,0 -$(B_DIR)/lib/ultra/gu/mtxutil.o: LOOPUNROLL := $(B_DIR)/lib/ultra/gu/frustum.o: LOOPUNROLL := +$(B_DIR)/lib/ultra/gu/mtxutil.o: LOOPUNROLL := +$(B_DIR)/lib/ultra/gu/ortho.o: LOOPUNROLL := $(B_DIR)/lib/ultra/libc/ll.o: MIPSISET := -mips3 -o32 $(B_DIR)/lib/ultra/libc/llcvt.o: MIPSISET := -mips3 -o32 diff --git a/ld/libfiles.inc b/ld/libfiles.inc index 4aceba792..08e572f05 100644 --- a/ld/libfiles.inc +++ b/ld/libfiles.inc @@ -166,6 +166,7 @@ build/ROMID/lib/ultra/io/contquery.o (section); \ build/ROMID/lib/ultra/io/contreaddata.o (section); \ build/ROMID/lib/lib_4f5e0.o (section); \ + build/ROMID/lib/ultra/gu/ortho.o (section); \ build/ROMID/lib/ultra/gu/frustum.o (section); \ build/ROMID/lib/lib_4fff0.o (section); \ build/ROMID/lib/ultra/gu/scale.o (section); \ diff --git a/src/include/lib/lib_4f5e0.h b/src/include/lib/lib_4f5e0.h index e02e7617c..ff58bf775 100644 --- a/src/include/lib/lib_4f5e0.h +++ b/src/include/lib/lib_4f5e0.h @@ -9,6 +9,5 @@ bool func0004f854(OSMesgQueue *mq, struct var800a3180 *arg1, s32 arg2); u32 func0004f9b0(void); u32 func0004fbc0(void); u32 func0004fbf0(void); -u32 func0004fc60(void); #endif diff --git a/src/lib/lib_4f5e0.c b/src/lib/lib_4f5e0.c index a1105fc49..18ae7d226 100644 --- a/src/lib/lib_4f5e0.c +++ b/src/lib/lib_4f5e0.c @@ -478,121 +478,3 @@ glabel func0004fbf0 /* 4fc58: 03e00008 */ jr $ra /* 4fc5c: 00000000 */ nop ); - -GLOBAL_ASM( -glabel func0004fc60 -/* 4fc60: 27bdffe8 */ addiu $sp,$sp,-24 -/* 4fc64: afbf0014 */ sw $ra,0x14($sp) -/* 4fc68: afa5001c */ sw $a1,0x1c($sp) -/* 4fc6c: afa60020 */ sw $a2,0x20($sp) -/* 4fc70: afa70024 */ sw $a3,0x24($sp) -/* 4fc74: 0c012918 */ jal guMtxIdentF -/* 4fc78: afa40018 */ sw $a0,0x18($sp) -/* 4fc7c: c7a40020 */ lwc1 $f4,0x20($sp) -/* 4fc80: c7a6001c */ lwc1 $f6,0x1c($sp) -/* 4fc84: 3c014000 */ lui $at,0x4000 -/* 4fc88: 44814000 */ mtc1 $at,$f8 -/* 4fc8c: 46062001 */ sub.s $f0,$f4,$f6 -/* 4fc90: 8fa20018 */ lw $v0,0x18($sp) -/* 4fc94: c7ae0028 */ lwc1 $f14,0x28($sp) -/* 4fc98: c7b00030 */ lwc1 $f16,0x30($sp) -/* 4fc9c: 46004283 */ div.s $f10,$f8,$f0 -/* 4fca0: c7b2002c */ lwc1 $f18,0x2c($sp) -/* 4fca4: 44813000 */ mtc1 $at,$f6 -/* 4fca8: 3c01c000 */ lui $at,0xc000 -/* 4fcac: 46128301 */ sub.s $f12,$f16,$f18 -/* 4fcb0: 00001825 */ or $v1,$zero,$zero -/* 4fcb4: 24040004 */ addiu $a0,$zero,0x4 -/* 4fcb8: e44a0000 */ swc1 $f10,0x0($v0) -/* 4fcbc: c7a40024 */ lwc1 $f4,0x24($sp) -/* 4fcc0: 44815000 */ mtc1 $at,$f10 -/* 4fcc4: 3c013f80 */ lui $at,0x3f80 -/* 4fcc8: 46047081 */ sub.s $f2,$f14,$f4 -/* 4fccc: 460c5103 */ div.s $f4,$f10,$f12 -/* 4fcd0: 46023203 */ div.s $f8,$f6,$f2 -/* 4fcd4: e4440028 */ swc1 $f4,0x28($v0) -/* 4fcd8: e4480014 */ swc1 $f8,0x14($v0) -/* 4fcdc: c7a8001c */ lwc1 $f8,0x1c($sp) -/* 4fce0: c7a60020 */ lwc1 $f6,0x20($sp) -/* 4fce4: 46083280 */ add.s $f10,$f6,$f8 -/* 4fce8: 46005107 */ neg.s $f4,$f10 -/* 4fcec: 46002183 */ div.s $f6,$f4,$f0 -/* 4fcf0: e4460030 */ swc1 $f6,0x30($v0) -/* 4fcf4: c7a80024 */ lwc1 $f8,0x24($sp) -/* 4fcf8: 46087280 */ add.s $f10,$f14,$f8 -/* 4fcfc: 46128200 */ add.s $f8,$f16,$f18 -/* 4fd00: 46005107 */ neg.s $f4,$f10 -/* 4fd04: 46004287 */ neg.s $f10,$f8 -/* 4fd08: 46022183 */ div.s $f6,$f4,$f2 -/* 4fd0c: 460c5103 */ div.s $f4,$f10,$f12 -/* 4fd10: e4460034 */ swc1 $f6,0x34($v0) -/* 4fd14: 44813000 */ mtc1 $at,$f6 -/* 4fd18: 00000000 */ nop -/* 4fd1c: e446003c */ swc1 $f6,0x3c($v0) -/* 4fd20: e4440038 */ swc1 $f4,0x38($v0) -/* 4fd24: c7a00034 */ lwc1 $f0,0x34($sp) -/* 4fd28: c4480000 */ lwc1 $f8,0x0($v0) -/* 4fd2c: 24630001 */ addiu $v1,$v1,0x1 -/* 4fd30: c4520004 */ lwc1 $f18,0x4($v0) -/* 4fd34: 46004302 */ mul.s $f12,$f8,$f0 -/* 4fd38: c44e0008 */ lwc1 $f14,0x8($v0) -/* 4fd3c: 10640010 */ beq $v1,$a0,.L0004fd80 -/* 4fd40: c450000c */ lwc1 $f16,0xc($v0) -.L0004fd44: -/* 4fd44: 46009282 */ mul.s $f10,$f18,$f0 -/* 4fd48: c4480010 */ lwc1 $f8,0x10($v0) -/* 4fd4c: c4520014 */ lwc1 $f18,0x14($v0) -/* 4fd50: 46007182 */ mul.s $f6,$f14,$f0 -/* 4fd54: c44e0018 */ lwc1 $f14,0x18($v0) -/* 4fd58: 24630001 */ addiu $v1,$v1,0x1 -/* 4fd5c: 46008102 */ mul.s $f4,$f16,$f0 -/* 4fd60: c450001c */ lwc1 $f16,0x1c($v0) -/* 4fd64: e44c0000 */ swc1 $f12,0x0($v0) -/* 4fd68: 46004302 */ mul.s $f12,$f8,$f0 -/* 4fd6c: e44a0004 */ swc1 $f10,0x4($v0) -/* 4fd70: e4460008 */ swc1 $f6,0x8($v0) -/* 4fd74: 24420010 */ addiu $v0,$v0,0x10 -/* 4fd78: 1464fff2 */ bne $v1,$a0,.L0004fd44 -/* 4fd7c: e444fffc */ swc1 $f4,-0x4($v0) -.L0004fd80: -/* 4fd80: 46009282 */ mul.s $f10,$f18,$f0 -/* 4fd84: 24420010 */ addiu $v0,$v0,0x10 -/* 4fd88: e44cfff0 */ swc1 $f12,-0x10($v0) -/* 4fd8c: 46007182 */ mul.s $f6,$f14,$f0 -/* 4fd90: 00000000 */ nop -/* 4fd94: 46008102 */ mul.s $f4,$f16,$f0 -/* 4fd98: e44afff4 */ swc1 $f10,-0xc($v0) -/* 4fd9c: e446fff8 */ swc1 $f6,-0x8($v0) -/* 4fda0: e444fffc */ swc1 $f4,-0x4($v0) -/* 4fda4: 8fbf0014 */ lw $ra,0x14($sp) -/* 4fda8: 27bd0018 */ addiu $sp,$sp,0x18 -/* 4fdac: 03e00008 */ jr $ra -/* 4fdb0: 00000000 */ nop -/* 4fdb4: 27bdff98 */ addiu $sp,$sp,-104 -/* 4fdb8: 44856000 */ mtc1 $a1,$f12 -/* 4fdbc: 44867000 */ mtc1 $a2,$f14 -/* 4fdc0: 44878000 */ mtc1 $a3,$f16 -/* 4fdc4: c7a40078 */ lwc1 $f4,0x78($sp) -/* 4fdc8: c7a6007c */ lwc1 $f6,0x7c($sp) -/* 4fdcc: c7a80080 */ lwc1 $f8,0x80($sp) -/* 4fdd0: c7aa0084 */ lwc1 $f10,0x84($sp) -/* 4fdd4: afbf0024 */ sw $ra,0x24($sp) -/* 4fdd8: afa40068 */ sw $a0,0x68($sp) -/* 4fddc: 44056000 */ mfc1 $a1,$f12 -/* 4fde0: 44067000 */ mfc1 $a2,$f14 -/* 4fde4: 44078000 */ mfc1 $a3,$f16 -/* 4fde8: 27a40028 */ addiu $a0,$sp,0x28 -/* 4fdec: e7a40010 */ swc1 $f4,0x10($sp) -/* 4fdf0: e7a60014 */ swc1 $f6,0x14($sp) -/* 4fdf4: e7a80018 */ swc1 $f8,0x18($sp) -/* 4fdf8: 0c013f18 */ jal func0004fc60 -/* 4fdfc: e7aa001c */ swc1 $f10,0x1c($sp) -/* 4fe00: 27a40028 */ addiu $a0,$sp,0x28 -/* 4fe04: 0c0128d8 */ jal guMtxF2L -/* 4fe08: 8fa50068 */ lw $a1,0x68($sp) -/* 4fe0c: 8fbf0024 */ lw $ra,0x24($sp) -/* 4fe10: 27bd0068 */ addiu $sp,$sp,0x68 -/* 4fe14: 03e00008 */ jr $ra -/* 4fe18: 00000000 */ nop -/* 4fe1c: 00000000 */ nop -); diff --git a/src/lib/ultra/gu/ortho.c b/src/lib/ultra/gu/ortho.c new file mode 100644 index 000000000..1545a8055 --- /dev/null +++ b/src/lib/ultra/gu/ortho.c @@ -0,0 +1,53 @@ +#include + +void guOrthoF(float mf[4][4], float l, float r, float b, float t, float n, float f, float scale) +{ + int i, j; + + guMtxIdentF(mf); + + mf[0][0] = 2.0f / (r - l); + mf[1][1] = 2.0f / (t - b); + mf[2][2] = -2.0f / (f - n); + mf[3][0] = -(r + l) / (r - l); + mf[3][1] = -(t + b) / (t - b); + mf[3][2] = -(f + n) / (f - n); + mf[3][3] = 1; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + mf[i][j] *= scale; + } + } +} + +GLOBAL_ASM( +glabel func0004fdb4 +/* 4fdb4: 27bdff98 */ addiu $sp,$sp,-104 +/* 4fdb8: 44856000 */ mtc1 $a1,$f12 +/* 4fdbc: 44867000 */ mtc1 $a2,$f14 +/* 4fdc0: 44878000 */ mtc1 $a3,$f16 +/* 4fdc4: c7a40078 */ lwc1 $f4,0x78($sp) +/* 4fdc8: c7a6007c */ lwc1 $f6,0x7c($sp) +/* 4fdcc: c7a80080 */ lwc1 $f8,0x80($sp) +/* 4fdd0: c7aa0084 */ lwc1 $f10,0x84($sp) +/* 4fdd4: afbf0024 */ sw $ra,0x24($sp) +/* 4fdd8: afa40068 */ sw $a0,0x68($sp) +/* 4fddc: 44056000 */ mfc1 $a1,$f12 +/* 4fde0: 44067000 */ mfc1 $a2,$f14 +/* 4fde4: 44078000 */ mfc1 $a3,$f16 +/* 4fde8: 27a40028 */ addiu $a0,$sp,0x28 +/* 4fdec: e7a40010 */ swc1 $f4,0x10($sp) +/* 4fdf0: e7a60014 */ swc1 $f6,0x14($sp) +/* 4fdf4: e7a80018 */ swc1 $f8,0x18($sp) +/* 4fdf8: 0c013f18 */ jal guOrthoF +/* 4fdfc: e7aa001c */ swc1 $f10,0x1c($sp) +/* 4fe00: 27a40028 */ addiu $a0,$sp,0x28 +/* 4fe04: 0c0128d8 */ jal guMtxF2L +/* 4fe08: 8fa50068 */ lw $a1,0x68($sp) +/* 4fe0c: 8fbf0024 */ lw $ra,0x24($sp) +/* 4fe10: 27bd0068 */ addiu $sp,$sp,0x68 +/* 4fe14: 03e00008 */ jr $ra +/* 4fe18: 00000000 */ nop +/* 4fe1c: 00000000 */ nop +);