From c7b676dfef79a6b26abcc139328d7f52a93eaaee Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 1 Oct 2019 16:21:35 +0200 Subject: [PATCH] Fixed some newly introduced Cirrus Logic bugs. --- src/video/vid_cl54xx.c | 2 +- src/video/vid_svga.c | 20 ++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index 284b3342d..23b923125 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -539,7 +539,7 @@ gd54xx_out(uint16_t addr, uint8_t val, void *p) svga_recalctimings(svga); } else { switch (svga->gdcaddr) { - case 0x09: case 0x0a: /* case 0x0b: */ + case 0x09: case 0x0a: case 0x0b: gd54xx_recalc_banking(gd54xx); if (svga->gdcreg[0xb] & 0x04) svga->writemode = svga->gdcreg[5] & 7; diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 002d1dfe7..104cb14a2 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -881,25 +881,17 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *p) if (!(svga->gdcreg[6] & 1)) svga->fullchange = 2; - if ((svga->adv_flags & FLAG_ADDR_BY8) && (svga->writemode < 4)) { - if (svga->fb_only) - fatal("BY8 write in fb_only\n"); - if (svga->chain2_write) - fatal("BY8 write in chain2\n"); + if ((svga->adv_flags & FLAG_ADDR_BY8) && (svga->writemode < 4)) addr <<= 3; - } else if ((svga->chain4 || svga->fb_only) && (svga->writemode < 4)) { + else if ((svga->chain4 || svga->fb_only) && (svga->writemode < 4)) { writemask2 = 1 << (addr & 3); addr &= ~3; - if (svga->writemode >= 4) - fatal("write mode %i in chain4 mode\n", svga->writemode); } else if (svga->chain2_write) { writemask2 &= ~0xa; if (addr & 1) writemask2 <<= 1; addr &= ~1; addr <<= 2; - if (svga->writemode >= 4) - fatal("write mode %i in chain odd/even\n", svga->writemode); } else addr <<= 2; @@ -1102,13 +1094,9 @@ svga_read_common(uint32_t addr, uint8_t linear, void *p) latch_addr = (addr << 2) & svga->decode_mask; } - if (svga->adv_flags & FLAG_ADDR_BY8) { - if (svga->fb_only) - fatal("BY8 read in fb_only\n"); - if (svga->chain2_read) - fatal("BY8 read in chain2\n"); + if (svga->adv_flags & FLAG_ADDR_BY8) addr <<= 3; - } else if (svga->chain4 || svga->fb_only) { + else if (svga->chain4 || svga->fb_only) { addr &= svga->decode_mask; if (addr >= svga->vram_max) return 0xff;