Millennium II: Fix squished image on MGA modes
This commit is contained in:
@@ -736,17 +736,22 @@ mystique_out(uint16_t addr, uint8_t val, void *priv)
|
||||
case 0x3df:
|
||||
if (mystique->crtcext_idx == 1)
|
||||
svga->dpms = !!(val & 0x30);
|
||||
old = mystique->crtcext_regs[mystique->crtcext_idx];
|
||||
if (mystique->crtcext_idx < 6)
|
||||
mystique->crtcext_regs[mystique->crtcext_idx] = val;
|
||||
|
||||
if (mystique->crtcext_idx == 6 && (old ^ val) == CRTCX_R3_MGAMODE && mystique->type >= MGA_2164W)
|
||||
svga_recalctimings(svga);
|
||||
|
||||
if ((mystique->type >= MGA_1064SG) && (mystique->crtcext_idx == 0) &&
|
||||
(mystique->crtcext_regs[3] & CRTCX_R3_MGAMODE)) {
|
||||
svga->rowoffset = svga->crtc[0x13] |
|
||||
((mystique->crtcext_regs[0] & CRTCX_R0_OFFSET_MASK) << 4);
|
||||
svga->rowoffset <<= 1;
|
||||
if (!(mystique->type >= MGA_2164W))
|
||||
svga->rowoffset <<= 1;
|
||||
svga->ma_latch = ((mystique->crtcext_regs[0] & CRTCX_R0_STARTADD_MASK) << 16) |
|
||||
(svga->crtc[0xc] << 8) | svga->crtc[0xd];
|
||||
if (mystique->pci_regs[0x41] & (OPTION_INTERLEAVE >> 8)) {
|
||||
if ((mystique->pci_regs[0x41] & (OPTION_INTERLEAVE >> 8)) && !(mystique->type >= MGA_2164W)) {
|
||||
svga->rowoffset <<= 1;
|
||||
svga->ma_latch <<= 1;
|
||||
}
|
||||
@@ -935,7 +940,7 @@ mystique_recalctimings(svga_t *svga)
|
||||
if (mystique->type >= MGA_1064SG)
|
||||
svga->ma_latch = ((mystique->crtcext_regs[0] & CRTCX_R0_STARTADD_MASK) << 16) | (svga->crtc[0xc] << 8) | svga->crtc[0xd];
|
||||
|
||||
if (mystique->pci_regs[0x41] & (OPTION_INTERLEAVE >> 8)) {
|
||||
if ((mystique->pci_regs[0x41] & (OPTION_INTERLEAVE >> 8)) && !(mystique->type >= MGA_2164W)) {
|
||||
svga->rowoffset <<= 1;
|
||||
if (mystique->type >= MGA_1064SG)
|
||||
svga->ma_latch <<= 1;
|
||||
@@ -957,34 +962,55 @@ mystique_recalctimings(svga_t *svga)
|
||||
mystique->ma_latch_old = svga->ma_latch;
|
||||
}
|
||||
|
||||
svga->rowoffset <<= 1;
|
||||
switch (mystique->xmulctrl & XMULCTRL_DEPTH_MASK) {
|
||||
case XMULCTRL_DEPTH_8:
|
||||
case XMULCTRL_DEPTH_2G8V16:
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
svga->bpp = 8;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_15:
|
||||
case XMULCTRL_DEPTH_G16V16:
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
svga->bpp = 15;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_16:
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
svga->bpp = 16;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_24:
|
||||
svga->render = svga_render_24bpp_highres;
|
||||
svga->bpp = 24;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_32:
|
||||
case XMULCTRL_DEPTH_32_OVERLAYED:
|
||||
svga->render = svga_render_32bpp_highres;
|
||||
svga->bpp = 32;
|
||||
break;
|
||||
if (!(mystique->type >= MGA_2164W))
|
||||
svga->rowoffset <<= 1;
|
||||
if (mystique->type != MGA_2164W) {
|
||||
switch (mystique->xmulctrl & XMULCTRL_DEPTH_MASK) {
|
||||
case XMULCTRL_DEPTH_8:
|
||||
case XMULCTRL_DEPTH_2G8V16:
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
svga->bpp = 8;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_15:
|
||||
case XMULCTRL_DEPTH_G16V16:
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
svga->bpp = 15;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_16:
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
svga->bpp = 16;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_24:
|
||||
svga->render = svga_render_24bpp_highres;
|
||||
svga->bpp = 24;
|
||||
break;
|
||||
case XMULCTRL_DEPTH_32:
|
||||
case XMULCTRL_DEPTH_32_OVERLAYED:
|
||||
svga->render = svga_render_32bpp_highres;
|
||||
svga->bpp = 32;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (svga->bpp) {
|
||||
case 8:
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
break;
|
||||
case 15:
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
break;
|
||||
case 16:
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
break;
|
||||
case 24:
|
||||
svga->render = svga_render_24bpp_highres;
|
||||
break;
|
||||
case 32:
|
||||
svga->render = svga_render_32bpp_highres;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch (svga->bpp) {
|
||||
|
Reference in New Issue
Block a user