diff --git a/src/vid_ati18800.c b/src/vid_ati18800.c index 0af89fb..8abb6c8 100644 --- a/src/vid_ati18800.c +++ b/src/vid_ati18800.c @@ -60,7 +60,10 @@ void ati18800_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; if (old != val) diff --git a/src/vid_ati28800.c b/src/vid_ati28800.c index fc033f8..b29de3e 100644 --- a/src/vid_ati28800.c +++ b/src/vid_ati28800.c @@ -62,7 +62,10 @@ void ati28800_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; if (old != val) diff --git a/src/vid_ati_mach64.c b/src/vid_ati_mach64.c index 45700c2..7011ad8 100644 --- a/src/vid_ati_mach64.c +++ b/src/vid_ati_mach64.c @@ -245,7 +245,10 @@ void mach64_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x1f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); if (svga->crtcreg > 0x18) return; old = svga->crtc[svga->crtcreg]; diff --git a/src/vid_cl5429.c b/src/vid_cl5429.c index 0302377..59f2434 100644 --- a/src/vid_cl5429.c +++ b/src/vid_cl5429.c @@ -141,7 +141,10 @@ void gd5429_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; diff --git a/src/vid_et4000.c b/src/vid_et4000.c index 67701a6..db8438e 100644 --- a/src/vid_et4000.c +++ b/src/vid_et4000.c @@ -61,7 +61,10 @@ void et4000_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; val &= crtc_mask[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; diff --git a/src/vid_et4000w32.c b/src/vid_et4000w32.c index 831a76b..8b5e5f3 100644 --- a/src/vid_et4000w32.c +++ b/src/vid_et4000w32.c @@ -127,7 +127,10 @@ void et4000w32p_out(uint16_t addr, uint8_t val, void *p) return; case 0x3D5: // pclog("Write CRTC R%02X %02X\n", crtcreg, val); - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; if (old != val) diff --git a/src/vid_oti067.c b/src/vid_oti067.c index be8f84e..ec036fa 100644 --- a/src/vid_oti067.c +++ b/src/vid_oti067.c @@ -38,7 +38,10 @@ void oti067_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 31; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; if (old != val) diff --git a/src/vid_paradise.c b/src/vid_paradise.c index 9f6f99b..dd5d2e6 100644 --- a/src/vid_paradise.c +++ b/src/vid_paradise.c @@ -114,8 +114,10 @@ void paradise_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) - return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); if (svga->crtcreg > 0x29 && (svga->crtc[0x29] & 7) != 5) return; if (svga->crtcreg >= 0x31 && svga->crtcreg <= 0x37) diff --git a/src/vid_s3.c b/src/vid_s3.c index 0c4d2f3..c7da015 100644 --- a/src/vid_s3.c +++ b/src/vid_s3.c @@ -141,7 +141,10 @@ void s3_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x7f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); if (svga->crtcreg >= 0x20 && svga->crtcreg != 0x38 && (svga->crtc[0x38] & 0xcc) != 0x48) return; old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; diff --git a/src/vid_s3_virge.c b/src/vid_s3_virge.c index 5dc03ec..88fc257 100644 --- a/src/vid_s3_virge.c +++ b/src/vid_s3_virge.c @@ -277,8 +277,10 @@ static void s3_virge_out(uint16_t addr, uint8_t val, void *p) return; case 0x3d5: //pclog("Write CRTC R%02X %02X %04x(%08x):%08x\n", svga->crtcreg, val, CS, cs, pc); - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); if (svga->crtcreg >= 0x20 && svga->crtcreg != 0x38 && (svga->crtc[0x38] & 0xcc) != 0x48) return; if (svga->crtcreg >= 0x80) diff --git a/src/vid_tgui9440.c b/src/vid_tgui9440.c index 526b622..eba1a01 100644 --- a/src/vid_tgui9440.c +++ b/src/vid_tgui9440.c @@ -161,7 +161,10 @@ void tgui_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x7f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; // if (svga->crtcreg != 0xE && svga->crtcreg != 0xF) pclog("CRTC R%02X = %02X\n", svga->crtcreg, val); diff --git a/src/vid_tvga.c b/src/vid_tvga.c index 442b436..a9388b0 100644 --- a/src/vid_tvga.c +++ b/src/vid_tvga.c @@ -110,7 +110,10 @@ void tvga_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x3f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; val &= crtc_mask[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; diff --git a/src/vid_vga.c b/src/vid_vga.c index fb2a4b1..16cc70b 100644 --- a/src/vid_vga.c +++ b/src/vid_vga.c @@ -33,7 +33,10 @@ void vga_out(uint16_t addr, uint8_t val, void *p) svga->crtcreg = val & 0x1f; return; case 0x3D5: - if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; + if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) + return; + if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80)) + val = (svga->crtc[7] & ~0x10) | (val & 0x10); old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; if (old != val)