summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/netlist.c
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2014-02-02 15:59:41 +0000
committer Couriersud <couriersud@users.noreply.github.com>2014-02-02 15:59:41 +0000
commita1cf018fe5ddae0ea372f3548d0d9290ff22d4ae (patch)
tree71dc673f97905f251fc340fbd752498d459b2118 /src/emu/machine/netlist.c
parente39a886110a0745c17f2eb8fdf1c05ac362f7148 (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.c34
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());