diff options
Diffstat (limited to 'src/devices/cpu/tms57002/tms57002.cpp')
-rw-r--r-- | src/devices/cpu/tms57002/tms57002.cpp | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/src/devices/cpu/tms57002/tms57002.cpp b/src/devices/cpu/tms57002/tms57002.cpp index 8464a10e2f0..da29f23fbcd 100644 --- a/src/devices/cpu/tms57002/tms57002.cpp +++ b/src/devices/cpu/tms57002/tms57002.cpp @@ -918,28 +918,21 @@ 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; + + outputs[0].put_int(0, s32(so[0] << 8) >> 1, 32768 * 32768); + outputs[1].put_int(0, s32(so[1] << 8) >> 1, 32768 * 32768); + outputs[2].put_int(0, s32(so[2] << 8) >> 1, 32768 * 32768); + outputs[3].put_int(0, s32(so[3] << 8) >> 1, 32768 * 32768); sync_w(1); } @@ -981,8 +974,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)); |