summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/sblaster.cpp
diff options
context:
space:
mode:
author Sergey Svishchev <shattered@users.noreply.github.com>2019-01-07 23:58:39 +0300
committer Sergey Svishchev <shattered@users.noreply.github.com>2019-01-08 00:00:39 +0300
commit345b49c1b73048f4d17a586ba5182b5cdffab4d0 (patch)
tree06f4f27e6958bb7d96b8407c0993d4f059742848 /src/devices/bus/isa/sblaster.cpp
parent8da31f65aa5852b32860176bf0bbd18103cb18cd (diff)
sblaster: DMA fixes for SB Pro and SB16
Diffstat (limited to 'src/devices/bus/isa/sblaster.cpp')
-rw-r--r--src/devices/bus/isa/sblaster.cpp18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp
index 74f1e0f8dd4..7e41380ddd9 100644
--- a/src/devices/bus/isa/sblaster.cpp
+++ b/src/devices/bus/isa/sblaster.cpp
@@ -66,7 +66,7 @@ static const int m_cmd_fifo_length[256] =
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 6x */
-1, -1, -1, -1, 3, 3, 3, 3, -1, -1, -1, -1, -1, 1, -1, 1, /* 7x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 8x */
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
+ 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 9x */
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* Ax */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Bx */
4, -1, -1, -1, -1, -1, 4, -1, 4, -1, -1, -1, -1, -1, 4, -1, /* Cx */
@@ -356,6 +356,7 @@ void sb_device::process_fifo(uint8_t cmd)
break;
case 0x1c: // 8-bit DMA with autoinit
+ case 0x90: // 8-bit DMA with autoinit, high speed. XXX only on DSP 3.xx
// printf("Start DMA (autoinit, size = %x)\n", m_dsp.dma_length);
m_dsp.dma_transferred = 0;
m_dsp.dma_autoinit = 1;
@@ -583,23 +584,20 @@ void sb_device::process_fifo(uint8_t cmd)
mode = m_dsp.fifo[1];
m_dsp.flags = 0;
m_dsp.dma_length = (m_dsp.fifo[2] + (m_dsp.fifo[3]<<8)) + 1;
- if((cmd & 0xf0) == 0xb0)
- {
- m_dsp.flags |= SIXTEENBIT;
- m_dsp.dma_length <<= 1;
- drq16_w(1);
- }
- else
- drq_w(1);
if(cmd & 0x04)
m_dsp.dma_autoinit = 1;
if(mode & 0x10)
m_dsp.flags |= SIGNED;
if(mode & 0x20)
- {
m_dsp.flags |= STEREO;
+ if((cmd & 0xf0) == 0xb0)
+ {
+ m_dsp.flags |= SIXTEENBIT;
m_dsp.dma_length <<= 1;
+ drq16_w(1);
}
+ else
+ drq_w(1);
m_dsp.dma_transferred = 0;
m_dsp.dma_timer_started = false;
m_dsp.dma_throttled = false;