mirror of
https://github.com/zeldaret/mm.git
synced 2026-06-07 11:57:27 -04:00
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 <eeeedddccc@hotmail.co.uk> Co-authored-by: louist103 <louist103@gmail.com>
This commit is contained in:
+116
-9
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user