From f1816279a57555d2b8ca4ad1b4c28c0a21576c37 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Thu, 5 Nov 2015 20:59:16 -0800 Subject: [PATCH] GBA Memory: Fix DMA addresses --- src/gba/memory.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gba/memory.c b/src/gba/memory.c index 2ef2f8fac..a5860f45c 100644 --- a/src/gba/memory.c +++ b/src/gba/memory.c @@ -1313,16 +1313,18 @@ void GBAAdjustWaitstates(struct GBA* gba, uint16_t parameters) { uint32_t GBAMemoryWriteDMASAD(struct GBA* gba, int dma, uint32_t address) { struct GBAMemory* memory = &gba->memory; - if ((dma >= 1 || address < BASE_CART0) && address >= BASE_WORKING_RAM && address < BASE_CART_SRAM) { - memory->dma[dma].source = address & 0x0FFFFFFE; + address &= 0x0FFFFFFE; + if ((dma > 0 || address < BASE_CART0) && address >= BASE_WORKING_RAM && address < BASE_CART_SRAM) { + memory->dma[dma].source = address; } return memory->dma[dma].source; } uint32_t GBAMemoryWriteDMADAD(struct GBA* gba, int dma, uint32_t address) { struct GBAMemory* memory = &gba->memory; - if ((dma >= 1 || address < BASE_CART0) && address >= BASE_WORKING_RAM && address < BASE_CART_SRAM) { - memory->dma[dma].dest = address & 0x0FFFFFFE; + address &= 0x0FFFFFFE; + if ((dma > 2 || address < BASE_CART0) && address >= BASE_WORKING_RAM && address < BASE_CART_SRAM) { + memory->dma[dma].dest = address; } return memory->dma[dma].dest; }