Decomp some OSViMode structs

This commit is contained in:
Ryan Myers
2021-10-21 20:08:32 -04:00
parent 2780d354fc
commit 0056860f65
4 changed files with 147 additions and 62 deletions
+26 -15
View File
@@ -4,22 +4,33 @@
/* Ultra64 Video Interface */
/* Special Features */
#define OS_VI_GAMMA_ON 0x0001
#define OS_VI_GAMMA_OFF 0x0002
#define OS_VI_GAMMA_DITHER_ON 0x0004
#define OS_VI_GAMMA_DITHER_OFF 0x0008
#define OS_VI_DIVOT_ON 0x0010
#define OS_VI_DIVOT_OFF 0x0020
#define OS_VI_DITHER_FILTER_ON 0x0040
#define OS_VI_DITHER_FILTER_OFF 0x0080
/*
* Video Interface (VI) special features
*/
#define OS_VI_GAMMA_ON 0x0001
#define OS_VI_GAMMA_OFF 0x0002
#define OS_VI_GAMMA_DITHER_ON 0x0004
#define OS_VI_GAMMA_DITHER_OFF 0x0008
#define OS_VI_DIVOT_ON 0x0010
#define OS_VI_DIVOT_OFF 0x0020
#define OS_VI_DITHER_FILTER_ON 0x0040
#define OS_VI_DITHER_FILTER_OFF 0x0080
#define OS_VI_GAMMA 0x08
#define OS_VI_GAMMA_DITHER 0x04
#define OS_VI_DIVOT 0x10
#define OS_VI_DITHER_FILTER 0x10000
#define OS_VI_UNK200 0x200
#define OS_VI_UNK100 0x100
/*
* Video Interface (VI) mode attribute bit
*/
#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */
#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */
#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */
#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */
#define OS_VI_BIT_ANTIALIAS 0x0010
#define OS_VI_BIT_POINTSAMPLE 0x0020
#define OS_VI_BIT_16PIXEL 0x0040
#define OS_VI_BIT_32PIXEL 0x0080
#define OS_VI_BIT_LORES 0x0100
#define OS_VI_BIT_HIRES 0x0200
#define OS_VI_BIT_NTSC 0x0400
#define OS_VI_BIT_PAL 0x0800
/* Types */
+110 -36
View File
@@ -57,30 +57,30 @@
/*
* Video Interface (VI) special features
*/
#define OS_VI_GAMMA_ON 0x0001
#define OS_VI_GAMMA_OFF 0x0002
#define OS_VI_GAMMA_ON 0x0001
#define OS_VI_GAMMA_OFF 0x0002
#define OS_VI_GAMMA_DITHER_ON 0x0004
#define OS_VI_GAMMA_DITHER_OFF 0x0008
#define OS_VI_DIVOT_ON 0x0010
#define OS_VI_DIVOT_OFF 0x0020
#define OS_VI_DIVOT_ON 0x0010
#define OS_VI_DIVOT_OFF 0x0020
#define OS_VI_DITHER_FILTER_ON 0x0040
#define OS_VI_DITHER_FILTER_OFF 0x0080
/*
* Video Interface (VI) mode attribute bit
*/
#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */
#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */
#define OS_VI_BIT_NONINTERLACE 0x0001 /* lo-res */
#define OS_VI_BIT_INTERLACE 0x0002 /* lo-res */
#define OS_VI_BIT_NORMALINTERLACE 0x0004 /* hi-res */
#define OS_VI_BIT_DEFLICKINTERLACE 0x0008 /* hi-res */
#define OS_VI_BIT_ANTIALIAS 0x0010
#define OS_VI_BIT_POINTSAMPLE 0x0020
#define OS_VI_BIT_16PIXEL 0x0040
#define OS_VI_BIT_32PIXEL 0x0080
#define OS_VI_BIT_LORES 0x0100
#define OS_VI_BIT_HIRES 0x0200
#define OS_VI_BIT_NTSC 0x0400
#define OS_VI_BIT_PAL 0x0800
#define OS_VI_BIT_ANTIALIAS 0x0010
#define OS_VI_BIT_POINTSAMPLE 0x0020
#define OS_VI_BIT_16PIXEL 0x0040
#define OS_VI_BIT_32PIXEL 0x0080
#define OS_VI_BIT_LORES 0x0100
#define OS_VI_BIT_HIRES 0x0200
#define OS_VI_BIT_NTSC 0x0400
#define OS_VI_BIT_PAL 0x0800
OSViMode osViModeTable[42] = {
{OS_VI_NTSC_LPN1, //type
@@ -1546,30 +1546,104 @@ OSViMode osViModeTable[42] = {
}}},
};
// TODO: Convert the following arrays into OSViMode structs.
s32 D_800E4620[20] = {
0x00000000, 0x0000320E, 0x00000140, 0x03E52239,
0x0000020D, 0x00000C15, 0x0C150C15, 0x006C02EC,
0x00000200, 0x00000000, 0x00000280, 0x00000400,
0x002501FF, 0x000E0204, 0x00000002, 0x00000280,
0x00000400, 0x002501FF, 0x000E0204, 0x00000002
};
OSViMode osViModeNtscLpn1 = {
OS_VI_NTSC_LPN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_ANTIALIAS_MODE_2 | 0x3000, // ctrl
WIDTH(320), // width
BURST(57, 34, 5, 62), // burst
VSYNC(525), // vSync
HSYNC(3093, 0), // hSync
LEAP(3093, 3093), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
}}};
s32 D_800E4670[20] = {
0x0E000000, 0x0000320E, 0x00000140, 0x0404233A,
0x00000271, 0x00150C69, 0x0C6F0C6E, 0x00800300,
0x00000200, 0x00000000, 0x00000280, 0x00000400,
0x005F0239, 0x0009026B, 0x00000002, 0x00000280,
0x00000400, 0x005F0239, 0x0009026B, 0x00000002
};
OSViMode osViModePalLpn1 = {
OS_VI_PAL_LPN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_ANTIALIAS_MODE_2 | 0x3000, // ctrl
WIDTH(320), // width
BURST(58, 35, 4, 64), // burst
VSYNC(625), // vSync
HSYNC(3177, 21), // hSync
LEAP(3183, 3182), // leap
HSTART(128, 768), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(95, 569), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
}}};
s32 D_800E46C0[20] = {
0x1C000000, 0x0000320E, 0x00000140, 0x04651E39,
0x0000020D, 0x00040C11, 0x0C190C1A, 0x006C02EC,
0x00000200, 0x00000000, 0x00000280, 0x00000400,
0x002501FF, 0x000E0204, 0x00000002, 0x00000280,
0x00000400, 0x002501FF, 0x000E0204, 0x00000002
};
OSViMode osViModeMpalLpn1 = {
OS_VI_MPAL_LPN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON |
VI_CTRL_ANTIALIAS_MODE_2 | 0x3000, // ctrl
WIDTH(320), // width
BURST(57, 30, 5, 70), // burst
VSYNC(525), // vSync
HSYNC(3089, 4), // hSync
LEAP(3097, 3098), // leap
HSTART(108, 748), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{// fldRegs
{
//[0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
},
{
//[1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(37, 511), // vStart
BURST(4, 2, 14, 0), // vBurst
VINTR(2), // vIntr
}}};
OSViMode osViModeNtscLan1 = {
OS_VI_NTSC_LAN1, // type
+10 -10
View File
@@ -128,28 +128,28 @@ void init_vi_settings(void) {
break;
case 1:
stubbed_printf("320 by 240 Anti-aliased, Non interlaced.\n");
tvViMode = &D_800E4620;
tvViMode = &osViModeNtscLpn1;
if (osTvType == TV_TYPE_PAL) {
tvViMode = &D_800E4670;
tvViMode = &osViModePalLpn1;
} else if (osTvType == TV_TYPE_MPAL) {
tvViMode = &D_800E46C0;
tvViMode = &osViModeMpalLpn1;
}
memory_copy(tvViMode, &D_80126260, sizeof(OSViMode));
if (osTvType == TV_TYPE_PAL) {
D_80126260.fldRegs[0].vStart -= 0x180000;
D_80126260.fldRegs[1].vStart -= 0x180000;
D_80126260.fldRegs[0].vStart += 24;
D_80126260.fldRegs[1].vStart += 24;
D_80126260.fldRegs[0].vStart -= 0x180000; //0x18 << 16
D_80126260.fldRegs[1].vStart -= 0x180000; //0x18 << 16
D_80126260.fldRegs[0].vStart += 0x18;
D_80126260.fldRegs[1].vStart += 0x18;
}
osViSetMode(&D_80126260);
break;
case 2:
stubbed_printf("640 by 240 Point sampled, Non interlaced.\n");
tvViMode = &D_800E4620;
tvViMode = &osViModeNtscLpn1;
if (osTvType == TV_TYPE_PAL) {
tvViMode = &D_800E4670;
tvViMode = &osViModePalLpn1;
} else if (osTvType == TV_TYPE_MPAL) {
tvViMode = &D_800E46C0;
tvViMode = &osViModeMpalLpn1;
}
memory_copy(tvViMode, &D_80126260, sizeof(OSViMode));
+1 -1
View File
@@ -38,7 +38,7 @@ extern u16 *gVideoDepthBuffer;
extern s32 D_800DE774;
extern s8 D_800DE778;
extern OSViMode D_800E4620, D_800E4670, D_800E46C0, osViModePalLan1, osViModeNtscLan1, osViModeMpalLan1;
extern OSViMode osViModeNtscLpn1, osViModePalLpn1, osViModeMpalLpn1, osViModePalLan1, osViModeNtscLan1, osViModeMpalLan1;
/* Size: 0x08 bytes */
typedef struct VideoModeResolution {