summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms57002/tms57002.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tms57002/tms57002.cpp')
-rw-r--r--src/devices/cpu/tms57002/tms57002.cpp37
1 files changed, 15 insertions, 22 deletions
diff --git a/src/devices/cpu/tms57002/tms57002.cpp b/src/devices/cpu/tms57002/tms57002.cpp
index 8464a10e2f0..c2cf28f3f92 100644
--- a/src/devices/cpu/tms57002/tms57002.cpp
+++ b/src/devices/cpu/tms57002/tms57002.cpp
@@ -918,28 +918,22 @@ void tms57002_device::execute_run()
icount = 0;
}
-void tms57002_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
+void tms57002_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
{
- assert(samples == 1);
+ assert(inputs[0].samples() == 1);
+ assert(outputs[0].samples() == 1);
- if (st0 & ST0_SIM)
- {
- si[0] = (inputs[0][0] << 8) & 0xffffff;
- si[1] = (inputs[1][0] << 8) & 0xffffff;
- si[2] = (inputs[2][0] << 8) & 0xffffff;
- si[3] = (inputs[3][0] << 8) & 0xffffff;
- }
- else
- {
- si[0] = inputs[0][0] & 0xffffff;
- si[1] = inputs[1][0] & 0xffffff;
- si[2] = inputs[2][0] & 0xffffff;
- si[3] = inputs[3][0] & 0xffffff;
- }
- outputs[0][0] = int16_t(so[0] >> 8);
- outputs[1][0] = int16_t(so[1] >> 8);
- outputs[2][0] = int16_t(so[2] >> 8);
- outputs[3][0] = int16_t(so[3] >> 8);
+ stream_buffer::sample_t in_scale = 32768.0 * ((st0 & ST0_SIM) ? 256.0 : 1.0);
+ si[0] = s32(inputs[0].get(0) * in_scale) & 0xffffff;
+ si[1] = s32(inputs[1].get(0) * in_scale) & 0xffffff;
+ si[2] = s32(inputs[2].get(0) * in_scale) & 0xffffff;
+ si[3] = s32(inputs[3].get(0) * in_scale) & 0xffffff;
+
+ stream_buffer::sample_t out_scale = 1.0 / (32768.0 * 65536.0);
+ outputs[0].put(0, stream_buffer::sample_t(s32(so[0] << 8)) * out_scale);
+ outputs[1].put(0, stream_buffer::sample_t(s32(so[1] << 8)) * out_scale);
+ outputs[2].put(0, stream_buffer::sample_t(s32(so[2] << 8)) * out_scale);
+ outputs[3].put(0, stream_buffer::sample_t(s32(so[3] << 8)) * out_scale);
sync_w(1);
}
@@ -981,8 +975,7 @@ void tms57002_device::device_start()
state_add(TMS57002_HOST3, "HOST3", host[3]);
set_icountptr(icount);
-
- stream_alloc(4, 4, STREAM_SYNC);
+ stream_alloc(4, 4, SAMPLE_RATE_INPUT_ADAPTIVE, STREAM_SYNCHRONOUS);
save_item(NAME(macc));
save_item(NAME(macc_read));