diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index 8a139793c..edb276401 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -1114,11 +1114,7 @@ s3_virge_updatemapping(virge_t *virge) mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); mem_mapping_disable(&virge->linear_mapping); } else { - if ((virge->chip == S3_VIRGEVX) || (virge->chip == S3_TRIO3D2X)) - virge->linear_base &= 0xfe000000; - else - virge->linear_base &= 0xfc000000; - + virge->linear_base &= ~(virge->linear_size - 1); mem_mapping_set_addr(&virge->linear_mapping, virge->linear_base, virge->linear_size); } svga->fb_only = 1; @@ -5190,7 +5186,10 @@ s3_virge_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv) return; case 0x13: - svga->crtc[0x59] = (virge->chip == S3_VIRGEVX || virge->chip == S3_TRIO3D2X) ? (val & 0xfe) : (val & 0xfc); + if (virge->chip == S3_VIRGEVX || virge->chip == S3_TRIO3D2X) + svga->crtc[0x59] = (svga->crtc[0x59] & 0x01) | (val & 0xfe); + else + svga->crtc[0x59] = (svga->crtc[0x59] & 0x03) | (val & 0xfc); s3_virge_updatemapping(virge); return;