diff --git a/include/variables.h b/include/variables.h index 6b5fbe620e..e2bf782066 100644 --- a/include/variables.h +++ b/include/variables.h @@ -81,7 +81,7 @@ extern float D_80097F90; // extern UNK_TYPE4 D_80097FB0; extern OSViMode osViModeNtscLan1; extern OSViMode osViModeMpalLan1; -extern __OSViContext D_80098060[2]; +// extern __OSViContext D_80098060[2]; extern __OSViContext* __osViCurr; extern __OSViContext* __osViNext; // extern UNK_TYPE4 D_800980D0; diff --git a/spec b/spec index f3cd6c8ba9..27555435aa 100644 --- a/spec +++ b/spec @@ -61,7 +61,8 @@ beginseg include "build/data/boot/setintmask.rodata.o" include "build/asm/boot/getintmask.text.o" include "build/src/libultra/voice/voicesetword.o" - include "build/data/boot/vimodeHpf.data.o" + include "build/src/libultra/io/osViModeNtscHpf1.o" + include "build/src/libultra/io/osViModePalLan1.o" include "build/asm/boot/guScale.text.o" include "build/src/libultra/gu/sinf.o" include "build/src/libultra/gu/sins.o" @@ -179,8 +180,9 @@ beginseg include "build/src/libultra/io/pfsdeletefile.o" include "build/src/libultra/gu/ortho.o" include "build/asm/boot/interrupt.text.o" + include "build/src/libultra/io/osViModeNtscLan1.o" + include "build/src/libultra/io/osViModeMpalLan1.o" include "build/src/libultra/io/vi.o" - include "build/data/boot/vi.data.o" include "build/src/libultra/io/viswapcontext.o" include "build/src/libultra/io/pigetcmdq.o" include "build/src/libultra/gu/cosf.o" diff --git a/src/libultra/io/osViModeMpalLan1.c b/src/libultra/io/osViModeMpalLan1.c new file mode 100644 index 0000000000..c7c09f659c --- /dev/null +++ b/src/libultra/io/osViModeMpalLan1.c @@ -0,0 +1,34 @@ +#include "global.h" + +OSViMode osViModeMpalLan1 = { + OS_VI_MPAL_LAN1, // type + { + // comRegs + 0x311E, // ctrl + SCREEN_WIDTH, // width + 0x4651E39, // burst + 0x20D, // vSync + 0x40C11, // hSync + 0xC190C1A, // leap + 0x6C02EC, // hStart + 0x200, // xScale + 0, // vCurrent + }, + { // fldRegs + { + // [0] + 0x280, // origin + 0x400, // yScale + 0x2501FF, // vStart + 0xE0204, // vBurst + 2, // vIntr + }, + { + // [1] + 0x280, // origin + 0x400, // yScale + 0x2501FF, // vStart + 0xE0204, // vBurst + 2, // vIntr + } }, +}; diff --git a/src/libultra/io/osViModeNtscHpf1.c b/src/libultra/io/osViModeNtscHpf1.c new file mode 100644 index 0000000000..ac0a1fa2b5 --- /dev/null +++ b/src/libultra/io/osViModeNtscHpf1.c @@ -0,0 +1,34 @@ +#include "global.h" + +OSViMode osViModeNtscHpf1 = { + OS_VI_NTSC_HPF1, // type + { + // comRegs + 0x324E, // ctrl + 640, // width + 0x3E52239, // burst + 0x20C, // vSync + 0xC15, // hSync + 0xC150C15, // leap + 0x6C02EC, // hStart + 0x400, // xScale + 0, // vCurrent + }, + { // fldRegs + { + // [0] + 0x500, // origin + 0x2000800, // yScale + 0x2301FD, // vStart + 0xE0204, // vBurst + 2, // vIntr + }, + { + // [1] + 0xA00, // origin + 0x2000800, // yScale + 0x2501FF, // vStart + 0xE0204, // vBurst + 2 // vIntr + } }, +}; diff --git a/src/libultra/io/osViModeNtscLan1.c b/src/libultra/io/osViModeNtscLan1.c new file mode 100644 index 0000000000..632d763f46 --- /dev/null +++ b/src/libultra/io/osViModeNtscLan1.c @@ -0,0 +1,34 @@ +#include "global.h" + +OSViMode osViModeNtscLan1 = { + OS_VI_NTSC_LAN1, // type + { + // comRegs + 0x311E, // ctrl + SCREEN_WIDTH, // width + 0x3E52239, // burst + 0x20D, // vSync + 0xC15, // hSync + 0xC150C15, // leap + 0x6C02EC, // hStart + 0x200, // xScale + 0, // vCurrent + }, + { // fldRegs + { + // [0] + 0x280, // origin + 0x400, // yScale + 0x2501FF, // vStart + 0xE0204, // vBurst + 2, // vIntr + }, + { + // [1] + 0x280, // origin + 0x400, // yScale + 0x2501FF, // vStart + 0xE0204, // vBurst + 2, // vIntr + } }, +}; diff --git a/src/libultra/io/osViModePalLan1.c b/src/libultra/io/osViModePalLan1.c new file mode 100644 index 0000000000..174cbf1420 --- /dev/null +++ b/src/libultra/io/osViModePalLan1.c @@ -0,0 +1,34 @@ +#include "global.h" + +OSViMode osViModePalLan1 = { + OS_VI_PAL_LAN1, // type + { + // comRegs + 0x311E, // ctrl + SCREEN_WIDTH, // width + 0x4541E3A, // burst + 0x271, // vSync + 0x170C69, // hSync + 0xC6F0C6D, // leap + 0x800300, // hStart + 0x200, // xScale + 0, // vCurrent + }, + { // fldRegs + { + // [0] + 0x280, // origin + 0x400, // yScale + 0x5F0239, // vStart + 0x9026B, // vBurst + 2, // vIntr + }, + { + // [1] + 0x280, // origin + 0x400, // yScale + 0x5F0239, // vStart + 0x9026B, // vBurst + 2 // vIntr + } }, +}; diff --git a/src/libultra/io/vi.c b/src/libultra/io/vi.c index 4facf48e65..7b64b4449b 100644 --- a/src/libultra/io/vi.c +++ b/src/libultra/io/vi.c @@ -1,5 +1,9 @@ #include "global.h" +__OSViContext D_80098060[2] = { 0 }; +__OSViContext* __osViCurr = &D_80098060[0]; +__OSViContext* __osViNext = &D_80098060[1]; + void __osViInit(void) { bzero(D_80098060, sizeof(D_80098060)); __osViCurr = &D_80098060[0]; @@ -9,9 +13,9 @@ void __osViInit(void) { __osViNext->buffer = (void*)0x80000000; __osViCurr->buffer = (void*)0x80000000; - if (osTvType == 0) { + if (osTvType == OS_TV_PAL) { __osViNext->modep = &osViModePalLan1; - } else if (osTvType == 2) { + } else if (osTvType == OS_TV_MPAL) { __osViNext->modep = &osViModeMpalLan1; } else { __osViNext->modep = &osViModeNtscLan1; @@ -20,10 +24,9 @@ void __osViInit(void) { __osViNext->state = 0x20; __osViNext->features = __osViNext->modep->comRegs.ctrl; - while (*(vu32*)0xA4400010 > 10) { - ; - } - *(vu32*)0xA4400000 = 0; + while (HW_REG(VI_CURRENT_REG, u32) > 10) {} + + HW_REG(VI_STATUS_REG, u32) = 0; __osViSwapContext(); } diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index b9a7a0dfdc..3f921e7395 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -259,7 +259,8 @@ 0x80097500 : "boot_800862E0", 0x80097520 : "fp", 0x80097530 : "rand", - 0x80097540 : "vimodeHpf", + 0x80097540 : "osViModeNtscHpf1", + 0x80097590 : "osViModePalLan1", 0x800975E0 : "sins", 0x80097DE0 : "exceptasm", 0x80097E10 : "thread", @@ -276,7 +277,9 @@ 0x80097F90 : "rotate", 0x80097FA0 : "voiceinit", 0x80097FB0 : "contramread", - 0x80097FC0 : "vi", + 0x80097FC0 : "osViModeNtscLan1", + 0x80097FC0 : "osViModeMpalLan1", + 0x80098060 : "vi", 0x800980D0 : "cartrominit", 0x800980E0 : "guS2DInitBg", 0x80098130 : "xldtob",