mirror of
https://github.com/n64decomp/sm64
synced 2026-04-24 16:13:50 +00:00
85 lines
2.2 KiB
C
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();
|
|
}
|