@@ -2365,7 +2365,7 @@ static inline u32 __VISetRegs(void)
23652365 u64 mask ;
23662366
23672367 if (shdw_changeMode == 1 ){
2368- if (! __getCurrentFieldEvenOdd ()) return 0 ;
2368+ if (__getCurrentHalfLine ()) return 0 ;
23692369 }
23702370
23712371 while (shdw_changed ) {
@@ -2628,7 +2628,7 @@ void VIDEO_Init(void)
26282628 _CPU_ISR_Restore (level );
26292629}
26302630
2631- void VIDEO_Configure (GXRModeObj * rmode )
2631+ void VIDEO_Configure (const GXRModeObj * rmode )
26322632{
26332633 u16 dcr ;
26342634 u32 nonint ,vimode ,level ;
@@ -2826,10 +2826,27 @@ void VIDEO_SetBlack(bool black)
28262826 _CPU_ISR_Disable (level );
28272827 HorVer .black = black ;
28282828 curtiming = HorVer .timing ;
2829- __setVerticalRegs (HorVer .adjustedDispPosY ,HorVer .dispSizeY ,curtiming -> equ ,curtiming -> acv ,curtiming -> prbOdd ,curtiming -> prbEven ,curtiming -> psbOdd ,curtiming -> psbEven ,HorVer .black );
2829+ __setVerticalRegs (HorVer .adjustedDispPosY ,HorVer .adjustedDispSizeY ,curtiming -> equ ,curtiming -> acv ,curtiming -> prbOdd ,curtiming -> prbEven ,curtiming -> psbOdd ,curtiming -> psbEven ,HorVer .black );
2830+ _CPU_ISR_Restore (level );
2831+ }
2832+
2833+ void VIDEO_Set3D (bool enable3d )
2834+ {
2835+ u32 level ;
2836+
2837+ _CPU_ISR_Disable (level );
2838+ HorVer .threeD = enable3d ;
2839+ regs [1 ] = (regs [1 ]& ~0x0008 )|(_SHIFTL (enable3d ,3 ,1 ));
2840+ changed |= VI_REGCHANGE (1 );
2841+ __setScalingRegs (HorVer .panSizeX ,HorVer .dispSizeX ,HorVer .threeD );
28302842 _CPU_ISR_Restore (level );
28312843}
28322844
2845+ u32 VIDEO_GetRetraceCount (void )
2846+ {
2847+ return retraceCount ;
2848+ }
2849+
28332850u32 VIDEO_GetNextField (void )
28342851{
28352852 u32 level ,nextfield ;
@@ -2866,67 +2883,61 @@ GXRModeObj *rmode = NULL;
28662883 u32 tvmode = CONF_GetVideo ();
28672884 if (CONF_GetProgressiveScan () > 0 && VIDEO_HaveComponentCable ()) {
28682885 switch (tvmode ) {
2869- case CONF_VIDEO_NTSC :
2870- rmode = & TVNtsc480Prog ;
2871- break ;
28722886 case CONF_VIDEO_PAL :
2873- if (CONF_GetEuRGB60 () > 0 )
2874- rmode = & TVEurgb60Hz480Prog ;
2875- else rmode = & TVPal576ProgScale ;
2887+ rmode = CONF_GetEuRGB60 () > 0 ? & TVEurgb60Hz480Prog : & TVPal576ProgScale ;
28762888 break ;
2889+ //GCVideo-DVI might misbehave with MPAL, thinking its PAL50.
2890+ //removing this case fixes that, but then we loose the specific timings/config
28772891 case CONF_VIDEO_MPAL :
28782892 rmode = & TVMpal480Prog ;
28792893 break ;
28802894 default :
2895+ case CONF_VIDEO_NTSC :
28812896 rmode = & TVNtsc480Prog ;
2897+ break ;
28822898 }
28832899 } else {
28842900 switch (tvmode ) {
2885- case CONF_VIDEO_NTSC :
2886- rmode = & TVNtsc480IntDf ;
2887- break ;
28882901 case CONF_VIDEO_PAL :
2889- if (CONF_GetEuRGB60 () > 0 )
2890- rmode = & TVEurgb60Hz480IntDf ;
2891- else rmode = & TVPal576IntDfScale ;
2902+ rmode = CONF_GetEuRGB60 () > 0 ? & TVEurgb60Hz480IntDf : & TVPal576IntDfScale ;
28922903 break ;
28932904 case CONF_VIDEO_MPAL :
2894- rmode = & TVMpal480IntDf ;
2905+ rmode = VIDEO_HaveComponentCable () > 0 ? & TVNtsc480IntDf : & TVMpal480IntDf ;
28952906 break ;
28962907 default :
2908+ case CONF_VIDEO_NTSC :
28972909 rmode = & TVNtsc480IntDf ;
2910+ break ;
28982911 }
28992912 }
29002913#else
2901- u32 tvmode = VIDEO_GetCurrentTvMode ();
2902- if (VIDEO_HaveComponentCable ()) {
2914+ u32 tvmode = SYS_GetVideoMode ();
2915+ if (SYS_GetProgressiveScan () && VIDEO_HaveComponentCable ()) {
29032916 switch (tvmode ) {
2904- case VI_NTSC :
2905- rmode = & TVNtsc480Prog ;
2906- break ;
2907- case VI_PAL :
2908- rmode = & TVPal576ProgScale ;
2917+ case SYS_VIDEO_PAL :
2918+ rmode = SYS_GetEuRGB60 () ? & TVEurgb60Hz480Prog : & TVPal576ProgScale ;
29092919 break ;
2910- case VI_MPAL :
2920+ //GCVideo-DVI might misbehave with MPAL, thinking its PAL50.
2921+ //removing this case fixes that, but then we loose the specific timings/config
2922+ case SYS_VIDEO_MPAL :
29112923 rmode = & TVMpal480Prog ;
29122924 break ;
2913- case VI_EURGB60 :
2914- rmode = & TVEurgb60Hz480Prog ;
2925+ default :
2926+ case SYS_VIDEO_NTSC :
2927+ rmode = & TVNtsc480Prog ;
29152928 break ;
29162929 }
29172930 } else {
29182931 switch (tvmode ) {
2919- case VI_NTSC :
2920- rmode = & TVNtsc480IntDf ;
2921- break ;
2922- case VI_PAL :
2923- rmode = & TVPal576IntDfScale ;
2932+ case SYS_VIDEO_PAL :
2933+ rmode = SYS_GetEuRGB60 () > 0 ? & TVEurgb60Hz480IntDf : & TVPal576IntDfScale ;
29242934 break ;
2925- case VI_MPAL :
2926- rmode = & TVMpal480IntDf ;
2935+ case SYS_VIDEO_MPAL :
2936+ rmode = VIDEO_HaveComponentCable () > 0 ? & TVNtsc480IntDf : & TVMpal480IntDf ;
29272937 break ;
2928- case VI_EURGB60 :
2929- rmode = & TVEurgb60Hz480IntDf ;
2938+ default :
2939+ case SYS_VIDEO_NTSC :
2940+ rmode = & TVNtsc480IntDf ;
29302941 break ;
29312942 }
29322943 }
@@ -2998,7 +3009,16 @@ void VIDEO_ClearFrameBuffer(GXRModeObj *rmode,void *fb,u32 color)
29983009
29993010u32 VIDEO_HaveComponentCable (void )
30003011{
3001- return (_viReg [55 ]& 0x01 );
3012+ u32 dtv ,level ;
3013+ _CPU_ISR_Disable (level );
3014+
3015+ dtv = (_viReg [55 ]& 0x0001 );
3016+ #if defined(HW_DOL )
3017+ dtv |= (_viReg [54 ]& 0x0001 );
3018+ #endif
3019+
3020+ _CPU_ISR_Restore (level );
3021+ return dtv ;
30023022}
30033023
30043024u32 VIDEO_GetVideoScanMode (void )
0 commit comments