From bb1f314d9c4884a101a13e8f9a4bfbae20c0e346 Mon Sep 17 00:00:00 2001 From: SarahW Date: Mon, 30 Mar 2020 21:03:59 +0100 Subject: [PATCH] Mystique DMAPAD register doesn't act like an ILOAD mirror on DMA writes. --- src/vid_mga.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vid_mga.c b/src/vid_mga.c index 131b30f..5db5c25 100644 --- a/src/vid_mga.c +++ b/src/vid_mga.c @@ -2385,10 +2385,11 @@ static void run_dma(mystique_t *mystique) reg_addr += 0x1c00; // pclog(" DMA pri write %08x to %02x %04x %08x %08x\n", val, mystique->dma.pri_header & 0xff, reg_addr, (mystique->dma.primaddress & DMA_ADDR_MASK), (mystique->dma.primend & DMA_ADDR_MASK)); - if ((reg_addr & 0x300) == 0x100) + if ((reg_addr & 0x300) == 0x100 && reg_addr != REG_DMAPAD) mystique->blitter_submit_dma_refcount++; - mystique_accel_ctrl_write_l(reg_addr, val, mystique); + if (reg_addr != REG_DMAPAD) + mystique_accel_ctrl_write_l(reg_addr, val, mystique); } mystique->dma.pri_header >>= 8; @@ -2435,10 +2436,11 @@ static void run_dma(mystique_t *mystique) reg_addr += 0x1c00; // pclog(" DMA sec write %08x to %02x %04x %08x %08x\n", val, mystique->dma.sec_header & 0xff, reg_addr, (mystique->dma.secaddress & DMA_ADDR_MASK), (mystique->dma.secend & DMA_ADDR_MASK)); - if ((reg_addr & 0x300) == 0x100) + if ((reg_addr & 0x300) == 0x100 && reg_addr != REG_DMAPAD) mystique->blitter_submit_dma_refcount++; - mystique_accel_ctrl_write_l(reg_addr, val, mystique); + if (reg_addr != REG_DMAPAD) + mystique_accel_ctrl_write_l(reg_addr, val, mystique); } mystique->dma.sec_header >>= 8;