From 27943128e941b6e8deed23a3589ebe6e551b0114 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Jan 2021 00:14:34 +1000 Subject: [PATCH] Decompile osViBlack --- Makefile | 1 + ld/libfiles.inc | 1 + src/boot/reset.c | 2 +- src/boot/sched.c | 4 ++-- src/include/lib/lib_48cd0.h | 1 - src/lib/lib_09660.c | 4 ++-- src/lib/lib_48cd0.c | 34 ---------------------------------- src/lib/ultra/io/viblack.c | 15 +++++++++++++++ 8 files changed, 22 insertions(+), 40 deletions(-) create mode 100644 src/lib/ultra/io/viblack.c diff --git a/Makefile b/Makefile index dc812347b..8ff570569 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,7 @@ $(B_DIR)/lib/ultra/io/sp.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/spsetpc.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/sptaskyielded.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/vi.o: OPT_LVL := -O1 +$(B_DIR)/lib/ultra/io/viblack.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/vigetcurrframebuf.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/vigetnextframebuf.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/visetevent.o: OPT_LVL := -O1 diff --git a/ld/libfiles.inc b/ld/libfiles.inc index 377ac5826..b8af0b1a6 100644 --- a/ld/libfiles.inc +++ b/ld/libfiles.inc @@ -103,6 +103,7 @@ build/ROMID/lib/ultra/io/sptaskyielded.o (section); \ build/ROMID/lib/ultra/io/dpctr.o (section); \ build/ROMID/lib/lib_48cd0.o (section); \ + build/ROMID/lib/ultra/io/viblack.o (section); \ build/ROMID/lib/ultra/io/visetmode.o (section); \ build/ROMID/lib/ultra/io/visetxscale.o (section); \ build/ROMID/lib/ultra/io/visetyscale.o (section); \ diff --git a/src/boot/reset.c b/src/boot/reset.c index ebe0e27b0..393920b8f 100644 --- a/src/boot/reset.c +++ b/src/boot/reset.c @@ -40,7 +40,7 @@ glabel resetproc /* 2e74: ac82002c */ sw $v0,0x2c($a0) /* 2e78: 0c012354 */ jal osViSetMode /* 2e7c: ac820040 */ sw $v0,0x40($a0) -/* 2e80: 0c012338 */ jal func00048ce0 +/* 2e80: 0c012338 */ jal osViBlack /* 2e84: 24040001 */ addiu $a0,$zero,0x1 /* 2e88: 0c012448 */ jal func00049120 /* 2e8c: 00000000 */ nop diff --git a/src/boot/sched.c b/src/boot/sched.c index 98fcd08c6..21048634f 100644 --- a/src/boot/sched.c +++ b/src/boot/sched.c @@ -480,7 +480,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t) && (t->flags & OS_SC_SWAPBUFFER) && (t->flags & OS_SC_LAST_TASK)) { if (var8005cec8) { - func00048ce0(0); + osViBlack(0); var8005cec8 = 0; } @@ -500,7 +500,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t) osSetIntMask(mask); osViSetMode(var8008dd60[1 - var8005ce74]); - func00048ce0(var8005ce90); + osViBlack(var8005ce90); osViSetXScale(var8005ce78[1 - var8005ce74]); osViSetYScale(var8005ce80[1 - var8005ce74]); func00048f50(0x42); diff --git a/src/include/lib/lib_48cd0.h b/src/include/lib/lib_48cd0.h index 06ecfaabf..6a21f9fc4 100644 --- a/src/include/lib/lib_48cd0.h +++ b/src/include/lib/lib_48cd0.h @@ -4,6 +4,5 @@ #include "types.h" u32 func00048cd0(void); -void func00048ce0(u8 arg0); #endif diff --git a/src/lib/lib_09660.c b/src/lib/lib_09660.c index 8aeee3206..2f3bd3e0b 100644 --- a/src/lib/lib_09660.c +++ b/src/lib/lib_09660.c @@ -784,7 +784,7 @@ glabel func00009ed4 /* 9fd8: 0c012354 */ jal osViSetMode /* 9fdc: 8c84dd64 */ lw $a0,%lo(var8008dd60+0x4)($a0) /* 9fe0: 3c048006 */ lui $a0,%hi(var8005ce90+0x3) -/* 9fe4: 0c012338 */ jal func00048ce0 +/* 9fe4: 0c012338 */ jal osViBlack /* 9fe8: 9084ce93 */ lbu $a0,%lo(var8005ce90+0x3)($a0) /* 9fec: 3c0a8006 */ lui $t2,%hi(var8005ce74) /* 9ff0: 8d4ace74 */ lw $t2,%lo(var8005ce74)($t2) @@ -836,7 +836,7 @@ glabel func0000a044 /* a094: 44816000 */ mtc1 $at,$f12 /* a098: 0c0123bc */ jal osViSetYScale /* a09c: 00000000 */ nop -/* a0a0: 0c012338 */ jal func00048ce0 +/* a0a0: 0c012338 */ jal osViBlack /* a0a4: 24040001 */ addiu $a0,$zero,0x1 /* a0a8: 3c098006 */ lui $t1,%hi(g_ViData) /* a0ac: 8d29d594 */ lw $t1,%lo(g_ViData)($t1) diff --git a/src/lib/lib_48cd0.c b/src/lib/lib_48cd0.c index 501115481..d1653247f 100644 --- a/src/lib/lib_48cd0.c +++ b/src/lib/lib_48cd0.c @@ -17,37 +17,3 @@ glabel func00048cd0 /* 48cd8: 8dc2000c */ lw $v0,0xc($t6) /* 48cdc: 00000000 */ nop ); - -GLOBAL_ASM( -glabel func00048ce0 -/* 48ce0: 27bdffd8 */ addiu $sp,$sp,-40 -/* 48ce4: afbf001c */ sw $ra,0x1c($sp) -/* 48ce8: afa40028 */ sw $a0,0x28($sp) -/* 48cec: 0c01256c */ jal __osDisableInt -/* 48cf0: afb00018 */ sw $s0,0x18($sp) -/* 48cf4: 93ae002b */ lbu $t6,0x2b($sp) -/* 48cf8: 00408025 */ or $s0,$v0,$zero -/* 48cfc: 11c00007 */ beqz $t6,.L00048d1c -/* 48d00: 00000000 */ nop -/* 48d04: 3c0f8006 */ lui $t7,%hi(__osViNext) -/* 48d08: 8def0914 */ lw $t7,%lo(__osViNext)($t7) -/* 48d0c: 95f80000 */ lhu $t8,0x0($t7) -/* 48d10: 37190020 */ ori $t9,$t8,0x20 -/* 48d14: 10000007 */ b .L00048d34 -/* 48d18: a5f90000 */ sh $t9,0x0($t7) -.L00048d1c: -/* 48d1c: 3c088006 */ lui $t0,%hi(__osViNext) -/* 48d20: 8d080914 */ lw $t0,%lo(__osViNext)($t0) -/* 48d24: 2401ffdf */ addiu $at,$zero,-33 -/* 48d28: 95090000 */ lhu $t1,0x0($t0) -/* 48d2c: 01215024 */ and $t2,$t1,$at -/* 48d30: a50a0000 */ sh $t2,0x0($t0) -.L00048d34: -/* 48d34: 0c012588 */ jal __osRestoreInt -/* 48d38: 02002025 */ or $a0,$s0,$zero -/* 48d3c: 8fbf001c */ lw $ra,0x1c($sp) -/* 48d40: 8fb00018 */ lw $s0,0x18($sp) -/* 48d44: 27bd0028 */ addiu $sp,$sp,0x28 -/* 48d48: 03e00008 */ jr $ra -/* 48d4c: 00000000 */ nop -); diff --git a/src/lib/ultra/io/viblack.c b/src/lib/ultra/io/viblack.c new file mode 100644 index 000000000..8f8042ce8 --- /dev/null +++ b/src/lib/ultra/io/viblack.c @@ -0,0 +1,15 @@ +#include +#include "game/data/data_000000.h" + +void osViBlack(u8 active) +{ + register u32 saveMask = __osDisableInt(); + + if (active) { + __osViNext->state |= VI_STATE_BLACK; + } else { + __osViNext->state &= ~VI_STATE_BLACK; + } + + __osRestoreInt(saveMask); +}