1
0
Fork 0

Add halt/resume 8-bit dma calls and fix the static noise when generating silenec.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@687
This commit is contained in:
Sjoerd van der Berg 2003-02-23 10:48:50 +00:00
parent 8d71179417
commit e3a3634669

View file

@ -310,7 +310,7 @@ static void GenerateSound(Bitu size) {
case MODE_DMA_WAIT:
case MODE_DMA_PAUSE:
case MODE_NONE:
memset(&sb.out.buf[sb.out.pos],0,samples*2);
memset(&sb.out.buf[sb.out.pos],0,samples*4);
sb.out.pos+=samples;
break;
case MODE_DAC:
@ -436,11 +436,6 @@ static void DSP_AddData(Bit8u val) {
}
}
static void DSP_HaltDMA(void) {
DSP_ChangeMode(MODE_NONE);
sb.dma.mode=DMA_NONE;
PIC_RemoveEvents(END_DMA_Event);
}
static void DSP_Reset(void) {
DSP_ChangeMode(MODE_NONE);
@ -492,7 +487,6 @@ static void DSP_DoCommand(void) {
case 0x24: /* Singe Cycle 8-Bit DMA ADC */
case 0x14: /* Singe Cycle 8-Bit DMA DAC */
case 0x91: /* Singe Cycle 8-Bit DMA High speed DAC */
/* Set the length of the transfer */
DSP_StartDMATranfser(DMA_8_SINGLE);
break;
case 0x90: /* Auto Init 8-bit DMA High Speed */
@ -517,7 +511,12 @@ static void DSP_DoCommand(void) {
DSP_StartDMATranfser(DMA_8_SILENCE);
break;
case 0xd0: /* Halt 8-bit DMA */
DSP_HaltDMA();
if (sb.dma.left) {
DSP_ChangeMode(MODE_DMA_PAUSE);
#if SB_PIC_EVENTS
PIC_RemoveEvents(END_DMA_Event);
#endif
} else DSP_ChangeMode(MODE_NONE);
break;
case 0xd1: /* Enable Speaker */
DSP_SetSpeaker(true);
@ -525,6 +524,10 @@ static void DSP_DoCommand(void) {
case 0xd3: /* Disable Speaker */
DSP_SetSpeaker(false);
break;
case 0xd4:
DSP_ChangeMode(MODE_DMA_WAIT);
DMA_SetEnableCallBack(sb.hw.dma8,DMA_Enable);
break;
case 0xe0: /* DSP Identification - SB2.0+ */
DSP_FlushData();
DSP_AddData(~sb.dsp.in.data[0]);
@ -559,7 +562,6 @@ static void DSP_DoCommand(void) {
DSP_FlushData();
DSP_AddData(sb.dsp.test_register);;
break;
case 0xf2: /* Trigger 8bit IRQ */
DSP_FlushData();
DSP_AddData(0xaa);