From 7d484e0928efd88f391bf4c2dc15a775f34995f0 Mon Sep 17 00:00:00 2001 From: SarahW Date: Wed, 25 Oct 2017 20:53:32 +0100 Subject: [PATCH] Mask off accesses to SDAC extended registers. Fixes out-of-bounds register writes causing corruption seen sometimes in Windows 95. --- src/vid_sdac_ramdac.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vid_sdac_ramdac.c b/src/vid_sdac_ramdac.c index 0098d60..c02eed4 100644 --- a/src/vid_sdac_ramdac.c +++ b/src/vid_sdac_ramdac.c @@ -50,8 +50,8 @@ void sdac_ramdac_out(uint16_t addr, uint8_t val, sdac_ramdac_t *ramdac, svga_t * ramdac->magic_count = 0; if (ramdac->rs2) { - if (!ramdac->reg_ff) ramdac->regs[ramdac->windex] = (ramdac->regs[ramdac->windex] & 0xff00) | val; - else ramdac->regs[ramdac->windex] = (ramdac->regs[ramdac->windex] & 0x00ff) | (val << 8); + if (!ramdac->reg_ff) ramdac->regs[ramdac->windex & 0xff] = (ramdac->regs[ramdac->windex & 0xff] & 0xff00) | val; + else ramdac->regs[ramdac->windex & 0xff] = (ramdac->regs[ramdac->windex & 0xff] & 0x00ff) | (val << 8); ramdac->reg_ff = !ramdac->reg_ff; // pclog("RAMDAC reg %02X now %04X\n", ramdac->windex, ramdac->regs[ramdac->windex]); if (!ramdac->reg_ff) ramdac->windex++; @@ -106,8 +106,8 @@ uint8_t sdac_ramdac_in(uint16_t addr, sdac_ramdac_t *ramdac, svga_t *svga) // } if (ramdac->rs2) { - if (!ramdac->reg_ff) temp = ramdac->regs[ramdac->rindex] & 0xff; - else temp = ramdac->regs[ramdac->rindex] >> 8; + if (!ramdac->reg_ff) temp = ramdac->regs[ramdac->rindex & 0xff] & 0xff; + else temp = ramdac->regs[ramdac->rindex & 0xff] >> 8; ramdac->reg_ff = !ramdac->reg_ff; if (!ramdac->reg_ff) {