all repos — mgba @ e56ca6ac088cb84fe2af69acc33d263742ece373

mGBA Game Boy Advance Emulator

GBA DMA: Add misalign warnings
Vicki Pfau vi@endrift.com
Sun, 24 Dec 2017 17:04:23 -0800
commit

e56ca6ac088cb84fe2af69acc33d263742ece373

parent

52e4c4e67cda9ff1bc8fe11e9f6f71111b0c7749

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

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

@@ -87,6 +87,15 @@ if (currentDma->nextSource >= BASE_CART0 && currentDma->nextSource < BASE_CART_SRAM && GBADMARegisterGetSrcControl(currentDma->reg) < 3) {

currentDma->reg = GBADMARegisterClearSrcControl(currentDma->reg); } currentDma->nextDest = currentDma->dest; + + uint32_t width = 2 << GBADMARegisterGetWidth(currentDma->reg); + if (currentDma->nextSource & (width - 1)) { + mLOG(GBA_MEM, GAME_ERROR, "Misaligned DMA source address: 0x%08X", currentDma->nextSource); + } + if (currentDma->nextDest & (width - 1)) { + mLOG(GBA_MEM, GAME_ERROR, "Misaligned DMA destination address: 0x%08X", currentDma->nextDest); + } + GBADMASchedule(gba, dma, currentDma); } // If the DMA has already occurred, this value might have changed since the function started