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:
parent
3bde40bc91
commit
e0a7ede037
3 changed files with 5 additions and 3 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue