From 111dc4f5915ed8d1d9ad03a6a53e8f26250c3950 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Wed, 31 Mar 2004 21:53:24 +0000 Subject: [PATCH] Fake soundblaster recording to help some detection routines. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@1750 --- src/hardware/sblaster.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/hardware/sblaster.cpp b/src/hardware/sblaster.cpp index 7eb553a3..c779b84f 100644 --- a/src/hardware/sblaster.cpp +++ b/src/hardware/sblaster.cpp @@ -238,6 +238,7 @@ static void DSP_DMA_CallBack(DmaChannel * chan, DMAEvent event) { if (event==DMA_UNMASKED) sb.dma.active=true; if (sb.mode==MODE_DMA_WAIT && sb.dma.active) { LOG(LOG_SB,LOG_NORMAL)("DMA Activated,starting output"); +// LOG_MSG("DMA Size %x base %x Addr %x",chan->currcnt,chan->pagebase,chan->curraddr); DSP_ChangeMode(MODE_DMA); CheckDMAEnd(); return; @@ -638,6 +639,18 @@ static void DSP_E2_DMA_CallBack(DmaChannel * chan, DMAEvent event) { } } +static void DSP_ADC_CallBack(DmaChannel * chan, DMAEvent event) { + if (event!=DMA_UNMASKED) return; + Bit8u val=128; + while (sb.dma.left--) { + DmaChannels[sb.hw.dma8]->Write(1,&val); + } + SB_RaiseIRQ(SB_IRQ_8); + DmaChannels[sb.hw.dma8]->Register_Callback(0); +} + +Bitu DEBUG_EnableDebugger(void); + static void DSP_DoCommand(void) { // LOG_MSG("DSP Command %X",sb.dsp.cmd); switch (sb.dsp.cmd) { @@ -652,6 +665,10 @@ static void DSP_DoCommand(void) { } break; case 0x24: /* Singe Cycle 8-Bit DMA ADC */ + sb.dma.left=sb.dma.total=1+sb.dsp.in.data[0]+(sb.dsp.in.data[1] << 8); + LOG(LOG_SB,LOG_ERROR)("DSP:Faked ADC for %d bytes",sb.dma.total); + DmaChannels[sb.hw.dma8]->Register_Callback(DSP_ADC_CallBack); + break; case 0x14: /* Singe Cycle 8-Bit DMA DAC */ case 0x91: /* Singe Cycle 8-Bit DMA High speed DAC */ DSP_PrepareDMA_Old(DSP_DMA_8,false);