Decompile vi00009ed4

This commit is contained in:
Ryan Dwyer
2021-10-09 21:32:23 +10:00
parent 715806481e
commit c760b45a6d
2 changed files with 43 additions and 221 deletions
+1 -1
View File
@@ -7067,7 +7067,7 @@ struct var80095210 {
struct rdptask {
OSScTask sctask;
u16 *framebuffer;
u8 *framebuffer;
u32 unk5c;
};
+42 -220
View File
@@ -16,6 +16,14 @@
#include "data.h"
#include "types.h"
#define TO_U16_A(x) ((u16)(x))
#define TO_U16_B(x) (x & 0xffff)
#define TO_U16_C(x) ((u16)(x & 0xffff))
#define TO_U16_M(x) ((x) % 0xffff)
#define ADD_LOW_AND_HI_16_TRUNCATE(x32, add16) ((TO_U16_B(TO_U16_A((x32) >> 16) + (add16)) << 16) | TO_U16_B(TO_U16_A(x32) + (add16)))
#define ADD_LOW_AND_HI_16_MOD(x32, add16) ((TO_U16_M(TO_U16_B((x32) >> 16) + (add16)) << 16) | TO_U16_M(TO_U16_A(x32) + (add16)))
Mtxf var80092830;
Mtx *var80092870;
u16 var80092874;
@@ -261,229 +269,43 @@ void viBlack(bool black)
g_ViUnblackTimer = black;
}
void vi00009ed4(void)
{
s32 prevmask;
s32 value;
s32 tmp;
if (var8005ce9c != 0) {
var8005ce9c--;
if (var8005ce9c == 0) {
var8005ce98 = 0;
}
}
value = var8005ce94 * var8005ce98;
var8005ce94 = -var8005ce94;
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel vi00009ed4
/* 9ed4: 3c038006 */ lui $v1,%hi(var8005ce9c)
/* 9ed8: 2463ce9c */ addiu $v1,$v1,%lo(var8005ce9c)
/* 9edc: 8c620000 */ lw $v0,0x0($v1)
/* 9ee0: 27bdffe0 */ addiu $sp,$sp,-32
/* 9ee4: afbf0014 */ sw $ra,0x14($sp)
/* 9ee8: 10400006 */ beqz $v0,.L00009f04
/* 9eec: 3c188006 */ lui $t8,%hi(var8005ce98)
/* 9ef0: 244effff */ addiu $t6,$v0,-1
/* 9ef4: 15c00003 */ bnez $t6,.L00009f04
/* 9ef8: ac6e0000 */ sw $t6,0x0($v1)
/* 9efc: 3c018006 */ lui $at,%hi(var8005ce98)
/* 9f00: ac20ce98 */ sw $zero,%lo(var8005ce98)($at)
.L00009f04:
/* 9f04: 3c038006 */ lui $v1,%hi(var8005ce94)
/* 9f08: 2463ce94 */ addiu $v1,$v1,%lo(var8005ce94)
/* 9f0c: 8c620000 */ lw $v0,0x0($v1)
/* 9f10: 8f18ce98 */ lw $t8,%lo(var8005ce98)($t8)
/* 9f14: 24040001 */ addiu $a0,$zero,0x1
/* 9f18: 0002c823 */ negu $t9,$v0
/* 9f1c: 00580019 */ multu $v0,$t8
/* 9f20: ac790000 */ sw $t9,0x0($v1)
/* 9f24: 00002812 */ mflo $a1
/* 9f28: afa50018 */ sw $a1,0x18($sp)
/* 9f2c: 0c012194 */ jal osSetIntMask
/* 9f30: 00000000 */ nop
/* 9f34: 3c078006 */ lui $a3,%hi(var8005ce74)
/* 9f38: 3c038009 */ lui $v1,%hi(var8008de0c)
/* 9f3c: 8c6dde0c */ lw $t5,%lo(var8008de0c)($v1)
/* 9f40: 24e7ce74 */ addiu $a3,$a3,%lo(var8005ce74)
/* 9f44: 8fa50018 */ lw $a1,0x18($sp)
/* 9f48: 8cf90000 */ lw $t9,0x0($a3)
/* 9f4c: 000d4c03 */ sra $t1,$t5,0x10
/* 9f50: 3c068009 */ lui $a2,%hi(var8008dd60+0x4)
/* 9f54: 01255821 */ addu $t3,$t1,$a1
/* 9f58: 00194080 */ sll $t0,$t9,0x2
/* 9f5c: 24c6dd64 */ addiu $a2,$a2,%lo(var8008dd60+0x4)
/* 9f60: 00084823 */ negu $t1,$t0
/* 9f64: 00c95021 */ addu $t2,$a2,$t1
/* 9f68: 000b6400 */ sll $t4,$t3,0x10
/* 9f6c: 8d4b0000 */ lw $t3,0x0($t2)
/* 9f70: 01a57021 */ addu $t6,$t5,$a1
/* 9f74: 31cfffff */ andi $t7,$t6,0xffff
/* 9f78: 018fc025 */ or $t8,$t4,$t7
/* 9f7c: 3c038009 */ lui $v1,%hi(var8008de10)
/* 9f80: ad780030 */ sw $t8,0x30($t3)
/* 9f84: 8c68de10 */ lw $t0,%lo(var8008de10)($v1)
/* 9f88: 8ceb0000 */ lw $t3,0x0($a3)
/* 9f8c: 00402025 */ or $a0,$v0,$zero
/* 9f90: 00087403 */ sra $t6,$t0,0x10
/* 9f94: 01c57821 */ addu $t7,$t6,$a1
/* 9f98: 000b6880 */ sll $t5,$t3,0x2
/* 9f9c: 000d7023 */ negu $t6,$t5
/* 9fa0: 00ce6021 */ addu $t4,$a2,$t6
/* 9fa4: 000fcc00 */ sll $t9,$t7,0x10
/* 9fa8: 01054821 */ addu $t1,$t0,$a1
/* 9fac: 8d8f0000 */ lw $t7,0x0($t4)
/* 9fb0: 312affff */ andi $t2,$t1,0xffff
/* 9fb4: 032ac025 */ or $t8,$t9,$t2
/* 9fb8: 0c012194 */ jal osSetIntMask
/* 9fbc: adf80044 */ sw $t8,0x44($t7)
/* 9fc0: 3c088006 */ lui $t0,%hi(var8005ce74)
/* 9fc4: 8d08ce74 */ lw $t0,%lo(var8005ce74)($t0)
/* 9fc8: 3c048009 */ lui $a0,%hi(var8008dd60+0x4)
/* 9fcc: 00084880 */ sll $t1,$t0,0x2
/* 9fd0: 0009c823 */ negu $t9,$t1
/* 9fd4: 00992021 */ addu $a0,$a0,$t9
/* 9fd8: 0c012354 */ jal osViSetMode
/* 9fdc: 8c84dd64 */ lw $a0,%lo(var8008dd60+0x4)($a0)
/* 9fe0: 3c048006 */ lui $a0,%hi(g_ViUnblackTimer+0x3)
/* 9fe4: 0c012338 */ jal osViBlack
/* 9fe8: 9084ce93 */ lbu $a0,%lo(g_ViUnblackTimer+0x3)($a0)
/* 9fec: 3c0a8006 */ lui $t2,%hi(var8005ce74)
/* 9ff0: 8d4ace74 */ lw $t2,%lo(var8005ce74)($t2)
/* 9ff4: 3c018006 */ lui $at,%hi(var8005ce78+0x4)
/* 9ff8: 000a5880 */ sll $t3,$t2,0x2
/* 9ffc: 000b6823 */ negu $t5,$t3
/* a000: 002d0821 */ addu $at,$at,$t5
/* a004: 0c012370 */ jal osViSetXScale
/* a008: c42cce7c */ lwc1 $f12,%lo(var8005ce78+0x4)($at)
/* a00c: 3c0e8006 */ lui $t6,%hi(var8005ce74)
/* a010: 8dcece74 */ lw $t6,%lo(var8005ce74)($t6)
/* a014: 3c018006 */ lui $at,%hi(var8005ce80+0x4)
/* a018: 000e6080 */ sll $t4,$t6,0x2
/* a01c: 000cc023 */ negu $t8,$t4
/* a020: 00380821 */ addu $at,$at,$t8
/* a024: 0c0123bc */ jal osViSetYScale
/* a028: c42cce84 */ lwc1 $f12,%lo(var8005ce80+0x4)($at)
/* a02c: 0c0123d4 */ jal osViSetSpecialFeatures
/* a030: 24040042 */ addiu $a0,$zero,0x42
/* a034: 8fbf0014 */ lw $ra,0x14($sp)
/* a038: 27bd0020 */ addiu $sp,$sp,0x20
/* a03c: 03e00008 */ jr $ra
/* a040: 00000000 */ nop
);
#else
GLOBAL_ASM(
glabel vi00009ed4
/* a078: 3c038006 */ lui $v1,0x8006
/* a07c: 2463e61c */ addiu $v1,$v1,-6628
/* a080: 8c620000 */ lw $v0,0x0($v1)
/* a084: 27bdffe8 */ addiu $sp,$sp,-24
/* a088: afbf0014 */ sw $ra,0x14($sp)
/* a08c: 10400006 */ beqz $v0,.NB0000a0a8
/* a090: 3c088006 */ lui $t0,0x8006
/* a094: 244effff */ addiu $t6,$v0,-1
/* a098: 15c00003 */ bnez $t6,.NB0000a0a8
/* a09c: ac6e0000 */ sw $t6,0x0($v1)
/* a0a0: 3c018006 */ lui $at,0x8006
/* a0a4: ac20e618 */ sw $zero,-0x19e8($at)
.NB0000a0a8:
/* a0a8: 2508e614 */ addiu $t0,$t0,-6636
/* a0ac: 3c188006 */ lui $t8,0x8006
/* a0b0: 8f18e618 */ lw $t8,-0x19e8($t8)
/* a0b4: 8d050000 */ lw $a1,0x0($t0)
/* a0b8: 3c028009 */ lui $v0,0x8009
/* a0bc: 3c078006 */ lui $a3,0x8006
/* a0c0: 00b80019 */ multu $a1,$t8
/* a0c4: 0005c823 */ negu $t9,$a1
/* a0c8: ad190000 */ sw $t9,0x0($t0)
/* a0cc: 8c4e043c */ lw $t6,0x43c($v0)
/* a0d0: 24e7e5f4 */ addiu $a3,$a3,-6668
/* a0d4: 8ce90000 */ lw $t1,0x0($a3)
/* a0d8: 000e5403 */ sra $t2,$t6,0x10
/* a0dc: 3c068009 */ lui $a2,0x8009
/* a0e0: 24c60394 */ addiu $a2,$a2,0x394
/* a0e4: 3c028009 */ lui $v0,0x8009
/* a0e8: 00001812 */ mflo $v1
/* a0ec: 01436021 */ addu $t4,$t2,$v1
/* a0f0: 00095080 */ sll $t2,$t1,0x2
/* a0f4: 000a5823 */ negu $t3,$t2
/* a0f8: 000c6c00 */ sll $t5,$t4,0x10
/* a0fc: 00cb6021 */ addu $t4,$a2,$t3
/* a100: 01c37821 */ addu $t7,$t6,$v1
/* a104: 8d8e0000 */ lw $t6,0x0($t4)
/* a108: 31f8ffff */ andi $t8,$t7,0xffff
/* a10c: 01b8c825 */ or $t9,$t5,$t8
/* a110: add90030 */ sw $t9,0x30($t6)
/* a114: 8c4b0440 */ lw $t3,0x440($v0)
/* a118: 8cef0000 */ lw $t7,0x0($a3)
/* a11c: 000b6c03 */ sra $t5,$t3,0x10
/* a120: 01a34821 */ addu $t1,$t5,$v1
/* a124: 000f6880 */ sll $t5,$t7,0x2
/* a128: 000dc023 */ negu $t8,$t5
/* a12c: 00095400 */ sll $t2,$t1,0x10
/* a130: 00d84821 */ addu $t1,$a2,$t8
/* a134: 01636021 */ addu $t4,$t3,$v1
/* a138: 8d2b0000 */ lw $t3,0x0($t1)
/* a13c: 3199ffff */ andi $t9,$t4,0xffff
/* a140: 01597025 */ or $t6,$t2,$t9
/* a144: ad6e0044 */ sw $t6,0x44($t3)
/* a148: 8cec0000 */ lw $t4,0x0($a3)
/* a14c: 000c5080 */ sll $t2,$t4,0x2
/* a150: 000ac823 */ negu $t9,$t2
/* a154: 00d97821 */ addu $t7,$a2,$t9
/* a158: 0c012848 */ jal osViSetMode
/* a15c: 8de40000 */ lw $a0,0x0($t7)
/* a160: 3c048006 */ lui $a0,0x8006
/* a164: 0c01282c */ jal osViBlack
/* a168: 9084e613 */ lbu $a0,-0x19ed($a0)
/* a16c: 3c0d8006 */ lui $t5,0x8006
/* a170: 8dade5f4 */ lw $t5,-0x1a0c($t5)
/* a174: 3c018006 */ lui $at,0x8006
/* a178: 000dc080 */ sll $t8,$t5,0x2
/* a17c: 00184823 */ negu $t1,$t8
/* a180: 00290821 */ addu $at,$at,$t1
/* a184: 0c012864 */ jal osViSetXScale
/* a188: c42ce5fc */ lwc1 $f12,-0x1a04($at)
/* a18c: 3c0e8006 */ lui $t6,0x8006
/* a190: 8dcee5f4 */ lw $t6,-0x1a0c($t6)
/* a194: 3c018006 */ lui $at,0x8006
/* a198: 000e5880 */ sll $t3,$t6,0x2
/* a19c: 000b6023 */ negu $t4,$t3
/* a1a0: 002c0821 */ addu $at,$at,$t4
/* a1a4: 0c0128b0 */ jal osViSetYScale
/* a1a8: c42ce604 */ lwc1 $f12,-0x19fc($at)
/* a1ac: 0c0128c8 */ jal osViSetSpecialFeatures
/* a1b0: 24040042 */ addiu $a0,$zero,0x42
/* a1b4: 8fbf0014 */ lw $ra,0x14($sp)
/* a1b8: 27bd0018 */ addiu $sp,$sp,0x18
/* a1bc: 03e00008 */ jr $ra
/* a1c0: 00000000 */ sll $zero,$zero,0x0
);
prevmask = osSetIntMask(1);
#endif
// Mismatch: regalloc
//void vi00009ed4(void)
//{
// s32 prevmask;
// s32 value;
//
// if (var8005ce9c != 0) {
// var8005ce9c--;
//
// if (var8005ce9c == 0) {
// var8005ce98 = 0;
// }
// }
//
// value = var8005ce94 * var8005ce98;
// var8005ce94 = -var8005ce94;
//
//#if VERSION >= VERSION_NTSC_1_0
// prevmask = osSetIntMask(1);
//#endif
//
// var8008dd60[1 - var8005ce74]->fldRegs[0].vStart =
// ((var8008de0c >> 16) + value) << 16 | var8008de0c + value & 0xffff;
// var8008dd60[1 - var8005ce74]->fldRegs[1].vStart =
// ((var8008de10 >> 16) + value) << 16 | var8008de10 + value & 0xffff;
//
//#if VERSION >= VERSION_NTSC_1_0
// osSetIntMask(prevmask);
//#endif
//
// osViSetMode(var8008dd60[1 - var8005ce74]);
// osViBlack(g_ViUnblackTimer);
// osViSetXScale(var8005ce78[1 - var8005ce74]);
// osViSetYScale(var8005ce80[1 - var8005ce74]);
// osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON);
//}
tmp = var8008de0c;
var8008dd60[1 - var8005ce74]->fldRegs[0].vStart = ADD_LOW_AND_HI_16_TRUNCATE(tmp, value);
tmp = var8008de10;
var8008dd60[1 - var8005ce74]->fldRegs[1].vStart = ADD_LOW_AND_HI_16_TRUNCATE(tmp, value);
#if VERSION >= VERSION_NTSC_1_0
osSetIntMask(prevmask);
#endif
osViSetMode(var8008dd60[1 - var8005ce74]);
osViBlack(g_ViUnblackTimer);
osViSetXScale(var8005ce78[1 - var8005ce74]);
osViSetYScale(var8005ce80[1 - var8005ce74]);
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_DITHER_FILTER_ON);
}
#if VERSION >= VERSION_PAL_FINAL
GLOBAL_ASM(