From 1e3ae4ac5180ffe8e6b4a0aa54d6b61ac65b4fe3 Mon Sep 17 00:00:00 2001 From: yz70s Date: Tue, 21 Apr 2020 19:39:45 +0200 Subject: [PATCH] xbox_nv2a.cpp: set dma_get to 0 when fifo is enabled (nw) --- src/mame/video/xbox_nv2a.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/mame/video/xbox_nv2a.cpp b/src/mame/video/xbox_nv2a.cpp index 17c569647b8..6e97319f8c1 100644 --- a/src/mame/video/xbox_nv2a.cpp +++ b/src/mame/video/xbox_nv2a.cpp @@ -4816,7 +4816,7 @@ READ32_MEMBER(nv2a_renderer::geforce_r) ret = x; } if ((offset >= 0x00100000 / 4) && (offset < 0x00101000 / 4)) { - //machine().logerror("NV_2A: read 100000[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,ret); + //machine().logerror("NV_2A: read PFB[%06X] mask %08X value %08X\n",offset*4-0x00100000,mem_mask,ret); if (offset == 0x100200 / 4) return 3; } @@ -4936,6 +4936,10 @@ WRITE32_MEMBER(nv2a_renderer::geforce_w) if (e >= (sizeof(pmc) / sizeof(uint32_t))) return; COMBINE_DATA(pmc + e); + if (e == 0x200 / 4) // PMC.ENABLE register + if (data & 0x1100) // either PFIFO or PGRAPH enabled + for (int ch = 0; ch < 32; ch++) // zero dma_get in all the channels + channel[ch][0].regs[0x44 / 4] = 0; //machine().logerror("NV_2A: write PMC[%06X]=%08X\n",offset*4-0x00000000,data & mem_mask); } else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) { @@ -4957,21 +4961,6 @@ WRITE32_MEMBER(nv2a_renderer::geforce_w) dmaput = &channel[chanel][0].regs[0x40 / 4]; dmaget = &channel[chanel][0].regs[0x44 / 4]; //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput); - if (((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000)) || // only for outr2 - ((*dmaput == 0x045cd000) && (*dmaget == 0x07f4d000)) || // only for scg06nt - ((*dmaput == 0x0494c000) && (*dmaget == 0x07f4d000)) || // only for wangmid - ((*dmaput == 0x05acd000) && (*dmaget == 0x07f4d000)) || // only for ghostsqu - ((*dmaput == 0x0574d000) && (*dmaget == 0x07f4d000)) || // only for mj2c - ((*dmaput == 0x07ca3000) && (*dmaget == 0x07f4d000)) || // only for hotd3 - ((*dmaput == 0x063cd000) && (*dmaget == 0x07f4d000)) || // only for vcop3 - ((*dmaput == 0x07f4f000) && (*dmaget == 0x07f4d000)) || // only for ccfboxa - ((*dmaput == 0x07dca000) && (*dmaget == 0x07f4d000))) // only for crtaxihr - { - *dmaget = *dmaput; - puller_waiting = 0; - puller_timer->enable(false); - return; - } if (*dmaget != *dmaput) { if (puller_waiting == 0) { puller_space = &space;