summaryrefslogtreecommitdiff
path: root/include/ultra64/vi.h
blob: 70665d8f555318c278e3590fb3f0c7643c54a6c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#ifndef ULTRA64_VI_H
#define ULTRA64_VI_H

#include "message.h"

/* 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

typedef struct OSViCommonRegs {
    /* 0x00 */ u32 ctrl;
    /* 0x04 */ u32 width;
    /* 0x08 */ u32 burst;
    /* 0x0C */ u32 vSync;
    /* 0x10 */ u32 hSync;
    /* 0x14 */ u32 leap;
    /* 0x18 */ u32 hStart;
    /* 0x1C */ u32 xScale;
    /* 0x20 */ u32 vCurrent;
} OSViCommonRegs; // size = 0x20

typedef struct OSViFieldRegs {
    /* 0x00 */ u32 origin;
    /* 0x04 */ u32 yScale;
    /* 0x08 */ u32 vStart;
    /* 0x0C */ u32 vBurst;
    /* 0x10 */ u32 vIntr;
} OSViFieldRegs; // size = 0x14

typedef struct OSViMode {
    /* 0x00 */ u8 type;
    /* 0x04 */ OSViCommonRegs comRegs;
    /* 0x24 */ OSViFieldRegs fldRegs[2];
} OSViMode; // size = 0x4C

typedef struct __OSViScale {
    /* 0x0 */ f32 factor;
    /* 0x4 */ u16 offset;
    /* 0x8 */ u32 scale;
} __OSViScale; // size = 0x0C

typedef struct OSViContext {
    /* 0x00 */ u16 state;
    /* 0x02 */ u16 retraceCount;
    /* 0x04 */ void* framep;
    /* 0x08 */ OSViMode* modep;
    /* 0x0C */ u32 features;
    /* 0x10 */ OSMesgQueue* mq;
    /* 0x14 */ OSMesg msg;
    /* 0x18 */ __OSViScale x;
    /* 0x24 */ __OSViScale y;
} OSViContext; // size = 0x30

#define OS_VI_NTSC_LPN1     0   /* NTSC */
#define OS_VI_NTSC_LPF1     1
#define OS_VI_NTSC_LAN1     2
#define OS_VI_NTSC_LAF1     3
#define OS_VI_NTSC_LPN2     4
#define OS_VI_NTSC_LPF2     5
#define OS_VI_NTSC_LAN2     6
#define OS_VI_NTSC_LAF2     7
#define OS_VI_NTSC_HPN1     8
#define OS_VI_NTSC_HPF1     9
#define OS_VI_NTSC_HAN1     10
#define OS_VI_NTSC_HAF1     11
#define OS_VI_NTSC_HPN2     12
#define OS_VI_NTSC_HPF2     13

#define OS_VI_PAL_LPN1      14  /* PAL */
#define OS_VI_PAL_LPF1      15
#define OS_VI_PAL_LAN1      16
#define OS_VI_PAL_LAF1      17
#define OS_VI_PAL_LPN2      18
#define OS_VI_PAL_LPF2      19
#define OS_VI_PAL_LAN2      20
#define OS_VI_PAL_LAF2      21
#define OS_VI_PAL_HPN1      22
#define OS_VI_PAL_HPF1      23
#define OS_VI_PAL_HAN1      24
#define OS_VI_PAL_HAF1      25
#define OS_VI_PAL_HPN2      26
#define OS_VI_PAL_HPF2      27

#define OS_VI_MPAL_LPN1     28  /* MPAL - mainly Brazil */
#define OS_VI_MPAL_LPF1     29
#define OS_VI_MPAL_LAN1     30
#define OS_VI_MPAL_LAF1     31
#define OS_VI_MPAL_LPN2     32
#define OS_VI_MPAL_LPF2     33
#define OS_VI_MPAL_LAN2     34
#define OS_VI_MPAL_LAF2     35
#define OS_VI_MPAL_HPN1     36
#define OS_VI_MPAL_HPF1     37
#define OS_VI_MPAL_HAN1     38
#define OS_VI_MPAL_HAF1     39
#define OS_VI_MPAL_HPN2     40
#define OS_VI_MPAL_HPF2     41

#define OS_VI_FPAL_LPN1     42  /* FPAL - Full screen PAL */
#define OS_VI_FPAL_LPF1     43
#define OS_VI_FPAL_LAN1     44
#define OS_VI_FPAL_LAF1     45
#define OS_VI_FPAL_LPN2     46
#define OS_VI_FPAL_LPF2     47
#define OS_VI_FPAL_LAN2     48
#define OS_VI_FPAL_LAF2     49
#define OS_VI_FPAL_HPN1     50
#define OS_VI_FPAL_HPF1     51
#define OS_VI_FPAL_HAN1     52
#define OS_VI_FPAL_HAF1     53
#define OS_VI_FPAL_HPN2     54
#define OS_VI_FPAL_HPF2     55

#define OS_TV_PAL           0
#define OS_TV_NTSC          1
#define OS_TV_MPAL          2

#endif