From 7a452cbf72a0ea6038d87ad16d5ab6ac08f64756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Wed, 16 Aug 2006 16:08:24 +0000 Subject: [PATCH] prevent rare crashes when forcing sb16 when no second dma controller is present Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2686 --- src/hardware/sblaster.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index 561df6a1..dd2efd4b 100644 --- a/src/hardware/sblaster.cpp +++ b/src/hardware/sblaster.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: sblaster.cpp,v 1.54 2006-06-29 19:05:54 qbix79 Exp $ */ +/* $Id: sblaster.cpp,v 1.55 2006-08-16 16:08:24 c2woody Exp $ */ #include #include @@ -591,8 +591,14 @@ static void DSP_PrepareDMA_New(DMA_MODES mode,Bitu length,bool autoinit,bool ste sb.dma.total=length; sb.dma.autoinit=autoinit; if (mode==DSP_DMA_16) { - if (sb.hw.dma16!=0xff) sb.dma.chan=GetDMAChannel(sb.hw.dma16); - else { + if (sb.hw.dma16!=0xff) { + sb.dma.chan=GetDMAChannel(sb.hw.dma16); + if (sb.dma.chan==NULL) { + sb.dma.chan=GetDMAChannel(sb.hw.dma8); + mode=DSP_DMA_16_ALIASED; + freq/=2; + } + } else { sb.dma.chan=GetDMAChannel(sb.hw.dma8); mode=DSP_DMA_16_ALIASED; freq/=2;