From b1f4748eafdbb03ca528e4e8c65597850811d923 Mon Sep 17 00:00:00 2001 From: SarahW Date: Thu, 31 Aug 2017 14:26:54 +0100 Subject: [PATCH] Fixed colour compare in EGA/VGA - fixes graphics issues in Crystal Dream II. --- src/vid_ega.c | 16 ++++++++-------- src/vid_svga.c | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/vid_ega.c b/src/vid_ega.c index ca5af05..6531b0b 100644 --- a/src/vid_ega.c +++ b/src/vid_ega.c @@ -860,18 +860,18 @@ uint8_t ega_read(uint32_t addr, void *p) ega->ld = ega->vram[addr | 0x3]; if (ega->readmode) { - temp = (ega->colournocare & 1) ? 0xff : 0; - temp &= ega->la; + temp = ega->la; temp ^= (ega->colourcompare & 1) ? 0xff : 0; - temp2 = (ega->colournocare & 2) ? 0xff : 0; - temp2 &= ega->lb; + temp &= (ega->colournocare & 1) ? 0xff : 0; + temp2 = ega->lb; temp2 ^= (ega->colourcompare & 2) ? 0xff : 0; - temp3 = (ega->colournocare & 4) ? 0xff : 0; - temp3 &= ega->lc; + temp2 &= (ega->colournocare & 2) ? 0xff : 0; + temp3 = ega->lc; temp3 ^= (ega->colourcompare & 4) ? 0xff : 0; - temp4 = (ega->colournocare & 8) ? 0xff : 0; - temp4 &= ega->ld; + temp3 &= (ega->colournocare & 4) ? 0xff : 0; + temp4 = ega->ld; temp4 ^= (ega->colourcompare & 8) ? 0xff : 0; + temp4 &= (ega->colournocare & 8) ? 0xff : 0; return ~(temp | temp2 | temp3 | temp4); } return ega->vram[addr | readplane]; diff --git a/src/vid_svga.c b/src/vid_svga.c index ca09163..7e9f7e7 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -994,18 +994,18 @@ uint8_t svga_read(uint32_t addr, void *p) if (svga->readmode) { - temp = (svga->colournocare & 1) ? 0xff : 0; - temp &= svga->la; + temp = svga->la; temp ^= (svga->colourcompare & 1) ? 0xff : 0; - temp2 = (svga->colournocare & 2) ? 0xff : 0; - temp2 &= svga->lb; + temp &= (svga->colournocare & 1) ? 0xff : 0; + temp2 = svga->lb; temp2 ^= (svga->colourcompare & 2) ? 0xff : 0; - temp3 = (svga->colournocare & 4) ? 0xff : 0; - temp3 &= svga->lc; + temp2 &= (svga->colournocare & 2) ? 0xff : 0; + temp3 = svga->lc; temp3 ^= (svga->colourcompare & 4) ? 0xff : 0; - temp4 = (svga->colournocare & 8) ? 0xff : 0; - temp4 &= svga->ld; + temp3 &= (svga->colournocare & 4) ? 0xff : 0; + temp4 = svga->ld; temp4 ^= (svga->colourcompare & 8) ? 0xff : 0; + temp4 &= (svga->colournocare & 8) ? 0xff : 0; return ~(temp | temp2 | temp3 | temp4); } //pclog("Read %02X %04X %04X\n",vram[addr|svga->readplane],addr,svga->readplane); @@ -1231,18 +1231,18 @@ uint8_t svga_read_linear(uint32_t addr, void *p) svga->ld = svga->vram[addr | 0x3]; if (svga->readmode) { - temp = (svga->colournocare & 1) ? 0xff : 0; - temp &= svga->la; + temp = svga->la; temp ^= (svga->colourcompare & 1) ? 0xff : 0; - temp2 = (svga->colournocare & 2) ? 0xff : 0; - temp2 &= svga->lb; + temp &= (svga->colournocare & 1) ? 0xff : 0; + temp2 = svga->lb; temp2 ^= (svga->colourcompare & 2) ? 0xff : 0; - temp3 = (svga->colournocare & 4) ? 0xff : 0; - temp3 &= svga->lc; + temp2 &= (svga->colournocare & 2) ? 0xff : 0; + temp3 = svga->lc; temp3 ^= (svga->colourcompare & 4) ? 0xff : 0; - temp4 = (svga->colournocare & 8) ? 0xff : 0; - temp4 &= svga->ld; + temp3 &= (svga->colournocare & 4) ? 0xff : 0; + temp4 = svga->ld; temp4 ^= (svga->colourcompare & 8) ? 0xff : 0; + temp4 &= (svga->colournocare & 8) ? 0xff : 0; return ~(temp | temp2 | temp3 | temp4); } //printf("Read %02X %04X %04X\n",vram[addr|svga->readplane],addr,svga->readplane);