From f12d9c14db02e8761ea2028cc84d29796ee0b4dd Mon Sep 17 00:00:00 2001 From: OBattler Date: Sat, 28 Dec 2019 05:51:22 +0100 Subject: [PATCH] Ported the (S)VGA linear read latch fix from PCem. --- src/video/vid_svga.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 5de05c59e..a07764f12 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -11,7 +11,7 @@ * This is intended to be used by another SVGA driver, * and not as a card in it's own right. * - * Version: @(#)vid_svga.c 1.0.39 2019/12/03 + * Version: @(#)vid_svga.c 1.0.40 2019/12/28 * * Authors: Sarah Walker, * Miran Grca, @@ -1119,31 +1119,21 @@ svga_read_common(uint32_t addr, uint8_t linear, void *p) addr &= svga->decode_mask; /* standard VGA latched access */ - if (linear) { - if (addr >= svga->vram_max) - return 0xff; - - addr &= svga->vram_mask; + if (latch_addr >= svga->vram_max) { + for (i = 0; i < count; i++) + svga->latch.b[i] = 0xff; + } else { + latch_addr &= svga->vram_mask; for (i = 0; i < count; i++) - svga->latch.b[i] = svga->vram[addr | i]; - } else { - if (latch_addr >= svga->vram_max) { - for (i = 0; i < count; i++) - svga->latch.b[i] = 0xff; - } else { - latch_addr &= svga->vram_mask; - - for (i = 0; i < count; i++) - svga->latch.b[i] = svga->vram[latch_addr | i]; - } - - if (addr >= svga->vram_max) - return 0xff; - - addr &= svga->vram_mask; + svga->latch.b[i] = svga->vram[latch_addr | i]; } + if (addr >= svga->vram_max) + return 0xff; + + addr &= svga->vram_mask; + if (svga->readmode) { temp = 0xff;