From 09ae27a9c9adb803882ba2614d81a1d55788885b Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 1 Jan 2023 17:00:27 +0000 Subject: [PATCH] Add some missing render modes --- source/patches/gamepatches.c | 563 ++++++++++++++++++++++++++++++++--- 1 file changed, 529 insertions(+), 34 deletions(-) diff --git a/source/patches/gamepatches.c b/source/patches/gamepatches.c index 7b838ad8..0ea8e82d 100644 --- a/source/patches/gamepatches.c +++ b/source/patches/gamepatches.c @@ -1141,6 +1141,39 @@ static GXRModeObj TVPal524ProgAa_RVL = { } }; +static GXRModeObj TVPal528Int_RVL = { + 4, // viDisplayMode + 640, // fbWidth + 528, // efbHeight + 528, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 23, // viYOrigin (574 - 528)/2 + 640, // viWidth + 528, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + static GXRModeObj TVPal528IntDf_RVL = { 4, // viDisplayMode 640, // fbWidth @@ -1164,13 +1197,442 @@ static GXRModeObj TVPal528IntDf_RVL = { // vertical filter[7], 1/64 units, 6 bits each { - 8, // line n-1 - 8, // line n-1 + 8, // line n-1 + 8, // line n-1 10, // line n 12, // line n 10, // line n - 8, // line n+1 - 8 // line n+1 + 8, // line n+1 + 8 // line n+1 + } +}; + +static GXRModeObj TVEurgb60Hz480Prog_RVL = { + 22, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVEurgb60Hz480ProgSoft_RVL = { + 22, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +static GXRModeObj TVEurgb60Hz480ProgAa_RVL = { + 22, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +static GXRModeObj TVPal524IntAa_RVL = { + 4, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 524, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 23, // viYOrigin (574 - 528)/2 //574 instead of 576 + 640, // viWidth + 524, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 + } +}; + +static GXRModeObj TVPal264Int_RVL = { + 4, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 23, // viYOrigin (574 - 528)/2 + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVPal264IntAa_RVL = { + 4, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 23, // viYOrigin (574 - 528)/2 + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVPal264Ds_RVL = { + 5, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 11, // viYOrigin (572/2 - 528/2)/2 + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVPal264DsAa_RVL = { + 5, // viDisplayMode + 640, // fbWidth + 264, // efbHeight + 264, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 11, // viYOrigin (572/2 - 528/2)/2 + 640, // viWidth + 528, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVMpal240Int_RVL = { + 8, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVMpal240IntAa_RVL = { + 8, // viDisplayMode + 640, // fbWidth + 240, // efbHeight + 240, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_TRUE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVMpal480Int_RVL = { + 8, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_DF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 0, // line n-1 + 0, // line n-1 + 21, // line n + 22, // line n + 21, // line n + 0, // line n+1 + 0 // line n+1 + } +}; + +static GXRModeObj TVMpal480ProgSoft_RVL = { + 10, // viDisplayMode + 640, // fbWidth + 480, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_FALSE, // aa + + // sample points arranged in increasing Y order + { + {6, 6}, {6, 6}, {6, 6}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {6, 6}, {6, 6}, {6, 6}, // pix 1 + {6, 6}, {6, 6}, {6, 6}, // pix 2 + {6, 6}, {6, 6}, {6, 6} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 8, // line n-1 + 8, // line n-1 + 10, // line n + 12, // line n + 10, // line n + 8, // line n+1 + 8 // line n+1 + } +}; + +static GXRModeObj TVMpal480ProgAa_RVL = { + 10, // viDisplayMode + 640, // fbWidth + 242, // efbHeight + 480, // xfbHeight + 40, // viXOrigin (720 - 640)/2 + 0, // viYOrigin (480 - 480)/2 + 640, // viWidth + 480, // viHeight + VI_XFBMODE_SF, // xFBmode + GX_FALSE, // field_rendering + GX_TRUE, // aa + + // sample points arranged in increasing Y order + { + {3, 2}, {9, 6}, {3, 10}, // pix 0, 3 sample points, 1/12 units, 4 bits each + {3, 2}, {9, 6}, {3, 10}, // pix 1 + {9, 2}, {3, 6}, {9, 10}, // pix 2 + {9, 2}, {3, 6}, {9, 10} // pix 3 + }, + + // vertical filter[7], 1/64 units, 6 bits each + { + 4, // line n-1 + 8, // line n-1 + 12, // line n + 16, // line n + 12, // line n + 8, // line n+1 + 4 // line n+1 } }; @@ -1185,14 +1647,23 @@ static GXRModeObj *vmodes[] = { &TVNtsc480Prog, &TVNtsc480ProgSoft, &TVNtsc480ProgAa, + &TVMpal240Int_RVL, + &TVMpal240IntAa_RVL, + &TVMpal240Ds, + &TVMpal240DsAa, + &TVMpal480Int_RVL, + &TVMpal480IntAa, &TVMpal480IntDf, - &TVPal264Ds, - &TVPal264DsAa, - &TVPal264Int, - &TVPal264IntAa, + &TVMpal480Prog, + &TVMpal480ProgSoft_RVL, + &TVMpal480ProgAa_RVL, + &TVPal264Ds_RVL, + &TVPal264DsAa_RVL, + &TVPal264Int_RVL, + &TVPal264IntAa_RVL, + &TVPal524IntAa_RVL, &TVPal524ProgAa_RVL, - &TVPal524IntAa, - &TVPal528Int, + &TVPal528Int_RVL, &TVPal528IntDf_RVL, &TVPal528Prog_RVL, &TVPal528ProgSoft_RVL, @@ -1204,9 +1675,9 @@ static GXRModeObj *vmodes[] = { &TVEurgb60Hz480Int, &TVEurgb60Hz480IntDf, &TVEurgb60Hz480IntAa, - &TVEurgb60Hz480Prog, - &TVEurgb60Hz480ProgSoft, - &TVEurgb60Hz480ProgAa}; + &TVEurgb60Hz480Prog_RVL, + &TVEurgb60Hz480ProgSoft_RVL, + &TVEurgb60Hz480ProgAa_RVL}; static const char *vmodes_name[] = { "TVNtsc240Ds", @@ -1219,17 +1690,26 @@ static const char *vmodes_name[] = { "TVNtsc480Prog", "TVNtsc480ProgSoft", "TVNtsc480ProgAa", + "TVMpal240Int", + "TVMpal240IntAa", + "TVMpal240Ds", + "TVMpal240DsAa", + "TVMpal480Int", + "TVMpal480IntAa", "TVMpal480IntDf", + "TVMpal480Prog", + "TVMpal480ProgSoft", + "TVMpal480ProgAa", "TVPal264Ds", "TVPal264DsAa", "TVPal264Int", "TVPal264IntAa", - "TVPal524ProgAa_RVL", "TVPal524IntAa", + "TVPal524ProgAa", "TVPal528Int", - "TVPal528IntDf_RVL", - "TVPal528Prog_RVL", - "TVPal528ProgSoft_RVL", + "TVPal528IntDf", + "TVPal528Prog", + "TVPal528ProgSoft", "TVPal576IntDfScale", "TVEurgb60Hz240Ds", "TVEurgb60Hz240DsAa", @@ -1243,15 +1723,26 @@ static const char *vmodes_name[] = { "TVEurgb60Hz480ProgAa"}; static GXRModeObj *PAL2NTSC[] = { + &TVMpal240Int_RVL, &TVNtsc240Int, + &TVMpal240IntAa_RVL, &TVNtsc240IntAa, + &TVMpal240Ds, &TVNtsc240Ds, + &TVMpal240DsAa, &TVNtsc240DsAa, + &TVMpal480Int_RVL, &TVNtsc480Int, + &TVMpal480IntAa, &TVNtsc480IntAa, &TVMpal480IntDf, &TVNtsc480IntDf, - &TVPal264Ds, &TVNtsc240Ds, - &TVPal264DsAa, &TVNtsc240DsAa, - &TVPal264Int, &TVNtsc240Int, - &TVPal264IntAa, &TVNtsc240IntAa, - &TVPal524IntAa, &TVNtsc480IntAa, - &TVPal528Int, &TVNtsc480Int, + &TVMpal480Prog, &TVNtsc480Prog, + &TVMpal480ProgSoft_RVL, &TVNtsc480ProgSoft, + &TVMpal480ProgAa_RVL, &TVNtsc480ProgAa, + &TVPal264Ds_RVL, &TVNtsc240Ds, + &TVPal264DsAa_RVL, &TVNtsc240DsAa, + &TVPal264Int_RVL, &TVNtsc240Int, + &TVPal264IntAa_RVL, &TVNtsc240IntAa, + &TVPal524IntAa_RVL, &TVNtsc480IntAa, + &TVPal524ProgAa_RVL, &TVNtsc480ProgAa, + &TVPal528Int_RVL, &TVNtsc480Int, &TVPal528IntDf_RVL, &TVNtsc480IntDf, &TVPal528Prog_RVL, &TVNtsc480Prog, + &TVPal528ProgSoft_RVL, &TVNtsc480ProgSoft, &TVPal576IntDfScale, &TVNtsc480IntDf, &TVEurgb60Hz240Ds, &TVNtsc240Ds, &TVEurgb60Hz240DsAa, &TVNtsc240DsAa, @@ -1260,20 +1751,22 @@ static GXRModeObj *PAL2NTSC[] = { &TVEurgb60Hz480Int, &TVNtsc480Int, &TVEurgb60Hz480IntDf, &TVNtsc480IntDf, &TVEurgb60Hz480IntAa, &TVNtsc480IntAa, - &TVEurgb60Hz480Prog, &TVNtsc480Prog, - &TVEurgb60Hz480ProgSoft, &TVNtsc480ProgSoft, - &TVEurgb60Hz480ProgAa, &TVNtsc480ProgAa, + &TVEurgb60Hz480Prog_RVL, &TVNtsc480Prog, + &TVEurgb60Hz480ProgSoft_RVL, &TVNtsc480ProgSoft, + &TVEurgb60Hz480ProgAa_RVL, &TVNtsc480ProgAa, 0, 0}; static GXRModeObj *NTSC2PAL[] = { - &TVNtsc240Ds, &TVPal264Ds, - &TVNtsc240DsAa, &TVPal264DsAa, - &TVNtsc240Int, &TVPal264Int, - &TVNtsc240IntAa, &TVPal264IntAa, - &TVNtsc480Int, &TVPal528Int, + &TVNtsc240Ds, &TVPal264Ds_RVL, + &TVNtsc240DsAa, &TVPal264DsAa_RVL, + &TVNtsc240Int, &TVPal264Int_RVL, + &TVNtsc240IntAa, &TVPal264IntAa_RVL, + &TVNtsc480Int, &TVPal528Int_RVL, + &TVNtsc480IntAa, &TVPal524IntAa_RVL, &TVNtsc480IntDf, &TVPal528IntDf_RVL, - &TVNtsc480IntAa, &TVPal524IntAa, &TVNtsc480Prog, &TVPal528Prog_RVL, + &TVNtsc480ProgSoft, &TVPal528ProgSoft_RVL, + &TVNtsc480ProgAa, &TVPal524ProgAa_RVL, 0, 0}; static GXRModeObj *NTSC2PAL60[] = { @@ -1282,9 +1775,11 @@ static GXRModeObj *NTSC2PAL60[] = { &TVNtsc240Int, &TVEurgb60Hz240Int, &TVNtsc240IntAa, &TVEurgb60Hz240IntAa, &TVNtsc480Int, &TVEurgb60Hz480Int, - &TVNtsc480IntDf, &TVEurgb60Hz480IntDf, &TVNtsc480IntAa, &TVEurgb60Hz480IntAa, - &TVNtsc480Prog, &TVEurgb60Hz480Prog, + &TVNtsc480IntDf, &TVEurgb60Hz480IntDf, + &TVNtsc480Prog, &TVEurgb60Hz480Prog_RVL, + &TVNtsc480ProgSoft, &TVEurgb60Hz480ProgSoft_RVL, + &TVNtsc480ProgAa, &TVEurgb60Hz480ProgAa_RVL, 0, 0}; static u8 PATTERN[12][2] = {