summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-01-19 20:59:31 +0100
committer couriersud <couriersud@gmx.org>2020-01-19 20:59:31 +0100
commitee0e0c972c91ef006d8f76f82fb4120b8d20c41c (patch)
tree75fe4d74c2c2ef1b4795b36a78d89c3c4a58b67e
parent0f69abe4dc6e757713f45e09102cfbedca25a473 (diff)
galaxian.cpp: Implement konami filters using netlist. [Couriersud]
This change improves accuracy and scalability.
-rw-r--r--scripts/target/mame/arcade.lua2
-rw-r--r--scripts/target/mame/nl.lua12
-rw-r--r--src/mame/audio/nl_konami.cpp183
-rw-r--r--src/mame/audio/nl_konami.h7
-rw-r--r--src/mame/drivers/galaxian.cpp142
-rw-r--r--src/mame/includes/galaxian.h9
-rw-r--r--src/mame/nl.lst218
7 files changed, 494 insertions, 79 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 77fe0f31c7a..388f48f3fcb 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -2821,6 +2821,8 @@ files {
MAME_DIR .. "src/mame/audio/galaxian.cpp",
MAME_DIR .. "src/mame/audio/galaxian.h",
MAME_DIR .. "src/mame/video/galaxian.cpp",
+ MAME_DIR .. "src/mame/audio/nl_konami.h",
+ MAME_DIR .. "src/mame/audio/nl_konami.cpp",
MAME_DIR .. "src/mame/drivers/galaxold.cpp",
MAME_DIR .. "src/mame/includes/galaxold.h",
MAME_DIR .. "src/mame/machine/galaxold.cpp",
diff --git a/scripts/target/mame/nl.lua b/scripts/target/mame/nl.lua
index 6701256bc56..c365f8e71a1 100644
--- a/scripts/target/mame/nl.lua
+++ b/scripts/target/mame/nl.lua
@@ -51,6 +51,7 @@ SOUNDS["TMS5220"] = true
SOUNDS["BEEP"] = true
SOUNDS["VOLT_REG"] = true
SOUNDS["SPEAKER"] = true
+SOUNDS["DIGITALKER"] = true
--------------------------------------------------
-- specify available video cores
@@ -184,6 +185,17 @@ files{
MAME_DIR .. "src/mame/includes/cheekyms.h",
MAME_DIR .. "src/mame/video/cheekyms.cpp",
+ MAME_DIR .. "src/mame/drivers/galaxian.cpp",
+ MAME_DIR .. "src/mame/includes/galaxian.h",
+ MAME_DIR .. "src/mame/audio/galaxian.cpp",
+ MAME_DIR .. "src/mame/audio/galaxian.h",
+ MAME_DIR .. "src/mame/video/galaxian.cpp",
+ MAME_DIR .. "src/mame/audio/nl_konami.h",
+ MAME_DIR .. "src/mame/audio/nl_konami.cpp",
+
+ MAME_DIR .. "src/mame/audio/cclimber.cpp",
+ MAME_DIR .. "src/mame/audio/cclimber.h",
+
MAME_DIR .. "src/mame/audio/nl_zac1b11142.cpp",
MAME_DIR .. "src/mame/audio/nl_zacc1b11142.h",
MAME_DIR .. "src/mame/audio/zaccaria.cpp",
diff --git a/src/mame/audio/nl_konami.cpp b/src/mame/audio/nl_konami.cpp
new file mode 100644
index 00000000000..ba45660f211
--- /dev/null
+++ b/src/mame/audio/nl_konami.cpp
@@ -0,0 +1,183 @@
+// license:CC0
+// copyright-holders:Couriersud
+#include "netlist/devices/net_lib.h"
+
+#ifdef NLBASE_H_
+#error Somehow nl_base.h made it into the include chain.
+#endif
+
+static NETLIST_START(filter)
+ CD4066_GATE(G1)
+ PARAM(G1.BASER, 270.0)
+ CD4066_GATE(G2)
+ PARAM(G2.BASER, 270.0)
+ RES(RI, RES_K(1))
+ RES(RO, RES_K(5))
+ CAP(C1, CAP_U(0.22))
+ CAP(C2, CAP_U(0.047))
+ NET_C(RI.2, RO.1, G1.R.1, G2.R.1)
+ NET_C(G1.R.2, C1.1)
+ NET_C(G2.R.2, C2.1)
+
+ NET_C(C1.2, C2.2, G1.VSS, G2.VSS)
+ NET_C(G1.VDD, G2.VDD)
+
+ ALIAS(I, RI.1)
+ ALIAS(O, RO.2)
+
+ ALIAS(CTL1, G1.CTL)
+ ALIAS(CTL2, G2.CTL)
+
+ ALIAS(VDD, G1.VDD)
+ ALIAS(VSS, G1.VSS)
+NETLIST_END()
+
+static NETLIST_START(amp)
+
+ UA741_DIP8(X3A)
+ RES(R1, RES_K(2.2))
+ RES(R2, RES_K(4.7))
+ RES(VR, 200) // Actually a potentiometer
+ CAP(C1, CAP_U(0.15))
+ RES(RI, RES_K(100))
+
+ NET_C(X3A.2, R1.1)
+ NET_C(X3A.6, R1.2, R2.1)
+ NET_C(R2.2, VR.1)
+ NET_C(VR.1, C1.1) // 100% pot position
+ NET_C(C1.2, RI.1)
+
+ NET_C(GND, VR.2, RI.2)
+
+ // Amplifier M51516L, assume input RI 100k
+
+ ALIAS(OPAMP, X3A.2)
+ ALIAS(OUT, RI.1)
+ ALIAS(VP, X3A.7)
+ ALIAS(VM, X3A.4)
+ ALIAS(GND, X3A.3)
+
+NETLIST_END()
+
+static NETLIST_START(AY1)
+ TTL_INPUT(CTL0, 0)
+ TTL_INPUT(CTL1, 0)
+ TTL_INPUT(CTL2, 0)
+ TTL_INPUT(CTL3, 0)
+ TTL_INPUT(CTL4, 0)
+ TTL_INPUT(CTL5, 0)
+ /* AY 8910 internal resistors */
+ RES(R_AY3D_A, 1000)
+ RES(R_AY3D_B, 1000)
+ RES(R_AY3D_C, 1000)
+ NET_C(VP5, R_AY3D_A.1, R_AY3D_B.1, R_AY3D_C.1)
+
+ SUBMODEL(filter, FCHA1)
+ NET_C(FCHA1.I, R_AY3D_A.2)
+ SUBMODEL(filter, FCHB1)
+ NET_C(FCHB1.I, R_AY3D_B.2)
+ SUBMODEL(filter, FCHC1)
+ NET_C(FCHC1.I, R_AY3D_C.2)
+
+ NET_C(FCHA1.CTL1, CTL0)
+ NET_C(FCHA1.CTL2, CTL1)
+ NET_C(FCHB1.CTL1, CTL2)
+ NET_C(FCHB1.CTL2, CTL3)
+ NET_C(FCHC1.CTL1, CTL4)
+ NET_C(FCHC1.CTL2, CTL5)
+
+ NET_C(VP5, FCHA1.VDD, FCHB1.VDD, FCHC1.VDD)
+ NET_C(GND, FCHA1.VSS, FCHB1.VSS, FCHC1.VSS)
+
+ NET_C(VP5, CTL0.VCC, CTL1.VCC, CTL2.VCC, CTL3.VCC, CTL4.VCC, CTL5.VCC)
+ NET_C(GND, CTL0.GND, CTL1.GND, CTL2.GND, CTL3.GND, CTL4.GND, CTL5.GND)
+
+NETLIST_END()
+
+static NETLIST_START(AY2)
+ TTL_INPUT(CTL6, 0)
+ TTL_INPUT(CTL7, 0)
+ TTL_INPUT(CTL8, 0)
+ TTL_INPUT(CTL9, 0)
+ TTL_INPUT(CTL10, 0)
+ TTL_INPUT(CTL11, 0)
+ /* AY 8910 internal resistors */
+ RES(R_AY3C_A, 1000)
+ RES(R_AY3C_B, 1000)
+ RES(R_AY3C_C, 1000)
+ NET_C(VP5, R_AY3C_A.1, R_AY3C_B.1, R_AY3C_C.1)
+
+ SUBMODEL(filter, FCHA2)
+ NET_C(FCHA2.I, R_AY3C_A.2)
+ SUBMODEL(filter, FCHB2)
+ NET_C(FCHB2.I, R_AY3C_B.2)
+ SUBMODEL(filter, FCHC2)
+ NET_C(FCHC2.I, R_AY3C_C.2)
+
+ NET_C(FCHA2.CTL1, CTL6)
+ NET_C(FCHA2.CTL2, CTL7)
+ NET_C(FCHB2.CTL1, CTL8)
+ NET_C(FCHB2.CTL2, CTL9)
+ NET_C(FCHC2.CTL1, CTL10)
+ NET_C(FCHC2.CTL2, CTL11)
+
+ NET_C(VP5, FCHA2.VDD, FCHB2.VDD, FCHC2.VDD)
+ NET_C(GND, FCHA2.VSS, FCHB2.VSS, FCHC2.VSS)
+
+ NET_C(VP5, CTL6.VCC, CTL7.VCC, CTL8.VCC, CTL9.VCC, CTL10.VCC, CTL11.VCC)
+ NET_C(GND, CTL6.GND, CTL7.GND, CTL8.GND, CTL9.GND, CTL10.GND, CTL11.GND)
+
+NETLIST_END()
+
+NETLIST_START(konami2x)
+
+ SOLVER(Solver, 48000)
+
+ ANALOG_INPUT(VP5, 5)
+ ANALOG_INPUT(VM5, -5)
+
+ LOCAL_SOURCE(filter)
+ LOCAL_SOURCE(amp)
+ LOCAL_SOURCE(AY1)
+ LOCAL_SOURCE(AY2)
+
+ INCLUDE(AY1)
+ INCLUDE(AY2)
+
+ NET_C(FCHA1.O, FCHB1.O, FCHC1.O, FCHA2.O, FCHB2.O, FCHC2.O)
+
+ SUBMODEL(amp, AMP)
+
+ NET_C(VP5, AMP.VP)
+ NET_C(GND, AMP.GND)
+ NET_C(VM5, AMP.VM)
+ NET_C(FCHA1.O, AMP.OPAMP)
+
+ ALIAS(OUT, AMP.OUT)
+NETLIST_END()
+
+NETLIST_START(konami1x)
+
+ SOLVER(Solver, 48000)
+
+ ANALOG_INPUT(VP5, 5)
+ ANALOG_INPUT(VM5, -5)
+
+ LOCAL_SOURCE(filter)
+ LOCAL_SOURCE(amp)
+ LOCAL_SOURCE(AY1)
+ LOCAL_SOURCE(AY2)
+
+ INCLUDE(AY1)
+
+ NET_C(FCHA1.O, FCHB1.O, FCHC1.O)
+
+ SUBMODEL(amp, AMP)
+
+ NET_C(VP5, AMP.VP)
+ NET_C(GND, AMP.GND)
+ NET_C(VM5, AMP.VM)
+ NET_C(FCHA1.O, AMP.OPAMP)
+
+ ALIAS(OUT, AMP.OUT)
+NETLIST_END()
diff --git a/src/mame/audio/nl_konami.h b/src/mame/audio/nl_konami.h
new file mode 100644
index 00000000000..12f93e89af6
--- /dev/null
+++ b/src/mame/audio/nl_konami.h
@@ -0,0 +1,7 @@
+// license:CC0
+// copyright-holders:Couriersud
+
+#include "netlist/nl_setup.h"
+
+NETLIST_EXTERNAL(konami1x)
+NETLIST_EXTERNAL(konami2x)
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index ae618d21066..f4dd12f21d1 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -667,6 +667,8 @@ TODO:
#include "screen.h"
#include "speaker.h"
+#include "audio/nl_konami.h"
+
/*************************************
*
* Interrupts
@@ -817,28 +819,34 @@ READ8_MEMBER(galaxian_state::konami_sound_timer_r)
0x0e; /* assume remaining bits are high, except B0 which is grounded */
}
-
WRITE8_MEMBER(galaxian_state::konami_sound_filter_w)
{
- if (m_discrete != nullptr)
+ if (m_netlist != nullptr)
{
/* the offset is used as data, 6 channels * 2 bits each */
- /* AV0 .. AV5 ==> AY8910 #2 */
- /* AV6 .. AV11 ==> AY8910 #1 */
+ /* AV0 .. AV5 ==> AY8910 #2 - 3C */
+ /* AV6 .. AV11 ==> AY8910 #1 - 3D */
+ static int last = 0;
+ if (offset != last)
+ printf("filter %04x\n", offset);
for (int which = 0; which < 2; which++)
{
if (m_ay8910[which] != nullptr)
{
- for (int chan = 0; chan < 3; chan++)
+ if (offset != last)
+ printf("filter%d %04x\n", which, (offset >> (6*(1-which))) & 0x3f);
+ for (int flt = 0; flt < 6; flt++)
{
- uint8_t bits = (offset >> (2 * chan + 6 * (1 - which))) & 3;
+ const int fltnum = (flt + 6 * which);
+ const uint8_t bit = (offset >> (flt + 6 * (1 - which))) & 1;
/* low bit goes to 0.22uF capacitor = 220000pF */
/* high bit goes to 0.047uF capacitor = 47000pF */
- m_discrete->write(NODE(3 * which + chan + 11), bits);
+ m_filter_ctl[fltnum]->write(bit);
}
}
}
+ last = offset;
}
}
@@ -5924,62 +5932,6 @@ static GFXDECODE_START(gfx_videight)
GFXDECODE_END
-/*************************************
- *
- * Sound configuration
- *
- *************************************/
-
-static const discrete_mixer_desc konami_sound_mixer_desc =
- {DISC_MIXER_IS_OP_AMP,
- {RES_K(5.1), RES_K(5.1), RES_K(5.1), RES_K(5.1), RES_K(5.1), RES_K(5.1)},
- {0,0,0,0,0,0}, /* no variable resistors */
- {0,0,0,0,0,0}, /* no node capacitors */
- 0, RES_K(2.2),
- 0,
- 0, /* modelled separately */
- 0, 1};
-
-static DISCRETE_SOUND_START( konami_sound_discrete )
-
- DISCRETE_INPUTX_STREAM(NODE_01, 0, 1.0, 0)
- DISCRETE_INPUTX_STREAM(NODE_02, 1, 1.0, 0)
- DISCRETE_INPUTX_STREAM(NODE_03, 2, 1.0, 0)
-
- DISCRETE_INPUTX_STREAM(NODE_04, 3, 1.0, 0)
- DISCRETE_INPUTX_STREAM(NODE_05, 4, 1.0, 0)
- DISCRETE_INPUTX_STREAM(NODE_06, 5, 1.0, 0)
-
- DISCRETE_INPUT_DATA(NODE_11)
- DISCRETE_INPUT_DATA(NODE_12)
- DISCRETE_INPUT_DATA(NODE_13)
-
- DISCRETE_INPUT_DATA(NODE_14)
- DISCRETE_INPUT_DATA(NODE_15)
- DISCRETE_INPUT_DATA(NODE_16)
-
- DISCRETE_RCFILTER_SW(NODE_21, 1, NODE_01, NODE_11, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
- DISCRETE_RCFILTER_SW(NODE_22, 1, NODE_02, NODE_12, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
- DISCRETE_RCFILTER_SW(NODE_23, 1, NODE_03, NODE_13, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
-
- DISCRETE_RCFILTER_SW(NODE_24, 1, NODE_04, NODE_14, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
- DISCRETE_RCFILTER_SW(NODE_25, 1, NODE_05, NODE_15, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
- DISCRETE_RCFILTER_SW(NODE_26, 1, NODE_06, NODE_16, AY8910_INTERNAL_RESISTANCE+1000, CAP_U(0.22), CAP_U(0.047), 0, 0)
-
- DISCRETE_MIXER6(NODE_30, 1, NODE_21, NODE_22, NODE_23, NODE_24, NODE_25, NODE_26, &konami_sound_mixer_desc)
-
- /* FIXME the amplifier M51516L has a decay circuit */
- /* This is handled with sound_global_enable but */
- /* belongs here. */
-
- /* Input impedance of a M51516L is typically 30k (datasheet) */
- DISCRETE_CRFILTER(NODE_40,NODE_30,RES_K(30),CAP_U(0.15))
-
- DISCRETE_OUTPUT(NODE_40, 10.0 )
-
-DISCRETE_SOUND_END
-
-
/*************************************
*
@@ -6052,15 +6004,32 @@ void galaxian_state::konami_sound_1x_ay8910(machine_config &config)
/* sound hardware */
AY8910(config, m_ay8910[0], KONAMI_SOUND_CLOCK/8);
- m_ay8910[0]->set_flags(AY8910_DISCRETE_OUTPUT);
- m_ay8910[0]->set_resistors_load(RES_K(5.1), RES_K(5.1), RES_K(5.1));
+ m_ay8910[0]->set_flags(AY8910_RESISTOR_OUTPUT);
+ m_ay8910[0]->set_resistors_load(1000.0, 1000.0, 1000.0);
m_ay8910[0]->port_a_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read));
m_ay8910[0]->port_b_read_callback().set(FUNC(galaxian_state::frogger_sound_timer_r));
m_ay8910[0]->add_route(0, "konami", 1.0, 0);
m_ay8910[0]->add_route(1, "konami", 1.0, 1);
m_ay8910[0]->add_route(2, "konami", 1.0, 2);
- DISCRETE(config, m_discrete, konami_sound_discrete).add_route(ALL_OUTPUTS, "speaker", 0.75);
+ NETLIST_SOUND(config, "konami", 48000)
+ .set_source(netlist_konami1x)
+ .add_route(ALL_OUTPUTS, "speaker", 1.0);
+
+ // Filter
+ NETLIST_LOGIC_INPUT(config, "konami:ctl0", "CTL0.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl1", "CTL1.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl2", "CTL2.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl3", "CTL3.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl4", "CTL4.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl5", "CTL5.IN", 0);
+
+ // CHA1 - 3D
+ NETLIST_STREAM_INPUT(config, "konami:cin0", 0, "R_AY3D_A.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin1", 1, "R_AY3D_B.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin2", 2, "R_AY3D_C.R");
+
+ NETLIST_STREAM_OUTPUT(config, "konami:cout0", 0, "OUT").set_mult_offset(30000.0 / 0.05, 0.0);
}
@@ -6075,8 +6044,8 @@ void galaxian_state::konami_sound_2x_ay8910(machine_config &config)
/* sound hardware */
AY8910(config, m_ay8910[0], KONAMI_SOUND_CLOCK/8);
- m_ay8910[0]->set_flags(AY8910_DISCRETE_OUTPUT);
- m_ay8910[0]->set_resistors_load(RES_K(5.1), RES_K(5.1), RES_K(5.1));
+ m_ay8910[0]->set_flags(AY8910_RESISTOR_OUTPUT);
+ m_ay8910[0]->set_resistors_load(1000.0, 1000.0, 1000.0);
m_ay8910[0]->port_a_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read));
m_ay8910[0]->port_b_read_callback().set(FUNC(galaxian_state::konami_sound_timer_r));
m_ay8910[0]->add_route(0, "konami", 1.0, 0);
@@ -6084,13 +6053,40 @@ void galaxian_state::konami_sound_2x_ay8910(machine_config &config)
m_ay8910[0]->add_route(2, "konami", 1.0, 2);
AY8910(config, m_ay8910[1], KONAMI_SOUND_CLOCK/8);
- m_ay8910[1]->set_flags(AY8910_DISCRETE_OUTPUT);
- m_ay8910[1]->set_resistors_load(RES_K(5.1), RES_K(5.1), RES_K(5.1));
+ m_ay8910[1]->set_flags(AY8910_RESISTOR_OUTPUT);
+ m_ay8910[1]->set_resistors_load(1000.0, 1000.0, 1000.0);
m_ay8910[1]->add_route(0, "konami", 1.0, 3);
m_ay8910[1]->add_route(1, "konami", 1.0, 4);
m_ay8910[1]->add_route(2, "konami", 1.0, 5);
- DISCRETE(config, m_discrete, konami_sound_discrete).add_route(ALL_OUTPUTS, "speaker", 0.5);
+ NETLIST_SOUND(config, "konami", 48000)
+ .set_source(netlist_konami2x)
+ .add_route(ALL_OUTPUTS, "speaker", 1.0);
+
+ // Filter
+ NETLIST_LOGIC_INPUT(config, "konami:ctl0", "CTL0.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl1", "CTL1.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl2", "CTL2.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl3", "CTL3.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl4", "CTL4.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl5", "CTL5.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl6", "CTL6.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl7", "CTL7.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl8", "CTL8.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl9", "CTL9.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl10", "CTL10.IN", 0);
+ NETLIST_LOGIC_INPUT(config, "konami:ctl11", "CTL11.IN", 0);
+
+ // CHA1 - 3D
+ NETLIST_STREAM_INPUT(config, "konami:cin0", 0, "R_AY3D_A.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin1", 1, "R_AY3D_B.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin2", 2, "R_AY3D_C.R");
+
+ // CHA2 - 3C
+ NETLIST_STREAM_INPUT(config, "konami:cin3", 3, "R_AY3C_A.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin4", 4, "R_AY3C_B.R");
+ NETLIST_STREAM_INPUT(config, "konami:cin5", 5, "R_AY3C_C.R");
+ NETLIST_STREAM_OUTPUT(config, "konami:cout0", 0, "OUT").set_mult_offset(30000.0 / 0.05, 0.0);
}
@@ -6701,10 +6697,6 @@ void galaxian_state::turpins(machine_config &config) // the ROMs came from a bli
void galaxian_state::anteater(machine_config &config)
{
scobra(config);
-
- /* quiet down the sounds */
- m_discrete->reset_routes();
- m_discrete->add_route(ALL_OUTPUTS, "speaker", 0.25);
}
diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h
index 27e67419ebb..f730f1803e3 100644
--- a/src/mame/includes/galaxian.h
+++ b/src/mame/includes/galaxian.h
@@ -16,7 +16,7 @@
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/digitalk.h"
-#include "sound/discrete.h"
+#include "machine/netlist.h"
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
@@ -74,7 +74,8 @@ public:
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
- , m_discrete(*this, "konami")
+ , m_netlist(*this, "konami")
+ , m_filter_ctl(*this, "konami:ctl%u", 0)
, m_fake_select(*this, "FAKE_SELECT")
, m_tenspot_game_dsw(*this, {"IN2_GAME0", "IN2_GAME1", "IN2_GAME2", "IN2_GAME3", "IN2_GAME4", "IN2_GAME5", "IN2_GAME6", "IN2_GAME7", "IN2_GAME8", "IN2_GAME9"})
, m_spriteram(*this, "spriteram")
@@ -424,8 +425,8 @@ protected:
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<generic_latch_8_device> m_soundlatch;
- optional_device<discrete_sound_device> m_discrete;
-
+ optional_device<netlist_mame_sound_device> m_netlist;
+ optional_device_array<netlist_mame_logic_input_device, 12> m_filter_ctl;
optional_ioport m_fake_select;
optional_ioport_array<10> m_tenspot_game_dsw;
diff --git a/src/mame/nl.lst b/src/mame/nl.lst
index ae847034bcc..5520fe1e376 100644
--- a/src/mame/nl.lst
+++ b/src/mame/nl.lst
@@ -20,6 +20,224 @@
1942p // prototype
1942h // hack (Two Bit Score?)
+/* FIXME: games commented out complain about being a clone of a game not in the driver */
+
+@source:galaxian.cpp
+600 // GX353 (c) 1981 Konami
+amidar // GX337 (c) 1982 Konami
+amidar1 // GX337 (c) 1981 Konami
+amidarb // bootleg
+amidaro // GX337 (c) 1982 Konami + Olympia license
+amidars // GX337 (c) 1982 Konami
+amidaru // GX337 (c) 1982 Konami + Stern license
+amigo // bootleg
+amigo2 // bootleg
+anteater // (c) 1982 Tago
+anteaterg // (c) 1983 TV-Tuning (F.E.G. license)
+anteatergg // bootleg
+anteateruk // (c) 1983 Free Enterprise Games
+aracnis // bootleg
+armorcar // (c) 1981 Stern
+armorcar2 // (c) 1981 Stern
+asideral // bootleg
+astrians //
+atlantis // (c) 1981 Comsoft
+atlantis2 // (c) 1981 Comsoft
+atlantisb // bootleg
+azurian // (c) 1982 Rait Electronics Ltd
+//batman2 // bootleg
+blkhole // TDS (Tokyo Denshi Sekkei) & MINTS
+bomber //
+calipso // (c) 1982 Tago
+catacomb // 1982 MTM Games
+checkman // (c) 1982 Zilec-Zenitone
+checkmanj // (c) 1982 Jaleco (Zenitone/Zilec in ROM CM4, and the programmer names)
+chewing // ?? unknown
+//devilfsg // (c) 1984 Vision / Artic (bootleg?)
+dingo // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
+dingoe // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
+eagle // [1980] Centuri
+eagle2 // [1980] Centuri
+eagle3 // [1980] Centuri
+exodus // Subelectro - bootleg?
+explorer // bootleg
+fantastc // (c) Taito (Brazil) - rewrite of Galaga
+fantazia // bootleg
+frogf // bootleg
+frogg // bootleg
+frogger // GX392 (c) 1981 Konami
+froggeram // bootleg
+froggermc // 800-3110 (c) 1981 Sega
+froggers // bootleg
+froggers1 // (c) 1981 Sega
+froggers2 // 834-0068 (c) 1981 Sega
+froggers3 //
+froggrs //
+froggervd // Video Dens
+fourplay // multigame
+galap1 // hack
+galap4 // hack
+galapx // hack
+galaxbsf // hack
+galaxbsf2 // bootleg
+galaxian // (c) Namco
+galaxiana // (c) Namco
+galaxianbl // bootleg
+galaxianbl2 // bootleg
+galaxiani // (c) Irem
+galaxianm // (c) Midway
+galaxianmo // (c) Midway
+galaxiant // (c) Taito
+galaxrcgg // bootleg (Recreativos Covadonga)
+galaxrf // bootleg (Recreativos Franco)
+galaxrfgg // bootleg (Recreativos Franco)
+galemp // (c) Taito do Brasil
+galturbo // hack
+//ghostmun //
+gmgalax // bootleg
+gteikoku // (c) Irem
+gteikokub // bootleg
+gteikokub2 // bootleg
+gteikokub3 // bootleg (Honly Enterprises)
+jumpbug // (c) 1981 Rock-ola
+jumpbugb // (c) 1981 Sega
+//jungsub // bootleg
+kamakazi3 // Video Games (UK) Ltd., hack or bootleg?
+kamikazp // bootleg (Potomac Games)
+kingball // (c) 1980 Namco
+kingballj // (c) 1980 Namco
+kong // (c) Taito (Brazil) - rewrite of Donkey Kong
+//ladybugg // bootleg
+levers // (c) 1983 Rock-ola
+losttomb // (c) 1982 Stern
+losttombh // (c) 1982 Stern
+luctoday // 1980 Sigma
+mandinga // bootleg (Artemi)
+mandingaeg // bootleg (Electrogame)
+mandingarf // bootleg (Recreativos Franco S.A.)
+mandingac // bootleg (Centromatic)
+mltiwars // bootleg (Gayton Games)
+monsterz // (c) 1982 Nihon (Arcade TV Game List - P.102, Left, 20 from top)
+moonal2 // [1980] Nichibutsu
+moonal2b // [1980] Nichibutsu
+moonaln // [Nichibutsu] (Karateco license) or hack
+mooncmw // bootleg
+mooncptc // bootleg (Petaco S.A.)
+mooncreg // bootleg
+mooncrgx // bootleg
+mooncrs2 // bootleg
+mooncrs3 // bootleg
+mooncrs4 // bootleg
+mooncrs5 // bootleg
+mooncrsb // bootleg
+mooncrsl // bootleg (Laguna S.A.)
+mooncrst // (c) 1980 Nichibutsu
+mooncrstg // (c) 1980 Gremlin
+mooncrstso // (c) 1980 SegaSA / Sonic
+mooncrsto // (c) 1980 Nichibutsu
+mooncrstu // (c) 1980 Nichibutsu USA
+mooncrstuk // (c) 1980 Nichibutsu UK
+mooncrstuku // (c) 1980 Nichibutsu UK
+moonqsr // (c) 1980 Nichibutsu
+moonwar // (c) 1981 Stern
+moonwara // (c) 1981 Stern
+mshuttle // (c) 1981 Nichibutsu
+mshuttle2 // (c) 1981 Nichibutsu
+mshuttlea // (c) 1981 Nichibutsu
+mshuttlej // (c) 1981 Nichibutsu
+mshuttlej2 // (c) 1981 Nichibutsu
+ncentury // bootleg (Petaco S.A.)
+offensiv // bootleg (Video Dens)
+omegab // bootleg
+omni // bootleg
+orbitron // (c) 1982 Signatron USA (Arcade Tv Game List - P.160, Left, 22 from top)
+//pacmanbl // bootleg
+//pacmanbla // bootleg
+//pacmanblb // bootleg
+//pacmanblv // bootleg (Video Dens)
+pajaroes // bootleg
+//phoenxp2 // bootleg
+pisces // Subelectro
+piscesb // bootleg
+quaak // bootleg
+redufo // (c) Artic
+redufob // bootleg
+redufob2 // bootleg
+scobra // GX316 (c) 1981 Konami
+scobrab // GX316 (c) 1981 Karateco (bootleg?)
+scobrae // GX316 (c) 1981 Stern
+scobrae2 //
+scobrag // AVG by Zaccaria (bootleg?)
+scobraggi // bootleg (Cocamatic)
+scobras // GX316 (c) 1981 Stern
+scobrase // GX316 (c) 1981 Sega
+scorpion // (c) 1982 Zaccaria
+scorpiona // (c) 1982 Zaccaria
+scorpionb // (c) 1982 Zaccaria
+scorpionmc // bootleg
+scramble // GX387 (c) 1981 Konami
+scramblebb // bootleg?
+kamikazesp // bootleg (Euromatic S.A.)
+scramblebf // bootleg
+scrambles // GX387 (c) 1981 Stern
+scrambles2 // GX387 (c) 1981 Stern
+scrambp // bootleg (Billport S.A.)
+scramce // bootleg (Centromatic S.A.)
+scrammr // bootleg (Model Racing)
+scrampt // bootleg (Petaco S.A.)
+scramrf // bootleg (Recreativos Franco)
+sfx // (c) 1983 Nichibutsu
+skelagon // (c) 1983 Nichibutsu USA
+skybase // (c) 1982 Omori Electric Co., Ltd.
+skyraidr // bootleg
+smooncrs // Gremlin
+spacbat2 // bootleg
+spacbatt // bootleg
+spacempr // bootleg
+spactrai //
+spcdrag // bootleg
+spcdraga // bootleg
+spctbird // (c) Fortrek
+spdcoin // (c) 1984 Stern
+sstarcrs // Taito (Brazil)
+starfght // hack
+starfgmc // bootleg
+stera // bootleg
+streakng // [1980] Shoei
+streaknga // [1980] Shoei
+strfbomb // bootleg
+superbon // bootleg
+superg // hack
+supergs // Silver Systems hack
+supergx // [1980] Nichibutsu
+suprheli // bootleg
+swarm // hack
+tazmania // (c) 1982 Stern
+tdpgal // 1983 Design Labs / Thomas Automatics
+tenspot // (c) 1982 Thomas Automatics
+theend // (c) 1980 Konami
+takeoff // (c) 1980 Sidam (bootleg)
+theends // (c) 1980 Stern
+//thepitm // bootleg
+timefgtr // (c) Taito (Brazil) - rewrite of Time Pilot
+tst_galx // Galaxian Test ROM
+turpin // (c) 1981 Sega
+turpins // (c) 1981 bootleg
+turtles // (c) 1981 Stern
+uniwars // (c) Irem
+uniwarsa // (c) Karateco
+victoryc // (c) Comsoft
+victorycb // (c) Comsoft (bootleg)
+videight // multigame
+warofbug // (c) 1981 Armenia
+warofbugg // German Version
+warofbugu // (c) 1981 Armenia
+zerotime // hack (Petaco S.A.)
+zerotimed // hack (Datamat)
+zerotimemc // hack (Marti Colls)
+zigzagb // (c) 1982 LAX (bootleg)
+zigzagb2 // (c) 1982 LAX (bootleg)
+
@source:gamemachine.cpp
2001tgm //