The SB DMA callback ignores previously selected, but not currently selected, DMA channels. Fixes Visual Player 2 with SB16.
Bits 0 and 4 of the SBPro mixer volume registers are always set. Fixes SBPro detection in Wolfenstein 3D, Alone in the Dark (European versions), Visual Player 2, and possibly others. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3850
This commit is contained in:
parent
40c32b040c
commit
3b2adeccbf
1 changed files with 4 additions and 3 deletions
|
@ -274,7 +274,7 @@ static INLINE void DSP_FlushData(void) {
|
|||
}
|
||||
|
||||
static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) {
|
||||
if (event==DMA_REACHED_TC) return;
|
||||
if (chan!=sb.dma.chan || event==DMA_REACHED_TC) return;
|
||||
else if (event==DMA_MASKED) {
|
||||
if (sb.mode==MODE_DMA) {
|
||||
GenerateDMASound(sb.dma.min);
|
||||
|
@ -1123,8 +1123,9 @@ static void CTMIXER_Reset(void) {
|
|||
_WHICH_[0]= ((((_VAL_) & 0xf0) >> 3)|(sb.type==SBT_16 ? 1:3)); \
|
||||
_WHICH_[1]= ((((_VAL_) & 0x0f) << 1)|(sb.type==SBT_16 ? 1:3)); \
|
||||
|
||||
#define MAKEPROVOL(_WHICH_) \
|
||||
((((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1)) & (sb.type==SBT_16 ? 0xff:0xee))
|
||||
#define MAKEPROVOL(_WHICH_) \
|
||||
((((_WHICH_[0] & 0x1e) << 3) | ((_WHICH_[1] & 0x1e) >> 1)) | \
|
||||
((sb.type==SBT_PRO1 || sb.type==SBT_PRO2) ? 0x11:0))
|
||||
|
||||
static void DSP_ChangeStereo(bool stereo) {
|
||||
if (!sb.dma.stereo && stereo) {
|
||||
|
|
Loading…
Add table
Reference in a new issue