summaryrefslogtreecommitdiff
path: root/src/code/cfbinfo.c
blob: e8851ce0bddc2b8bd2012e8296b35673512af18c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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);
    }
}