diff --git a/include/dma.h b/include/dma.h index e2179345..196e4b4a 100644 --- a/include/dma.h +++ b/include/dma.h @@ -24,7 +24,7 @@ enum DMAEvent { DMA_REACHED_TC, DMA_MASKED, DMA_UNMASKED, -// DMA_TRANSFEREND, this shouldn't really be a signal + DMA_TRANSFEREND }; class DmaChannel; diff --git a/src/hardware/dma.cpp b/src/hardware/dma.cpp index 3b2f26d1..4ab4277f 100644 --- a/src/hardware/dma.cpp +++ b/src/hardware/dma.cpp @@ -308,7 +308,7 @@ again: currcnt=0xffff; masked=true; UpdateEMSMapping(); - DoCallBack(DMA_MASKED); + DoCallBack(DMA_TRANSFEREND); } } return done; @@ -340,7 +340,7 @@ again: currcnt=0xffff; masked=true; UpdateEMSMapping(); - DoCallBack(DMA_MASKED); + DoCallBack(DMA_TRANSFEREND); } } return done; diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index 4b68d63f..0c0a1c32 100644 --- a/src/hardware/sblaster.cpp +++ b/src/hardware/sblaster.cpp @@ -298,6 +298,8 @@ static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) { // DSP_ChangeMode(MODE_DMA_MASKED); LOG(LOG_SB,LOG_NORMAL)("DMA masked,stopping output, left %d",chan->currcnt); } + } else if (event==DMA_TRANSFEREND) { + if (sb.mode==MODE_DMA) sb.mode=MODE_DMA_MASKED; } else if (event==DMA_UNMASKED) { if (sb.mode==MODE_DMA_MASKED && sb.dma.mode!=DSP_DMA_NONE) { DSP_ChangeMode(MODE_DMA);