TVP3026: Correctly apply the RAMDAC multiplex mode.
This commit is contained in:
@@ -517,6 +517,65 @@ tvp3026_recalctimings(void *priv, svga_t *svga)
|
|||||||
svga->interlace = (ramdac->ccr & 0x40);
|
svga->interlace = (ramdac->ccr & 0x40);
|
||||||
/* TODO: Figure out gamma correction for 15/16 bpp color. */
|
/* TODO: Figure out gamma correction for 15/16 bpp color. */
|
||||||
svga->lut_map = !!(svga->bpp >= 15 && (ramdac->true_color & 0xf0) != 0x00);
|
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
|
uint32_t
|
||||||
|
Reference in New Issue
Block a user