TVP3026: Correctly apply the RAMDAC multiplex mode.

This commit is contained in:
OBattler
2024-02-06 23:35:43 +01:00
parent bf85d8088b
commit 1b5ac0f68a

View File

@@ -517,6 +517,65 @@ tvp3026_recalctimings(void *priv, svga_t *svga)
svga->interlace = (ramdac->ccr & 0x40);
/* TODO: Figure out gamma correction for 15/16 bpp color. */
svga->lut_map = !!(svga->bpp >= 15 && (ramdac->true_color & 0xf0) != 0x00);
switch (ramdac->mcr) {
case 0x41:
case 0x4a:
case 0x61:
svga->hdisp <<= 1;
svga->dots_per_clock <<= 1;
break;
case 0x42:
case 0x4b:
case 0x62:
svga->hdisp <<= 2;
svga->dots_per_clock <<= 2;
break;
case 0x43:
case 0x4c:
case 0x63:
svga->hdisp <<= 3;
svga->dots_per_clock <<= 3;
break;
case 0x44:
case 0x64:
svga->hdisp <<= 4;
svga->dots_per_clock <<= 4;
break;
case 0x5b:
switch (ramdac->true_color) {
case 0x16:
case 0x17:
svga->hdisp = (svga->hdisp << 2) / 3;
svga->dots_per_clock = (svga->dots_per_clock << 2) / 3;
break;
case 0x1e:
case 0x1f:
svga->hdisp = (svga->hdisp * 5) >> 2;
svga->dots_per_clock = (svga->dots_per_clock * 5) >> 2;
break;
}
break;
case 0x5c:
switch (ramdac->true_color) {
case 0x06:
case 0x07:
svga->hdisp <<= 1;
svga->dots_per_clock <<= 1;
break;
case 0x16:
case 0x17:
svga->hdisp = (svga->hdisp << 3) / 3;
svga->dots_per_clock = (svga->dots_per_clock << 3) / 3;
break;
case 0x1e:
case 0x1f:
svga->hdisp = (svga->hdisp * 5) >> 1;
svga->dots_per_clock = (svga->dots_per_clock * 5) >> 1;
break;
}
break;
}
}
uint32_t