From 4c71cae7000823a5ea449161359efb584329e9d0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Jan 2021 00:25:54 +1000 Subject: [PATCH] Decompile osViSetSpecialFeatures --- ld/libfiles.inc | 2 +- src/boot/entry.c | 1 - src/boot/init.c | 1 - src/boot/sched.c | 3 +- src/include/lib/lib_48f50.h | 8 --- src/lib/lib_09660.c | 3 +- src/lib/lib_48f50.c | 111 -------------------------------- src/lib/ultra/io/visetspecial.c | 47 ++++++++++++++ 8 files changed, 50 insertions(+), 126 deletions(-) delete mode 100644 src/include/lib/lib_48f50.h delete mode 100644 src/lib/lib_48f50.c create mode 100644 src/lib/ultra/io/visetspecial.c diff --git a/ld/libfiles.inc b/ld/libfiles.inc index 0edf2d463..cbb460e75 100644 --- a/ld/libfiles.inc +++ b/ld/libfiles.inc @@ -107,7 +107,7 @@ build/ROMID/lib/ultra/io/visetmode.o (section); \ build/ROMID/lib/ultra/io/visetxscale.o (section); \ build/ROMID/lib/ultra/io/visetyscale.o (section); \ - build/ROMID/lib/lib_48f50.o (section); \ + build/ROMID/lib/ultra/io/visetspecial.o (section); \ build/ROMID/lib/ultra/io/viswapbuf.o (section); \ build/ROMID/lib/ultra/io/sptaskyield.o (section); \ build/ROMID/lib/lib_49120.o (section); \ diff --git a/src/boot/entry.c b/src/boot/entry.c index 43e62f61b..ea34662dc 100644 --- a/src/boot/entry.c +++ b/src/boot/entry.c @@ -21,7 +21,6 @@ #include "lib/lib_2fa00.h" #include "lib/lib_48150.h" #include "lib/lib_48cd0.h" -#include "lib/lib_48f50.h" #include "types.h" GLOBAL_ASM( diff --git a/src/boot/init.c b/src/boot/init.c index 67256bd61..fdb3da489 100644 --- a/src/boot/init.c +++ b/src/boot/init.c @@ -24,7 +24,6 @@ #include "lib/lib_2fa00.h" #include "lib/lib_48150.h" #include "lib/lib_48cd0.h" -#include "lib/lib_48f50.h" #include "types.h" #if VERSION >= VERSION_NTSC_1_0 diff --git a/src/boot/sched.c b/src/boot/sched.c index 771cf91a7..5437be996 100644 --- a/src/boot/sched.c +++ b/src/boot/sched.c @@ -23,7 +23,6 @@ #include "lib/lib_2fa00.h" #include "lib/lib_48150.h" #include "lib/lib_48cd0.h" -#include "lib/lib_48f50.h" #include "types.h" void func00001b10(u32 value) @@ -502,7 +501,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t) osViBlack(var8005ce90); osViSetXScale(var8005ce78[1 - var8005ce74]); osViSetYScale(var8005ce80[1 - var8005ce74]); - func00048f50(0x42); + osViSetSpecialFeatures(0x42); } var8005ce88[1 - var8005ce74] = 0; diff --git a/src/include/lib/lib_48f50.h b/src/include/lib/lib_48f50.h deleted file mode 100644 index 461e74898..000000000 --- a/src/include/lib/lib_48f50.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _IN_LIB_LIB_48F50_H -#define _IN_LIB_LIB_48F50_H -#include -#include "types.h" - -void func00048f50(u32 arg0); - -#endif diff --git a/src/lib/lib_09660.c b/src/lib/lib_09660.c index 2f3bd3e0b..a45eddab1 100644 --- a/src/lib/lib_09660.c +++ b/src/lib/lib_09660.c @@ -19,7 +19,6 @@ #include "lib/lib_2faf0.h" #include "lib/lib_30ce0.h" #include "lib/lib_48cd0.h" -#include "lib/lib_48f50.h" #include "lib/lib_4b170.h" #include "types.h" @@ -802,7 +801,7 @@ glabel func00009ed4 /* a020: 00380821 */ addu $at,$at,$t8 /* a024: 0c0123bc */ jal osViSetYScale /* a028: c42cce84 */ lwc1 $f12,%lo(var8005ce80+0x4)($at) -/* a02c: 0c0123d4 */ jal func00048f50 +/* a02c: 0c0123d4 */ jal osViSetSpecialFeatures /* a030: 24040042 */ addiu $a0,$zero,0x42 /* a034: 8fbf0014 */ lw $ra,0x14($sp) /* a038: 27bd0020 */ addiu $sp,$sp,0x20 diff --git a/src/lib/lib_48f50.c b/src/lib/lib_48f50.c deleted file mode 100644 index 3a4205454..000000000 --- a/src/lib/lib_48f50.c +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include "constants.h" -#include "game/data/data_000000.h" -#include "game/data/data_0083d0.h" -#include "game/data/data_00e460.h" -#include "game/data/data_0160b0.h" -#include "game/data/data_01a3a0.h" -#include "game/data/data_020df0.h" -#include "game/data/data_02da90.h" -#include "gvars/gvars.h" -#include "types.h" - -GLOBAL_ASM( -glabel func00048f50 -/* 48f50: 27bdffe8 */ addiu $sp,$sp,-24 -/* 48f54: afbf0014 */ sw $ra,0x14($sp) -/* 48f58: 0c01256c */ jal __osDisableInt -/* 48f5c: afa40018 */ sw $a0,0x18($sp) -/* 48f60: 8fa40018 */ lw $a0,0x18($sp) -/* 48f64: 00402825 */ or $a1,$v0,$zero -/* 48f68: 3c038006 */ lui $v1,%hi(__osViNext) -/* 48f6c: 308e0001 */ andi $t6,$a0,0x1 -/* 48f70: 11c00006 */ beqz $t6,.L00048f8c -/* 48f74: 30990002 */ andi $t9,$a0,0x2 -/* 48f78: 24630914 */ addiu $v1,$v1,%lo(__osViNext) -/* 48f7c: 8c620000 */ lw $v0,0x0($v1) -/* 48f80: 8c4f000c */ lw $t7,0xc($v0) -/* 48f84: 35f80008 */ ori $t8,$t7,0x8 -/* 48f88: ac58000c */ sw $t8,0xc($v0) -.L00048f8c: -/* 48f8c: 3c038006 */ lui $v1,%hi(__osViNext) -/* 48f90: 13200006 */ beqz $t9,.L00048fac -/* 48f94: 24630914 */ addiu $v1,$v1,%lo(__osViNext) -/* 48f98: 8c620000 */ lw $v0,0x0($v1) -/* 48f9c: 2401fff7 */ addiu $at,$zero,-9 -/* 48fa0: 8c48000c */ lw $t0,0xc($v0) -/* 48fa4: 01014824 */ and $t1,$t0,$at -/* 48fa8: ac49000c */ sw $t1,0xc($v0) -.L00048fac: -/* 48fac: 308a0004 */ andi $t2,$a0,0x4 -/* 48fb0: 11400005 */ beqz $t2,.L00048fc8 -/* 48fb4: 308d0008 */ andi $t5,$a0,0x8 -/* 48fb8: 8c620000 */ lw $v0,0x0($v1) -/* 48fbc: 8c4b000c */ lw $t3,0xc($v0) -/* 48fc0: 356c0004 */ ori $t4,$t3,0x4 -/* 48fc4: ac4c000c */ sw $t4,0xc($v0) -.L00048fc8: -/* 48fc8: 11a00006 */ beqz $t5,.L00048fe4 -/* 48fcc: 30980010 */ andi $t8,$a0,0x10 -/* 48fd0: 8c620000 */ lw $v0,0x0($v1) -/* 48fd4: 2401fffb */ addiu $at,$zero,-5 -/* 48fd8: 8c4e000c */ lw $t6,0xc($v0) -/* 48fdc: 01c17824 */ and $t7,$t6,$at -/* 48fe0: ac4f000c */ sw $t7,0xc($v0) -.L00048fe4: -/* 48fe4: 13000005 */ beqz $t8,.L00048ffc -/* 48fe8: 30890020 */ andi $t1,$a0,0x20 -/* 48fec: 8c620000 */ lw $v0,0x0($v1) -/* 48ff0: 8c59000c */ lw $t9,0xc($v0) -/* 48ff4: 37280010 */ ori $t0,$t9,0x10 -/* 48ff8: ac48000c */ sw $t0,0xc($v0) -.L00048ffc: -/* 48ffc: 11200006 */ beqz $t1,.L00049018 -/* 49000: 308c0040 */ andi $t4,$a0,0x40 -/* 49004: 8c620000 */ lw $v0,0x0($v1) -/* 49008: 2401ffef */ addiu $at,$zero,-17 -/* 4900c: 8c4a000c */ lw $t2,0xc($v0) -/* 49010: 01415824 */ and $t3,$t2,$at -/* 49014: ac4b000c */ sw $t3,0xc($v0) -.L00049018: -/* 49018: 1180000b */ beqz $t4,.L00049048 -/* 4901c: 30990080 */ andi $t9,$a0,0x80 -/* 49020: 8c620000 */ lw $v0,0x0($v1) -/* 49024: 3c010001 */ lui $at,0x1 -/* 49028: 8c4d000c */ lw $t5,0xc($v0) -/* 4902c: 01a17025 */ or $t6,$t5,$at -/* 49030: ac4e000c */ sw $t6,0xc($v0) -/* 49034: 8c620000 */ lw $v0,0x0($v1) -/* 49038: 2401fcff */ addiu $at,$zero,-769 -/* 4903c: 8c4f000c */ lw $t7,0xc($v0) -/* 49040: 01e1c024 */ and $t8,$t7,$at -/* 49044: ac58000c */ sw $t8,0xc($v0) -.L00049048: -/* 49048: 5320000f */ beqzl $t9,.L00049088 -/* 4904c: 8c620000 */ lw $v0,0x0($v1) -/* 49050: 8c620000 */ lw $v0,0x0($v1) -/* 49054: 3c01fffe */ lui $at,0xfffe -/* 49058: 3421ffff */ ori $at,$at,0xffff -/* 4905c: 8c48000c */ lw $t0,0xc($v0) -/* 49060: 01014824 */ and $t1,$t0,$at -/* 49064: ac49000c */ sw $t1,0xc($v0) -/* 49068: 8c620000 */ lw $v0,0x0($v1) -/* 4906c: 8c4b0008 */ lw $t3,0x8($v0) -/* 49070: 8c4a000c */ lw $t2,0xc($v0) -/* 49074: 8d6c0004 */ lw $t4,0x4($t3) -/* 49078: 318d0300 */ andi $t5,$t4,0x300 -/* 4907c: 014d7025 */ or $t6,$t2,$t5 -/* 49080: ac4e000c */ sw $t6,0xc($v0) -/* 49084: 8c620000 */ lw $v0,0x0($v1) -.L00049088: -/* 49088: 00a02025 */ or $a0,$a1,$zero -/* 4908c: 944f0000 */ lhu $t7,0x0($v0) -/* 49090: 35f80008 */ ori $t8,$t7,0x8 -/* 49094: 0c012588 */ jal __osRestoreInt -/* 49098: a4580000 */ sh $t8,0x0($v0) -/* 4909c: 8fbf0014 */ lw $ra,0x14($sp) -/* 490a0: 27bd0018 */ addiu $sp,$sp,0x18 -/* 490a4: 03e00008 */ jr $ra -/* 490a8: 00000000 */ nop -/* 490ac: 00000000 */ nop -); \ No newline at end of file diff --git a/src/lib/ultra/io/visetspecial.c b/src/lib/ultra/io/visetspecial.c new file mode 100644 index 000000000..1d01982ad --- /dev/null +++ b/src/lib/ultra/io/visetspecial.c @@ -0,0 +1,47 @@ +#include +#include "game/data/data_000000.h" + +void osViSetSpecialFeatures(u32 func) +{ + register u32 saveMask; + + saveMask = __osDisableInt(); + + if (func & OS_VI_GAMMA_ON) { + __osViNext->control |= VI_CTRL_GAMMA_ON; + } + + if (func & OS_VI_GAMMA_OFF) { + __osViNext->control &= ~VI_CTRL_GAMMA_ON; + } + + if (func & OS_VI_GAMMA_DITHER_ON) { + __osViNext->control |= VI_CTRL_GAMMA_DITHER_ON; + } + + if (func & OS_VI_GAMMA_DITHER_OFF) { + __osViNext->control &= ~VI_CTRL_GAMMA_DITHER_ON; + } + + if (func & OS_VI_DIVOT_ON) { + __osViNext->control |= VI_CTRL_DIVOT_ON; + } + + if (func & OS_VI_DIVOT_OFF) { + __osViNext->control &= ~VI_CTRL_DIVOT_ON; + } + + if (func & OS_VI_DITHER_FILTER_ON) { + __osViNext->control |= VI_CTRL_DITHER_FILTER_ON; + __osViNext->control &= ~VI_CTRL_ANTIALIAS_MASK; + } + + if (func & OS_VI_DITHER_FILTER_OFF) { + __osViNext->control &= ~VI_CTRL_DITHER_FILTER_ON; + __osViNext->control |= __osViNext->modep->comRegs.ctrl & VI_CTRL_ANTIALIAS_MASK; + } + + __osViNext->state |= VI_STATE_08; + + __osRestoreInt(saveMask); +}