From 03c45ffbc779831926d3f3fe2c36e97e4060c2ec Mon Sep 17 00:00:00 2001 From: Ryan Holtz Date: Wed, 29 Jul 2020 14:23:44 +0200 Subject: [PATCH] -starcrus: Added netlist sound. [Ryan Holtz, Colin Howell, Aaron Giles] --- scripts/target/mame/arcade.lua | 2 + src/lib/netlist/macro/nlm_base.cpp | 4 + src/mame/audio/nl_starcrus.cpp | 326 +++++++++++++++++++++++++++++ src/mame/audio/nl_starcrus.h | 10 + src/mame/drivers/starcrus.cpp | 48 +++-- src/mame/includes/starcrus.h | 29 ++- src/mame/video/starcrus.cpp | 119 +---------- 7 files changed, 388 insertions(+), 150 deletions(-) create mode 100644 src/mame/audio/nl_starcrus.cpp create mode 100644 src/mame/audio/nl_starcrus.h diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index bf636477a2a..836b217dbee 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -3355,6 +3355,8 @@ files { MAME_DIR .. "src/mame/drivers/starcrus.cpp", MAME_DIR .. "src/mame/includes/starcrus.h", MAME_DIR .. "src/mame/video/starcrus.cpp", + MAME_DIR .. "src/mame/audio/nl_starcrus.cpp", + MAME_DIR .. "src/mame/audio/nl_starcrus.h", } createMAMEProjects(_target, _subtarget, "rare") diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp index f18ae337afb..193e53eae6f 100644 --- a/src/lib/netlist/macro/nlm_base.cpp +++ b/src/lib/netlist/macro/nlm_base.cpp @@ -14,6 +14,8 @@ static NETLIST_START(diode_models) NET_MODEL("1N916 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") NET_MODEL("1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)") NET_MODEL("1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") + // FIXME: Unsure of the peak voltage of the 1N4154! + NET_MODEL("1N4154 D(Is=0.1n Rs=4 N=1.67 Cjo=2p M=.333 tt=3n Iave=150m Vpk=35 Bv=60 Ibv=0.1p mfg=Vishay type=silicon)") NET_MODEL("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") NET_MODEL("1N34A D( Bv=75 Cjo=0.5e-12 Eg=0.67 Ibv=18e-3 Is=2e-7 Rs=7 N=1.3 Vj=0.1 M=0.27 type=germanium)") @@ -58,6 +60,8 @@ static NETLIST_START(bjt_models) NET_MODEL("2N5190 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)") NET_MODEL("2N4401 NPN(IS=26.03f XTI=3 EG=1.11 VAF=90.7 BF=4.292K NE=1.244 ISE=26.03f IKF=0.2061 XTB=1.5 BR=1.01 NC=2 ISC=0 IKR=0 RC=0.5 CJC=11.01p MJC=0.3763 VJC=0.75 FC=0.5 CJE=24.07p MJE=0.3641 VJE=0.75 TR=233.7n TF=466.5p ITF=0 VTF=0 XTF=0 RB=10 VCEO=40)") + NET_MODEL("2N4124 NPN(IS=6.734f XTI=3 EG=1.11 VAF=74.03 BF=495 NE=1.28 ISE=6.734f IKF=69.35m XTB=1.5 BR=0.7214 NC=2 ISC=0 IKR=0 RC=1 CJC=3.638p MJC=0.3085 VJC=0.75 FC=0.5 CJE=4.493p MJE=0.2593 VJE=0.75 TR=238.3n TF=301.3p ITF=.4 VTF=4 XTF=2 RB=10 VCEO=25)") + NET_MODEL("2N4126 PNP(IS=1.41f XTI=3 EG=1.11 VAF=18.7 BF=203.7 NE=1.5 ISE=0 IKF=80m XTB=1.5 BR=4.924 NC=2 ISC=0 IKR=0 RC=2.5 CJC=9.728p MJC=0.5776 VJC=0.75 FC=0.5 CJE=8.063p MJE=0.3677 VJE=0.75 TR=33.23n TF=179.3p ITF=.4 VTF=4 XTF=6 RB=10 VCEO=25)") NET_MODEL("2SC945 NPN(IS=3.577E-14 BF=2.382E+02 NF=1.01 VAF=1.206E+02 IKF=3.332E-01 ISE=3.038E-16 NE=1.205 BR=1.289E+01 NR=1.015 VAR=1.533E+01 IKR=2.037E-01 ISC=3.972E-14 NC=1.115 RB=3.680E+01 IRB=1.004E-04 RBM=1 RE=8.338E-01 RC=1.557E+00 CJE=1.877E-11 VJE=7.211E-01 MJE=3.486E-01 TF=4.149E-10 XTF=1.000E+02 VTF=9.956 ITF=5.118E-01 PTF=0 CJC=6.876p VJC=3.645E-01 MJC=3.074E-01 TR=5.145E-08 XTB=1.5 EG=1.11 XTI=3 FC=0.5 Vceo=50 Icrating=100m MFG=NEC)") NET_MODEL("BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45 ICRATING=100M MFG=ZETEX)") diff --git a/src/mame/audio/nl_starcrus.cpp b/src/mame/audio/nl_starcrus.cpp new file mode 100644 index 00000000000..27624caf999 --- /dev/null +++ b/src/mame/audio/nl_starcrus.cpp @@ -0,0 +1,326 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +// +// Netlist for Star Cruiser +// +// Derived from the schematics in the Star Cruiser manual. +// +// Known problems/issues: +// +// * Uses HLE noise due to abusing a 2N4124 in breakdown as a noise source. +// + +#include "netlist/devices/net_lib.h" +#include "nl_starcrus.h" + +// +// Main netlist +// + +NETLIST_START(starcrus) + + SOLVER(Solver, 48000) + ANALOG_INPUT(V12, 12) + ANALOG_INPUT(V5, 5) + ANALOG_INPUT(VM5, -5) + ALIAS(VCC, V5) + + TTL_INPUT(EXPLODE_1, 1) // active low + TTL_INPUT(EXPLODE_2, 1) // active low + TTL_INPUT(LAUNCH_1, 1) // active low + TTL_INPUT(LAUNCH_2, 1) // active low + TTL_INPUT(ENGINE_1, 1) // active low + TTL_INPUT(ENGINE_2, 1) // active low + + NET_C(GND, EXPLODE_1.GND, EXPLODE_2.GND, LAUNCH_1.GND, LAUNCH_2.GND, ENGINE_1.GND, ENGINE_2.GND) + NET_C(V5, EXPLODE_1.VCC, EXPLODE_2.VCC, LAUNCH_1.VCC, LAUNCH_2.VCC, ENGINE_1.VCC, ENGINE_2.VCC) + + RES(R22, 470) + POT(R23, RES_K(2.5)) + RES(R24, RES_K(10)) + RES(R25, RES_K(15)) + RES(R26, RES_K(2.2)) + RES(R28, RES_K(100)) + RES(R29, RES_K(220)) + RES(R30, RES_K(220)) + RES(R31, RES_K(470)) + RES(R32, RES_K(100)) + RES(R33, RES_K(2.2)) + RES(R34, RES_K(2.2)) + RES(R35, RES_K(2.2)) + RES(R36, RES_K(2.2)) + RES(R37, 220) + RES(R38, RES_K(10)) + RES(R39, RES_K(10)) + RES(R40, RES_K(56)) + RES(R41, RES_K(100)) + RES(R42, RES_K(1)) + RES(R43, RES_K(100)) + RES(R44, RES_K(2.2)) + RES(R45, RES_K(2.2)) + RES(R46, RES_K(10)) + RES(R47, RES_K(3)) + RES(R48, RES_K(10)) + RES(R49, 220) + RES(R50, RES_K(150)) + RES(R51, RES_K(10)) + RES(R52, RES_K(10)) + RES(R53, RES_K(2.2)) + RES(R54, RES_K(10)) + RES(R55, 220) + RES(R56, RES_K(2.2)) + RES(R57, RES_K(2.2)) + RES(R58, RES_K(2.2)) + RES(R59, RES_K(10)) + RES(R60, RES_K(3)) + RES(R61, RES_K(10)) + RES(R62, 220) + RES(R63, RES_K(150)) + RES(R64, RES_K(10)) + RES(R65, RES_K(10)) + RES(R66, RES_K(2.2)) + RES(R67, RES_K(10)) + RES(R68, 220) + RES(R69, RES_K(2.2)) + RES(R70, RES_K(47)) + RES(R71, RES_K(100)) + RES(R72, RES_K(6.8)) + RES(R73, RES_K(6.8)) + RES(R74, RES_K(3.3)) + POT(R75, RES_K(50)) + RES(R76, RES_K(22)) + RES(R77, 470) + + CAP(C12, CAP_U(0.1)) + //CAP(C13, CAP_U(3.3)) + CAP(C14, CAP_U(0.1)) + CAP(C16, CAP_U(1.0)) + CAP(C17, CAP_U(0.47)) + CAP(C18, CAP_U(39)) + CAP(C19, CAP_U(4.7)) + CAP(C20, CAP_U(22)) + CAP(C21, CAP_U(0.15)) + CAP(C22, CAP_U(0.047)) + CAP(C23, CAP_U(1.0)) + CAP(C24, CAP_U(22)) + CAP(C25, CAP_U(0.15)) + CAP(C26, CAP_U(0.047)) + CAP(C27, CAP_U(1.0)) + CAP(C28, CAP_P(470)) + CAP(C29, CAP_U(4.7)) + CAP(C30, CAP_U(4.7)) + CAP(C31, CAP_U(4.7)) + CAP(C32, CAP_U(0.1)) + + QBJT_EB(Q6, "2N4124") + //QBJT_EB(Q7, "2N4124") + QBJT_EB(Q8, "2N4124") + QBJT_EB(Q9, "2N4124") + QBJT_EB(Q10, "2N4126") + QBJT_EB(Q11, "2N4124") + QBJT_EB(Q12, "2N4124") + QBJT_EB(Q13, "2N4124") + QBJT_EB(Q14, "2N4124") + QBJT_EB(Q15, "2N4126") + QBJT_EB(Q16, "2N4124") + QBJT_EB(Q17, "2N4124") + QBJT_EB(Q18, "2N4124") + QBJT_EB(Q19, "2N4126") + QBJT_EB(Q20, "2N4124") + QBJT_EB(Q21, "2N4124") + + UA741_DIP8(U1) + UA741_DIP8(U2) + UA741_DIP8(U5) + + NE566_DIP(U3) + NE566_DIP(U4) + + DIODE(CR29, "1N4154") + DIODE(CR30, "1N4154") + DIODE(CR31, "1N4154") + DIODE(CR32, "1N4154") + + TTL_7408_DIP(H6) + NET_C(H6.7, GND) + NET_C(H6.14, V5) + NET_C(ENGINE_1, H6.9) + NET_C(ENGINE_2, H6.10) + NET_C(EXPLODE_1, H6.4) + NET_C(EXPLODE_2, H6.5) + NET_C(LAUNCH_1, H6.1, H6.2) + NET_C(LAUNCH_2, H6.12, H6.13) + + TTL_7404_GATE(F8) + NET_C(F8.GND, GND) + NET_C(F8.VCC, V5) + NET_C(H6.6, F8.A) + + // HLE Noise Gen + CLOCK(NOISE_CLOCK, 10000) + NET_C(NOISE_CLOCK.GND, GND) + NET_C(NOISE_CLOCK.VCC, V5) + + SYS_NOISE_MT_N(NOISE, 0.05) + NET_C(NOISE.I, NOISE_CLOCK.Q) + NET_C(NOISE.1, R24.2) + NET_C(NOISE.2, Q6.B) + + // Engine Sound + NET_C(H6.8, R26.1) + NET_C(R26.2, Q8.B) + NET_C(Q8.E, GND) + NET_C(Q8.C, R25.1, R70.1) + NET_C(R25.2, C14.1) + NET_C(C14.2, R23.2, C12.1) + NET_C(R23.1, R22.1) + NET_C(R22.2, V12) + NET_C(R23.3, R24.1, Q6.C) + //NET_C(R24.2, Q7.E, C13.1) + //NET_C(C13.2, GND) + //NET_C(Q7.B, Q7.C, Q6.B) + NET_C(Q6.E, GND) + NET_C(C12.2, U2.3, R28.1) + NET_C(R28.2, GND) + NET_C(U2.7, V5) + NET_C(U2.4, VM5) + NET_C(U2.2, R29.1) + NET_C(R29.2, C16.1, R30.1) + NET_C(C16.2, GND) + NET_C(R30.2, U2.6, R31.1) + NET_C(R31.2, C17.1, Q12.C, R32.1, U1.3) + NET_C(C17.2, GND) + NET_C(R32.2, GND) + NET_C(U1.7, V5) + NET_C(U1.4, VM5) + NET_C(U1.2, R43.1, R42.1) + NET_C(R43.2, U1.6, R71.1) + NET_C(R42.2, C19.1) + NET_C(C19.2, Q13.C) + NET_C(Q13.E, GND) + NET_C(Q13.B, R41.1, R40.1) + NET_C(R41.2, GND) + NET_C(R40.2, C18.1, R38.1, R37.1) + NET_C(C18.2, GND) + NET_C(R38.2, Q11.B) + NET_C(Q11.E, GND) + NET_C(Q12.E, GND) + NET_C(Q11.C, R39.1, Q12.B) + NET_C(R39.2, V5) + NET_C(R37.2, Q10.C) + NET_C(Q10.E, R35.1, V5) + NET_C(R35.2, Q10.B, R36.1) + NET_C(R36.2, Q9.C) + NET_C(Q9.E, GND) + NET_C(Q9.B, R34.1) + NET_C(R34.2, R33.1, F8.Q) + NET_C(R33.2, V5) + + // Launch Sound 1 + NET_C(H6.3, R44.1) + NET_C(R44.2, Q14.B) + NET_C(Q14.E, GND) + NET_C(Q14.C, R46.1) + NET_C(R46.2, Q15.B) + NET_C(R46.2, R45.1) + NET_C(R45.2, R47.1) + NET_C(R45.2, Q15.E) + NET_C(R47.2, R48.1) + NET_C(R48.2, GND) + NET_C(R48.1, Q16.B) + NET_C(Q15.C, CR29.A) + NET_C(CR29.K, R49.1) + NET_C(R49.2, Q16.C) + NET_C(Q16.E, R50.1) + NET_C(R50.2, GND) + NET_C(Q15.E, R51.1) + NET_C(Q15.E, V12) + NET_C(Q15.E, U3.8) + NET_C(R51.2, U3.6) + NET_C(Q16.C, C20.1) + NET_C(C20.2, GND) + NET_C(C20.1, U3.5) + NET_C(U3.1, GND) + NET_C(U3.7, C21.1) + NET_C(C21.2, GND) + NET_C(U3.3, C22.1) + NET_C(C22.2, R52.1) + NET_C(R52.2, GND) + NET_C(R52.1, CR30.A) + NET_C(CR30.K, R53.1) + NET_C(R53.2, Q17.C) + NET_C(Q17.E, GND) + NET_C(Q17.B, R56.1) + NET_C(R56.2, R44.1) + NET_C(Q17.C, R54.1) + NET_C(R54.2, R55.1) + NET_C(R55.2, GND) + NET_C(R55.1, C23.1) + NET_C(C23.2, GND) + NET_C(C23.1, R72.1) + + // Launch Sound 2 + NET_C(H6.11, R57.1) + NET_C(R57.2, Q18.B) + NET_C(Q18.E, GND) + NET_C(Q18.C, R59.1) + NET_C(R59.2, Q19.B) + NET_C(R59.2, R58.1) + NET_C(R58.2, R60.1) + NET_C(R58.2, Q19.E) + NET_C(R60.2, R61.1) + NET_C(R61.2, GND) + NET_C(R61.1, Q20.B) + NET_C(Q19.C, CR31.A) + NET_C(CR31.K, R62.1) + NET_C(R62.2, Q20.C) + NET_C(Q20.E, R63.1) + NET_C(R63.2, GND) + NET_C(Q19.E, R64.1) + NET_C(Q19.E, V12) + NET_C(Q19.E, U4.8) + NET_C(R64.2, U4.6) + NET_C(Q20.C, C24.1) + NET_C(C24.2, GND) + NET_C(C24.1, U4.5) + NET_C(U4.1, GND) + NET_C(U4.7, C25.1) + NET_C(C25.2, GND) + NET_C(U4.3, C26.1) + NET_C(C26.2, R65.1) + NET_C(R65.2, GND) + NET_C(R65.1, CR32.A) + NET_C(CR32.K, R66.1) + NET_C(R66.2, Q21.C) + NET_C(Q21.E, GND) + NET_C(Q21.B, R69.1) + NET_C(R69.2, R57.1) + NET_C(Q21.C, R67.1) + NET_C(R67.2, R68.1) + NET_C(R68.2, GND) + NET_C(R68.1, C27.1) + NET_C(C27.2, GND) + NET_C(C27.1, R73.1) + + NET_C(R70.2, R71.2, R72.2, R73.2, R74.1, U5.2, C28.1) + + NET_C(R74.2, R75.2, R75.3) + NET_C(C28.2, R75.1, R77.1, U5.6) + NET_C(C29.1, U5.7, V5) + NET_C(C29.2, GND) + NET_C(U5.3, C31.1, R76.1) + NET_C(C31.2, GND) + NET_C(R76.2, GND) + NET_C(U5.4, C30.1, VM5) + NET_C(C30.2, GND) + NET_C(R77.2, C32.1) + NET_C(C32.2, GND) + + // Separate each input into the summing network + OPTIMIZE_FRONTIER(R70.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R71.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R72.1, RES_M(1), 50) + OPTIMIZE_FRONTIER(R73.1, RES_M(1), 50) + +NETLIST_END() diff --git a/src/mame/audio/nl_starcrus.h b/src/mame/audio/nl_starcrus.h new file mode 100644 index 00000000000..22bb3e77773 --- /dev/null +++ b/src/mame/audio/nl_starcrus.h @@ -0,0 +1,10 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +#ifndef MAME_AUDIO_NL_STARCRUS_H +#define MAME_AUDIO_NL_STARCRUS_H + +#pragma once + +NETLIST_EXTERNAL(starcrus) + +#endif // MAME_AUDIO_NL_STARCRUS_H diff --git a/src/mame/drivers/starcrus.cpp b/src/mame/drivers/starcrus.cpp index eb304d53549..5cbcb2e6ff5 100644 --- a/src/mame/drivers/starcrus.cpp +++ b/src/mame/drivers/starcrus.cpp @@ -1,13 +1,15 @@ // license:BSD-3-Clause -// copyright-holders:Frank Palazzolo +// copyright-holders:Frank Palazzolo, Ryan Holtz /*************************************************************************** -Ramtek Star Cruiser Driver + Ramtek Star Cruiser Driver -(no known issues) + (no known issues) -Frank Palazzolo -palazzol@home.com + Frank Palazzolo + palazzol@home.com + + Netlist Audio by Ryan Holtz ***************************************************************************/ @@ -15,7 +17,6 @@ palazzol@home.com #include "includes/starcrus.h" #include "cpu/i8085/i8085.h" -#include "sound/samples.h" #include "screen.h" #include "speaker.h" @@ -84,6 +85,12 @@ static INPUT_PORTS_START( starcrus ) PORT_DIPSETTING( 0x00, DEF_STR( Alternate ) ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("POT_1") + PORT_ADJUSTER( 50, "Pot: Noise Level" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "noise_volume") + + PORT_START("POT_2") + PORT_ADJUSTER( 50, "Pot: Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "volume") INPUT_PORTS_END @@ -129,17 +136,6 @@ static GFXDECODE_START( gfx_starcrus ) GFXDECODE_END -static const char *const starcrus_sample_names[] = -{ - "*starcrus", - "engine", /* engine sound, channel 0 */ - "explos1", /* explosion sound, first part, channel 1 */ - "explos2", /* explosion sound, second part, channel 1 */ - "launch", /* launch sound, channels 2 and 3 */ - nullptr -}; - - void starcrus_state::starcrus(machine_config &config) { /* basic machine hardware */ @@ -163,10 +159,20 @@ void starcrus_state::starcrus(machine_config &config) /* sound hardware */ SPEAKER(config, "mono").front_center(); - SAMPLES(config, m_samples); - m_samples->set_channels(4); - m_samples->set_samples_names(starcrus_sample_names); - m_samples->add_route(ALL_OUTPUTS, "mono", 1.0); + NETLIST_SOUND(config, "sound_nl", 48000) + .set_source(NETLIST_NAME(starcrus)) + .add_route(ALL_OUTPUTS, "mono", 1.0); + + NETLIST_LOGIC_INPUT(config, "sound_nl:explode1", "EXPLODE_1.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:explode2", "EXPLODE_2.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:launch1", "LAUNCH_1.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:launch2", "LAUNCH_2.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:engine1", "ENGINE_1.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:engine2", "ENGINE_2.IN", 0); + NETLIST_ANALOG_INPUT(config, "sound_nl:noise_volume", "R23.DIAL"); + NETLIST_ANALOG_INPUT(config, "sound_nl:volume", "R75.DIAL"); + + NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "R77.2").set_mult_offset(100000.0, 0.0); } /*************************************************************************** diff --git a/src/mame/includes/starcrus.h b/src/mame/includes/starcrus.h index 1677d19d9e5..c7be0638750 100644 --- a/src/mame/includes/starcrus.h +++ b/src/mame/includes/starcrus.h @@ -1,12 +1,14 @@ // license:BSD-3-Clause -// copyright-holders:Frank Palazzolo +// copyright-holders:Frank Palazzolo, Ryan Holtz #ifndef MAME_INCLUDES_STARCRUS_H #define MAME_INCLUDES_STARCRUS_H #pragma once -#include "sound/samples.h" #include "emupal.h" +#include "machine/netlist.h" +#include "netlist/nl_setup.h" +#include "audio/nl_starcrus.h" class starcrus_state : public driver_device { @@ -14,10 +16,12 @@ public: starcrus_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu"), - m_samples(*this, "samples"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), - m_led(*this, "led2") + m_led(*this, "led2"), + m_explode(*this, "sound_nl:explode%u", 1U), + m_launch(*this, "sound_nl:launch%u", 1U), + m_engine(*this, "sound_nl:engine%u", 1U) { } void starcrus(machine_config &config); @@ -41,7 +45,6 @@ private: virtual void video_start() override; required_device m_maincpu; - required_device m_samples; required_device m_gfxdecode; required_device m_palette; @@ -66,20 +69,8 @@ private: int m_s1_sprite; int m_s2_sprite; - int m_engine1_on; - int m_engine2_on; - int m_explode1_on; - int m_explode2_on; - int m_launch1_on; - int m_launch2_on; - int m_collision_reg; - int m_engine_sound_playing; - int m_explode_sound_playing; - int m_launch1_sound_playing; - int m_launch2_sound_playing; - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); int collision_check_s1s2(); int collision_check_p1p2(); @@ -88,6 +79,10 @@ private: void starcrus_io_map(address_map &map); void starcrus_map(address_map &map); + + required_device_array m_explode; + required_device_array m_launch; + required_device_array m_engine; }; #endif // MAME_INCLUDES_STARCRUS_H diff --git a/src/mame/video/starcrus.cpp b/src/mame/video/starcrus.cpp index c4ef6b3a566..f3a9875741e 100644 --- a/src/mame/video/starcrus.cpp +++ b/src/mame/video/starcrus.cpp @@ -40,40 +40,13 @@ void starcrus_state::video_start() save_item(NAME(m_p2_sprite)); save_item(NAME(m_s1_sprite)); save_item(NAME(m_s2_sprite)); - save_item(NAME(m_engine1_on)); - save_item(NAME(m_engine2_on)); - save_item(NAME(m_explode1_on)); - save_item(NAME(m_explode2_on)); - save_item(NAME(m_launch1_on)); - save_item(NAME(m_launch2_on)); save_item(NAME(m_collision_reg)); - save_item(NAME(m_engine_sound_playing)); - save_item(NAME(m_explode_sound_playing)); - save_item(NAME(m_launch1_sound_playing)); - save_item(NAME(m_launch2_sound_playing)); } void starcrus_state::ship_parm_1_w(uint8_t data) { - m_s1_sprite = data&0x1f; - m_engine1_on = ((data&0x20)>>5)^0x01; - - if (m_engine1_on || m_engine2_on) - { - if (m_engine_sound_playing == 0) - { - m_engine_sound_playing = 1; - m_samples->start(0, 0, true); /* engine sample */ - } - } - else - { - if (m_engine_sound_playing == 1) - { - m_engine_sound_playing = 0; - m_samples->stop(0); - } - } + m_s1_sprite = data & 0x1f; + m_engine[0]->write_line(BIT(data, 5)); } void starcrus_state::ship_parm_2_w(uint8_t data) @@ -81,99 +54,21 @@ void starcrus_state::ship_parm_2_w(uint8_t data) m_s2_sprite = data & 0x1f; m_led = !BIT(data, 7); /* game over lamp */ machine().bookkeeping().coin_counter_w(0, ((data & 0x40) >> 6) ^ 0x01); /* coin counter */ - m_engine2_on = ((data & 0x20) >> 5) ^ 0x01; - - if (m_engine1_on || m_engine2_on) - { - if (m_engine_sound_playing == 0) - { - m_engine_sound_playing = 1; - m_samples->start(0, 0, true); /* engine sample */ - } - } - else - { - if (m_engine_sound_playing == 1) - { - m_engine_sound_playing = 0; - m_samples->stop(0); - } - } - + m_engine[1]->write_line(BIT(data, 5)); } void starcrus_state::proj_parm_1_w(uint8_t data) { m_p1_sprite = data & 0x0f; - m_launch1_on = ((data & 0x20) >> 5) ^ 0x01; - m_explode1_on = ((data & 0x10) >> 4) ^ 0x01; - - if (m_explode1_on || m_explode2_on) - { - if (m_explode_sound_playing == 0) - { - m_explode_sound_playing = 1; - m_samples->start(1, 1, true); /* explosion initial sample */ - } - } - else - { - if (m_explode_sound_playing == 1) - { - m_explode_sound_playing = 0; - m_samples->start(1,2); /* explosion ending sample */ - } - } - - if (m_launch1_on) - { - if (m_launch1_sound_playing == 0) - { - m_launch1_sound_playing = 1; - m_samples->start(2,3); /* launch sample */ - } - } - else - { - m_launch1_sound_playing = 0; - } + m_launch[0]->write_line(BIT(data, 5)); + m_explode[0]->write_line(BIT(data, 4)); } void starcrus_state::proj_parm_2_w(uint8_t data) { m_p2_sprite = data & 0x0f; - m_launch2_on = ((data & 0x20) >> 5) ^ 0x01; - m_explode2_on = ((data & 0x10) >> 4) ^ 0x01; - - if (m_explode1_on || m_explode2_on) - { - if (m_explode_sound_playing == 0) - { - m_explode_sound_playing = 1; - m_samples->start(1, 1, true); /* explosion initial sample */ - } - } - else - { - if (m_explode_sound_playing == 1) - { - m_explode_sound_playing = 0; - m_samples->start(1,2); /* explosion ending sample */ - } - } - - if (m_launch2_on) - { - if (m_launch2_sound_playing == 0) - { - m_launch2_sound_playing = 1; - m_samples->start(3,3); /* launch sample */ - } - } - else - { - m_launch2_sound_playing = 0; - } + m_launch[1]->write_line(BIT(data, 5)); + m_explode[1]->write_line(BIT(data, 4)); } int starcrus_state::collision_check_s1s2()