sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

__osViInit.c (2261B)


      1 #include "libultra_internal.h"
      2 #include "PR/rcp.h"
      3 #include "PR/os.h"
      4 
      5 OSViContext sViContexts[2] = { 0 };
      6 OSViContext *__osViCurr = &sViContexts[0];
      7 OSViContext *__osViNext = &sViContexts[1];
      8 
      9 #ifdef VERSION_EU
     10 u32 osViClock = VI_NTSC_CLOCK;
     11 u32 sTvType = TV_TYPE_PAL;
     12 #elif !defined(VERSION_SH) && !defined(VERSION_CN)
     13 u32 sTvType = TV_TYPE_NTSC;
     14 u32 osViClock = VI_NTSC_CLOCK;
     15 #endif
     16 
     17 extern OSViMode osViModePalLan1;
     18 extern OSViMode osViModeMpalLan1;
     19 #if defined(VERSION_EU) || defined(VERSION_SH) || defined(VERSION_CN)
     20 extern OSViMode osViModeNtscLan1;
     21 #endif
     22 
     23 void __osViInit(void) {
     24 #ifdef VERSION_US
     25     sTvType = osTvType;
     26 #endif
     27 
     28     bzero(sViContexts, sizeof(sViContexts));
     29     __osViCurr = &sViContexts[0];
     30     __osViNext = &sViContexts[1];
     31     __osViNext->retraceCount = 1;
     32     __osViCurr->retraceCount = 1;
     33 
     34 #if defined(VERSION_JP)
     35     if (sTvType != TV_TYPE_PAL) {
     36         __osViNext->modep = &osViModePalLan1;
     37         osViClock = VI_NTSC_CLOCK;
     38     } else {
     39         __osViNext->modep = &osViModeMpalLan1;
     40         osViClock = VI_PAL_CLOCK;
     41     }
     42 #elif defined(VERSION_US)
     43     if (sTvType == TV_TYPE_NTSC) {
     44         __osViNext->modep = &osViModePalLan1;
     45         osViClock = VI_NTSC_CLOCK;
     46     } else {
     47         __osViNext->modep = &osViModeMpalLan1;
     48         osViClock = VI_MPAL_CLOCK;
     49     }
     50 #elif defined(VERSION_EU)
     51     if (osTvType == TV_TYPE_PAL) {
     52         __osViNext->modep = &osViModePalLan1;
     53         osViClock = VI_PAL_CLOCK;
     54     } else if (osTvType == TV_TYPE_MPAL) {
     55         __osViNext->modep = &osViModeMpalLan1;
     56         osViClock = VI_MPAL_CLOCK;
     57     } else {
     58         __osViNext->modep = &osViModeNtscLan1;
     59         osViClock = VI_NTSC_CLOCK;
     60     }
     61 #else
     62     __osViNext->buffer = (void *) 0x80000000;
     63     __osViCurr->buffer = (void *) 0x80000000;
     64     if (osTvType == TV_TYPE_PAL) {
     65         __osViNext->modep = &osViModePalLan1;
     66     } else if (osTvType == TV_TYPE_MPAL) {
     67         __osViNext->modep = &osViModeMpalLan1;
     68     } else {
     69         __osViNext->modep = &osViModeNtscLan1;
     70     }
     71 
     72 #endif
     73 
     74     __osViNext->unk00 = VI_STATE_BLACK;
     75     __osViNext->features = __osViNext->modep->comRegs.ctrl;
     76 
     77 #ifndef VERSION_JP
     78     while (IO_READ(VI_CURRENT_REG) > 10) {
     79         ;
     80     }
     81     IO_WRITE(VI_STATUS_REG, 0);
     82 #endif
     83     __osViSwapContext();
     84 }