From a72c77a3df79975cdb40a5fbd7e88df7b3934c46 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Tue, 28 Jan 2014 21:56:14 -0800 Subject: [PATCH] Update DMA timings, and higher priority DMAs always take precedence, regardless of timing --- src/gba/gba-memory.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gba/gba-memory.c b/src/gba/gba-memory.c index 84f41b8c1..d8db5a732 100644 --- a/src/gba/gba-memory.c +++ b/src/gba/gba-memory.c @@ -647,10 +647,10 @@ void GBAMemoryRunHblankDMAs(struct GBAMemory* memory, int32_t cycles) { for (i = 0; i < 4; ++i) { dma = &memory->dma[i]; if (dma->enable && dma->timing == DMA_TIMING_HBLANK) { - dma->nextEvent = memory->p->cpu.cycles; + dma->nextEvent = cycles; } } - GBAMemoryUpdateDMAs(memory, -cycles); + GBAMemoryUpdateDMAs(memory, 0); } void GBAMemoryRunVblankDMAs(struct GBAMemory* memory, int32_t cycles) { @@ -659,10 +659,10 @@ void GBAMemoryRunVblankDMAs(struct GBAMemory* memory, int32_t cycles) { for (i = 0; i < 4; ++i) { dma = &memory->dma[i]; if (dma->enable && dma->timing == DMA_TIMING_VBLANK) { - dma->nextEvent = memory->p->cpu.cycles; + dma->nextEvent = cycles; } } - GBAMemoryUpdateDMAs(memory, -cycles); + GBAMemoryUpdateDMAs(memory, 0); } int32_t GBAMemoryRunDMAs(struct GBAMemory* memory, int32_t cycles) { @@ -688,7 +688,7 @@ void GBAMemoryUpdateDMAs(struct GBAMemory* memory, int32_t cycles) { struct GBADMA* dma = &memory->dma[i]; if (dma->nextEvent != INT_MAX) { dma->nextEvent -= cycles; - if (dma->enable && memory->nextDMA >= dma->nextEvent) { + if (dma->enable) { memory->activeDMA = i; memory->nextDMA = dma->nextEvent; }