sm64/lib/src/__osViInit.c
2023-08-17 08:56:02 -04:00

85 lines
2.2 KiB
C

#include "libultra_internal.h"
#include "PR/rcp.h"
#include "PR/os.h"
OSViContext sViContexts[2] = { 0 };
OSViContext *__osViCurr = &sViContexts[0];
OSViContext *__osViNext = &sViContexts[1];
#ifdef VERSION_EU
u32 osViClock = VI_NTSC_CLOCK;
u32 sTvType = TV_TYPE_PAL;
#elif !defined(VERSION_SH) && !defined(VERSION_CN)
u32 sTvType = TV_TYPE_NTSC;
u32 osViClock = VI_NTSC_CLOCK;
#endif
extern OSViMode osViModePalLan1;
extern OSViMode osViModeMpalLan1;
#if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN)
extern OSViMode osViModeNtscLan1;
#endif
void __osViInit(void) {
#ifdef VERSION_US
sTvType = osTvType;
#endif
bzero(sViContexts, sizeof(sViContexts));
__osViCurr = &sViContexts[0];
__osViNext = &sViContexts[1];
__osViNext->retraceCount = 1;
__osViCurr->retraceCount = 1;
#if defined(VERSION_JP)
if (sTvType != TV_TYPE_PAL) {
__osViNext->modep = &osViModePalLan1;
osViClock = VI_NTSC_CLOCK;
} else {
__osViNext->modep = &osViModeMpalLan1;
osViClock = VI_PAL_CLOCK;
}
#elif defined(VERSION_US)
if (sTvType == TV_TYPE_NTSC) {
__osViNext->modep = &osViModePalLan1;
osViClock = VI_NTSC_CLOCK;
} else {
__osViNext->modep = &osViModeMpalLan1;
osViClock = VI_MPAL_CLOCK;
}
#elif defined(VERSION_EU)
if (osTvType == TV_TYPE_PAL) {
__osViNext->modep = &osViModePalLan1;
osViClock = VI_PAL_CLOCK;
} else if (osTvType == TV_TYPE_MPAL) {
__osViNext->modep = &osViModeMpalLan1;
osViClock = VI_MPAL_CLOCK;
} else {
__osViNext->modep = &osViModeNtscLan1;
osViClock = VI_NTSC_CLOCK;
}
#else
__osViNext->buffer = (void *) 0x80000000;
__osViCurr->buffer = (void *) 0x80000000;
if (osTvType == TV_TYPE_PAL) {
__osViNext->modep = &osViModePalLan1;
} else if (osTvType == TV_TYPE_MPAL) {
__osViNext->modep = &osViModeMpalLan1;
} else {
__osViNext->modep = &osViModeNtscLan1;
}
#endif
__osViNext->unk00 = VI_STATE_BLACK;
__osViNext->features = __osViNext->modep->comRegs.ctrl;
#ifndef VERSION_JP
while (IO_READ(VI_CURRENT_REG) > 10) {
;
}
IO_WRITE(VI_STATUS_REG, 0);
#endif
__osViSwapContext();
}