From b83e7292903ff17ad2f79b74ed74ada105778c53 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 8 Oct 2021 18:46:49 +1000 Subject: [PATCH] Decompile vi00009b50 --- src/game/bondview.c | 36 +++++----- src/include/game/bondview.h | 2 +- src/include/lib/lib_09a80.h | 6 +- src/include/types.h | 2 +- src/lib/lib_09a80.c | 134 ++++++++---------------------------- 5 files changed, 53 insertions(+), 127 deletions(-) diff --git a/src/game/bondview.c b/src/game/bondview.c index cffb28b40..5ca81b088 100644 --- a/src/game/bondview.c +++ b/src/game/bondview.c @@ -513,7 +513,7 @@ Gfx *bviewPrepareStaticI8(Gfx *gdl, u32 colour, u32 alpha) Gfx *bviewRenderMotionBlur(Gfx *gdl, u32 colour, u32 alpha) { - void *unk28 = vi2GetUnk28(); + u8 *fb = vi2GetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); f32 fxxx; @@ -553,7 +553,7 @@ Gfx *bviewRenderMotionBlur(Gfx *gdl, u32 colour, u32 alpha) gdl = bviewPrepareStaticRgba16(gdl, colour, newalpha); for (i = viewtop; i < viewtop + viewheight; i++) { - gdl = bviewRenderLensRect(gdl, unk28, viewtop + (s32)somefloat, 5, i, fxxx, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, viewtop + (s32)somefloat, 5, i, fxxx, viewleft, viewwidth); somefloat += 1.0f / fyyy; } @@ -562,12 +562,12 @@ Gfx *bviewRenderMotionBlur(Gfx *gdl, u32 colour, u32 alpha) Gfx *bviewRenderStatic(Gfx *gdl, u32 arg1, s32 arg2) { - void *unk28 = vi2GetUnk28(); + u8 *fb = vi2GetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 viewwidth = viGetViewWidth(); s32 viewleft = viGetViewLeft(); - void *ptr = (void *)(random() & 0xfff00 | 0x80000000); + u8 *fb2 = (u8 *)(random() & 0xfff00 | 0x80000000); s32 y; gDPPipeSync(gdl++); @@ -575,10 +575,10 @@ Gfx *bviewRenderStatic(Gfx *gdl, u32 arg1, s32 arg2) gdl = bviewPrepareStaticI8(gdl, arg1, arg2); for (y = viewtop; y < viewtop + viewheight; y++) { - gdl = bviewRenderLensRect(gdl, ptr, random() % 240, 5, y, 1.0f, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb2, random() % 240, 5, y, 1.0f, viewleft, viewwidth); } - if (ptr) { + if (fb2) { // empty } @@ -587,7 +587,7 @@ Gfx *bviewRenderStatic(Gfx *gdl, u32 arg1, s32 arg2) Gfx *bviewRenderSlayerRocketLens(Gfx *gdl, u32 colour, u32 alpha) { - void *sp7c = viGetUnk28(); + u8 *fb = viGetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 viewwidth = viGetViewWidth(); @@ -622,7 +622,7 @@ Gfx *bviewRenderSlayerRocketLens(Gfx *gdl, u32 colour, u32 alpha) } } - gdl = bviewRenderLensRect(gdl, sp7c, y, 5, y, 2.0f - sinf(angle), viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, y, 5, y, 2.0f - sinf(angle), viewleft, viewwidth); angle += increment; } @@ -632,7 +632,7 @@ Gfx *bviewRenderSlayerRocketLens(Gfx *gdl, u32 colour, u32 alpha) Gfx *bviewRenderFilmLens(Gfx *gdl, u32 colour, u32 alpha) { - void *unk28 = viGetUnk28(); + u8 *fb = viGetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 y; @@ -669,7 +669,7 @@ Gfx *bviewRenderFilmLens(Gfx *gdl, u32 colour, u32 alpha) tmpy = random() % 200; } - gdl = bviewRenderLensRect(gdl, unk28, tmpy, 5, y, 1, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, tmpy, 5, y, 1, viewleft, viewwidth); } return gdl; @@ -682,7 +682,7 @@ Gfx *bviewRenderFilmLens(Gfx *gdl, u32 colour, u32 alpha) */ Gfx *bviewRenderZoomBlur(Gfx *gdl, u32 colour, s32 alpha, f32 arg3, f32 arg4) { - void *unk28 = vi2GetUnk28(); + u8 *fb = vi2GetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 viewwidth = viGetViewWidth(); @@ -705,7 +705,7 @@ Gfx *bviewRenderZoomBlur(Gfx *gdl, u32 colour, s32 alpha, f32 arg3, f32 arg4) gdl = bviewPrepareStaticRgba16(gdl, colour, alpha); for (i = viewtop; i < viewtop + viewheight; i++) { - gdl = bviewRenderLensRect(gdl, unk28, (s32)somefloat + viewtop, 5, i, arg3, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, (s32)somefloat + viewtop, 5, i, arg3, viewleft, viewwidth); somefloat += 1.0f / arg4; } @@ -14922,7 +14922,7 @@ glabel bviewRenderNvLens // and regalloc near random(). //Gfx *bviewRenderNvLens(Gfx *gdl) //{ -// void *unk28 = viGetUnk28(); +// u8 *fb = viGetUnk28(); // s32 viewheight = viGetViewHeight(); // s32 viewwidth = viGetViewWidth(); // s32 viewtop = viGetViewTop(); @@ -14973,7 +14973,7 @@ glabel bviewRenderNvLens // // gDPSetColor(gdl++, G_SETENVCOLOR, (green << 16) + 0xff); // -// gdl = bviewRenderLensRect(gdl, unk28, y, 5, y, 1, viewleft, viewwidth); +// gdl = bviewRenderLensRect(gdl, fb, y, 5, y, 1, viewleft, viewwidth); // } // // return gdl; @@ -15998,7 +15998,7 @@ glabel bviewRenderIrLens */ Gfx *bviewRenderRarePresents(Gfx *gdl) { - void *unk28 = viGetUnk28(); + u8 *fb = viGetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 viewwidth = viGetViewWidth(); @@ -16018,7 +16018,7 @@ Gfx *bviewRenderRarePresents(Gfx *gdl) gdl = bviewPrepareStaticRgba16(gdl, 0x8f8f8f8f, 255); for (y = viewtop; y < viewtop + viewheight; y += 2) { - gdl = bviewRenderLensRect(gdl, unk28, y, 5, y, 1.0f, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, y, 5, y, 1.0f, viewleft, viewwidth); } return gdl; @@ -16029,7 +16029,7 @@ u8 var8007f878 = 0; #if VERSION >= VERSION_NTSC_1_0 Gfx *bviewRenderHorizonScanner(Gfx *gdl) { - void *sp194 = viGetUnk28(); + u8 *fb = viGetUnk28(); s32 viewtop = viGetViewTop(); s32 viewheight = viGetViewHeight(); s32 viewwidth = viGetViewWidth(); @@ -16229,7 +16229,7 @@ Gfx *bviewRenderHorizonScanner(Gfx *gdl) gDPSetColor(gdl++, G_SETENVCOLOR, colour); - gdl = bviewRenderLensRect(gdl, sp194, liney, 5, liney, random() * (1.0f / U32_MAX) * range + 1, viewleft, viewwidth); + gdl = bviewRenderLensRect(gdl, fb, liney, 5, liney, random() * (1.0f / U32_MAX) * range + 1, viewleft, viewwidth); } return gdl; diff --git a/src/include/game/bondview.h b/src/include/game/bondview.h index 1806678ab..b97f51252 100644 --- a/src/include/game/bondview.h +++ b/src/include/game/bondview.h @@ -5,7 +5,7 @@ #include "types.h" Gfx *bviewRenderIrRect(Gfx *gdl, s32 x1, s32 y1, s32 x2, s32 y2); -Gfx *bviewRenderLensRect(Gfx *gdl, void *arg1, s32 top, s32 arg3, s32 arg4, f32 arg5, s32 left, s32 width); +Gfx *bviewRenderLensRect(Gfx *gdl, u8 *fb, s32 top, s32 arg3, s32 arg4, f32 arg5, s32 left, s32 width); Gfx *bviewRenderFisheyeRect(Gfx *gdl, s32 arg1, f32 arg2, s32 arg3, s32 arg4); Gfx *bviewPrepareStaticRgba16(Gfx *gdl, u32 colour, u32 alpha); Gfx *bviewPrepareStaticI8(Gfx *gdl, u32 colour, u32 alpha); diff --git a/src/include/lib/lib_09a80.h b/src/include/lib/lib_09a80.h index 01b1f21ea..7cbcf3fd4 100644 --- a/src/include/lib/lib_09a80.h +++ b/src/include/lib/lib_09a80.h @@ -11,7 +11,7 @@ void vi00009a98(void); void vi00009aa0(u32 arg0); Gfx *viRenderDebug(Gfx *gdl); void vi00009ab0(void); -void vi00009b50(void *fb); +void vi00009b50(u8 *fb); void vi00009bf8(void); void viAllocateFbs(s32 stagenum); void viBlack(bool black); @@ -19,8 +19,8 @@ u32 vi00009ed4(void); void vi0000a044(void); void vi0000aa50(f32 arg0); void vi0000aab0(s32 arg0); -void *viGetUnk28(void); -void *vi2GetUnk28(void); +u8 *viGetUnk28(void); +u8 *vi2GetUnk28(void); Vp *viGetCurrentPlayerViewport(void); u16 vi0000ab6c(void); u32 vi0000ab78(void); diff --git a/src/include/types.h b/src/include/types.h index ca4f730a2..d0274c6c5 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6059,7 +6059,7 @@ struct rend_vidat { /*0x20*/ s16 viewleft; /*0x22*/ s16 viewtop; /*0x24*/ bool usezbuf; - /*0x28*/ void *unk28; + /*0x28*/ u8 *fb; }; struct var80062a8c { diff --git a/src/lib/lib_09a80.c b/src/lib/lib_09a80.c index c7599808e..03fedcefc 100644 --- a/src/lib/lib_09a80.c +++ b/src/lib/lib_09a80.c @@ -142,102 +142,28 @@ void vi00009ab0(void) #endif } -#if VERSION >= VERSION_NTSC_1_0 -GLOBAL_ASM( -glabel vi00009b50 -/* 9b50: 3c03800a */ lui $v1,%hi(var8009cac0) -/* 9b54: 3c058006 */ lui $a1,%hi(var8005d530) -/* 9b58: 3c078006 */ lui $a3,%hi(var8005d588) -/* 9b5c: 24e7d588 */ addiu $a3,$a3,%lo(var8005d588) -/* 9b60: 24a5d530 */ addiu $a1,$a1,%lo(var8005d530) -/* 9b64: 2463cac0 */ addiu $v1,$v1,%lo(var8009cac0) -/* 9b68: 24060030 */ addiu $a2,$zero,0x30 -/* 9b6c: 24020240 */ addiu $v0,$zero,0x240 -.L00009b70: -/* 9b70: 24a5002c */ addiu $a1,$a1,0x2c -/* 9b74: 24630004 */ addiu $v1,$v1,0x4 -/* 9b78: ac64fffc */ sw $a0,-0x4($v1) -/* 9b7c: a4a2ffd8 */ sh $v0,-0x28($a1) -/* 9b80: a4a2ffec */ sh $v0,-0x14($a1) -/* 9b84: a4a2fff0 */ sh $v0,-0x10($a1) -/* 9b88: a4a6ffda */ sh $a2,-0x26($a1) -/* 9b8c: a4a6ffee */ sh $a2,-0x12($a1) -/* 9b90: 14a7fff7 */ bne $a1,$a3,.L00009b70 -/* 9b94: a4a6fff2 */ sh $a2,-0xe($a1) -/* 9b98: 3c0e8009 */ lui $t6,%hi(var80092874+0x2) -/* 9b9c: 91ce2876 */ lbu $t6,%lo(var80092874+0x2)($t6) -/* 9ba0: 3c02800a */ lui $v0,%hi(var8009cac0) -/* 9ba4: 2442cac0 */ addiu $v0,$v0,%lo(var8009cac0) -/* 9ba8: 000e7880 */ sll $t7,$t6,0x2 -/* 9bac: 004fc021 */ addu $t8,$v0,$t7 -/* 9bb0: 3c088006 */ lui $t0,%hi(var8005d590) -/* 9bb4: 8d08d590 */ lw $t0,%lo(var8005d590)($t0) -/* 9bb8: 8f190000 */ lw $t9,0x0($t8) -/* 9bbc: 3c098009 */ lui $t1,%hi(var80092874+0x3) -/* 9bc0: 3c0d8006 */ lui $t5,%hi(g_ViData) -/* 9bc4: ad190028 */ sw $t9,0x28($t0) -/* 9bc8: 91292877 */ lbu $t1,%lo(var80092874+0x3)($t1) -/* 9bcc: 8dadd594 */ lw $t5,%lo(g_ViData)($t5) -/* 9bd0: 240e0001 */ addiu $t6,$zero,0x1 -/* 9bd4: 00095080 */ sll $t2,$t1,0x2 -/* 9bd8: 004a5821 */ addu $t3,$v0,$t2 -/* 9bdc: 8d6c0000 */ lw $t4,0x0($t3) -/* 9be0: 3c018006 */ lui $at,%hi(var8005d59c) -/* 9be4: adac0028 */ sw $t4,0x28($t5) -/* 9be8: ac2ed59c */ sw $t6,%lo(var8005d59c)($at) -/* 9bec: 3c01800a */ lui $at,%hi(g_Vars+0x4e0) -/* 9bf0: 03e00008 */ jr $ra -/* 9bf4: a020a4a0 */ sb $zero,%lo(g_Vars+0x4e0)($at) -); -#else -GLOBAL_ASM( -glabel vi00009b50 -/* 9cf0: 3c03800a */ lui $v1,0x800a -/* 9cf4: 3c058006 */ lui $a1,0x8006 -/* 9cf8: 3c088006 */ lui $t0,0x8006 -/* 9cfc: 2508ed28 */ addiu $t0,$t0,-4824 -/* 9d00: 24a5ecd0 */ addiu $a1,$a1,-4912 -/* 9d04: 24631200 */ addiu $v1,$v1,0x1200 -/* 9d08: 24070030 */ addiu $a3,$zero,0x30 -/* 9d0c: 240601e0 */ addiu $a2,$zero,0x1e0 -/* 9d10: 24020240 */ addiu $v0,$zero,0x240 -.NB00009d14: -/* 9d14: 24a5002c */ addiu $a1,$a1,0x2c -/* 9d18: 24630004 */ addiu $v1,$v1,0x4 -/* 9d1c: ac64fffc */ sw $a0,-0x4($v1) -/* 9d20: a4a2ffd8 */ sh $v0,-0x28($a1) -/* 9d24: a4a2ffec */ sh $v0,-0x14($a1) -/* 9d28: a4a6fff0 */ sh $a2,-0x10($a1) -/* 9d2c: a4a7ffda */ sh $a3,-0x26($a1) -/* 9d30: a4a7ffee */ sh $a3,-0x12($a1) -/* 9d34: 14a8fff7 */ bne $a1,$t0,.NB00009d14 -/* 9d38: a4a7fff2 */ sh $a3,-0xe($a1) -/* 9d3c: 3c0e8009 */ lui $t6,0x8009 -/* 9d40: 91ce4e66 */ lbu $t6,0x4e66($t6) -/* 9d44: 3c02800a */ lui $v0,0x800a -/* 9d48: 24421200 */ addiu $v0,$v0,0x1200 -/* 9d4c: 000e7880 */ sll $t7,$t6,0x2 -/* 9d50: 004fc021 */ addu $t8,$v0,$t7 -/* 9d54: 3c098006 */ lui $t1,0x8006 -/* 9d58: 8d29ed30 */ lw $t1,-0x12d0($t1) -/* 9d5c: 8f190000 */ lw $t9,0x0($t8) -/* 9d60: 3c0a8009 */ lui $t2,0x8009 -/* 9d64: 3c0e8006 */ lui $t6,0x8006 -/* 9d68: ad390028 */ sw $t9,0x28($t1) -/* 9d6c: 914a4e67 */ lbu $t2,0x4e67($t2) -/* 9d70: 8dceed34 */ lw $t6,-0x12cc($t6) -/* 9d74: 240f0001 */ addiu $t7,$zero,0x1 -/* 9d78: 000a5880 */ sll $t3,$t2,0x2 -/* 9d7c: 004b6021 */ addu $t4,$v0,$t3 -/* 9d80: 8d8d0000 */ lw $t5,0x0($t4) -/* 9d84: 3c018006 */ lui $at,0x8006 -/* 9d88: adcd0028 */ sw $t5,0x28($t6) -/* 9d8c: ac2fed3c */ sw $t7,-0x12c4($at) -/* 9d90: 3c01800a */ lui $at,0x800a -/* 9d94: 03e00008 */ jr $ra -/* 9d98: a020eba0 */ sb $zero,-0x1460($at) -); -#endif +void vi00009b50(u8 *fb) +{ + s32 i; + + for (i = 0; i < 2; i++) { + var8009cac0[i] = fb; + + var8005d530[i].x = 576; + var8005d530[i].bufx = 576; + var8005d530[i].viewx = (VERSION >= VERSION_NTSC_1_0 ? 576 : 480); + + var8005d530[i].y = 48; + var8005d530[i].bufy = 48; + var8005d530[i].viewy = 48; + } + + var8005d590->fb = var8009cac0[var80092876]; + g_ViData->fb = var8009cac0[var80092877]; + + var8005d59c = 1; + g_Vars.fourmeg2player = false; +} void vi00009bf8(void) { @@ -322,8 +248,8 @@ void viAllocateFbs(s32 stagenum) var8009cac0[0] = &ptr[0]; var8009cac0[1] = fbsize + ptr; - var8005d590->unk28 = var8009cac0[var80092876]; - g_ViData->unk28 = var8009cac0[var80092877]; + var8005d590->fb = var8009cac0[var80092876]; + g_ViData->fb = var8009cac0[var80092877]; fb0 = var8009cac0[0]; fb1 = var8009cac0[1]; @@ -1852,19 +1778,19 @@ void vi0000ab10(void) var8005d598 = false; } -void *viGetUnk28(void) +u8 *viGetUnk28(void) { - return g_ViData->unk28; + return g_ViData->fb; } -void *vi2GetUnk28(void) +u8 *vi2GetUnk28(void) { - return var8005d590->unk28; + return var8005d590->fb; } -void viSetUnk28(void *arg0) +void viSetUnk28(u8 *fb) { - g_ViData->unk28 = arg0; + g_ViData->fb = fb; } Vp *viGetCurrentPlayerViewport(void)