Merge pull request #3901 from 86Box/tc1995

MGA fixes 2:
This commit is contained in:
Miran Grča
2023-12-18 13:57:54 +01:00
committed by GitHub
2 changed files with 11 additions and 31 deletions

View File

@@ -721,12 +721,6 @@ mystique_out(uint16_t addr, uint8_t val, void *priv)
mystique->crtcext_regs[mystique->crtcext_idx] = val;
if (mystique->crtcext_idx == 1)
svga->dpms = !!(val & 0x30);
if (mystique->crtcext_idx < 4) {
if (mystique->crtcext_idx != 3) {
svga->fullchange = changeframecount;
svga_recalctimings(svga);
}
}
if (mystique->crtcext_idx == 4) {
if (svga->gdcreg[6] & 0xc) {
/*64k banks*/
@@ -947,8 +941,8 @@ mystique_recalctimings(svga_t *svga)
break;
}
}
svga->packed_chain4 = 1;
svga->line_compare = mystique_line_compare;
svga->packed_chain4 = !svga->chain4;
} else {
svga->packed_chain4 = 0;
svga->line_compare = NULL;
@@ -959,7 +953,7 @@ mystique_recalctimings(svga_t *svga)
svga->fb_only = svga->packed_chain4;
svga->disable_blink = (svga->bpp > 4);
#if 0
pclog("PackedChain4=%d, chain4=%x, fast=%x, bit6 attrreg10=%02x, bits 5-6 gdcreg5=%02x.\n", svga->packed_chain4, svga->chain4, svga->fast, svga->attrregs[0x10] & 0x40, svga->gdcreg[5] & 0x60);
pclog("PackedChain4=%d, chain4=%x, fast=%x, bit6 attrreg10=%02x, bits 5-6 gdcreg5=%02x, extmode=%02x.\n", svga->packed_chain4, svga->chain4, svga->fast, svga->attrregs[0x10] & 0x40, svga->gdcreg[5] & 0x60, mystique->pci_regs[0x41] & 1, mystique->crtcext_regs[3] & CRTCX_R3_MGAMODE);
#endif
}

View File

@@ -639,27 +639,21 @@ svga_recalctimings(svga_t *svga)
svga->hdisp *= (svga->seqregs[1] & 8) ? 16 : 8;
svga->hdisp_old = svga->hdisp;
if (svga->bpp <= 8) {
if (svga->attrregs[0x10] & 0x40) { /*8bpp mode*/
svga->map8 = svga->pallook;
if (svga->lowres) /*Low res (320)*/
svga->render = svga_render_8bpp_lowres;
else
svga->render = svga_render_8bpp_highres;
} else {
if ((svga->bpp <= 8) || ((svga->gdcreg[5] & 0x60) == 0x00)) {
if ((svga->gdcreg[5] & 0x60) == 0x00) {
if (svga->seqregs[1] & 8) /*Low res (320)*/
svga->render = svga_render_4bpp_lowres;
else
svga->render = svga_render_4bpp_highres;
} else {
svga->map8 = svga->pallook;
if (svga->attrregs[0x10] & 0x40) /*Low res (320)*/
svga->render = svga_render_8bpp_lowres;
else
svga->render = svga_render_8bpp_highres;
}
} else {
switch (svga->gdcreg[5] & 0x60) {
case 0x00:
if (svga->seqregs[1] & 8) /*Low res (320)*/
svga->render = svga_render_4bpp_lowres;
else
svga->render = svga_render_4bpp_highres;
break;
case 0x20: /*4 colours*/
if (svga->seqregs[1] & 8) /*Low res (320)*/
svga->render = svga_render_2bpp_lowres;
@@ -669,13 +663,6 @@ svga_recalctimings(svga_t *svga)
case 0x40:
case 0x60: /*256+ colours*/
switch (svga->bpp) {
case 8:
svga->map8 = svga->pallook;
if (svga->lowres)
svga->render = svga_render_8bpp_lowres;
else
svga->render = svga_render_8bpp_highres;
break;
case 15:
if (svga->lowres)
svga->render = svga_render_15bpp_lowres;
@@ -1920,9 +1907,8 @@ svga_readl_common(uint32_t addr, uint8_t linear, void *priv)
{
svga_t *svga = (svga_t *) priv;
if (!svga->fast) {
if (!svga->fast)
return svga_read_common(addr, linear, priv) | (svga_read_common(addr + 1, linear, priv) << 8) | (svga_read_common(addr + 2, linear, priv) << 16) | (svga_read_common(addr + 3, linear, priv) << 24);
}
cycles -= svga->monitor->mon_video_timing_read_l;