From 65d72a54cf712292f0bb97af8eeaa10c2eeb2e8c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 29 May 2023 17:40:10 -0400 Subject: [PATCH] z_syscfb.c, z_vimode.c, code_80140CE0 split and OK (#1159) * z_vimode * Fixups * WIP * matching * sys_cfb OK * some documentation * vimode docs, name all syscfb vars * quick fixes * suggested changes, more things I missed * merge suggestions * code_80140CE0 -> z_viscvg * format * update symbols * more suggestions * fix include order * sNotebookViMode comment, bss fix --------- Co-authored-by: Kelebek1 Co-authored-by: louist103 --- include/functions.h | 42 +- include/macros.h | 6 +- include/regs.h | 7 + include/ultra64/viint.h | 37 ++ include/variables.h | 44 +- include/z64.h | 27 +- spec | 4 +- src/code/code_80140CE0.c | 7 - src/code/game.c | 12 +- src/code/graph.c | 29 +- src/code/sys_cfb.c | 125 +++++- src/code/z_actor.c | 2 +- src/code/z_demo.c | 1 - src/code/z_fbdemo_circle.c | 4 +- src/code/z_kankyo.c | 2 +- src/code/z_lights.c | 11 +- src/code/z_parameter.c | 10 +- src/code/z_play.c | 30 +- src/code/z_rcp.c | 14 +- src/code/z_view.c | 4 +- src/code/z_vimode.c | 376 +++++++++++++++++- src/code/z_viscvg.c | 90 +++++ src/code/z_viszbuf.c | 8 +- src/libultra/io/osViModeMpalLan1.c | 39 +- src/libultra/io/osViModeNtscHpf1.c | 39 +- src/libultra/io/osViModeNtscLan1.c | 39 +- src/libultra/io/osViModePalLan1.c | 39 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 1 + .../actors/ovl_player_actor/z_player.c | 1 + .../fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c | 6 +- tools/disasm/functions.txt | 40 +- tools/disasm/variables.txt | 44 +- tools/sizes/code_functions.csv | 24 +- undefined_syms.txt | 4 +- 34 files changed, 896 insertions(+), 272 deletions(-) create mode 100644 include/ultra64/viint.h delete mode 100644 src/code/code_80140CE0.c create mode 100644 src/code/z_viscvg.c diff --git a/include/functions.h b/include/functions.h index 0f99fb24b1..8330903e15 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1090,7 +1090,7 @@ void Font_LoadCharNES(PlayState* play, u8 codePointIndex, s32 offset); void Font_LoadMessageBoxEndIcon(Font* font, u16 icon); void Font_LoadOrderedFont(Font* font); // void func_800F5090(void); -// void func_800F50D4(void); +s32 Environment_ZBufValToFixedPoint(s32 zBufferVal); void Environment_Init(PlayState* play, EnvironmentContext* envCtx, s32 arg2); u32 func_800F5954(u8* param_1, u32 param_2, u32 param_3, u8 param_4, u8 param_5); f32 Environment_LerpWeight(u16 max, u16 min, u16 val); @@ -1724,22 +1724,23 @@ void SkinMatrix_SetYRotation(MtxF* mf, s16 a); void SkinMatrix_MulYRotation(MtxF* mf, s16 a); void SkinMatrix_SetZRotation(MtxF* mf, s16 a); -void func_80140260(OSViMode* vimode); -// void func_8014026C(OSViMode* param_1, UNK_TYPE1 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6, s32 param_7, s32 param_8, UNK_TYPE4 param_9, s32 param_10, s16 param_11, u32 param_12, UNK_TYPE4 param_13); -// void func_80140730(void); -// void func_80140810(void); -void func_80140898(void* arg0); -void func_80140900(void* arg0); -// void func_8014090C(void); -// void func_80140970(void); -void func_80140CE0(void* arg0); -void func_80140D04(void* arg0); -void func_80140D10(void* arg0, Gfx** gfx, u32 arg2); +void ViMode_LogPrint(OSViMode* vimode); +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust); +void ViMode_Save(ViMode* viMode); +void ViMode_Load(ViMode* viMode); +void ViMode_Init(ViMode* viMode); +void ViMode_Destroy(ViMode* viMode); +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures); +void ViMode_Update(ViMode* viMode, Input* input); +void VisCvg_Init(struct_801F8010* this); +void VisCvg_Destroy(struct_801F8010* this); +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp); void func_80140E80(Struct_80140E80* arg0); void func_80140EA0(Struct_80140E80* arg0); // void func_80140EAC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_80141008(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -void func_8014116C(Gfx** gfxP, u16* arg1, u16* arg2, s32 width, s32 height, s32 arg5); +void func_8014116C(Gfx** gfxP, u16* arg1, u16* workBuffer, s32 width, s32 height, s32 arg5); // void func_801411B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_80141200(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_8014151C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); @@ -2048,15 +2049,14 @@ void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ); void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ); -void func_80178750(void); -void func_80178818(void); -void func_80178978(void); -// void func_801789D4(void); -void* SysCfb_GetFbPtr(s32 index); +void SysCfb_SetLoResMode(void); +void SysCfb_SetHiResMode(void); +void SysCfb_Init(void); +void* SysCfb_GetFramebuffer(s32 index); void* SysCfb_GetZBuffer(void); -// UNK_TYPE4 func_80178A24(void); -// void func_80178A34(void); -s32 func_80178A94(s32 param_1, s32 param_2); +void* SysCfb_GetWorkBuffer(void); +u16 SysCfb_GetZBufferPixel(s32 x, s32 y); +s32 SysCfb_GetZBufferInt(s32 x, s32 y); void CmpDma_LoadFile(uintptr_t segmentVrom, s32 id, void* dst, size_t size); void CmpDma_LoadAllFiles(uintptr_t segmentVrom, void* dst, size_t size); // void Check_WriteRGBA16Pixel(u16* buffer, u32 x, u32 y, u32 value); diff --git a/include/macros.h b/include/macros.h index f2bcb07ddb..25ccb3d371 100644 --- a/include/macros.h +++ b/include/macros.h @@ -7,9 +7,11 @@ #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +#define SCREEN_WIDTH_HIRES 640 +#define SCREEN_HEIGHT_HIRES 480 -#define SCREEN_WIDTH_HIGH_RES 576 -#define SCREEN_HEIGHT_HIGH_RES 454 +#define HIRES_BUFFER_WIDTH 576 +#define HIRES_BUFFER_HEIGHT 454 #define PROJECTED_TO_SCREEN_X(projectedPos, invW) ((projectedPos).x * (invW) * (SCREEN_WIDTH / 2) + (SCREEN_WIDTH / 2)) #define PROJECTED_TO_SCREEN_Y(projectedPos, invW) ((projectedPos).y * (invW) * (-SCREEN_HEIGHT / 2) + (SCREEN_HEIGHT / 2)) diff --git a/include/regs.h b/include/regs.h index 112a002398..bc8bacb1b8 100644 --- a/include/regs.h +++ b/include/regs.h @@ -65,6 +65,13 @@ extern RegEditor* gRegEditor; #define R_ENABLE_ARENA_DBG SREG(0) // Same as OoT #define R_ROOM_IMAGE_NODRAW_FLAGS SREG(25) #define R_UPDATE_RATE SREG(30) +#define R_VI_MODE_EDIT_STATE SREG(48) +#define R_VI_MODE_EDIT_WIDTH SREG(49) +#define R_VI_MODE_EDIT_HEIGHT SREG(50) +#define R_VI_MODE_EDIT_ULY_ADJ SREG(51) +#define R_VI_MODE_EDIT_LRY_ADJ SREG(52) +#define R_VI_MODE_EDIT_ULX_ADJ SREG(53) +#define R_VI_MODE_EDIT_LRX_ADJ SREG(54) #define R_FB_FILTER_TYPE SREG(80) #define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c) #define R_FB_FILTER_A SREG(84) diff --git a/include/ultra64/viint.h b/include/ultra64/viint.h new file mode 100644 index 0000000000..4fea2259a2 --- /dev/null +++ b/include/ultra64/viint.h @@ -0,0 +1,37 @@ +#ifndef ULTRA64_VIINT_H +#define ULTRA64_VIINT_H + +#define VI_STATE_MODE_SET (1 << 0) +#define VI_STATE_XSCALE_SET (1 << 1) +#define VI_STATE_YSCALE_FACTOR_SET (1 << 2) +#define VI_STATE_CTRL_SET (1 << 3) +#define VI_STATE_BUFFER_SET (1 << 4) +#define VI_STATE_BLACK (1 << 5) +#define VI_STATE_REPEATLINE (1 << 6) +#define VI_STATE_FADE (1 << 7) + +#define VI_SCALE_MASK 0xFFF +#define VI_2_10_FPART_MASK 0x3FF +#define VI_SUBPIXEL_SH 0x10 + +// For use in initializing OSViMode structures + +#define BURST(hsync_width, color_width, vsync_width, color_start) \ + (hsync_width | (color_width << 8) | (vsync_width << 16) | (color_start << 20)) +#define WIDTH(v) v +#define VSYNC(v) v +#define HSYNC(duration, leap) (duration | (leap << 16)) +#define LEAP(upper, lower) ((upper << 16) | lower) +#define START(start, end) ((start << 16) | end) + +#define FTOFIX(val, i, f) ((u32)(val * (f32)(1 << f)) & ((1 << (i + f)) - 1)) + +#define F210(val) FTOFIX(val, 2, 10) +#define SCALE(scaleup, off) (F210((1.0f / (f32)scaleup)) | (F210((f32)off) << 16)) + +#define VCURRENT(v) v +#define ORIGIN(v) v +#define VINTR(v) v +#define HSTART START + +#endif diff --git a/include/variables.h b/include/variables.h index e7dc43da0e..dfb0ab7916 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2393,7 +2393,7 @@ extern UNK_TYPE1 D_801F7FF0; extern struct_801F8010 D_801F8010; extern VisZbuf sVisZbuf; extern VisMono sMonoColors; -extern UNK_TYPE1 D_801F8048; +extern ViMode D_801F8048; extern FaultAddrConvClient sGraphFaultAddrConvClient; extern FaultClient sGraphFaultClient; extern GfxMasterList* gGfxMasterDL; @@ -2422,30 +2422,30 @@ extern volatile OSTime sRSPOtherTotalTime; // extern UNK_TYPE1 D_801FBB18; extern volatile OSTime gRDPTotalTime; // extern UNK_TYPE1 D_801FBB28; -extern OSViMode D_801FBB30; -extern u32* gFramebuffers[2]; -extern OSViMode* D_801FBB88; +extern OSViMode sNotebookViMode; +extern void* gFramebuffers[2]; +extern OSViMode* gActiveViMode; extern u16* gZBufferPtr; -extern void* D_801FBB90; +extern void* gWorkBuffer; extern u64* gGfxSPTaskOutputBufferPtr; -extern size_t gGfxSPTaskOutputBufferSize; -// extern UNK_TYPE1 D_801FBB9C; -// extern UNK_TYPE1 D_801FBBA0; -extern u16 (*gZBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u16 (*gWorkBuffer)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBuffer)[0x3000]; extern void* gGfxSPTaskOutputBufferEnd; -// extern UNK_TYPE1 D_801FBBB4; -// extern UNK_TYPE1 D_801FBBB8; -// extern UNK_TYPE1 D_801FBBBC; -// extern UNK_TYPE1 D_801FBBC0; -extern u64 (*gGfxSPTaskOutputBuffer2)[0x3000]; -extern void* gGfxSPTaskOutputBufferEnd2; -extern UNK_TYPE2 D_801FBBCC; -extern UNK_TYPE2 D_801FBBCE; -// extern UNK_TYPE1 D_801FBBD0; -// extern UNK_TYPE1 D_801FBBD2; -extern u8 D_801FBBD4; +extern void* sCfbLoRes1; +extern void* sCfbLoRes0; +extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndLoRes; +extern void* sCfbHiRes1; +extern void* sCfbHiRes0; +extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +extern void* gGfxSPTaskOutputBufferEndHiRes; +extern s16 gCfbWidth; +extern s16 gCfbHeight; +extern s16 gCfbLeftAdjust; +extern s16 gCfbUpperAdjust; +extern u8 gSysCfbHiResEnabled; extern Vec3f D_801FBBF0; extern LineSegment Math3D_ColSphereTri_line; extern Vec3f Math3D_ColSphereTri_point; diff --git a/include/z64.h b/include/z64.h index 12738f9a7d..bbcb860e50 100644 --- a/include/z64.h +++ b/include/z64.h @@ -612,7 +612,7 @@ typedef struct { typedef struct { /* 0x0 */ u32 type; /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8 color; + /* 0x8 */ Color_RGBA8_u32 color; /* 0xC */ Color_RGBA8 envColor; } struct_801F8010; // size = 0x10 @@ -676,4 +676,29 @@ enum fram_mode { FRAM_MODE_STATUS }; +typedef enum { + /* 0 */ VI_MODE_EDIT_STATE_INACTIVE, + /* 1 */ VI_MODE_EDIT_STATE_ACTIVE, + /* 2 */ VI_MODE_EDIT_STATE_2, // active, more adjustments + /* 3 */ VI_MODE_EDIT_STATE_3 // active, more adjustments, print comparison with NTSC LAN1 mode +} ViModeEditState; + +typedef struct { + /* 0x00 */ OSViMode customViMode; + /* 0x50 */ s32 viHeight; + /* 0x54 */ s32 viWidth; + /* 0x58 */ s32 rightAdjust; + /* 0x5C */ s32 leftAdjust; + /* 0x60 */ s32 lowerAdjust; + /* 0x64 */ s32 upperAdjust; + /* 0x68 */ s32 editState; + /* 0x6C */ s32 tvType; + /* 0x70 */ u32 loRes; + /* 0x74 */ u32 antialiasOff; + /* 0x78 */ u32 modeN; + /* 0x7C */ u32 fb16Bit; + /* 0x80 */ u32 viFeatures; + /* 0x84 */ u32 unk_84; +} ViMode; // size = 0x88 + #endif diff --git a/spec b/spec index a4e38cc6f5..5fe02e11fd 100644 --- a/spec +++ b/spec @@ -523,8 +523,7 @@ beginseg include "build/src/code/z_rumble.o" include "build/src/code/z_view.o" include "build/src/code/z_vimode.o" - include "build/src/code/code_80140CE0.o" - include "build/data/code/code_80140CE0.data.o" + include "build/src/code/z_viscvg.o" include "build/src/code/code_80140E80.o" include "build/src/code/z_vismono.o" include "build/src/code/z_viszbuf.o" @@ -574,7 +573,6 @@ beginseg include "build/data/code/speed_meter.bss.o" include "build/src/code/su_mtx.o" include "build/src/code/sys_cfb.o" - include "build/data/code/sys_cfb.bss.o" include "build/src/code/sys_cmpdma.o" include "build/src/code/sys_initial_check.o" include "build/src/code/sys_math.o" diff --git a/src/code/code_80140CE0.c b/src/code/code_80140CE0.c deleted file mode 100644 index f3d487fabc..0000000000 --- a/src/code/code_80140CE0.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D04.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_80140CE0/func_80140D10.s") diff --git a/src/code/game.c b/src/code/game.c index bc8b9e39f3..c982411778 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -31,7 +31,7 @@ void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1); D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2); D_801F8010.color.a = R_FB_FILTER_A; - func_80140D10(&D_801F8010, &dlist, zbuffer); + VisCvg_Draw(&D_801F8010, &dlist); } else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); @@ -194,7 +194,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g gameState->main = NULL; gameState->destroy = NULL; gameState->running = 1; - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -210,10 +210,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g init(gameState); - func_80140CE0(&D_801F8010); + VisCvg_Init(&D_801F8010); VisZbuf_Init(&sVisZbuf); VisMono_Init(&sMonoColors); - func_80140898(&D_801F8048); + ViMode_Init(&D_801F8048); func_801773A0(&D_801F7FF0); Rumble_Init(); @@ -232,10 +232,10 @@ void GameState_Destroy(GameState* gameState) { Rumble_Destroy(); func_801773C4(&D_801F7FF0); - func_80140D04(&D_801F8010); + VisCvg_Destroy(&D_801F8010); VisZbuf_Destroy(&sVisZbuf); VisMono_Destroy(&sMonoColors); - func_80140900(&D_801F8048); + ViMode_Destroy(&D_801F8048); THA_Destroy(&gameState->heap); GameAlloc_Cleanup(&gameState->alloc); } diff --git a/src/code/graph.c b/src/code/graph.c index 558f7d563b..bf9067b698 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -16,12 +16,12 @@ OSTime sGraphTaskStartTime; void Graph_FaultClient(void) { FaultDrawer_DrawText(30, 100, "ShowFrameBuffer PAGE 0/1"); - osViSwapBuffer(SysCfb_GetFbPtr(0)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(0)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); Fault_WaitForInput(); - osViSwapBuffer(SysCfb_GetFbPtr(1)); - osViSetMode(D_801FBB88); + osViSwapBuffer(SysCfb_GetFramebuffer(1)); + osViSetMode(gActiveViMode); osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); } @@ -50,7 +50,7 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) { gfxCtx->workBuffer = pool->workBuffer; gfxCtx->debugBuffer = pool->debugBuffer; - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gSegments[0x0F] = gfxCtx->curFrameBuffer; gfxCtx->zbuffer = SysCfb_GetZBuffer(); @@ -179,7 +179,7 @@ retry: task->dramStack = (u64*)gGfxSPTaskStack; task->dramStackSize = sizeof(gGfxSPTaskStack); task->outputBuff = gGfxSPTaskOutputBufferPtr; - task->outputBuffSize = gGfxSPTaskOutputBufferSize; + task->outputBuffSize = gGfxSPTaskOutputBufferEnd; task->dataPtr = (u64*)gGfxMasterDL; task->dataSize = 0; task->yieldDataPtr = (u64*)gGfxSPTaskYieldBuffer; @@ -340,18 +340,19 @@ void Graph_ThreadEntry(void* arg) { u32 size; s32 pad[2]; - gZBuffer = SystemArena_Malloc(sizeof(*gZBuffer) + sizeof(*gWorkBuffer) + 64 - 1); - gZBuffer = (void*)ALIGN64((u32)gZBuffer); + gZBufferLoRes = SystemArena_Malloc(sizeof(*gZBufferLoRes) + sizeof(*gWorkBufferLoRes) + 64 - 1); + gZBufferLoRes = (void*)ALIGN64((u32)gZBufferLoRes); - gWorkBuffer = (void*)((u8*)gZBuffer + sizeof(*gZBuffer)); + gWorkBufferLoRes = (void*)((u8*)gZBufferLoRes + sizeof(*gZBufferLoRes)); - gGfxSPTaskOutputBuffer2 = gGfxSPTaskOutputBuffer = SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBuffer)); + gGfxSPTaskOutputBufferHiRes = gGfxSPTaskOutputBufferLoRes = + SystemArena_Malloc(sizeof(*gGfxSPTaskOutputBufferLoRes)); - gGfxSPTaskOutputBufferEnd = (u8*)gGfxSPTaskOutputBuffer + sizeof(*gGfxSPTaskOutputBuffer); - gGfxSPTaskOutputBufferEnd2 = (u8*)gGfxSPTaskOutputBuffer2 + sizeof(*gGfxSPTaskOutputBuffer2); + gGfxSPTaskOutputBufferEndLoRes = (u8*)gGfxSPTaskOutputBufferLoRes + sizeof(*gGfxSPTaskOutputBufferLoRes); + gGfxSPTaskOutputBufferEndHiRes = (u8*)gGfxSPTaskOutputBufferHiRes + sizeof(*gGfxSPTaskOutputBufferHiRes); - func_80178978(); - Fault_SetFB(D_801FBB90, SCREEN_WIDTH, SCREEN_HEIGHT); + SysCfb_Init(); + Fault_SetFB(gWorkBuffer, SCREEN_WIDTH, SCREEN_HEIGHT); Graph_Init(&gfxCtx); while (nextOvl) { diff --git a/src/code/sys_cfb.c b/src/code/sys_cfb.c index 25d92227cb..16c39855cd 100644 --- a/src/code/sys_cfb.c +++ b/src/code/sys_cfb.c @@ -2,20 +2,127 @@ #include "buffers.h" #include "system_malloc.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178750.s") +extern u16 gFramebufferHiRes0[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; +extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178818.s") +OSViMode sNotebookViMode; // placeholder name +void* gFramebuffers[2]; +OSViMode* gActiveViMode; +u16* gZBufferPtr; +void* gWorkBuffer; +u64* gGfxSPTaskOutputBufferPtr; +void* gGfxSPTaskOutputBufferEnd; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178978.s") +void* sCfbLoRes1; +void* sCfbLoRes0; +u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndLoRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_801789D4.s") +void* sCfbHiRes1; +void* sCfbHiRes0; +u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +void* gGfxSPTaskOutputBufferEndHiRes; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetFbPtr.s") +s16 gCfbWidth; +s16 gCfbHeight; +s16 gCfbLeftAdjust; +s16 gCfbUpperAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/SysCfb_GetZBuffer.s") +u8 gSysCfbHiResEnabled; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A24.s") +void SysCfb_SetLoResMode(void) { + gFramebuffers[1] = sCfbLoRes1; + gFramebuffers[0] = sCfbLoRes0; + gZBufferPtr = *gZBufferLoRes; + gWorkBuffer = gWorkBufferLoRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes; + gCfbWidth = SCREEN_WIDTH; + gCfbHeight = SCREEN_HEIGHT; + gCfbLeftAdjust = 0; + gCfbUpperAdjust = 0; + gSysCfbHiResEnabled = false; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + gActiveViMode = &osViModeNtscLan1; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A34.s") +void SysCfb_SetHiResMode(void) { + gFramebuffers[1] = sCfbHiRes1; + gFramebuffers[0] = sCfbHiRes0; + gZBufferPtr = *gZBufferHiRes; + gWorkBuffer = gWorkBufferHiRes; + gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes; + gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes; + if (1) {} + gCfbWidth = HIRES_BUFFER_WIDTH; + gCfbHeight = HIRES_BUFFER_HEIGHT; + gCfbLeftAdjust = 30; + gCfbUpperAdjust = 10; + gScreenWidth = gCfbWidth; + gScreenHeight = gCfbHeight; + if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) { + gActiveViMode = &osViModeNtscHpf1; + } else { + s32 rightAdjust; + s32 lowerAdjust; -#pragma GLOBAL_ASM("asm/non_matchings/code/sys_cfb/func_80178A94.s") + //! FAKE: + l1: + rightAdjust = gCfbWidth - 610; + lowerAdjust = gCfbHeight - 470; + ViMode_Configure(&sNotebookViMode, -1, osTvType, 0, 1, 0, 1, gCfbWidth, gCfbHeight, 30, rightAdjust, 10, + lowerAdjust); + gActiveViMode = &sNotebookViMode; + } + gSysCfbHiResEnabled = true; +} + +void SysCfb_Init(void) { + sCfbLoRes1 = gFramebuffer1; + sCfbLoRes0 = gFramebuffer0; + sCfbHiRes1 = gFramebufferHiRes1; + sCfbHiRes0 = gFramebufferHiRes0; + SysCfb_SetLoResMode(); +} + +// Unused +void SysCfb_Reset(void) { + gFramebuffers[0] = NULL; + gFramebuffers[1] = NULL; +} + +void* SysCfb_GetFramebuffer(s32 index) { + if (index < 2) { + return gFramebuffers[index]; + } + return NULL; +} + +void* SysCfb_GetZBuffer(void) { + return gZBufferPtr; +} + +void* SysCfb_GetWorkBuffer(void) { + return gWorkBuffer; +} + +u16 SysCfb_GetZBufferPixel(s32 x, s32 y) { + u16* zBuff = SysCfb_GetZBuffer(); + u16 val; + + if (zBuff != NULL) { + val = (&zBuff[x])[y * gCfbWidth]; + } else { + val = 0; + } + return val; +} + +s32 SysCfb_GetZBufferInt(s32 x, s32 y) { + return Environment_ZBufValToFixedPoint(SysCfb_GetZBufferPixel(x, y) << 2) >> 3; +} diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 3d98c8f46b..c46b6ec3b8 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2705,7 +2705,7 @@ void Actor_DrawLensActors(PlayState* play, s32 numLensActors, Actor** lensActors spA4 = play->unk_18E68; if (dbgVar2) { - PreRender_SetValues(&play->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, zbuffer); + PreRender_SetValues(&play->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, zbuffer); gfxTemp = gfx; func_80170200(&play->pauseBgPreRender, &gfxTemp, zbuffer, spA4); diff --git a/src/code/z_demo.c b/src/code/z_demo.c index da965969f9..733ec4bc13 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/code/z_fbdemo_circle.c b/src/code/z_fbdemo_circle.c index bc07df883d..addfe6b67c 100644 --- a/src/code/z_fbdemo_circle.c +++ b/src/code/z_fbdemo_circle.c @@ -82,8 +82,8 @@ void TransitionCircle_SetType(void* thisx, s32 type) { void TransitionCircle_LoadAndSetTexture(Gfx** gfxp, TexturePtr texture, s32 fmt, s32 arg3, s32 masks, s32 maskt, f32 arg6) { Gfx* gfx = *gfxp; - s32 xh = D_801FBBCC; - s32 yh = D_801FBBCE; + s32 xh = gCfbWidth; + s32 yh = gCfbHeight; s32 width = 1 << masks; s32 height = 1 << maskt; f32 s; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index d6d38f9d6f..2191498a31 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -2,7 +2,7 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F5090.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800F50D4.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_Init.s") diff --git a/src/code/z_lights.c b/src/code/z_lights.c index 860d04ae9f..534ec6dfcb 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -360,12 +360,9 @@ Lights* Lights_New(GraphicsContext* gfxCtx, u8 ambientR, u8 ambientG, u8 ambient lights = GRAPH_ALLOC(gfxCtx, sizeof(Lights)); - lights->l.a.l.col[0] = ambientR; - lights->l.a.l.colc[0] = ambientR; - lights->l.a.l.col[1] = ambientG; - lights->l.a.l.colc[1] = ambientG; - lights->l.a.l.col[2] = ambientB; - lights->l.a.l.colc[2] = ambientB; + lights->l.a.l.col[0] = lights->l.a.l.colc[0] = ambientR; + lights->l.a.l.col[1] = lights->l.a.l.colc[1] = ambientG; + lights->l.a.l.col[2] = lights->l.a.l.colc[2] = ambientB; lights->enablePosLights = 0; lights->numLights = 0; @@ -394,7 +391,7 @@ void Lights_GlowCheck(PlayState* play) { s32 screenPosX = PROJECTED_TO_SCREEN_X(projectedPos, invW); s32 screenPosY = PROJECTED_TO_SCREEN_Y(projectedPos, invW); s32 wZ = (s32)((projectedPos.z * invW) * 16352.0f) + 16352; - s32 zBuf = func_80178A94(screenPosX, screenPosY); + s32 zBuf = SysCfb_GetZBufferInt(screenPosX, screenPosY); if (wZ < zBuf) { params->drawGlow = 1; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index 1c03f5cb10..d0558d7f80 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -2421,7 +2421,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { // Related to pictograph if (sPictoState == PICTO_BOX_STATE_LENS) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -2460,7 +2460,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { Interface_SetHudVisibility(HUD_VISIBILITY_ALL); sPictoState = PICTO_BOX_STATE_OFF; if (sPictoPhotoBeingTaken) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)((void)0, gSaveContext.pictoPhotoI5), PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); Snap_RecordPictographedActors(play); @@ -2493,7 +2493,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { sPictoState = PICTO_BOX_STATE_LENS; } else { Play_DecompressI5ToI8((u8*)((void)0, gSaveContext.pictoPhotoI5), - (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + (play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); play->haltAllActors = true; sPictoState = PICTO_BOX_STATE_SETUP_PHOTO; @@ -6631,7 +6631,7 @@ void Interface_Draw(PlayState* play) { // Draw pictograph photo if (sPictoState >= PICTO_BOX_STATE_SETUP_PHOTO) { if (!(play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON)) { - Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90, + Play_CompressI8ToI5((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer, (u8*)gSaveContext.pictoPhotoI5, PICTO_PHOTO_WIDTH * PICTO_PHOTO_HEIGHT); interfaceCtx->unk_222 = interfaceCtx->unk_224 = 0; @@ -6667,7 +6667,7 @@ void Interface_Draw(PlayState* play) { for (sp2CC = 0; sp2CC < (PICTO_PHOTO_HEIGHT / 8); sp2CC++, pictoRectTop += 8) { pictoRectLeft = PICTO_PHOTO_TOPLEFT_X; gDPLoadTextureBlock(OVERLAY_DISP++, - (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : D_801FBB90) + + (u8*)((play->pictoPhotoI8 != NULL) ? play->pictoPhotoI8 : gWorkBuffer) + (0x500 * sp2CC), G_IM_FMT_I, G_IM_SIZ_8b, PICTO_PHOTO_WIDTH, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); diff --git a/src/code/z_play.c b/src/code/z_play.c index e25b50b4bb..dd06a461e2 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -358,10 +358,10 @@ void Play_Destroy(GameState* thisx) { if (sBombersNotebookOpen) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx->framebufferIndex % 2); gfxCtx->zbuffer = SysCfb_GetZBuffer(); - gfxCtx->viMode = D_801FBB88; + gfxCtx->viMode = gActiveViMode; gfxCtx->viConfigFeatures = gViConfigFeatures; gfxCtx->xScale = gViConfigXScale; gfxCtx->yScale = gViConfigYScale; @@ -1242,7 +1242,7 @@ void Play_DrawMain(PlayState* this) { goto PostWorldDraw; } - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, gfxCtx->curFrameBuffer, gfxCtx->zbuffer); if (R_PAUSE_BG_PRERENDER_STATE == PAUSE_BG_PRERENDER_PROCESS) { MsgEvent_SendNullTask(); @@ -1442,24 +1442,24 @@ void Play_Draw(PlayState* this) { GraphicsContext* gfxCtx2 = this->state.gfxCtx; if (sBombersNotebookOpen) { - if (D_801FBBD4 != 1) { + if (gSysCfbHiResEnabled != 1) { MsgEvent_SendNullTask(); - func_80178818(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetHiResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; gfxCtx2->updateViMode = true; } } else { - if (D_801FBBD4 != 0) { + if (gSysCfbHiResEnabled != 0) { MsgEvent_SendNullTask(); - func_80178750(); - gfxCtx2->curFrameBuffer = SysCfb_GetFbPtr(gfxCtx2->framebufferIndex % 2); + SysCfb_SetLoResMode(); + gfxCtx2->curFrameBuffer = SysCfb_GetFramebuffer(gfxCtx2->framebufferIndex % 2); gfxCtx2->zbuffer = SysCfb_GetZBuffer(); - gfxCtx2->viMode = D_801FBB88; + gfxCtx2->viMode = gActiveViMode; gfxCtx2->viConfigFeatures = gViConfigFeatures; gfxCtx2->xScale = gViConfigXScale; gfxCtx2->yScale = gViConfigYScale; @@ -2252,10 +2252,10 @@ void Play_Init(GameState* thisx) { R_PICTO_PHOTO_STATE = PICTO_PHOTO_STATE_OFF; PreRender_Init(&this->pauseBgPreRender); - PreRender_SetValuesSave(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL, NULL); - PreRender_SetValues(&this->pauseBgPreRender, D_801FBBCC, D_801FBBCE, NULL, NULL); + PreRender_SetValuesSave(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL, NULL); + PreRender_SetValues(&this->pauseBgPreRender, gCfbWidth, gCfbHeight, NULL, NULL); - this->unk_18E64 = D_801FBB90; + this->unk_18E64 = gWorkBuffer; this->pictoPhotoI8 = gPictoPhotoI8; this->unk_18E68 = D_80784600; this->unk_18E58 = D_80784600; diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index 299639e985..4b5787129e 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1459,7 +1459,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(&masterGfx[0], D_0E000000.syncSegments); gSPDisplayList(&masterGfx[1], sFillSetupDL); - gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); if (zbuffer != NULL) { gDPSetDepthImage(&masterGfx[3], zbuffer); } else { @@ -1471,7 +1471,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->setScissor; - gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, D_801FBBCC, D_801FBBCE); + gDPSetScissor(&masterGfx[0], G_SC_NON_INTERLACE, 0, 0, gCfbWidth, gCfbHeight); gSPEndDisplayList(&masterGfx[1]); // Clear Z-Buffer @@ -1481,13 +1481,13 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g if (zbuffer == NULL) { gSPEndDisplayList(&masterGfx[0]); } else { - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, zbuffer); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, zbuffer); gDPPipeSync(&masterGfx[1]); gDPSetCycleType(&masterGfx[2], G_CYC_FILL); gDPSetRenderMode(&masterGfx[3], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[4], (GPACK_RGBA5551(255, 255, 240, 0) << 16) | GPACK_RGBA5551(255, 255, 240, 0)); gSPDisplayList(&masterGfx[5], D_0E000000.clearFillRect); - gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gSPEndDisplayList(&masterGfx[7]); } @@ -1495,7 +1495,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFrameBuffer; - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, D_801FBBCC, D_0F000000); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); gDPSetCycleType(&masterGfx[1], G_CYC_FILL); gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); @@ -1505,7 +1505,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC - 1, D_801FBBCE - 1); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth - 1, gCfbHeight - 1); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); @@ -1513,7 +1513,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->fillRect; - gDPFillRectangle(&masterGfx[0], 0, 0, D_801FBBCC, D_801FBBCE); + gDPFillRectangle(&masterGfx[0], 0, 0, gCfbWidth, gCfbHeight); gDPPipeSync(&masterGfx[1]); gSPEndDisplayList(&masterGfx[2]); diff --git a/src/code/z_view.c b/src/code/z_view.c index 105e6643a9..4adc00b8d0 100644 --- a/src/code/z_view.c +++ b/src/code/z_view.c @@ -18,8 +18,8 @@ void View_ViewportToVp(Vp* dest, Viewport* src) { dest->vp.vtrans[2] = 0x01FF; dest->vp.vtrans[3] = 0; - if ((src->leftX == 0) && (src->rightX == SCREEN_WIDTH_HIGH_RES) && (src->topY == 0) && - (src->bottomY == SCREEN_HEIGHT_HIGH_RES)) {} + if ((src->leftX == 0) && (src->rightX == HIRES_BUFFER_WIDTH) && (src->topY == 0) && + (src->bottomY == HIRES_BUFFER_HEIGHT)) {} } void View_Init(View* view, GraphicsContext* gfxCtx) { diff --git a/src/code/z_vimode.c b/src/code/z_vimode.c index b7d2dea64a..2ddd277754 100644 --- a/src/code/z_vimode.c +++ b/src/code/z_vimode.c @@ -1,17 +1,377 @@ #include "global.h" +#include "ultra64/viint.h" -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140260.s") +typedef struct { + /* 0x00 */ u32 burst; + /* 0x04 */ u32 vSync; + /* 0x08 */ u32 hSync; + /* 0x0C */ u32 leap; + /* 0x10 */ u32 hStart; + /* 0x14 */ u32 vStart; + /* 0x18 */ u32 vBurst; +} ViModeStruct; // size = 0x1C -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014026C.s") +void ViMode_LogPrint(OSViMode* osViMode) { +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140730.s") +/** + * Configures the custom OSViMode for this ViMode + * + * @param viMode ViMode to configure the custom OSViMode for + * @param type Identifying type for the OSViMode + * @param tvType TV Type: NTSC, PAL, MPAL or FPAL + * @param loRes Boolean: true = low resolution, false = high resolution. + * Corresponds to "L" or "H" in libultra VI mode names + * @param antialiasOff Boolean: true = point-sampling, false = anti-aliasing. + * Corresponds to "P" or "A" in libultra VI mode names + * @param modeN Boolean: controls interlacing mode, different based on resolution. + * Corresponds to "N" or "F" in libultra VI mode names + * @param fb16Bit Bolean: true = 16-bit framebuffer, false = 32-bit framebuffer. + * Corresponds to "1" or "2" in libultra VI mode names + * @param width Screen width + * @param height Screen height + * @param leftAdjust Left edge adjustment + * @param rightAdjust Right edge adjustment + * @param upperAdjust Upper edge adjustment + * @param lowerAdjust Lower edge adjustment + */ +void ViMode_Configure(OSViMode* viMode, s32 type, s32 tvType, s32 loRes, s32 antialiasOff, s32 modeN, s32 fb16Bit, + s32 width, s32 height, s32 leftAdjust, s32 rightAdjust, s32 upperAdjust, s32 lowerAdjust) { + s32 hiRes; + s32 antialiasOn; + s32 modeF; + s32 fb32Bit; + s32 hiResDeflicker; // deflickered interlacing + s32 hiResInterlaced; + s32 loResDeinterlaced; + s32 loResInterlaced; + s32 modeLAN1; // L=(lo res) A=(antialias) N=(deinterlace) 1=(16-bit) + s32 modeLPN2; // L=(lo res) P=(point-sampled) N=(deinterlace) 2=(32-bit) + s32 modeHPN2; // H=(hi res) P=(point-sampled) N=(normal interlacing) 2=(32-bit) + s32 yScaleLo; + s32 yScaleHiEvenField; + s32 yScaleHiOddField; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140810.s") + hiRes = !loRes; + antialiasOn = !antialiasOff; + modeF = !modeN; + fb32Bit = !fb16Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140898.s") + hiResDeflicker = hiRes && modeF; + hiResInterlaced = hiRes && modeN; + loResDeinterlaced = loRes && modeN; + loResInterlaced = loRes && modeF; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140900.s") + modeLAN1 = loRes && antialiasOn && modeN && fb16Bit; + modeLPN2 = loRes && antialiasOff && modeN && fb32Bit; + modeHPN2 = hiRes && antialiasOff && modeN && fb32Bit; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_8014090C.s") + upperAdjust &= ~1; + lowerAdjust &= ~1; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_vimode/func_80140970.s") + yScaleLo = (hiResDeflicker ? 2 : 1) * (((SCREEN_HEIGHT << 11) / SCREEN_HEIGHT) / (loRes ? 1 : 2)); + + yScaleHiEvenField = modeF ? (loResInterlaced ? 0x1000000 : 0x2000000) : 0; + yScaleHiOddField = modeF ? (loResInterlaced ? 0x3000000 : 0x2000000) : 0; + + viMode->type = type; + viMode->comRegs.ctrl = OS_VI_UNK2000 | OS_VI_UNK1000 | OS_VI_GAMMA | OS_VI_GAMMA_DITHER | + (!loResDeinterlaced ? OS_VI_UNK40 : 0) | (antialiasOn ? OS_VI_DIVOT : 0) | + (fb32Bit ? OS_VI_UNK2 | OS_VI_UNK1 : OS_VI_UNK2); + + if (modeLAN1) { + // Anti-aliased, fetch extra lines as-needed + viMode->comRegs.ctrl |= 0x100; + } else if (modeLPN2 | modeHPN2) { + // Point-sampled, resampling disabled + viMode->comRegs.ctrl |= 0x300; + } else { + if (antialiasOff) { + // Point-sampled, resampling enabled + viMode->comRegs.ctrl |= 0x200; + } else { + // Anti-aliased, always fetch extra lines + viMode->comRegs.ctrl |= 0; + } + } + + viMode->comRegs.width = width * (hiResInterlaced ? 2 : 1); + + if (tvType < 3) { + static const ViModeStruct D_801DF0C0[] = { + { + // OS_TV_PAL + BURST(58, 35, 4, 64), + VSYNC(624), + HSYNC(3177, 21), + LEAP(3183, 3182), + HSTART(128, 768), + START(95, 569), + BURST(107, 2, 9, 0), + }, + { + // OS_TV_NTSC + BURST(57, 34, 5, 62), + VSYNC(524), + HSYNC(3093, 0), + LEAP(3093, 3093), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + { + // OS_TV_MPAL + BURST(57, 30, 5, 70), + VSYNC(524), + HSYNC(3088, 0), + LEAP(3100, 3100), + HSTART(108, 748), + START(37, 511), + BURST(4, 2, 14, 0), + }, + }; + const ViModeStruct* ptr = &D_801DF0C0[tvType]; + + viMode->comRegs.burst = ptr->burst; + viMode->comRegs.vSync = ptr->vSync; + viMode->comRegs.hSync = ptr->hSync; + viMode->comRegs.leap = ptr->leap; + viMode->comRegs.hStart = ptr->hStart; + viMode->fldRegs[0].vStart = ptr->vStart; + viMode->fldRegs[1].vStart = ptr->vStart; + viMode->fldRegs[0].vBurst = ptr->vBurst; + viMode->fldRegs[1].vBurst = ptr->vBurst; + } else { + __assert("../z_vimode.c", 216); + } + + viMode->comRegs.hStart += (leftAdjust << 16) + (s16)rightAdjust; + viMode->fldRegs[0].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + viMode->fldRegs[1].vStart += (upperAdjust << 16) + (s16)lowerAdjust; + + if (loResDeinterlaced) { + viMode->comRegs.vSync++; + if (tvType == OS_TV_MPAL) { + viMode->comRegs.hSync += HSYNC(1, 4); + viMode->comRegs.leap += LEAP((u16)-4, (u16)-2); + } + } else { + viMode->fldRegs[0].vStart += START((u16)-3, (u16)-2); + if (tvType == OS_TV_MPAL) { + viMode->fldRegs[0].vBurst += BURST((u8)-2, (u8)-1, 12, -1); + } else if (tvType == OS_TV_PAL) { + viMode->fldRegs[1].vBurst += BURST((u8)-2, (u8)-1, 2, 0); + } + } + + viMode->comRegs.xScale = (SCREEN_WIDTH << 10) / SCREEN_WIDTH; + viMode->comRegs.vCurrent = 0; + + viMode->fldRegs[0].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2)); + viMode->fldRegs[1].origin = ORIGIN(width * 2 * (fb16Bit ? 1 : 2) * (loRes ? 1 : 2)); + + viMode->fldRegs[0].yScale = yScaleLo | yScaleHiEvenField; + viMode->fldRegs[1].yScale = yScaleLo | yScaleHiOddField; + + viMode->fldRegs[0].vIntr = 2; + viMode->fldRegs[1].vIntr = 2; +} + +void ViMode_Save(ViMode* viMode) { + R_VI_MODE_EDIT_STATE = viMode->editState; + R_VI_MODE_EDIT_WIDTH = viMode->viWidth; + R_VI_MODE_EDIT_HEIGHT = viMode->viHeight; + R_VI_MODE_EDIT_ULY_ADJ = viMode->upperAdjust; + R_VI_MODE_EDIT_LRY_ADJ = viMode->lowerAdjust; + R_VI_MODE_EDIT_ULX_ADJ = viMode->leftAdjust; + R_VI_MODE_EDIT_LRX_ADJ = viMode->rightAdjust; + + if (SREG(58) == 1) { + SREG(58) = 0; + switch (SREG(59)) { + case 1: + ViMode_LogPrint(&osViModePalLan1); + break; + + case 2: + ViMode_LogPrint(&osViModeFpalLan1); + break; + + default: + ViMode_LogPrint(&viMode->customViMode); + break; + } + } +} + +void ViMode_Load(ViMode* viMode) { + //! @bug This condition always fails as the lowest bit is masked out to 0 + if ((R_VI_MODE_EDIT_WIDTH & ~3) == 1) { + R_VI_MODE_EDIT_WIDTH += 4; + } + + viMode->editState = R_VI_MODE_EDIT_STATE; + viMode->viWidth = R_VI_MODE_EDIT_WIDTH & ~3; + viMode->viHeight = R_VI_MODE_EDIT_HEIGHT; + viMode->upperAdjust = R_VI_MODE_EDIT_ULY_ADJ; + viMode->lowerAdjust = R_VI_MODE_EDIT_LRY_ADJ; + viMode->leftAdjust = R_VI_MODE_EDIT_ULX_ADJ; + viMode->rightAdjust = R_VI_MODE_EDIT_LRX_ADJ; +} + +void ViMode_Init(ViMode* viMode) { + viMode->editState = VI_MODE_EDIT_STATE_INACTIVE; + viMode->viWidth = SCREEN_WIDTH; + viMode->viHeight = SCREEN_HEIGHT; + viMode->leftAdjust = 0; + viMode->rightAdjust = 0; + viMode->upperAdjust = 0; + viMode->lowerAdjust = 0; + viMode->viFeatures = OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF; + viMode->tvType = osTvType; + viMode->fb16Bit = true; + viMode->modeN = true; + viMode->antialiasOff = false; + viMode->loRes = true; + + ViMode_Save(viMode); +} + +void ViMode_Destroy(ViMode* viMode) { +} + +void ViMode_ConfigureFeatures(ViMode* viMode, s32 viFeatures) { + u32 ctrl = viMode->customViMode.comRegs.ctrl; + + if (viFeatures & OS_VI_GAMMA_ON) { + ctrl |= OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_OFF) { + ctrl &= ~OS_VI_GAMMA; + } + if (viFeatures & OS_VI_GAMMA_DITHER_ON) { + ctrl |= OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_GAMMA_DITHER_OFF) { + ctrl &= ~OS_VI_GAMMA_DITHER; + } + if (viFeatures & OS_VI_DIVOT_ON) { + ctrl |= OS_VI_DIVOT; + } + if (viFeatures & OS_VI_DIVOT_OFF) { + ctrl &= ~OS_VI_DIVOT; + } + viMode->customViMode.comRegs.ctrl = ctrl; +} + +/** + * Updates the custom VI mode with controller input and any edits made with the REG editor + * (through R_VI_MODE_EDIT_* entries) + */ +void ViMode_Update(ViMode* viMode, Input* input) { + ViMode_Load(viMode); + + if ((viMode->editState == VI_MODE_EDIT_STATE_ACTIVE) || (viMode->editState == VI_MODE_EDIT_STATE_2) || + (viMode->editState == VI_MODE_EDIT_STATE_3)) { + gScreenWidth = viMode->viWidth; + gScreenHeight = viMode->viHeight; + + // Controls to reset the ViMode to defaults + if (CHECK_BTN_ALL(input->cur.button, BTN_START | BTN_CUP | BTN_CRIGHT)) { + ViMode_Init(viMode); + } + + // Controls to adjust the screen dimensions (upper-left) + if (CHECK_BTN_ALL(input->cur.button, BTN_CUP)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->upperAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->upperAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->leftAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->leftAdjust++; + } + } + + // Controls to adjust the screen dimensions (lower-right) + if (CHECK_BTN_ALL(input->cur.button, BTN_CRIGHT)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_DUP)) { + viMode->lowerAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DDOWN)) { + viMode->lowerAdjust++; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DLEFT)) { + viMode->rightAdjust--; + } + if (CHECK_BTN_ALL(input->cur.button, BTN_DRIGHT)) { + viMode->rightAdjust++; + } + } + + // Controls to adjust key features + if (CHECK_BTN_ALL(input->cur.button, BTN_CDOWN)) { + if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { + viMode->loRes = !viMode->loRes; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) { + viMode->antialiasOff = !viMode->antialiasOff; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) { + viMode->modeN = !viMode->modeN; + } + if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) { + viMode->fb16Bit = !viMode->fb16Bit; + } + } + + // Clamp adjustments + if (viMode->editState >= VI_MODE_EDIT_STATE_2) { + // Allow parts of the framebuffer to possibly be offscreen by a small margin + if (viMode->leftAdjust < -16) { + viMode->leftAdjust = -16; + } + if (viMode->upperAdjust < -50) { + viMode->upperAdjust = -50; + } + if (viMode->rightAdjust > 16) { + viMode->rightAdjust = 16; + } + if (viMode->lowerAdjust > 50) { + viMode->lowerAdjust = 50; + } + } else { + // Do not allow parts of the framebuffer to end up offscreen + if (viMode->leftAdjust < 0) { + viMode->leftAdjust = 0; + } + if (viMode->upperAdjust < 0) { + viMode->upperAdjust = 0; + } + if (viMode->rightAdjust > 0) { + viMode->rightAdjust = 0; + } + if (viMode->lowerAdjust > 0) { + viMode->lowerAdjust = 0; + } + } + + ViMode_Configure(&viMode->customViMode, OS_VI_UNK28, osTvType, viMode->loRes, viMode->antialiasOff, + viMode->modeN, viMode->fb16Bit, viMode->viWidth, viMode->viHeight, viMode->leftAdjust, + viMode->rightAdjust, viMode->upperAdjust, viMode->lowerAdjust); + ViMode_ConfigureFeatures(viMode, viMode->viFeatures); + + if (viMode->editState == VI_MODE_EDIT_STATE_3) { + // Log comparison between the NTSC LAN1 mode and the custom mode + ViMode_LogPrint(&osViModeNtscLan1); + ViMode_LogPrint(&viMode->customViMode); + viMode->editState = VI_MODE_EDIT_STATE_2; + } + } + + ViMode_Save(viMode); +} diff --git a/src/code/z_viscvg.c b/src/code/z_viscvg.c new file mode 100644 index 0000000000..888fa19b32 --- /dev/null +++ b/src/code/z_viscvg.c @@ -0,0 +1,90 @@ +#include "global.h" + +Gfx D_801C5DD0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_VISCVG | G_RM_VISCVG2), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DE0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5DF0[] = { + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +Gfx D_801C5E00[] = { + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsDPSetOtherMode(G_AD_NOTPATTERN | G_CD_DISABLE | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_CLD_SURF | G_RM_CLD_SURF2), + gsSPDisplayList(D_0E000000.fillRect), + gsDPSetOtherMode(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM) | + GBL_c2(G_BL_CLR_IN, G_BL_0, G_BL_CLR_MEM, G_BL_A_MEM)), + gsSPBranchList(D_0E000000.fillRect), +}; + +void VisCvg_Init(struct_801F8010* this) { + this->type = 0; + this->setScissor = false; + this->color.r = 255; + this->color.g = 255; + this->color.b = 255; + this->color.a = 255; +} + +void VisCvg_Destroy(struct_801F8010* this) { +} + +void VisCvg_Draw(struct_801F8010* this, Gfx** gfxp) { + Gfx* gfx = *gfxp; + + gDPPipeSync(gfx++); + gDPSetPrimDepth(gfx++, -1, -1); + + if (this->setScissor == true) { + gSPDisplayList(gfx++, D_0E000000.setScissor); + } + + switch (this->type) { + case 1: + gSPDisplayList(gfx++, D_801C5DF0); + break; + + case 2: + gDPSetColor(gfx++, G_SETPRIMCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5E00); + break; + + case 3: + gDPSetColor(gfx++, G_SETBLENDCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DD0); + break; + + case 4: + gDPSetColor(gfx++, G_SETFOGCOLOR, this->color.rgba); + gSPDisplayList(gfx++, D_801C5DE0); + break; + + default: + break; + } + + gDPPipeSync(gfx++); + *gfxp = gfx; +} diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c index 9970a1e1b2..cf603f324a 100644 --- a/src/code/z_viszbuf.c +++ b/src/code/z_viszbuf.c @@ -1,6 +1,6 @@ #include "global.h" -#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES)) +#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (gCfbWidth * G_IM_SIZ_16b_BYTES)) void VisZbuf_Init(VisZbuf* this) { this->useRgba = false; @@ -42,12 +42,12 @@ void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) { gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba); gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba); - for (y = 0; y < (D_801FBBCE - height) + 1; y += height) { - gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0, + for (y = 0; y < (gCfbHeight - height) + 1; y += height) { + gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, gCfbWidth, 0, 0, y, gCfbWidth - 1, (y + height) - 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gSPTextureRectangle(gfx++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, + gSPTextureRectangle(gfx++, 0, y << 2, gCfbWidth << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, 1 << 10); } diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c index c7c09f659c..ccccf68ae6 100644 --- a/src/libultra/io/osViModeMpalLan1.c +++ b/src/libultra/io/osViModeMpalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeMpalLan1 = { OS_VI_MPAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4651E39, // burst - 0x20D, // vSync - 0x40C11, // hSync - 0xC190C1A, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 30, 5, 70), // burst + VSYNC(525), // vSync + HSYNC(3089, 4), // hSync + LEAP(3097, 3098), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c index ac0a1fa2b5..5f88f4e94c 100644 --- a/src/libultra/io/osViModeNtscHpf1.c +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscHpf1 = { OS_VI_NTSC_HPF1, // type { // comRegs - 0x324E, // ctrl - 640, // width - 0x3E52239, // burst - 0x20C, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x400, // xScale - 0, // vCurrent + 0x324E, // ctrl + WIDTH(640), // width + BURST(57, 34, 5, 62), // 0x3E52239, // burst + VSYNC(524), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // 0x6C02EC, // hStart + SCALE(1, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x500, // origin - 0x2000800, // yScale - 0x2301FD, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(1280), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(35, 509), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0xA00, // origin - 0x2000800, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2 // vIntr + ORIGIN(2560), // origin + SCALE(0.5, 0.5), // 0x2000800, // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2) // vIntr } }, }; diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c index 632d763f46..86eb473b77 100644 --- a/src/libultra/io/osViModeNtscLan1.c +++ b/src/libultra/io/osViModeNtscLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModeNtscLan1 = { OS_VI_NTSC_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x3E52239, // burst - 0x20D, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(57, 34, 5, 62), // burst + VSYNC(525), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c index 174cbf1420..f875bb7319 100644 --- a/src/libultra/io/osViModePalLan1.c +++ b/src/libultra/io/osViModePalLan1.c @@ -1,34 +1,35 @@ #include "global.h" +#include "ultra64/viint.h" OSViMode osViModePalLan1 = { OS_VI_PAL_LAN1, // type { // comRegs - 0x311E, // ctrl - SCREEN_WIDTH, // width - 0x4541E3A, // burst - 0x271, // vSync - 0x170C69, // hSync - 0xC6F0C6D, // leap - 0x800300, // hStart - 0x200, // xScale - 0, // vCurrent + 0x311E, // ctrl + WIDTH(320), // width + BURST(58, 30, 4, 69), // burst + VSYNC(625), // vSync + HSYNC(3177, 23), // hSync + LEAP(3183, 3181), // leap + HSTART(128, 768), // hStart + SCALE(2, 0), // xScale + VCURRENT(0), // vCurrent }, { // fldRegs { // [0] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2, // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr }, { // [1] - 0x280, // origin - 0x400, // yScale - 0x5F0239, // vStart - 0x9026B, // vBurst - 2 // vIntr + ORIGIN(640), // origin + SCALE(1, 0), // yScale + START(95, 569), // vStart + BURST(107, 2, 9, 0), // vBurst + VINTR(2), // vIntr } }, }; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 4441427159..7de1342188 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -4,6 +4,7 @@ * Description: Kafei */ +#include "prevent_bss_reordering.h" #include "z_en_test3.h" #include "objects/object_test3/object_test3.h" #include "overlays/actors/ovl_En_Door/z_en_door.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 9f5257b32a..7f33b45c17 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -4,6 +4,7 @@ * Description: Player */ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64quake.h" #include "z64rumble.h" diff --git a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index 48c8bdf588..9e11df1903 100644 --- a/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -81,7 +81,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { Gfx* gfx = *gfxP; s32 width = gScreenWidth; s32 height = gScreenHeight; - void* sp50 = D_801FBB90; + void* workBuffer = gWorkBuffer; TransitionWipe5* this = THIS; s32 alpha = (1.0f - this->unk_0C) * 255.0f; @@ -92,7 +92,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); - func_8014116C(&gfx, D_0F000000, sp50, width, height, 1); + func_8014116C(&gfx, D_0F000000, workBuffer, width, height, 1); } else { if (alpha == 255) { gDPSetOtherMode(gfx++, @@ -108,7 +108,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { gDPSetEnvColor(gfx++, 255, 255, 255, alpha); gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT); - func_8014116C(&gfx, sp50, D_0F000000, width, height, 0); + func_8014116C(&gfx, workBuffer, D_0F000000, width, height, 0); } gDPPipeSync(gfx++); gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index a28ff61320..b1d42739b9 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1707,7 +1707,7 @@ 0x800F4FC0:("Font_LoadMessageBoxEndIcon",), 0x800F5004:("Font_LoadOrderedFont",), 0x800F5090:("func_800F5090",), - 0x800F50D4:("func_800F50D4",), + 0x800F50D4:("Environment_ZBufValToFixedPoint",), 0x800F510C:("Environment_Init",), 0x800F5954:("func_800F5954",), 0x800F5A8C:("Environment_LerpWeight",), @@ -2748,17 +2748,17 @@ 0x8013FD74:("View_ApplyPerspectiveToOverlay",), 0x80140024:("View_UpdateViewingMatrix",), 0x801400CC:("View_ApplyTo",), - 0x80140260:("func_80140260",), - 0x8014026C:("func_8014026C",), - 0x80140730:("func_80140730",), - 0x80140810:("func_80140810",), - 0x80140898:("func_80140898",), - 0x80140900:("func_80140900",), - 0x8014090C:("func_8014090C",), - 0x80140970:("func_80140970",), - 0x80140CE0:("func_80140CE0",), - 0x80140D04:("func_80140D04",), - 0x80140D10:("func_80140D10",), + 0x80140260:("ViMode_LogPrint",), + 0x8014026C:("ViMode_Configure",), + 0x80140730:("ViMode_Save",), + 0x80140810:("ViMode_Load",), + 0x80140898:("ViMode_Init",), + 0x80140900:("ViMode_Destroy",), + 0x8014090C:("ViMode_ConfigureFeatures",), + 0x80140970:("ViMode_Update",), + 0x80140CE0:("VisCvg_Init",), + 0x80140D04:("VisCvg_Destroy",), + 0x80140D10:("VisCvg_Draw",), 0x80140E80:("func_80140E80",), 0x80140EA0:("func_80140EA0",), 0x80140EAC:("func_80140EAC",), @@ -3225,15 +3225,15 @@ 0x801780F0:("Mtx_SetTranslateScaleMtx",), 0x801781EC:("Mtx_SetRotationMtx",), 0x8017842C:("Mtx_SetTranslationRotationScaleMtx",), - 0x80178750:("func_80178750",), - 0x80178818:("func_80178818",), - 0x80178978:("func_80178978",), - 0x801789D4:("func_801789D4",), - 0x801789EC:("SysCfb_GetFbPtr",), + 0x80178750:("SysCfb_SetLoResMode",), + 0x80178818:("SysCfb_SetHiResMode",), + 0x80178978:("SysCfb_Init",), + 0x801789D4:("SysCfb_Reset",), + 0x801789EC:("SysCfb_GetFramebuffer",), 0x80178A14:("SysCfb_GetZBuffer",), - 0x80178A24:("func_80178A24",), - 0x80178A34:("func_80178A34",), - 0x80178A94:("func_80178A94",), + 0x80178A24:("SysCfb_GetWorkBuffer",), + 0x80178A34:("SysCfb_GetZBufferPixel",), + 0x80178A94:("SysCfb_GetZBufferInt",), 0x80178AC0:("func_80178AC0",), 0x80178C80:("CmpDma_GetFileInfo",), 0x80178D7C:("CmpDma_Decompress",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index f58d54a87b..53b35efa0a 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4051,7 +4051,7 @@ 0x801F8010:("D_801F8010","struct_801F8010","",0x10), 0x801F8020:("sVisZbuf","VisZbuf","",0x10), 0x801F8030:("sMonoColors","VisMono","",0x18), - 0x801F8048:("D_801F8048","UNK_TYPE1","",0x1), + 0x801F8048:("D_801F8048","ViMode","",0x88), 0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc), 0x801F80E0:("sGraphFaultClient","FaultClient","",0x10), 0x801F80F0:("gGfxMasterDL","Gfx*","",0x4), @@ -4094,30 +4094,30 @@ 0x801FBB14:("D_801FBB14","UNK_TYPE1","",0x1), 0x801FBB20:("gRDPTotalTime","UNK_TYPE1","",0x1), 0x801FBB28:("D_801FBB28","UNK_TYPE1","",0x1), - 0x801FBB30:("D_801FBB30","OSViMode","",0x50), + 0x801FBB30:("sNotebookViMode","OSViMode","",0x50), 0x801FBB80:("gFramebuffers","u32*","[2]",0x8), - 0x801FBB88:("D_801FBB88","OSViMode*","",0x4), + 0x801FBB88:("gActiveViMode","OSViMode*","",0x4), 0x801FBB8C:("gZBufferPtr","u16*","",0x4), - 0x801FBB90:("D_801FBB90","UNK_TYPE4","",0x4), + 0x801FBB90:("gWorkBuffer","UNK_TYPE4","",0x4), 0x801FBB94:("gGfxSPTaskOutputBufferPtr","UNK_TYPE1","",0x1), - 0x801FBB98:("gGfxSPTaskOutputBufferSize","UNK_TYPE1","",0x1), - 0x801FBB9C:("D_801FBB9C","UNK_TYPE1","",0x1), - 0x801FBBA0:("D_801FBBA0","UNK_TYPE1","",0x1), - 0x801FBBA4:("gZBuffer","u16*","",0x4), - 0x801FBBA8:("gWorkBuffer","u16**","",0x4), - 0x801FBBAC:("gGfxSPTaskOutputBuffer","u16**","",0x4), - 0x801FBBB0:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), - 0x801FBBB4:("D_801FBBB4","UNK_TYPE1","",0x1), - 0x801FBBB8:("D_801FBBB8","UNK_TYPE1","",0x1), - 0x801FBBBC:("D_801FBBBC","UNK_TYPE1","",0x1), - 0x801FBBC0:("D_801FBBC0","UNK_TYPE1","",0x1), - 0x801FBBC4:("gGfxSPTaskOutputBuffer2","UNK_TYPE1","",0x1), - 0x801FBBC8:("gGfxSPTaskOutputBufferEnd2","UNK_TYPE1","",0x1), - 0x801FBBCC:("D_801FBBCC","UNK_TYPE2","",0x2), - 0x801FBBCE:("D_801FBBCE","UNK_TYPE2","",0x2), - 0x801FBBD0:("D_801FBBD0","UNK_TYPE1","",0x1), - 0x801FBBD2:("D_801FBBD2","UNK_TYPE1","",0x1), - 0x801FBBD4:("D_801FBBD4","UNK_TYPE1","",0x1), + 0x801FBB98:("gGfxSPTaskOutputBufferEnd","UNK_TYPE1","",0x1), + 0x801FBB9C:("sCfbLoRes1","UNK_TYPE1","",0x1), + 0x801FBBA0:("sCfbLoRes0","UNK_TYPE1","",0x1), + 0x801FBBA4:("gZBufferLoRes","u16*","",0x4), + 0x801FBBA8:("gWorkBufferLoRes","u16**","",0x4), + 0x801FBBAC:("gGfxSPTaskOutputBufferLoRes","u16**","",0x4), + 0x801FBBB0:("gGfxSPTaskOutputBufferEndLoRes","UNK_TYPE1","",0x1), + 0x801FBBB4:("sCfbHiRes1","UNK_TYPE1","",0x1), + 0x801FBBB8:("sCfbHiRes0","UNK_TYPE1","",0x1), + 0x801FBBBC:("gZBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC0:("gWorkBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC4:("gGfxSPTaskOutputBufferHiRes","UNK_TYPE1","",0x1), + 0x801FBBC8:("gGfxSPTaskOutputBufferEndHiRes","UNK_TYPE1","",0x1), + 0x801FBBCC:("gCfbWidth","UNK_TYPE2","",0x2), + 0x801FBBCE:("gCfbHeight","UNK_TYPE2","",0x2), + 0x801FBBD0:("gCfbLeftAdjust","UNK_TYPE1","",0x1), + 0x801FBBD2:("gCfbUpperAdjust","UNK_TYPE1","",0x1), + 0x801FBBD4:("gSysCfbHiResEnabled","UNK_TYPE1","",0x1), 0x801FBBE0:("sDmaBuffer","u32","[2]",0x8), 0x801FBBF0:("D_801FBBF0","Vec3f","",0xc), 0x801FBC00:("Math3D_ColSphereTri_line","LineSegment","",0x18), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 03469f7bf6..34318dc271 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1221,7 +1221,7 @@ asm/non_matchings/code/z_kanfont/Font_LoadCharNES.s,Font_LoadCharNES,0x800F4F54, asm/non_matchings/code/z_kanfont/Font_LoadMessageBoxEndIcon.s,Font_LoadMessageBoxEndIcon,0x800F4FC0,0x11 asm/non_matchings/code/z_kanfont/Font_LoadOrderedFont.s,Font_LoadOrderedFont,0x800F5004,0x23 asm/non_matchings/code/z_kankyo/func_800F5090.s,func_800F5090,0x800F5090,0x11 -asm/non_matchings/code/z_kankyo/func_800F50D4.s,func_800F50D4,0x800F50D4,0xE +asm/non_matchings/code/z_kankyo/Environment_ZBufValToFixedPoint.s,Environment_ZBufValToFixedPoint,0x800F50D4,0xE asm/non_matchings/code/z_kankyo/Environment_Init.s,Environment_Init,0x800F510C,0x212 asm/non_matchings/code/z_kankyo/func_800F5954.s,func_800F5954,0x800F5954,0x4E asm/non_matchings/code/z_kankyo/Environment_LerpWeight.s,Environment_LerpWeight,0x800F5A8C,0x21 @@ -2270,9 +2270,9 @@ asm/non_matchings/code/z_vimode/func_80140898.s,func_80140898,0x80140898,0x1A asm/non_matchings/code/z_vimode/func_80140900.s,func_80140900,0x80140900,0x3 asm/non_matchings/code/z_vimode/func_8014090C.s,func_8014090C,0x8014090C,0x19 asm/non_matchings/code/z_vimode/func_80140970.s,func_80140970,0x80140970,0xDC -asm/non_matchings/code/z_vimode/func_80140CE0.s,func_80140CE0,0x80140CE0,0x9 -asm/non_matchings/code/z_vimode/func_80140D04.s,func_80140D04,0x80140D04,0x3 -asm/non_matchings/code/z_vimode/func_80140D10.s,func_80140D10,0x80140D10,0x5C +asm/non_matchings/code/z_vimode/VisCvg_Init.s,VisCvg_Init,0x80140CE0,0x9 +asm/non_matchings/code/z_vimode/VisCvg_Destroy.s,VisCvg_Destroy,0x80140D04,0x3 +asm/non_matchings/code/z_vimode/VisCvg_Draw.s,VisCvg_Draw,0x80140D10,0x5C asm/non_matchings/code/code_80140E80/func_80140E80.s,func_80140E80,0x80140E80,0x8 asm/non_matchings/code/code_80140E80/func_80140EA0.s,func_80140EA0,0x80140EA0,0x3 asm/non_matchings/code/code_80140E80/func_80140EAC.s,func_80140EAC,0x80140EAC,0x57 @@ -2739,15 +2739,15 @@ asm/non_matchings/code/speed_meter/SpeedMeter_DrawAllocEntries.s,SpeedMeter_Draw asm/non_matchings/code/speed_meter/func_801780F0.s,func_801780F0,0x801780F0,0x3F asm/non_matchings/code/speed_meter/func_801781EC.s,func_801781EC,0x801781EC,0x90 asm/non_matchings/code/speed_meter/func_8017842C.s,func_8017842C,0x8017842C,0xC9 -asm/non_matchings/code/sys_cmpdma/func_80178750.s,func_80178750,0x80178750,0x32 -asm/non_matchings/code/sys_cmpdma/func_80178818.s,func_80178818,0x80178818,0x58 -asm/non_matchings/code/sys_cmpdma/func_80178978.s,func_80178978,0x80178978,0x17 -asm/non_matchings/code/sys_cmpdma/func_801789D4.s,func_801789D4,0x801789D4,0x6 -asm/non_matchings/code/sys_cmpdma/SysCfb_GetFbPtr.s,SysCfb_GetFbPtr,0x801789EC,0xA +asm/non_matchings/code/sys_cmpdma/SysCfb_SetLoResMode.s,SysCfb_SetLoResMode,0x80178750,0x32 +asm/non_matchings/code/sys_cmpdma/SysCfb_SetHiResMode.s,SysCfb_SetHiResMode,0x80178818,0x58 +asm/non_matchings/code/sys_cmpdma/SysCfb_Init.s,SysCfb_Init,0x80178978,0x17 +asm/non_matchings/code/sys_cmpdma/SysCfb_Reset.s,SysCfb_Reset,0x801789D4,0x6 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetFramebuffer.s,SysCfb_GetFramebuffer,0x801789EC,0xA asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBuffer.s,SysCfb_GetZBuffer,0x80178A14,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A24.s,func_80178A24,0x80178A24,0x4 -asm/non_matchings/code/sys_cmpdma/func_80178A34.s,func_80178A34,0x80178A34,0x18 -asm/non_matchings/code/sys_cmpdma/func_80178A94.s,func_80178A94,0x80178A94,0xB +asm/non_matchings/code/sys_cmpdma/SysCfb_GetWorkBuffer.s,SysCfb_GetWorkBuffer,0x80178A24,0x4 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferPixel.s,SysCfb_GetZBufferPixel,0x80178A34,0x18 +asm/non_matchings/code/sys_cmpdma/SysCfb_GetZBufferInt.s,SysCfb_GetZBufferInt,0x80178A94,0xB asm/non_matchings/code/sys_cmpdma/func_80178AC0.s,func_80178AC0,0x80178AC0,0x70 asm/non_matchings/code/sys_cmpdma/CmpDma_GetFileInfo.s,CmpDma_GetFileInfo,0x80178C80,0x3F asm/non_matchings/code/sys_cmpdma/CmpDma_Decompress.s,CmpDma_Decompress,0x80178D7C,0xC diff --git a/undefined_syms.txt b/undefined_syms.txt index aad4bba7b0..336a6c4b4d 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -122,9 +122,11 @@ D_A4800010 = 0xA4800010; // SI_PIF_ADDR_WR64B_REG D_A4800014 = 0xA4800014; // reserved D_A4800018 = 0xA4800018; // SI_STATUS_REG -// buffers +// sys_cfb buffers gFramebuffer1 = 0x80000500; +gFramebufferHiRes0 = 0x80780000; +gFramebufferHiRes1 = 0x80000500; D_80025D00 = 0x80025D00; // Ucode symbols