From 8bf4ff71c11481dc241024b5320c50fa67fff0f5 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Thu, 27 Jul 2017 22:24:33 +0200 Subject: [PATCH] Fixed remaining crashes of the ViRGE that were due to my previous fix. --- src/VIDEO/vid_s3_virge.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/VIDEO/vid_s3_virge.c b/src/VIDEO/vid_s3_virge.c index 997b707e4..c903fe0a6 100644 --- a/src/VIDEO/vid_s3_virge.c +++ b/src/VIDEO/vid_s3_virge.c @@ -1350,18 +1350,27 @@ static void s3_virge_mmio_write_l(uint32_t addr, uint32_t val, void *p) svga_t *svga = &virge->svga; reg_writes++; - pclog("Write Address %x\n", addr & 0xe000); - if ((addr & 0xfffc) < 0x8000) { + if ((addr & 0xe000) == 0) + { + if (virge->s3d.cmd_set & CMD_SET_MS) + s3_virge_bitblt(virge, 32, ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24)); + else + s3_virge_bitblt(virge, 32, val); + } + else + { s3_virge_queue(virge, addr, val, FIFO_WRITE_DWORD); + } } else switch (addr & 0xfffc) { case 0: - s3_virge_queue(virge, addr, val, FIFO_WRITE_DWORD); - svga_recalctimings(svga); - svga->fullchange = changeframecount; + if (virge->s3d.cmd_set & CMD_SET_MS) + s3_virge_bitblt(virge, 32, ((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24)); + else + s3_virge_bitblt(virge, 32, val); break; case 0x8180: