GBA Memory: Ensure changing the timing of a DMA reschedules it

This commit is contained in:
Jeffrey Pfau 2015-04-06 03:47:42 -07:00
parent 1856b77cbc
commit 25e70e37c7
2 changed files with 6 additions and 0 deletions

View File

@ -12,6 +12,7 @@ Bugfixes:
- Qt: Fix "QOpenGLContext::swapBuffers() called with non-exposed window" warning - Qt: Fix "QOpenGLContext::swapBuffers() called with non-exposed window" warning
- ARM7: Fix SWI and IRQ timings - ARM7: Fix SWI and IRQ timings
- GBA Audio: Force audio FIFOs to 32-bit - GBA Audio: Force audio FIFOs to 32-bit
- GBA Memory: Ensure changing the timing of a DMA reschedules it
0.2.0: (2015-04-03) 0.2.0: (2015-04-03)
Features: Features:

View File

@ -1257,6 +1257,11 @@ uint16_t GBAMemoryWriteDMACNT_HI(struct GBA* gba, int dma, uint16_t control) {
struct GBAMemory* memory = &gba->memory; struct GBAMemory* memory = &gba->memory;
struct GBADMA* currentDma = &memory->dma[dma]; struct GBADMA* currentDma = &memory->dma[dma];
int wasEnabled = GBADMARegisterIsEnable(currentDma->reg); int wasEnabled = GBADMARegisterIsEnable(currentDma->reg);
int oldTiming = GBADMARegisterGetTiming(currentDma->reg);
int newTiming = GBADMARegisterGetTiming(control);
if (oldTiming && oldTiming != newTiming) {
wasEnabled = false;
}
currentDma->reg = control; currentDma->reg = control;
if (GBADMARegisterIsDRQ(currentDma->reg)) { if (GBADMARegisterIsDRQ(currentDma->reg)) {