From 7df5b67a71d4406d1261510ae6296e879db33c39 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Fri, 21 Aug 2020 02:41:03 -0700 Subject: [PATCH] GBA DMA: Only update DMA scheduling if needed --- src/gba/dma.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gba/dma.c b/src/gba/dma.c index 543ac95e0..3343033ec 100644 --- a/src/gba/dma.c +++ b/src/gba/dma.c @@ -134,29 +134,37 @@ void GBADMASchedule(struct GBA* gba, int number, struct GBADMA* info) { void GBADMARunHblank(struct GBA* gba, int32_t cycles) { struct GBAMemory* memory = &gba->memory; struct GBADMA* dma; + bool found = false; int i; for (i = 0; i < 4; ++i) { dma = &memory->dma[i]; if (GBADMARegisterIsEnable(dma->reg) && GBADMARegisterGetTiming(dma->reg) == GBA_DMA_TIMING_HBLANK && !dma->nextCount) { dma->when = mTimingCurrentTime(&gba->timing) + 3 + cycles; dma->nextCount = dma->count; + found = true; } } - GBADMAUpdate(gba); + if (found) { + GBADMAUpdate(gba); + } } void GBADMARunVblank(struct GBA* gba, int32_t cycles) { struct GBAMemory* memory = &gba->memory; struct GBADMA* dma; + bool found = false; int i; for (i = 0; i < 4; ++i) { dma = &memory->dma[i]; if (GBADMARegisterIsEnable(dma->reg) && GBADMARegisterGetTiming(dma->reg) == GBA_DMA_TIMING_VBLANK && !dma->nextCount) { dma->when = mTimingCurrentTime(&gba->timing) + 3 + cycles; dma->nextCount = dma->count; + found = true; } } - GBADMAUpdate(gba); + if (found) { + GBADMAUpdate(gba); + } } void GBADMARunDisplayStart(struct GBA* gba, int32_t cycles) {