diff options
Diffstat (limited to 'src/devices/cpu/tms57002')
-rw-r--r-- | src/devices/cpu/tms57002/tms57002.cpp | 37 | ||||
-rw-r--r-- | src/devices/cpu/tms57002/tms57002.h | 2 |
2 files changed, 16 insertions, 23 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)); diff --git a/src/devices/cpu/tms57002/tms57002.h b/src/devices/cpu/tms57002/tms57002.h index b1a96823b06..12bcd732120 100644 --- a/src/devices/cpu/tms57002/tms57002.h +++ b/src/devices/cpu/tms57002/tms57002.h @@ -36,7 +36,7 @@ protected: virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; + virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override; virtual space_config_vector memory_space_config() const override; virtual u32 execute_min_cycles() const noexcept override; virtual u32 execute_max_cycles() const noexcept override; |