From 52a4cbcb81fc9aff4c0588bd5e70653bc5042932 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 15 Feb 2020 13:43:50 -0800 Subject: [PATCH] GBA DMA: Fix invalid audio DMA parameters --- CHANGES | 1 + src/gba/audio.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 28bf0a790..a3bba7a0c 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Emulation fixes: - GBA BIOS: Implement dummy sound driver calls - GBA BIOS: Improve HLE BIOS timing - GBA DMA: Linger last DMA on bus (fixes mgba.io/i/301 and mgba.io/i/1320) + - GBA DMA: Fix invalid audio DMA parameters - GBA Memory: Misaligned SRAM writes are ignored - GBA Memory: Improve gamepak prefetch timing - GBA Serialize: Fix serializing DMA transfer register diff --git a/src/gba/audio.c b/src/gba/audio.c index 23b5a475e..c0a275834 100644 --- a/src/gba/audio.c +++ b/src/gba/audio.c @@ -104,6 +104,8 @@ void GBAAudioResizeBuffer(struct GBAAudio* audio, size_t samples) { } void GBAAudioScheduleFifoDma(struct GBAAudio* audio, int number, struct GBADMA* info) { + info->reg = GBADMARegisterSetDestControl(info->reg, GBA_DMA_FIXED); + info->reg = GBADMARegisterSetWidth(info->reg, 1); switch (info->dest) { case BASE_IO | REG_FIFO_A_LO: audio->chA.dmaSource = number; @@ -129,8 +131,6 @@ void GBAAudioScheduleFifoDma(struct GBAAudio* audio, int number, struct GBADMA* audio->externalMixing = false; } } - info->reg = GBADMARegisterSetDestControl(info->reg, GBA_DMA_FIXED); - info->reg = GBADMARegisterSetWidth(info->reg, 1); } void GBAAudioWriteSOUND1CNT_LO(struct GBAAudio* audio, uint16_t value) {