diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2025-01-03 16:51:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-03 17:51:33 -0700 |
| commit | a9e52e5a551e05de85e6ecf1d73ffbd455d0d3d0 (patch) | |
| tree | 83e592679582f46ad75ad1c4b7635badbf73bcd4 /src/code | |
| parent | f319c8125023f966901131c7ebe479a6f15a750d (diff) | |
Cfbinfo (#237)
* func_800D2CDC_jp
* func_800D2CB4_jp
* func_800D2C10_jp
* cleanup
* Small docs of CfbInfo struct
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/cfbinfo.c | 75 | ||||
| -rw-r--r-- | src/code/graph.c | 18 |
2 files changed, 84 insertions, 9 deletions
diff --git a/src/code/cfbinfo.c b/src/code/cfbinfo.c new file mode 100644 index 0000000..e8851ce --- /dev/null +++ b/src/code/cfbinfo.c @@ -0,0 +1,75 @@ +#include "cfbinfo.h" + +#include "libc/stdbool.h" +#include "libc64/sleep.h" +#include "libu64/debug.h" + +#include "idle.h" +#include "irqmgr.h" +#include "macros.h" +#include "viconfig.h" +#include "6FD410.h" + +CfbInfo sCfbInfos[3]; + +CfbInfo* func_800D2C10_jp(void) { + s32 i; + CfbInfo* cfb; + s32 attempts = 0; + +retry: + i = 0; + while (true) { + cfb = &sCfbInfos[i]; + if (cfb->state == 0) { + break; + } + + i++; + if (i == ARRAY_COUNT(sCfbInfos)) { + if (attempts++ > 10000) { + _dbg_hungup("../cfbinfo.c", 0x27); + } + usleep(100); + (void)""; + goto retry; + } + } + bzero(cfb, sizeof(CfbInfo)); + cfb->state = 1; + + // (reservation) + (void)"(予約)"; + return cfb; +} + +void func_800D2CB4_jp(CfbInfo* cfb) { + if (cfb->unk_0B != 0) { + cfb->unk_0B = 0; + B_80146080_jp = 3; + } + cfb->state = 0; +} + +void func_800D2CDC_jp(CfbInfo* cfb) { + if ((ResetStatus < 2) && (cfb->swapBuffer != NULL)) { + osViSwapBuffer(cfb->swapBuffer); + cfb->unk_0A = cfb->unk_09; + cfb->state = 4; + if (cfb->viMode != NULL) { + gViConfigMode = *cfb->viMode; + gViConfigFeatures = cfb->viFeatures; + gViConfigXScale = cfb->xScale; + gViConfigYScale = cfb->yScale; + if (!gViConfigBlack) { + osViSetMode(cfb->viMode); + osViSetSpecialFeatures(cfb->viFeatures); + osViSetXScale(cfb->xScale); + osViSetYScale(cfb->yScale); + } + if (!gViConfigBlack) {} + } + } else { + func_800D2CB4_jp(cfb); + } +} diff --git a/src/code/graph.c b/src/code/graph.c index 1fe2a06..4c53048 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -264,23 +264,23 @@ void graph_task_set00(GraphicsContext* gfxCtx) { scTask->msg = NULL; { - cfbStruct* cfb = func_800D2C10_jp(); + CfbInfo* cfb = func_800D2C10_jp(); cfb->unk_00 = gfxCtx->unk_2E4; - cfb->unk_04 = NULL; + cfb->swapBuffer = NULL; cfb->unk_09 = game_GameFrame; - cfb->unk_0C = NULL; + cfb->viMode = NULL; if (scTask->flags & OS_SC_SWAPBUFFER) { - cfb->unk_04 = gfxCtx->unk_2E4; + cfb->swapBuffer = gfxCtx->unk_2E4; if (gfxCtx->unk_2F2 != 0) { gfxCtx->unk_2F2 = 0; - cfb->unk_0C = gfxCtx->unk_25C; - cfb->unk_10 = gfxCtx->unk_2EC; - cfb->unk_14 = gfxCtx->unk_2FC; - cfb->unk_18 = gfxCtx->unk_300; + cfb->viMode = gfxCtx->unk_25C; + cfb->viFeatures = gfxCtx->unk_2EC; + cfb->xScale = gfxCtx->unk_2FC; + cfb->yScale = gfxCtx->unk_300; } if (B_80146080_jp == 1) { - B_80146084_jp = cfb->unk_04; + B_80146084_jp = cfb->swapBuffer; cfb->unk_0B = 1; B_80146080_jp = 2; } |
