summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/c6280.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/c6280.cpp')
-rw-r--r--src/devices/sound/c6280.cpp28
1 files changed, 12 insertions, 16 deletions
diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp
index e8de8151be6..d01dd74125a 100644
--- a/src/devices/sound/c6280.cpp
+++ b/src/devices/sound/c6280.cpp
@@ -55,10 +55,6 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
for (int ch = 0; ch < 6; ch++)
{
channel *chan = &m_channel[ch];
-
- outputs[0].reset();
- outputs[1].reset();
-
/* Only look at enabled channels */
if (chan->control & 0x80)
{
@@ -81,7 +77,7 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
{
/* Noise mode */
const u32 step = (chan->noise_control & 0x1f) ^ 0x1f;
- while (!outputs[0].done())
+ for (int i = 0; i < outputs[0].samples(); i += 1)
{
s16 data = BIT(chan->noise_seed, 0) ? 0x1f : 0;
chan->noise_counter--;
@@ -92,18 +88,18 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
// based on Charles MacDonald's research
chan->noise_seed = (seed >> 1) | ((BIT(seed, 0) ^ BIT(seed, 1) ^ BIT(seed, 11) ^ BIT(seed, 12) ^ BIT(seed, 17)) << 17);
}
- outputs[0].add(stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
- outputs[1].add(stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
+ outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
+ outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
}
}
else
if (chan->control & 0x40)
{
/* DDA mode */
- while (!outputs[0].done())
+ for (int i = 0; i < outputs[0].samples(); i++)
{
- outputs[0].add(stream_buffer::sample_t(s16(vll * (chan->dda - 16))) * sample_scale);
- outputs[1].add(stream_buffer::sample_t(s16(vlr * (chan->dda - 16))) * sample_scale);
+ outputs[0].add(i, stream_buffer::sample_t(s16(vll * (chan->dda - 16))) * sample_scale);
+ outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (chan->dda - 16))) * sample_scale);
}
}
else
@@ -116,7 +112,7 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
channel *lfo_srcchan = &m_channel[1];
channel *lfo_dstchan = &m_channel[0];
const u16 lfo_step = lfo_srcchan->frequency ? lfo_srcchan->frequency : 0x1000;
- while (!outputs[0].done())
+ for (int i = 0; i < outputs[0].samples(); i += 1)
{
s32 step = lfo_dstchan->frequency ? lfo_dstchan->frequency : 0x1000;
if (m_lfo_control & 0x80) // reset LFO
@@ -142,8 +138,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
lfo_dstchan->tick = step;
lfo_dstchan->index = (lfo_dstchan->index + 1) & 0x1f;
}
- outputs[0].add(stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
- outputs[1].add(stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
+ outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
+ outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
}
}
}
@@ -151,7 +147,7 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
{
/* Waveform mode */
const u32 step = chan->frequency ? chan->frequency : 0x1000;
- while (!outputs[0].done())
+ for (int i = 0; i < outputs[0].samples(); i += 1)
{
const s16 data = chan->waveform[chan->index];
chan->tick--;
@@ -160,8 +156,8 @@ void c6280_device::sound_stream_update(sound_stream &stream, std::vector<read_st
chan->tick = step;
chan->index = (chan->index + 1) & 0x1f;
}
- outputs[0].add(stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
- outputs[1].add(stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
+ outputs[0].add(i, stream_buffer::sample_t(s16(vll * (data - 16))) * sample_scale);
+ outputs[1].add(i, stream_buffer::sample_t(s16(vlr * (data - 16))) * sample_scale);
}
}
}