From 25ac41fbde01b17f3ca03fca4224f78bb1b7a09c Mon Sep 17 00:00:00 2001 From: TomW Date: Sat, 10 Oct 2015 14:33:36 +0100 Subject: [PATCH] Ignore odd/even mode when loading VGA latches on memory read. Fixes Jazz Jackrabbit. --- src/vid_svga.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/vid_svga.c b/src/vid_svga.c index 1656f3f..891ef78 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -921,6 +921,7 @@ uint8_t svga_read(uint32_t addr, void *p) { svga_t *svga = (svga_t *)p; uint8_t temp, temp2, temp3, temp4; + uint32_t latch_addr; int readplane = svga->readplane; cycles -= video_timing_b; @@ -931,6 +932,8 @@ uint8_t svga_read(uint32_t addr, void *p) addr &= svga->banked_mask; addr += svga->read_bank; + latch_addr = (addr << 2) & 0x7fffff; + // pclog("%05X %i %04X:%04X %02X %02X %i\n",addr,svga->chain4,CS,pc, vram[addr & 0x7fffff], vram[(addr << 2) & 0x7fffff], svga->readmode); // pclog("%i\n", svga->readmode); if (svga->chain4 || svga->fb_only) @@ -953,11 +956,17 @@ uint8_t svga_read(uint32_t addr, void *p) if (addr >= svga->vram_limit) return 0xff; - - svga->la = svga->vram[addr]; - svga->lb = svga->vram[addr | 0x1]; - svga->lc = svga->vram[addr | 0x2]; - svga->ld = svga->vram[addr | 0x3]; + + if (latch_addr < svga->vram_limit) + { + svga->la = svga->vram[latch_addr]; + svga->lb = svga->vram[latch_addr | 0x1]; + svga->lc = svga->vram[latch_addr | 0x2]; + svga->ld = svga->vram[latch_addr | 0x3]; + } + else + svga->la = svga->lb = svga->lc = svga->ld = 0xff; + if (svga->readmode) { temp = (svga->colournocare & 1) ? 0xff : 0;