From 65d72a54cf712292f0bb97af8eeaa10c2eeb2e8c Mon Sep 17 00:00:00 2001 From: mzxrules Date: Mon, 29 May 2023 17:40:10 -0400 Subject: 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 ++++++++++++++++++++++++++- 6 files changed, 117 insertions(+), 46 deletions(-) create mode 100644 include/ultra64/viint.h (limited to 'include') diff --git a/include/functions.h b/include/functions.h index 0f99fb24b..8330903e1 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 f2bcb07dd..25ccb3d37 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 112a00239..bc8bacb1b 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 000000000..4fea2259a --- /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 e7dc43da0..dfb0ab791 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 12738f9a7..bbcb860e5 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 -- cgit v1.2.3