1
0
Fork 0

Don't generate sound after DMA is masked at end of single-cycle transfer. Prevents issues with some games.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4176
This commit is contained in:
ripsaw8080 2018-11-23 21:55:12 +00:00
parent 3bde40bc91
commit e0a7ede037
3 changed files with 5 additions and 3 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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);