diff options
author | 2014-02-02 15:59:41 +0000 | |
---|---|---|
committer | 2014-02-02 15:59:41 +0000 | |
commit | a1cf018fe5ddae0ea372f3548d0d9290ff22d4ae (patch) | |
tree | 71dc673f97905f251fc340fbd752498d459b2118 /src/emu/machine/netlist.c | |
parent | e39a886110a0745c17f2eb8fdf1c05ac362f7148 (diff) |
Added route-inputs to netlist sound device. Currently this is WIP and needs some polishing, however proof-of-concept exists now.
Example usage can be enabled in pong by uncommenting TEST_SOUND
Diffstat (limited to 'src/emu/machine/netlist.c')
-rw-r--r-- | src/emu/machine/netlist.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/emu/machine/netlist.c b/src/emu/machine/netlist.c index 6dfcbef9132..119c259984e 100644 --- a/src/emu/machine/netlist.c +++ b/src/emu/machine/netlist.c @@ -451,18 +451,22 @@ void netlist_mame_sound_device_t::device_start() LOG_DEV_CALLS(("device_start %s\n", tag())); - netlist_list_t<nld_sound *> outdevs = netlist().get_device_list<nld_sound *>(); + // Configure outputs + + netlist_list_t<nld_sound_out *> outdevs = netlist().get_device_list<nld_sound_out *>(); if (outdevs.count() == 0) fatalerror("No output devices"); m_num_outputs = outdevs.count(); - m_num_inputs = 0; /* resort channels */ for (int i=0; i < MAX_OUT; i++) m_out[i] = NULL; for (int i=0; i < m_num_outputs; i++) { int chan = outdevs[i]->m_channel.Value(); + + netlist().log("Output %d on channel %d", i, chan); + if (chan < 0 || chan >= MAX_OUT || chan >= outdevs.count()) fatalerror("illegal channel number"); m_out[chan] = outdevs[i]; @@ -470,6 +474,21 @@ void netlist_mame_sound_device_t::device_start() m_out[chan]->m_buffer = NULL; } + // Configure inputs + + m_num_inputs = 0; + m_in = NULL; + + netlist_list_t<nld_sound_in *> indevs = netlist().get_device_list<nld_sound_in *>(); + if (indevs.count() > 1) + fatalerror("A maximum of one input device is allowed!"); + if (indevs.count() == 1) + { + m_in = indevs[0]; + m_num_inputs = m_in->resolve(); + m_in->m_inc = netlist_time::from_hz(clock()); + } + /* initialize the stream(s) */ m_stream = machine().sound().stream_alloc(*this, m_num_inputs, m_num_outputs, clock()); @@ -477,7 +496,8 @@ void netlist_mame_sound_device_t::device_start() void netlist_mame_sound_device_t::nl_register_devices() { - setup().factory().register_device<nld_sound>( "NETDEV_SOUND_OUT", "nld_sound", "+CHAN"); + setup().factory().register_device<nld_sound_out>("NETDEV_SOUND_OUT", "nld_sound_out", "+CHAN"); + setup().factory().register_device<nld_sound_in>("NETDEV_SOUND_IN", "nld_sound_in", "-"); } @@ -488,6 +508,14 @@ void netlist_mame_sound_device_t::sound_stream_update(sound_stream &stream, stre m_out[i]->m_buffer = outputs[i]; } + if (m_num_inputs) + m_in->buffer_reset(); + + for (int i=0; i < m_num_inputs; i++) + { + m_in->m_buffer[i] = inputs[i]; + } + netlist_time cur = netlist().time(); //printf("current time %f\n", netlist().time().as_double()); |