mirror of
https://github.com/holub/mame
synced 2025-05-31 10:01:51 +03:00
-starcrus: Added netlist sound. [Ryan Holtz, Colin Howell, Aaron Giles]
This commit is contained in:
parent
f24cb7d7e8
commit
03c45ffbc7
@ -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")
|
||||
|
@ -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)")
|
||||
|
326
src/mame/audio/nl_starcrus.cpp
Normal file
326
src/mame/audio/nl_starcrus.cpp
Normal file
@ -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()
|
10
src/mame/audio/nl_starcrus.h
Normal file
10
src/mame/audio/nl_starcrus.h
Normal file
@ -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
|
@ -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);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<samples_device> m_samples;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_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<netlist_mame_logic_input_device, 2> m_explode;
|
||||
required_device_array<netlist_mame_logic_input_device, 2> m_launch;
|
||||
required_device_array<netlist_mame_logic_input_device, 2> m_engine;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_STARCRUS_H
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user