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 {
