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 m_screen; required_device m_palette; optional_device m_soundlatch; - optional_device m_discrete; - + optional_device m_netlist; + optional_device_array 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 //