PCem
changeset 136:cba58d4def81
Improved Trident TVGA CRTC emulation, Windows NT no longer detects as ET4000.
| author | TomW |
|---|---|
| date | Sun Jul 27 14:41:18 2014 +0100 |
| parents | abd5259486c3 |
| children | 6f30fb98b7f2 |
| files | src/vid_tvga.c |
| diffstat | 1 files changed, 20 insertions(+), 0 deletions(-) [+] |
line diff
1.1 --- a/src/vid_tvga.c Thu Jul 24 21:30:17 2014 +0100 1.2 +++ b/src/vid_tvga.c Sun Jul 27 14:41:18 2014 +0100 1.3 @@ -30,6 +30,18 @@ 1.4 uint32_t vram_mask; 1.5 } tvga_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 + 0x7f, 0xff, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 1.11 + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xef, 1.12 + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 1.13 + 0x7f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x03, 1.14 + 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1.15 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1.16 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 1.17 +}; 1.18 + 1.19 void tvga_out(uint16_t addr, uint8_t val, void *p) 1.20 { 1.21 tvga_t *tvga = (tvga_t *)p; 1.22 @@ -100,6 +112,7 @@ 1.23 case 0x3D5: 1.24 if (svga->crtcreg <= 7 && svga->crtc[0x11] & 0x80) return; 1.25 old = svga->crtc[svga->crtcreg]; 1.26 + val &= crtc_mask[svga->crtcreg]; 1.27 svga->crtc[svga->crtcreg] = val; 1.28 // if (svga->crtcreg != 0xC && svga->crtcreg != 0xE && svga->crtcreg != 0xF) pclog("CRTC R%02X = %02X %04X:%04X\n", svga->crtcreg, val, CS, pc); 1.29 if (old != val) 1.30 @@ -170,12 +183,19 @@ 1.31 if (tvga->oldmode) return tvga->oldctrl2; 1.32 return tvga->newctrl2; 1.33 } 1.34 + if ((svga->seqaddr & 0xf) == 0xe) 1.35 + { 1.36 + if (tvga->oldmode) 1.37 + return tvga->oldctrl1; 1.38 + } 1.39 break; 1.40 case 0x3C6: case 0x3C7: case 0x3C8: case 0x3C9: 1.41 return tkd8001_ramdac_in(addr, &tvga->ramdac, svga); 1.42 case 0x3D4: 1.43 return svga->crtcreg; 1.44 case 0x3D5: 1.45 + if (svga->crtcreg > 0x18 && svga->crtcreg < 0x1e) 1.46 + return 0xff; 1.47 return svga->crtc[svga->crtcreg]; 1.48 case 0x3d8: 1.49 return tvga->tvga_3d8;
