all repos — mgba @ a79ff0964b96f003f51266bd99ba55077c342da4

mGBA Game Boy Advance Emulator

DS DMA: Block DMAs to ITCM
Vicki Pfau vi@endrift.com
Tue, 21 Mar 2017 14:12:14 -0700
commit

a79ff0964b96f003f51266bd99ba55077c342da4

parent

35e2b73301a0198c45d3c77abaf28534d9575a67

1 files changed, 9 insertions(+), 2 deletions(-)

jump to
M src/ds/dma.csrc/ds/dma.c

@@ -37,6 +37,11 @@ }

dscore->memory.activeDMA = -1; } +static bool _isValidDMADAD(int dma, uint32_t address) { + UNUSED(dma); + return address >= DS_BASE_RAM; +} + uint32_t DSDMAWriteSAD(struct DSCommon* dscore, int dma, uint32_t address) { address &= 0x0FFFFFFE; dscore->memory.dma[dma].source = address;

@@ -45,7 +50,9 @@ }

uint32_t DSDMAWriteDAD(struct DSCommon* dscore, int dma, uint32_t address) { address &= 0x0FFFFFFE; - dscore->memory.dma[dma].dest = address; + if (_isValidDMADAD(dma, address)) { + dscore->memory.dma[dma].dest = address; + } return dscore->memory.dma[dma].dest; }

@@ -199,7 +206,7 @@ }

} void DSDMAService(struct DSCommon* dscore, int number, struct GBADMA* info) { - struct DSCoreMemory* memory = &dscore->memory; + UNUSED(number); struct ARMCore* cpu = dscore->cpu; uint32_t width = 2 << GBADMARegisterGetWidth(info->reg); int32_t wordsRemaining = info->nextCount;