vireg.h revision 1.1
11.1Sjmcneill/* $NetBSD: vireg.h,v 1.1 2026/01/09 22:54:30 jmcneill Exp $ */
21.1Sjmcneill
31.1Sjmcneill/*-
41.1Sjmcneill * Copyright (c) 2024 Jared McNeill <jmcneill@invisible.ca>
51.1Sjmcneill * All rights reserved.
61.1Sjmcneill *
71.1Sjmcneill * Redistribution and use in source and binary forms, with or without
81.1Sjmcneill * modification, are permitted provided that the following conditions
91.1Sjmcneill * are met:
101.1Sjmcneill * 1. Redistributions of source code must retain the above copyright
111.1Sjmcneill *    notice, this list of conditions and the following disclaimer.
121.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright
131.1Sjmcneill *    notice, this list of conditions and the following disclaimer in the
141.1Sjmcneill *    documentation and/or other materials provided with the distribution.
151.1Sjmcneill *
161.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
171.1Sjmcneill * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
181.1Sjmcneill * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
191.1Sjmcneill * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
201.1Sjmcneill * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
211.1Sjmcneill * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
221.1Sjmcneill * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
231.1Sjmcneill * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
241.1Sjmcneill * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
251.1Sjmcneill * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
261.1Sjmcneill * SUCH DAMAGE.
271.1Sjmcneill */
281.1Sjmcneill
291.1Sjmcneill#ifndef _WII_DEV_VIREG_H
301.1Sjmcneill#define _WII_DEV_VIREG_H
311.1Sjmcneill
321.1Sjmcneill/*
331.1Sjmcneill * Nintendo Wii Video Interface (VI) registers, from
341.1Sjmcneill * https://www.gc-forever.com/yagcd/
351.1Sjmcneill */
361.1Sjmcneill
371.1Sjmcneill/* [2B] VTR - Vertical Timing Register */
381.1Sjmcneill#define VI_VTR		0x00
391.1Sjmcneill#define	 VI_VTR_ACV	__BITS(13,4)
401.1Sjmcneill#define	 VI_VTR_EQU	__BITS(3,0)
411.1Sjmcneill
421.1Sjmcneill/* [2B] DCR - Display Configuration Register */
431.1Sjmcneill#define VI_DCR		0x02
441.1Sjmcneill#define	 VI_DCR_FMT	__BITS(9,8)
451.1Sjmcneill#define   VI_DCR_FMT_NTSC	0
461.1Sjmcneill#define   VI_DCR_FMT_PAL	1
471.1Sjmcneill#define   VI_DCR_FMT_MPAL	2
481.1Sjmcneill#define   VI_DCR_FMT_DEBUG	3
491.1Sjmcneill#define  VI_DCR_LE1	__BITS(7,6)
501.1Sjmcneill#define  VI_DCR_LE0	__BITS(5,4)
511.1Sjmcneill#define	 VI_DCR_DLR	__BIT(3)
521.1Sjmcneill#define  VI_DCR_NIN	__BIT(2)
531.1Sjmcneill#define  VI_DCR_RST	__BIT(1)
541.1Sjmcneill#define  VI_DCR_ENB	__BIT(0)
551.1Sjmcneill
561.1Sjmcneill/* [4B] HTR0 - Horizontal Timing 0 */
571.1Sjmcneill#define VI_HTR0		0x04
581.1Sjmcneill#define	 VI_HTR0_HCS	__BITS(30,24)
591.1Sjmcneill#define	 VI_HTR0_HCE	__BITS(22,16)
601.1Sjmcneill#define	 VI_HTR0_HLW	__BITS(8,0)
611.1Sjmcneill
621.1Sjmcneill/* [4B] HTR1 - Horizontal Timing 1 */
631.1Sjmcneill#define VI_HTR1		0x08
641.1Sjmcneill#define	 VI_HTR1_HBS	__BITS(26,17)
651.1Sjmcneill#define  VI_HTR1_HBE	__BITS(16,7)
661.1Sjmcneill#define	 VI_HTR1_HSY	__BITS(6,0)
671.1Sjmcneill
681.1Sjmcneill/* [4B] VTO - Odd Field Vertical Timing Register */
691.1Sjmcneill#define VI_VTO		0x0c
701.1Sjmcneill#define  VI_VTO_PSB	__BITS(25,16)
711.1Sjmcneill#define  VI_VTO_PRB	__BITS(9,0)
721.1Sjmcneill
731.1Sjmcneill/* [4B] VTE - Even Field Vertical Timing Register */
741.1Sjmcneill#define VI_VTE		0x10
751.1Sjmcneill#define  VI_VTE_PSB	__BITS(25,16)
761.1Sjmcneill#define  VI_VTE_PRB	__BITS(9,0)
771.1Sjmcneill
781.1Sjmcneill/* [4B] BBOI - Odd Field Burst Blanking Interval Register */
791.1Sjmcneill#define VI_BBOI		0x14
801.1Sjmcneill#define  VI_BBOI_BE3	__BITS(31,21)
811.1Sjmcneill#define	 VI_BBOI_BS3	__BITS(20,16)
821.1Sjmcneill#define  VI_BBOI_BE1	__BITS(15,5)
831.1Sjmcneill#define  VI_BBOI_BS1	__BITS(4,0)
841.1Sjmcneill
851.1Sjmcneill/* [4B] BBEI - Even Field Burst Blanking Interval Register */
861.1Sjmcneill#define VI_BBEI		0x18
871.1Sjmcneill#define  VI_BBEI_BE4	__BITS(31,21)
881.1Sjmcneill#define	 VI_BBEI_BS4	__BITS(20,16)
891.1Sjmcneill#define  VI_BBEI_BE2	__BITS(15,5)
901.1Sjmcneill#define  VI_BBEI_BS2	__BITS(4,0)
911.1Sjmcneill
921.1Sjmcneill/* [4B] TFBL - Top Field Base Register (L) */
931.1Sjmcneill#define VI_TFBL		0x1c
941.1Sjmcneill#define  VI_TFBL_PGOFF	__BIT(28)
951.1Sjmcneill#define  VI_TFBL_XOF	__BITS(27,24)
961.1Sjmcneill#define  VI_TFBL_FBB	__BITS(23,0)
971.1Sjmcneill
981.1Sjmcneill/* [4B] TFBR - Top Field Base Register (R) */
991.1Sjmcneill#define VI_TFBR		0x20
1001.1Sjmcneill#define	 VI_TFBR_FBB	__BITS(23,0)
1011.1Sjmcneill
1021.1Sjmcneill/* [4B] BFBL - Bottom Field Base Register (L) */
1031.1Sjmcneill#define VI_BFBL		0x24
1041.1Sjmcneill#define	 VI_BFBL_PGOFF	__BIT(28)
1051.1Sjmcneill#define  VI_BFBL_XOF	__BITS(27,24)
1061.1Sjmcneill#define	 VI_BFBL_FBB	__BITS(23,0)
1071.1Sjmcneill
1081.1Sjmcneill/* [4B] BFBR - Bottom Field Base Register (R) */
1091.1Sjmcneill#define VI_BFBR		0x28
1101.1Sjmcneill#define	 VI_BFBR_FBB	__BITS(23,0)
1111.1Sjmcneill
1121.1Sjmcneill/* [2B] DPV - Current Vertical Position */
1131.1Sjmcneill#define VI_DPV		0x2c
1141.1Sjmcneill#define  VI_DPV_VCT	__BITS(10,0)
1151.1Sjmcneill
1161.1Sjmcneill/* [2B] DPH - Current Horizontal Position */
1171.1Sjmcneill#define VI_DPH		0x2e
1181.1Sjmcneill#define	 VI_DPH_HCT	__BITS(10,0)
1191.1Sjmcneill
1201.1Sjmcneill/* [4B] DI[0-3] - Display Interrupt 0-3 */
1211.1Sjmcneill#define VI_DI0		0x30
1221.1Sjmcneill#define VI_DI1		0x34
1231.1Sjmcneill#define	VI_DI2		0x38
1241.1Sjmcneill#define	VI_DI3		0x3c
1251.1Sjmcneill#define  VI_DI_INT	__BIT(31)
1261.1Sjmcneill#define  VI_DI_ENB	__BIT(28)
1271.1Sjmcneill#define	 VI_DI_VCT	__BITS(25,16)
1281.1Sjmcneill#define	 VI_DI_HCT	__BITS(9,0)
1291.1Sjmcneill
1301.1Sjmcneill/* [4B] DL[0-1] - Display Latch Register 0-1 */
1311.1Sjmcneill#define VI_DL0		0x40
1321.1Sjmcneill#define	VI_DL1		0x44
1331.1Sjmcneill#define	 VI_DL_TRG	__BIT(31)
1341.1Sjmcneill#define	 VI_DL_VCT	__BITS(26,16)
1351.1Sjmcneill#define  VI_DL_HCT	__BITS(10,0)
1361.1Sjmcneill
1371.1Sjmcneill/* [2B] PICCONF - Picture Configuration Register */
1381.1Sjmcneill#define VI_PICCONF	0x48
1391.1Sjmcneill#define  VI_PICCONF_READS	__BITS(15,8)
1401.1Sjmcneill#define	 VI_PICCONF_STRIDES	__BITS(7,0)
1411.1Sjmcneill
1421.1Sjmcneill/* [2B] HSR - Horizontal Scaling Register */
1431.1Sjmcneill#define VI_HSR		0x4a
1441.1Sjmcneill#define	 VI_HSR_HS_EN	__BIT(12)
1451.1Sjmcneill#define	 VI_HSR_STP	__BITS(8,0)
1461.1Sjmcneill
1471.1Sjmcneill/* [4B] FCT[0-6] - Filter Coefficient Table 0-6 */
1481.1Sjmcneill#define VI_FCT0		0x4c
1491.1Sjmcneill#define VI_FCT1		0x50
1501.1Sjmcneill#define VI_FCT2		0x54
1511.1Sjmcneill#define VI_FCT3		0x58
1521.1Sjmcneill#define VI_FCT4		0x5c
1531.1Sjmcneill#define VI_FCT5		0x60
1541.1Sjmcneill#define VI_FCT6		0x64
1551.1Sjmcneill
1561.1Sjmcneill/* [4B] ??? */
1571.1Sjmcneill#define VI_UNKNOWN_68H	0x68
1581.1Sjmcneill
1591.1Sjmcneill/* [2B] VICLK - VI Clock Select Register */
1601.1Sjmcneill#define	VI_VICLK	0x6c
1611.1Sjmcneill#define	 VI_VICLK_SEL	__BIT(0)
1621.1Sjmcneill#define	  VI_VICLK_SEL_27MHZ	0
1631.1Sjmcneill#define	  VI_VICLK_SEL_54MHZ	1
1641.1Sjmcneill
1651.1Sjmcneill/* [2B] VISEL - VI DTV Status Register */
1661.1Sjmcneill#define VI_VISEL	0x6e
1671.1Sjmcneill#define	 VI_VISEL_SEL			__BIT(2)
1681.1Sjmcneill#define	 VI_VISEL_COMPONENT_CABLE	__BIT(0)
1691.1Sjmcneill
1701.1Sjmcneill/* [2B] VI_HSCALINGW - Horizontal Scaling Width */
1711.1Sjmcneill#define VI_HSCALINGW	0x70
1721.1Sjmcneill#define  VI_HSCALINGW_WIDTH	__BITS(9,0)
1731.1Sjmcneill
1741.1Sjmcneill/* [2B] HBE - Border HBE */
1751.1Sjmcneill#define VI_HBE		0x72
1761.1Sjmcneill#define	 VI_HBE_BRDR_EN	__BIT(15)
1771.1Sjmcneill#define	 VI_HBE_HBE656	__BITS(9,0)
1781.1Sjmcneill
1791.1Sjmcneill/* [2B] HBS - Border HBS */
1801.1Sjmcneill#define VI_HBS		0x74
1811.1Sjmcneill#define  VI_HBS_HBS656	__BITS(9,0)
1821.1Sjmcneill
1831.1Sjmcneill/* [2B] ??? */
1841.1Sjmcneill#define VI_UNKNOWN_76H	0x76
1851.1Sjmcneill
1861.1Sjmcneill/* [4B] ??? */
1871.1Sjmcneill#define VI_UNKNOWN_78H	0x78
1881.1Sjmcneill
1891.1Sjmcneill/* [4B] ??? */
1901.1Sjmcneill#define VI_UNKNOWN_7CH	0x7c
1911.1Sjmcneill
1921.1Sjmcneill#endif /* !_WII_DEV_VIREG_H */
193