From a574789a04ddd614c4ee7474e2fac8030ac255d0 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Jan 2021 00:11:28 +1000 Subject: [PATCH] Decompile osViSetMode --- Makefile | 1 + ld/libfiles.inc | 1 + src/boot/reset.c | 2 +- src/boot/sched.c | 2 +- src/include/lib/lib_48cd0.h | 1 - src/lib/lib_09660.c | 2 +- src/lib/lib_48cd0.c | 32 -------------------------------- src/lib/ultra/io/visetmode.c | 15 +++++++++++++++ 8 files changed, 20 insertions(+), 36 deletions(-) create mode 100644 src/lib/ultra/io/visetmode.c diff --git a/Makefile b/Makefile index 99c9916c2..dc812347b 100644 --- a/Makefile +++ b/Makefile @@ -78,6 +78,7 @@ $(B_DIR)/lib/ultra/io/vi.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 +$(B_DIR)/lib/ultra/io/visetmode.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/visetxscale.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/io/visetyscale.o: OPT_LVL := -O1 $(B_DIR)/lib/ultra/os/createmesgqueue.o: OPT_LVL := -O1 diff --git a/ld/libfiles.inc b/ld/libfiles.inc index cd0b9e07c..377ac5826 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/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); \ diff --git a/src/boot/reset.c b/src/boot/reset.c index 096c2f244..ebe0e27b0 100644 --- a/src/boot/reset.c +++ b/src/boot/reset.c @@ -38,7 +38,7 @@ glabel resetproc /* 2e70: 2484f7b0 */ addiu $a0,$a0,%lo(osViModeTable+0xa0) .L00002e74: /* 2e74: ac82002c */ sw $v0,0x2c($a0) -/* 2e78: 0c012354 */ jal func00048d50 +/* 2e78: 0c012354 */ jal osViSetMode /* 2e7c: ac820040 */ sw $v0,0x40($a0) /* 2e80: 0c012338 */ jal func00048ce0 /* 2e84: 24040001 */ addiu $a0,$zero,0x1 diff --git a/src/boot/sched.c b/src/boot/sched.c index c1648200c..98fcd08c6 100644 --- a/src/boot/sched.c +++ b/src/boot/sched.c @@ -499,7 +499,7 @@ s32 __scTaskComplete(OSSched *sc, OSScTask *t) osSetIntMask(mask); - func00048d50(var8008dd60[1 - var8005ce74]); + osViSetMode(var8008dd60[1 - var8005ce74]); func00048ce0(var8005ce90); osViSetXScale(var8005ce78[1 - var8005ce74]); osViSetYScale(var8005ce80[1 - var8005ce74]); diff --git a/src/include/lib/lib_48cd0.h b/src/include/lib/lib_48cd0.h index afd419bd4..06ecfaabf 100644 --- a/src/include/lib/lib_48cd0.h +++ b/src/include/lib/lib_48cd0.h @@ -5,6 +5,5 @@ u32 func00048cd0(void); void func00048ce0(u8 arg0); -void func00048d50(OSViMode *mode); #endif diff --git a/src/lib/lib_09660.c b/src/lib/lib_09660.c index e59d9c6f6..8aeee3206 100644 --- a/src/lib/lib_09660.c +++ b/src/lib/lib_09660.c @@ -781,7 +781,7 @@ glabel func00009ed4 /* 9fcc: 00084880 */ sll $t1,$t0,0x2 /* 9fd0: 0009c823 */ negu $t9,$t1 /* 9fd4: 00992021 */ addu $a0,$a0,$t9 -/* 9fd8: 0c012354 */ jal func00048d50 +/* 9fd8: 0c012354 */ jal osViSetMode /* 9fdc: 8c84dd64 */ lw $a0,%lo(var8008dd60+0x4)($a0) /* 9fe0: 3c048006 */ lui $a0,%hi(var8005ce90+0x3) /* 9fe4: 0c012338 */ jal func00048ce0 diff --git a/src/lib/lib_48cd0.c b/src/lib/lib_48cd0.c index ce9ce2e40..501115481 100644 --- a/src/lib/lib_48cd0.c +++ b/src/lib/lib_48cd0.c @@ -51,35 +51,3 @@ glabel func00048ce0 /* 48d48: 03e00008 */ jr $ra /* 48d4c: 00000000 */ nop ); - -GLOBAL_ASM( -glabel func00048d50 -/* 48d50: 27bdffd8 */ addiu $sp,$sp,-40 -/* 48d54: afbf001c */ sw $ra,0x1c($sp) -/* 48d58: afa40028 */ sw $a0,0x28($sp) -/* 48d5c: 0c01256c */ jal __osDisableInt -/* 48d60: afb00018 */ sw $s0,0x18($sp) -/* 48d64: 3c0f8006 */ lui $t7,%hi(__osViNext) -/* 48d68: 8def0914 */ lw $t7,%lo(__osViNext)($t7) -/* 48d6c: 8fae0028 */ lw $t6,0x28($sp) -/* 48d70: 3c198006 */ lui $t9,%hi(__osViNext) -/* 48d74: 24180001 */ addiu $t8,$zero,0x1 -/* 48d78: adee0008 */ sw $t6,0x8($t7) -/* 48d7c: 8f390914 */ lw $t9,%lo(__osViNext)($t9) -/* 48d80: 3c088006 */ lui $t0,%hi(__osViNext) -/* 48d84: 00408025 */ or $s0,$v0,$zero -/* 48d88: a7380000 */ sh $t8,0x0($t9) -/* 48d8c: 8d080914 */ lw $t0,%lo(__osViNext)($t0) -/* 48d90: 02002025 */ or $a0,$s0,$zero -/* 48d94: 8d090008 */ lw $t1,0x8($t0) -/* 48d98: 8d2a0004 */ lw $t2,0x4($t1) -/* 48d9c: 0c012588 */ jal __osRestoreInt -/* 48da0: ad0a000c */ sw $t2,0xc($t0) -/* 48da4: 8fbf001c */ lw $ra,0x1c($sp) -/* 48da8: 8fb00018 */ lw $s0,0x18($sp) -/* 48dac: 27bd0028 */ addiu $sp,$sp,0x28 -/* 48db0: 03e00008 */ jr $ra -/* 48db4: 00000000 */ nop -/* 48db8: 00000000 */ nop -/* 48dbc: 00000000 */ nop -); \ No newline at end of file diff --git a/src/lib/ultra/io/visetmode.c b/src/lib/ultra/io/visetmode.c new file mode 100644 index 000000000..d9d17d31f --- /dev/null +++ b/src/lib/ultra/io/visetmode.c @@ -0,0 +1,15 @@ +#include +#include "game/data/data_000000.h" + +void osViSetMode(OSViMode *modep) +{ + register u32 saveMask; + + saveMask = __osDisableInt(); + + __osViNext->modep = modep; + __osViNext->state = VI_STATE_01; + __osViNext->control = __osViNext->modep->comRegs.ctrl; + + __osRestoreInt(saveMask); +}