From b1ed835ae91d9bb507d4d7b2084bbcdcce729e2d Mon Sep 17 00:00:00 2001 From: Arisotura Date: Tue, 18 Jun 2019 23:05:36 +0200 Subject: might be more impressive if it actually worked, like this --- src/DSi_NDMA.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/DSi_NDMA.cpp b/src/DSi_NDMA.cpp index a8055eb..7c0b2a1 100644 --- a/src/DSi_NDMA.cpp +++ b/src/DSi_NDMA.cpp @@ -118,13 +118,16 @@ void DSi_NDMA::Start() // TODO: how does GXFIFO DMA work with all the block shito? IterCount = RemCount; - if (IterCount > TotalRemCount) - IterCount = TotalRemCount; + if (((StartMode & 0x1F) != 0x10) && !(Cnt & (1<<29))) + { + if (IterCount > TotalRemCount) + IterCount = TotalRemCount; + } if (Cnt & (1<<12)) CurDstAddr = DstAddr; if (Cnt & (1<<15)) CurSrcAddr = SrcAddr; - printf("ARM%d NDMA%d %08X %02X %08X->%08X %d bytes\n", CPU?7:9, Num, Cnt, StartMode, CurSrcAddr, CurDstAddr, RemCount*4); + printf("ARM%d NDMA%d %08X %02X %08X->%08X %d bytes, total=%d\n", CPU?7:9, Num, Cnt, StartMode, CurSrcAddr, CurDstAddr, RemCount*4, TotalRemCount*4); //IsGXFIFODMA = (CPU == 0 && (CurSrcAddr>>24) == 0x02 && CurDstAddr == 0x04000400 && DstAddrInc == 0); -- cgit v1.2.3