PCem

changeset 137:6f30fb98b7f2

Improved ET4000 CRTC emulation, Windows NT no longer misdetects ET4000/W32 or hangs.
author TomW
date Mon Jul 28 20:32:56 2014 +0100
parents cba58d4def81
children 528f6c46c324
files src/vid_et4000.c
diffstat 1 files changed, 14 insertions(+), 1 deletions(-) [+]
line diff
     1.1 --- a/src/vid_et4000.c	Sun Jul 27 14:41:18 2014 +0100
     1.2 +++ b/src/vid_et4000.c	Mon Jul 28 20:32:56 2014 +0100
     1.3 @@ -21,6 +21,18 @@
     1.4          uint8_t banking;
     1.5  } et4000_t;
     1.6  
     1.7 +static uint8_t crtc_mask[0x40] =
     1.8 +{
     1.9 +        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    1.10 +        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    1.11 +        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    1.12 +        0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    1.13 +        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    1.14 +        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    1.15 +        0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff,
    1.16 +        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    1.17 +};
    1.18 +
    1.19  void et4000_out(uint16_t addr, uint8_t val, void *p)
    1.20  {
    1.21          et4000_t *et4000 = (et4000_t *)p;
    1.22 @@ -32,7 +44,7 @@
    1.23                  addr ^= 0x60;
    1.24  
    1.25  //        pclog("ET4000 out %04X %02X\n", addr, val);
    1.26 -                
    1.27 +
    1.28          switch (addr)
    1.29          {
    1.30                  case 0x3C6: case 0x3C7: case 0x3C8: case 0x3C9:
    1.31 @@ -51,6 +63,7 @@
    1.32                  case 0x3D5:
    1.33                  if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return;
    1.34                  old = svga->crtc[svga->crtcreg];
    1.35 +                val &= crtc_mask[svga->crtcreg];
    1.36                  svga->crtc[svga->crtcreg] = val;
    1.37                  if (old != val)
    1.38                  {