mirror of https://github.com/zeldaret/tp.git
148 lines
3.9 KiB
C
148 lines
3.9 KiB
C
#ifndef VI_H
|
|
#define VI_H
|
|
|
|
#include "dolphin/types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct _GXRenderModeObj GXRenderModeObj;
|
|
|
|
#define VI_INTERLACE (0)
|
|
#define VI_NON_INTERLACE (1)
|
|
#define VI_PROGRESSIVE (2)
|
|
#define VI_3D (3)
|
|
|
|
// Video output formats
|
|
#define VI_NTSC (0)
|
|
#define VI_PAL (1)
|
|
#define VI_MPAL (2)
|
|
#define VI_DEBUG (3)
|
|
#define VI_DEBUG_PAL (4)
|
|
#define VI_EURGB60 (5)
|
|
#define VI_GCA (6)
|
|
|
|
// Conversion to TVMode used in enums
|
|
#define VI_TVMODE(FMT, INT) (((FMT) << 2) + (INT))
|
|
|
|
// TV Modes
|
|
typedef enum {
|
|
// NTSC
|
|
VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE), // 0
|
|
VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE), // 1
|
|
VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE), // 2
|
|
VI_TVMODE_NTSC_3D = VI_TVMODE(VI_NTSC, VI_3D), // 3
|
|
|
|
// PAL
|
|
VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE), // 4
|
|
VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE), // 5
|
|
|
|
// MPAL
|
|
VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE), // 8
|
|
VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE), // 9
|
|
|
|
// Debug
|
|
VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE), // 12
|
|
|
|
// Debug PAL
|
|
VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE), // 16
|
|
VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE), // 17
|
|
|
|
// EU RGB60
|
|
VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE), // 20
|
|
VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE), // 21
|
|
|
|
// GCA
|
|
VI_TVMODE_GCA_INT = VI_TVMODE(VI_GCA, VI_INTERLACE), // 24
|
|
VI_TVMODE_GCA_DS = VI_TVMODE(VI_GCA, VI_NON_INTERLACE), // 25
|
|
VI_TVMODE_GCA_PROG = VI_TVMODE(VI_GCA, VI_PROGRESSIVE), // 26
|
|
} VITVMode;
|
|
|
|
typedef enum { VI_XFBMODE_SF = 0, VI_XFBMODE_DF } VIXFBMode;
|
|
|
|
typedef void (*VIRetraceCallback)(u32);
|
|
typedef void (*VIPositionCallback)(s16 x, s16 y);
|
|
|
|
typedef struct VITimingInfo {
|
|
u8 equ; // _00
|
|
u16 acv; // _02
|
|
u16 prbOdd; // _04
|
|
u16 prbEven; // _06
|
|
u16 psbOdd; // _08
|
|
u16 psbEven; // _0A
|
|
u8 bs1; // _0C
|
|
u8 bs2; // _0D
|
|
u8 bs3; // _0E
|
|
u8 bs4; // _0F
|
|
u16 be1; // _10
|
|
u16 be2; // _12
|
|
u16 be3; // _14
|
|
u16 be4; // _16
|
|
u16 numHalfLines; // _18
|
|
u16 hlw; // _1A
|
|
u8 hsy; // _1C
|
|
u8 hcs; // _1D
|
|
u8 hce; // _1E
|
|
u8 hbe640; // _1F
|
|
u16 hbs640; // _20
|
|
u8 hbeCCIR656; // _24
|
|
u16 hbsCCIR656; // _26
|
|
} VITimingInfo;
|
|
|
|
typedef struct VIPositionInfo {
|
|
u16 dispPosX; // _00
|
|
u16 dispPosY; // _02
|
|
u16 dispSizeX; // _04
|
|
u16 dispSizeY; // _06
|
|
u16 adjDispPosX; // _08
|
|
u16 adjDispPosY; // _0A
|
|
u16 adjDispSizeY; // _0C
|
|
u16 adjPanPosY; // _0E
|
|
u16 adjPanSizeY; // _10
|
|
u16 fbSizeX; // _12
|
|
u16 fbSizeY; // _14
|
|
u16 panPosX; // _16
|
|
u16 panPosY; // _18
|
|
u16 panSizeX; // _1A
|
|
u16 panSizeY; // _1C
|
|
VIXFBMode xfbMode; // _20
|
|
u32 nonInter; // _24
|
|
u32 tv; // _28
|
|
u8 wordPerLine; // _2C
|
|
u8 std; // _2D
|
|
u8 wpl; // _2E
|
|
u32 bufAddr; // _30
|
|
u32 tfbb; // _34
|
|
u32 bfbb; // _38
|
|
u8 xof; // _3C
|
|
BOOL isBlack; // _40
|
|
BOOL is3D; // _44
|
|
u32 rbufAddr; // _48
|
|
u32 rtfbb; // _4C
|
|
u32 rbfbb; // _50
|
|
VITimingInfo* timing; // _54
|
|
} VIPositionInfo;
|
|
|
|
void VIWaitForRetrace(void);
|
|
void VISetNextFrameBuffer(void*);
|
|
VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback);
|
|
VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback);
|
|
void VIInit();
|
|
void VIConfigure(const GXRenderModeObj*);
|
|
void VIFlush();
|
|
void* VIGetNextFrameBuffer();
|
|
void* VIGetCurrentFrameBuffer();
|
|
void VISetBlack(BOOL);
|
|
u32 VIGetRetraceCount();
|
|
u32 VIGetDTVStatus();
|
|
u32 VIGetTvFormat(void);
|
|
|
|
vu16 __VIRegs[59] : 0xCC002000;
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif /* VI_H */
|