From ca143abd26c1e7f5e5ce8d3115ab7cf1b5a24957 Mon Sep 17 00:00:00 2001 From: EkeEke Date: Thu, 11 Jul 2013 23:34:51 +0200 Subject: [PATCH] [Gamecube/Wii] added 50hz progressive mode (576p) support for emulation --- gx/gui/menu.c | 32 +++++++++----------------------- gx/gx_video.c | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/gx/gui/menu.c b/gx/gui/menu.c index 518d05d..4a4d63c 100644 --- a/gx/gui/menu.c +++ b/gx/gui/menu.c @@ -1548,19 +1548,12 @@ static void videomenu () config.render = (config.render + 1) % 3; if (config.render == 2) { - if (VIDEO_HaveComponentCable()) + /* progressive mode is only possible through component cable */ + if (!VIDEO_HaveComponentCable()) { - /* progressive mode (60hz only) */ - config.tv_mode = 0; - sprintf (items[1].text, "TV Mode: 60HZ"); - } - else - { - /* do nothing if component cable is not detected */ config.render = 0; } } - if (config.render == 1) sprintf (items[0].text,"Display: INTERLACED"); else if (config.render == 2) @@ -1571,21 +1564,14 @@ static void videomenu () break; case 1: /*** tv mode ***/ - if (config.render != 2) - { - config.tv_mode = (config.tv_mode + 1) % 3; - if (config.tv_mode == 0) - sprintf (items[1].text, "TV Mode: 60HZ"); - else if (config.tv_mode == 1) - sprintf (items[1].text, "TV Mode: 50HZ"); - else - sprintf (items[1].text, "TV Mode: 50/60HZ"); - reinit = 1; - } + config.tv_mode = (config.tv_mode + 1) % 3; + if (config.tv_mode == 0) + sprintf (items[1].text, "TV Mode: 60HZ"); + else if (config.tv_mode == 1) + sprintf (items[1].text, "TV Mode: 50HZ"); else - { - GUI_WaitPrompt("Error","Progressive Mode is 60hz only !\n"); - } + sprintf (items[1].text, "TV Mode: 50/60HZ"); + reinit = 1; break; case 2: /*** VSYNC ***/ diff --git a/gx/gx_video.c b/gx/gx_video.c index b0c3b70..f356b0c 100644 --- a/gx/gx_video.c +++ b/gx/gx_video.c @@ -1522,16 +1522,26 @@ void gx_video_Start(void) VIDEO_Flush(); } - /* set interlaced or progressive video mode */ + /* Enable progressive or interlaced video mode */ if (config.render == 2) { - tvmodes[2]->viTVMode = VI_TVMODE_NTSC_PROG; + /* 480p */ + tvmodes[2]->viTVMode = (tvmodes[2]->viTVMode & ~3) | VI_PROGRESSIVE; tvmodes[2]->xfbMode = VI_XFBMODE_SF; + + /* 576p */ + tvmodes[5]->viTVMode = VI_TVMODE_PAL_PROG; + tvmodes[5]->xfbMode = VI_XFBMODE_SF; } else if (config.render == 1) { - tvmodes[2]->viTVMode = tvmodes[0]->viTVMode & ~3; + /* 480i */ + tvmodes[2]->viTVMode = (tvmodes[2]->viTVMode & ~3) | VI_INTERLACE; tvmodes[2]->xfbMode = VI_XFBMODE_DF; + + /* 576i */ + tvmodes[5]->viTVMode = VI_TVMODE_PAL_INT; + tvmodes[5]->xfbMode = VI_XFBMODE_DF; } /* update horizontal border width */ @@ -1786,7 +1796,7 @@ void gx_video_Init(void) /* Get the current VIDEO mode then : - set menu video mode (480p/576p/480i/576i) - - set emulator rendering 60hz TV modes (PAL/MPAL/NTSC/EURGB60) + - set emulator rendering 60hz TV modes (MPAL/NTSC/EURGB60) */ vmode = VIDEO_GetPreferredMode(NULL);