mirror of
https://github.com/holub/mame
synced 2025-06-05 04:16:28 +03:00
-starfire: Removed MACHINE_IMPERFECT_SOUND flags. Added missing music and Alert sound effect to Fire One netlist and added Star Fire netlist. [Ryan Holtz, Colin Howell, Aaron Giles]
This commit is contained in:
parent
df96c0e944
commit
1c11ecb000
@ -1950,6 +1950,8 @@ files {
|
||||
MAME_DIR .. "src/mame/video/gtia.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_fireone.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_fireone.cpp",
|
||||
MAME_DIR .. "src/mame/audio/nl_starfire.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_starfire.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/starfire.cpp",
|
||||
MAME_DIR .. "src/mame/includes/starfire.h",
|
||||
MAME_DIR .. "src/mame/video/starfire.cpp",
|
||||
|
@ -296,6 +296,12 @@ files{
|
||||
MAME_DIR .. "src/mame/machine/nl_tp1985.cpp",
|
||||
MAME_DIR .. "src/mame/machine/nl_tp1985.h",
|
||||
|
||||
MAME_DIR .. "src/mame/audio/nl_starcrus.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_starcrus.cpp",
|
||||
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_carpolo.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_carpolo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/carpolo.cpp",
|
||||
@ -305,6 +311,8 @@ files{
|
||||
|
||||
MAME_DIR .. "src/mame/audio/nl_fireone.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_fireone.cpp",
|
||||
MAME_DIR .. "src/mame/audio/nl_starfire.h",
|
||||
MAME_DIR .. "src/mame/audio/nl_starfire.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/starfire.cpp",
|
||||
MAME_DIR .. "src/mame/includes/starfire.h",
|
||||
MAME_DIR .. "src/mame/video/starfire.cpp",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
||||
//
|
||||
// Known problems/issues:
|
||||
//
|
||||
// * None.
|
||||
// * Slow!
|
||||
//
|
||||
|
||||
#include "netlist/devices/net_lib.h"
|
||||
@ -16,10 +16,7 @@
|
||||
// 556 is just two 555s in one package
|
||||
//
|
||||
|
||||
#define NE556_DIP(name) SUBMODEL(_NE556_DIP, name)
|
||||
#define LM556_DIP NE556_DIP
|
||||
|
||||
static NETLIST_START(_NE556_DIP)
|
||||
static NETLIST_START(NE556_DIP)
|
||||
NE555(A)
|
||||
NE555(B)
|
||||
|
||||
@ -38,6 +35,64 @@ static NETLIST_START(_NE556_DIP)
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
|
||||
//
|
||||
// ICL8038 is broadly similar to a 566 VCO, and can be simulated partially as such.
|
||||
//
|
||||
|
||||
static NETLIST_START(ICL8038_DIP)
|
||||
VCVS(VI, 1)
|
||||
CCCS(CI1, -1)
|
||||
CCCS(CI2, 2)
|
||||
SYS_COMPD(COMP)
|
||||
SYS_DSW2(SW)
|
||||
VCVS(VO, 1)
|
||||
RES(R_SHUNT, RES_R(50))
|
||||
|
||||
PARAM(VO.RO, 50)
|
||||
PARAM(COMP.MODEL, "FAMILY(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.01 OVH=0.01 ORL=50 ORH=50)")
|
||||
PARAM(SW.GOFF, 0) // This has to be zero to block current sources
|
||||
|
||||
NET_C(VI.OP, CI1.IN, CI2.IN)
|
||||
NET_C(CI1.OP, VO.IP)
|
||||
NET_C(COMP.Q, SW.I)
|
||||
NET_C(CI2.OP, SW.2)
|
||||
NET_C(COMP.VCC, R_SHUNT.1)
|
||||
NET_C(SW.1, R_SHUNT.2)
|
||||
NET_C(SW.3, VO.IP)
|
||||
NET_C(VO.OP, COMP.IN)
|
||||
|
||||
// Avoid singular Matrix due to G=0 switch
|
||||
RES(RX1, 1e10)
|
||||
RES(RX2, 1e10)
|
||||
NET_C(RX1.1, SW.1)
|
||||
NET_C(RX2.1, SW.3)
|
||||
|
||||
NET_C(COMP.GND, RX1.2, RX2.2)
|
||||
|
||||
RES(R1, 5000)
|
||||
RES(R2, 5000)
|
||||
RES(R3, 5000)
|
||||
|
||||
// Square output wave
|
||||
VCVS(V_SQR, 1)
|
||||
NET_C(COMP.Q, V_SQR.IP)
|
||||
|
||||
NET_C(COMP.GND, SW.GND, VI.ON, VI.IN, CI1.ON, CI2.ON, VO.IN, VO.ON, R2.2, V_SQR.IN, V_SQR.ON)
|
||||
NET_C(COMP.VCC, SW.VCC, R1.2)
|
||||
NET_C(COMP.IP, R1.1, R2.1, R3.1)
|
||||
NET_C(COMP.Q, R3.2)
|
||||
|
||||
ALIAS(11, VI.ON) // GND
|
||||
ALIAS(9, V_SQR.OP) // Square out
|
||||
ALIAS(3, VO.OP) // Triag out
|
||||
ALIAS(8, VI.IP) // VC
|
||||
ALIAS(4, CI1.IP) // R1
|
||||
ALIAS(5, CI2.IP) // R2
|
||||
ALIAS(10, VO.IP) // C1
|
||||
ALIAS(6, COMP.VCC) // V+
|
||||
NETLIST_END()
|
||||
|
||||
//
|
||||
// Main netlist
|
||||
//
|
||||
@ -46,15 +101,19 @@ NETLIST_START(fireone)
|
||||
NET_MODEL("2N3704 NPN(IS=26.03f VAF=90.7 Bf=736.1K IKF=.1983 XTB=1.5 BR=1.024 CJC=11.01p CJE=24.07p RB=10 RC=.5 RE=.5 TR=233.8n TF=1.03n ITF=0 VTF=0 XTF=0 mfg=Motorola)")
|
||||
|
||||
SOLVER(Solver, 48000)
|
||||
|
||||
ANALOG_INPUT(V12, 12)
|
||||
ANALOG_INPUT(VM12, -12)
|
||||
ANALOG_INPUT(V5, 5)
|
||||
ALIAS(VCC, V5)
|
||||
|
||||
NET_MODEL("PIT8253PORT FAMILY(TYPE=NMOS OVL=0.05 OVH=0.05 ORL=100.0 ORH=0.5k)")
|
||||
|
||||
TTL_INPUT(LTORP, 0) // active high
|
||||
TTL_INPUT(LSHPHT, 0) // active high
|
||||
TTL_INPUT(LBOOM, 0) // active high
|
||||
TTL_INPUT(SOUND_OFF, 0) // active high
|
||||
TTL_INPUT(SOUND_OFF_L, 0) // active high
|
||||
TTL_INPUT(SOUND_OFF_R, 0) // active high
|
||||
TTL_INPUT(RTORP, 0) // active high
|
||||
TTL_INPUT(RSHPHT, 0) // active high
|
||||
TTL_INPUT(RBOOM, 0) // active high
|
||||
@ -64,17 +123,24 @@ NETLIST_START(fireone)
|
||||
//TTL_INPUT(SONAR_ENABLE, 0) // active high
|
||||
TTL_INPUT(SONAR_SYNC, 0) // active low
|
||||
|
||||
NET_C(VCC, LTORP.VCC, LSHPHT.VCC, LBOOM.VCC, SOUND_OFF.VCC, RTORP.VCC, RSHPHT.VCC, RBOOM.VCC, TORPCOLL.VCC, SUBENG.VCC, ALERT.VCC, SONAR_SYNC.VCC)
|
||||
NET_C(GND, LTORP.GND, LSHPHT.GND, LBOOM.GND, SOUND_OFF.GND, RTORP.GND, RSHPHT.GND, RBOOM.GND, TORPCOLL.GND, SUBENG.GND, ALERT.GND, SONAR_SYNC.GND)
|
||||
LOGIC_INPUT(MUSIC_A, 0, "PIT8253PORT")
|
||||
LOGIC_INPUT(MUSIC_B, 0, "PIT8253PORT")
|
||||
LOGIC_INPUT(MUSIC_C, 0, "PIT8253PORT")
|
||||
|
||||
LOCAL_SOURCE(_NE556_DIP)
|
||||
NET_C(VCC, LTORP.VCC, LSHPHT.VCC, LBOOM.VCC, SOUND_OFF_L.VCC, SOUND_OFF_R.VCC, RTORP.VCC, RSHPHT.VCC, RBOOM.VCC, TORPCOLL.VCC, SUBENG.VCC, ALERT.VCC, SONAR_SYNC.VCC)
|
||||
NET_C(GND, LTORP.GND, LSHPHT.GND, LBOOM.GND, SOUND_OFF_L.GND, SOUND_OFF_R.GND, RTORP.GND, RSHPHT.GND, RBOOM.GND, TORPCOLL.GND, SUBENG.GND, ALERT.GND, SONAR_SYNC.GND)
|
||||
NET_C(VCC, MUSIC_A.VCC, MUSIC_B.VCC, MUSIC_C.VCC)
|
||||
NET_C(GND, MUSIC_A.GND, MUSIC_B.GND, MUSIC_C.GND)
|
||||
|
||||
LOCAL_SOURCE(NE556_DIP)
|
||||
LOCAL_SOURCE(ICL8038_DIP)
|
||||
|
||||
TTL_7406_GATE(IC27_A)
|
||||
TTL_7406_GATE(IC27_B)
|
||||
TTL_7406_GATE(IC27_C)
|
||||
TTL_7406_GATE(IC27_D)
|
||||
NET_C(VCC, IC27_A.VCC, IC27_C.VCC, IC27_D.VCC)
|
||||
NET_C(GND, IC27_A.GND, IC27_C.GND, IC27_D.GND)
|
||||
//TTL_7406_GATE(IC27_E)
|
||||
NET_C(VCC, IC27_A.VCC, IC27_B.VCC, IC27_C.VCC, IC27_D.VCC)
|
||||
NET_C(GND, IC27_A.GND, IC27_B.GND, IC27_C.GND, IC27_D.GND)
|
||||
|
||||
//CD4070_GATE(IC41_A)
|
||||
//CD4070_GATE(IC41_B)
|
||||
@ -91,9 +157,10 @@ NETLIST_START(fireone)
|
||||
NET_C(V12, IC25.16)
|
||||
NET_C(GND, IC25.8)
|
||||
|
||||
CD4013(IC3)
|
||||
NET_C(V12, IC3.VDD)
|
||||
NET_C(GND, IC3.VSS)
|
||||
CD4013(IC3_A)
|
||||
CD4013(IC3_B)
|
||||
NET_C(V12, IC3_A.VDD, IC3_B.VDD)
|
||||
NET_C(GND, IC3_A.VSS, IC3_A.SET, IC3_A.RESET, IC3_B.VSS, IC3_B.SET)
|
||||
|
||||
MC1558_DIP(IC6)
|
||||
NET_C(IC6.8, V12)
|
||||
@ -109,7 +176,7 @@ NETLIST_START(fireone)
|
||||
|
||||
NE555(IC29)
|
||||
|
||||
NE556_DIP(IC31)
|
||||
SUBMODEL(NE556_DIP, IC31)
|
||||
NET_C(IC31.14, V5)
|
||||
NET_C(IC31.7, GND)
|
||||
|
||||
@ -121,6 +188,10 @@ NETLIST_START(fireone)
|
||||
NET_C(IC30.8, V12)
|
||||
NET_C(IC30.3, GND)
|
||||
|
||||
SUBMODEL(ICL8038_DIP, IC15)
|
||||
NET_C(V12, IC15.6)
|
||||
NET_C(GND, IC15.11)
|
||||
|
||||
LM3900(IC2_A)
|
||||
LM3900(IC2_D)
|
||||
LM3900(IC4_A)
|
||||
@ -133,14 +204,23 @@ NETLIST_START(fireone)
|
||||
NET_C(V12, IC2_A.VCC, IC2_D.VCC, IC4_A.VCC, IC4_B.VCC, IC4_D.VCC, IC14_A.VCC, IC14_B.VCC, IC14_C.VCC, IC14_D.VCC)
|
||||
NET_C(GND, IC2_A.GND, IC2_D.GND, IC4_A.GND, IC4_B.GND, IC4_D.GND, IC14_A.GND, IC14_B.GND, IC14_C.GND, IC14_D.GND)
|
||||
|
||||
RES(R1, RES_K(560))
|
||||
RES(R2, RES_K(560))
|
||||
RES(R3, RES_K(560))
|
||||
RES(R4, RES_K(560))
|
||||
RES(R5, RES_K(560))
|
||||
RES(R6, RES_K(560))
|
||||
RES(R8, RES_M(2))
|
||||
RES(R9, RES_K(820))
|
||||
RES(R10, RES_K(220))
|
||||
RES(R11, RES_K(620))
|
||||
RES(R12, RES_K(3.9))
|
||||
RES(R13, RES_K(3.9))
|
||||
RES(R14, RES_K(3.9))
|
||||
RES(R15, RES_M(5.6))
|
||||
RES(R16, RES_K(680))
|
||||
RES(R17, RES_K(10))
|
||||
RES(R18, RES_K(1))
|
||||
RES(R19, RES_K(150))
|
||||
RES(R20, RES_K(2))
|
||||
RES(R21, RES_K(180))
|
||||
@ -179,8 +259,12 @@ NETLIST_START(fireone)
|
||||
RES(R55, RES_K(1))
|
||||
RES(R56, RES_K(10))
|
||||
RES(R57, RES_K(680))
|
||||
RES(R58, RES_M(1))
|
||||
RES(R59, RES_K(43))
|
||||
RES(R60, RES_K(43))
|
||||
RES(R61, RES_K(150))
|
||||
RES(R62, RES_M(1))
|
||||
//RES(R63, RES_K(82))
|
||||
POT(R64, RES_K(10))
|
||||
POT(R65, RES_K(10))
|
||||
RES(R66, RES_K(27))
|
||||
@ -198,6 +282,7 @@ NETLIST_START(fireone)
|
||||
RES(R78, RES_K(150))
|
||||
RES(R79, RES_K(130))
|
||||
RES(R80, RES_K(130))
|
||||
RES(R81, RES_K(560))
|
||||
RES(R82, RES_K(160))
|
||||
RES(R83, RES_M(1))
|
||||
RES(R84, RES_K(100))
|
||||
@ -206,6 +291,7 @@ NETLIST_START(fireone)
|
||||
RES(R87, RES_K(100))
|
||||
RES(R94, RES_K(1))
|
||||
RES(R95, RES_K(1))
|
||||
RES(R96, RES_K(1))
|
||||
RES(R99, RES_K(1))
|
||||
RES(R100, RES_K(1))
|
||||
//RES(R101, RES_K(10))
|
||||
@ -218,8 +304,10 @@ NETLIST_START(fireone)
|
||||
RES(R108, RES_K(20))
|
||||
RES(R109, RES_K(560))
|
||||
RES(R110, RES_K(1))
|
||||
RES(R116, RES_K(4.7))
|
||||
RES(R117, RES_K(20))
|
||||
RES(R118, RES_K(560))
|
||||
RES(R119, RES_K(560))
|
||||
RES(R120, RES_K(5.6))
|
||||
RES(R122, RES_K(2.7))
|
||||
RES(R123, RES_K(100))
|
||||
@ -234,19 +322,19 @@ NETLIST_START(fireone)
|
||||
RES(R137, RES_K(5.6))
|
||||
RES(R138, RES_K(47))
|
||||
RES(R139, 100)
|
||||
RES(R140, RES_K(10))
|
||||
RES(R141, RES_K(3))
|
||||
//RES(R142, RES_K(56))
|
||||
//RES(R143, RES_K(56))
|
||||
RES(R140, RES_K(10))
|
||||
RES(R144, RES_K(100))
|
||||
RES(R150, RES_K(100))
|
||||
//RES(R, RES_K())
|
||||
|
||||
CAP(C3, CAP_U(1.0))
|
||||
CAP(C4, CAP_U(0.1))
|
||||
CAP(C6, CAP_U(4.7))
|
||||
CAP(C7, CAP_U(0.33))
|
||||
CAP(C8, CAP_U(0.33))
|
||||
CAP(C10, CAP_U(0.1))
|
||||
CAP(C11, CAP_U(2.2))
|
||||
CAP(C12, CAP_U(2.2))
|
||||
CAP(C13, CAP_U(4.7))
|
||||
@ -265,7 +353,9 @@ NETLIST_START(fireone)
|
||||
CAP(C38, CAP_U(0.1))
|
||||
CAP(C39, CAP_U(0.0022))
|
||||
CAP(C40, CAP_U(0.033))
|
||||
CAP(C41, CAP_U(1.0))
|
||||
CAP(C42, CAP_U(1.0))
|
||||
CAP(C44, CAP_U(0.0047))
|
||||
CAP(C45, CAP_U(0.1))
|
||||
CAP(C48, CAP_U(0.1))
|
||||
CAP(C49, CAP_U(0.0022))
|
||||
@ -292,7 +382,6 @@ NETLIST_START(fireone)
|
||||
CAP(C114, CAP_U(0.1))
|
||||
CAP(C121, CAP_U(0.001))
|
||||
CAP(C122, CAP_U(0.001))
|
||||
//CAP(C, CAP_U())
|
||||
|
||||
DIODE(D1, "1N914")
|
||||
DIODE(D2, "1N914")
|
||||
@ -308,11 +397,13 @@ NETLIST_START(fireone)
|
||||
DIODE(D12, "1N914")
|
||||
DIODE(D13, "1N914")
|
||||
DIODE(D14, "1N914")
|
||||
DIODE(D15, "1N914")
|
||||
|
||||
QBJT_EB(Q1, "2N3704")
|
||||
QBJT_EB(Q2, "2N3704")
|
||||
|
||||
// Noise Generator
|
||||
CLOCK(HLE_SONAR_CLOCK, 998)
|
||||
CLOCK(HLE_SONAR_CLOCK, 1000)
|
||||
NET_C(HLE_SONAR_CLOCK.GND, GND)
|
||||
NET_C(HLE_SONAR_CLOCK.VCC, V12)
|
||||
|
||||
@ -342,10 +433,9 @@ NETLIST_START(fireone)
|
||||
NET_C(R110.2, V12)
|
||||
NET_C(IC29.THRESH, IC29.TRIG, R107.2, C72.1)
|
||||
NET_C(C72.2, GND)
|
||||
NET_C(IC29.OUT, D3.K, IC3.CLOCK)
|
||||
NET_C(IC3.QQ, IC3.DATA)
|
||||
NET_C(IC3.SET, IC3.RESET, GND)
|
||||
NET_C(IC3.Q, D2.K, IC25.14)
|
||||
NET_C(IC29.OUT, D3.K, IC3_A.CLOCK)
|
||||
NET_C(IC3_A.QQ, IC3_A.DATA)
|
||||
NET_C(IC3_A.Q, D2.K, IC25.14)
|
||||
NET_C(IC25.13, GND)
|
||||
NET_C(IC25.2, R36.1)
|
||||
NET_C(IC25.4, R72.1)
|
||||
@ -517,8 +607,34 @@ NETLIST_START(fireone)
|
||||
NET_C(R77.2, MIX_L)
|
||||
NET_C(R76.2, MIX_R)
|
||||
|
||||
// Alert
|
||||
NET_C(ALERT.Q, IC27_B.A)
|
||||
NET_C(IC27_B.Y, R96.2, D15.A, IC3_B.RESET)
|
||||
NET_C(D15.K, C41.2, Q1.C, IC15.8)
|
||||
NET_C(R14.2, R17.1, Q1.B)
|
||||
NET_C(Q1.E, R58.1)
|
||||
NET_C(IC15.10, C44.1)
|
||||
NET_C(IC15.4, R59.2)
|
||||
NET_C(IC15.5, R60.2)
|
||||
NET_C(IC15.9, R116.2, IC3_B.CLOCK)
|
||||
NET_C(IC3_B.QQ, IC3_B.DATA)
|
||||
NET_C(IC3_B.Q, R18.1)
|
||||
NET_C(R18.2, C10.1, R119.1, R81.1)
|
||||
NET_C(V12, R96.1, C41.1, R14.1, R116.1, R59.1, R60.1)
|
||||
NET_C(GND, R17.2, R58.2, C44.2, C10.2)
|
||||
NET_C(R119.2, MIX_L)
|
||||
NET_C(R81.2, MIX_R)
|
||||
|
||||
// Mixers (shared)
|
||||
NET_C(SOUND_OFF.Q, D4.A, D5.A)
|
||||
NET_C(SOUND_OFF_L.Q, D4.A)
|
||||
NET_C(SOUND_OFF_R.Q, D5.A)
|
||||
|
||||
// Music
|
||||
NET_C(MUSIC_A.Q, R1.1, R4.1)
|
||||
NET_C(MUSIC_B.Q, R5.1, R6.1)
|
||||
NET_C(MUSIC_C.Q, R3.1, R2.1)
|
||||
NET_C(R1.2, R3.2, R5.2, MIX_L)
|
||||
NET_C(R2.2, R4.2, R6.2, MIX_R)
|
||||
|
||||
// Mixer (L)
|
||||
NET_C(MIX_L, C15.1)
|
||||
@ -547,4 +663,28 @@ NETLIST_START(fireone)
|
||||
NET_C(R65.2, C109.1)
|
||||
NET_C(C109.2, R150.1)
|
||||
ALIAS(OUT_R, C109.2)
|
||||
|
||||
// Separate each input into the summing network
|
||||
OPTIMIZE_FRONTIER(R27.1, RES_K(270), 50) // SONAR (L)
|
||||
OPTIMIZE_FRONTIER(R77.1, RES_K(33), 50) // TORPCOLL (L)
|
||||
OPTIMIZE_FRONTIER(R78.1, RES_K(150), 50) // L SHPHT
|
||||
OPTIMIZE_FRONTIER(R79.1, RES_K(130), 50) // SUBENG (L)
|
||||
OPTIMIZE_FRONTIER(R117.1, RES_K(20), 50) // L BOOM
|
||||
OPTIMIZE_FRONTIER(R118.1, RES_K(560), 50) // L TORP
|
||||
|
||||
OPTIMIZE_FRONTIER(R85.1, RES_K(270), 50) // SONAR (R)
|
||||
OPTIMIZE_FRONTIER(R76.1, RES_K(33), 50) // TORPCOLL (R)
|
||||
OPTIMIZE_FRONTIER(R61.1, RES_K(150), 50) // R SHPHT
|
||||
OPTIMIZE_FRONTIER(R80.1, RES_K(130), 50) // SUBENG (R)
|
||||
OPTIMIZE_FRONTIER(R108.1, RES_K(20), 50) // R BOOM
|
||||
OPTIMIZE_FRONTIER(R109.1, RES_K(560), 50) // R TORP
|
||||
|
||||
OPTIMIZE_FRONTIER(R138.1, RES_K(47), 50) // Isolation for NOISE_A going into SONAR section
|
||||
OPTIMIZE_FRONTIER(R42.1, RES_K(820), 50) // Isolation for NOISE going into L TORP section
|
||||
OPTIMIZE_FRONTIER(R50.1, RES_K(820), 50) // Isolation for NOISE going into R TORP section
|
||||
OPTIMIZE_FRONTIER(R31.1, RES_K(560), 50) // Isolation for NOISE going into L SHPHT section
|
||||
OPTIMIZE_FRONTIER(R44.1, RES_K(560), 50) // Isolation for NOISE going into R SHPHT section
|
||||
OPTIMIZE_FRONTIER(R11.1, RES_K(620), 50) // Isolation for NOISE going into TORPCOLL section
|
||||
OPTIMIZE_FRONTIER(R87.1, RES_K(100), 50) // Isolation for RUMBLE going into L BOOM section
|
||||
OPTIMIZE_FRONTIER(R105.1, RES_K(100), 50) // Isolation for RUMBLE going into R BOOM section
|
||||
NETLIST_END()
|
||||
|
437
src/mame/audio/nl_starfire.cpp
Normal file
437
src/mame/audio/nl_starfire.cpp
Normal file
@ -0,0 +1,437 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
//
|
||||
// Netlist for Star Fire
|
||||
//
|
||||
// Derived from the schematics in the manual.
|
||||
//
|
||||
// Known problems/issues:
|
||||
//
|
||||
// * Tracking computer might not be 100% right, compared to recordings.
|
||||
// * Slow.
|
||||
//
|
||||
|
||||
#include "netlist/devices/net_lib.h"
|
||||
|
||||
//
|
||||
// 556 is just two 555s in one package
|
||||
//
|
||||
|
||||
static NETLIST_START(NE556_DIP)
|
||||
NE555(A)
|
||||
NE555(B)
|
||||
|
||||
NET_C(A.GND, B.GND)
|
||||
NET_C(A.VCC, B.VCC)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
A.DISCH, /* 1DISCH |1 ++ 14| VCC */ A.VCC,
|
||||
A.THRESH, /* 1THRES |2 13| 2DISCH */ B.DISCH,
|
||||
A.CONT, /* 1CONT |3 12| 2THRES */ B.THRESH,
|
||||
A.RESET, /* 1RESET |4 NE556 11| 2CONT */ B.CONT,
|
||||
A.OUT, /* 1OUT |5 10| 2RESET */ B.RESET,
|
||||
A.TRIG, /* 1TRIG |6 9| 2OUT */ B.OUT,
|
||||
A.GND, /* GND |7 8| 2TRIG */ B.TRIG
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
static NETLIST_START(ICL8038_DIP)
|
||||
VCVS(VI, 1)
|
||||
CCCS(CI1, -1)
|
||||
CCCS(CI2, 2)
|
||||
SYS_COMPD(COMP)
|
||||
SYS_DSW2(SW)
|
||||
VCVS(VO, 1)
|
||||
RES(R_SHUNT, RES_R(50))
|
||||
|
||||
PARAM(VO.RO, 50)
|
||||
PARAM(COMP.MODEL, "FAMILY(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.01 OVH=0.01 ORL=50 ORH=50)")
|
||||
PARAM(SW.GOFF, 0) // This has to be zero to block current sources
|
||||
|
||||
NET_C(VI.OP, CI1.IN, CI2.IN)
|
||||
NET_C(CI1.OP, VO.IP)
|
||||
NET_C(COMP.Q, SW.I)
|
||||
NET_C(CI2.OP, SW.2)
|
||||
NET_C(COMP.VCC, R_SHUNT.1)
|
||||
NET_C(SW.1, R_SHUNT.2)
|
||||
NET_C(SW.3, VO.IP)
|
||||
NET_C(VO.OP, COMP.IN)
|
||||
|
||||
// Avoid singular Matrix due to G=0 switch
|
||||
RES(RX1, 1e10)
|
||||
RES(RX2, 1e10)
|
||||
NET_C(RX1.1, SW.1)
|
||||
NET_C(RX2.1, SW.3)
|
||||
|
||||
NET_C(COMP.GND, RX1.2, RX2.2)
|
||||
|
||||
RES(R1, 5000)
|
||||
RES(R2, 5000)
|
||||
RES(R3, 5000)
|
||||
|
||||
// Square output wave
|
||||
VCVS(V_SQR, 1)
|
||||
NET_C(COMP.Q, V_SQR.IP)
|
||||
|
||||
NET_C(COMP.GND, SW.GND, VI.ON, VI.IN, CI1.ON, CI2.ON, VO.IN, VO.ON, R2.2, V_SQR.IN, V_SQR.ON)
|
||||
NET_C(COMP.VCC, SW.VCC, R1.2)
|
||||
NET_C(COMP.IP, R1.1, R2.1, R3.1)
|
||||
NET_C(COMP.Q, R3.2)
|
||||
|
||||
ALIAS(11, VI.ON) // GND
|
||||
ALIAS(9, V_SQR.OP) // Square out
|
||||
ALIAS(3, VO.OP) // Triag out
|
||||
ALIAS(8, VI.IP) // VC
|
||||
ALIAS(4, CI1.IP) // R1
|
||||
ALIAS(5, CI2.IP) // R2
|
||||
ALIAS(10, VO.IP) // C1
|
||||
ALIAS(6, COMP.VCC) // V+
|
||||
NETLIST_END()
|
||||
|
||||
//
|
||||
// Main netlist
|
||||
//
|
||||
|
||||
NETLIST_START(starfire)
|
||||
NET_MODEL("2N3702 PNP(Is=650.6E-18 Xti=3 Eg=1.11 Vaf=115.7 Bf=133.8 Ne=1.832 Ise=97.16f Ikf=1.081 Xtb=1.5 Br=3.73 Nc=2 Isc=0 Ikr=0 Rc=.715 Cjc=14.76p Mjc=.5383 Vjc=.75 Fc=.5 Cje=19.82p Mje=.3357 Vje=.75 Tr=114.1n Tf=761.3p Itf=.65 Vtf=5 Xtf=1.7 Rb=10 mfg=National)")
|
||||
NET_MODEL("LM324_12V OPAMP(TYPE=3 VLH=1.6 VLL=0.16 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)")
|
||||
NET_MODEL("LM324_5V OPAMP(TYPE=3 VLH=0.667 VLL=0.0667 FPF=5 UGF=500k SLEW=0.3M RI=1000k RO=50 DAB=0.00075)")
|
||||
|
||||
SOLVER(Solver, 48000)
|
||||
ANALOG_INPUT(V1_2, 1.2)
|
||||
ANALOG_INPUT(V12, 12)
|
||||
ANALOG_INPUT(VM12, -12)
|
||||
ANALOG_INPUT(V5, 5)
|
||||
ANALOG_INPUT(VM5, -5)
|
||||
ALIAS(VCC, V5)
|
||||
|
||||
TTL_INPUT(SIZE, 0) // active high
|
||||
TTL_INPUT(SEXPLO, 0) // active high
|
||||
TTL_INPUT(STIE, 0) // active high
|
||||
TTL_INPUT(SLASER, 0) // active high
|
||||
TTL_INPUT(TRACK, 0) // active high
|
||||
TTL_INPUT(LOCK, 0) // active high
|
||||
TTL_INPUT(SCANNER, 0) // active high
|
||||
TTL_INPUT(OHEAT, 0) // active high
|
||||
|
||||
NET_C(VCC, SIZE.VCC, SEXPLO.VCC, STIE.VCC, SLASER.VCC, TRACK.VCC, LOCK.VCC, SCANNER.VCC, OHEAT.VCC)
|
||||
NET_C(GND, SIZE.GND, SEXPLO.GND, STIE.GND, SLASER.GND, TRACK.GND, LOCK.GND, SCANNER.GND, OHEAT.GND)
|
||||
|
||||
LOCAL_SOURCE(NE556_DIP)
|
||||
LOCAL_SOURCE(ICL8038_DIP)
|
||||
|
||||
RES(R12, RES_K(10))
|
||||
RES(R13, RES_K(470))
|
||||
RES(R14, RES_K(470))
|
||||
POT(R15, RES_K(100))
|
||||
POT(R16, RES_K(100))
|
||||
POT(R17, RES_K(100))
|
||||
POT(R18, RES_K(100))
|
||||
POT(R19, RES_K(33))
|
||||
POT(R20, RES_K(10))
|
||||
POT(R21, RES_K(10))
|
||||
RES(R23, RES_K(47))
|
||||
RES(R24, 470)
|
||||
RES(R25, RES_K(10))
|
||||
RES(R26, RES_K(1))
|
||||
RES(R27, RES_K(30))
|
||||
RES(R28, RES_K(30))
|
||||
RES(R29, RES_K(1))
|
||||
RES(R30, RES_K(4.7))
|
||||
RES(R31, RES_M(1))
|
||||
RES(R37, RES_K(10))
|
||||
RES(R38, RES_K(2.7))
|
||||
RES(R39, RES_K(10))
|
||||
RES(R40, RES_K(2.7))
|
||||
RES(R41, RES_K(3))
|
||||
RES(R42, RES_K(1))
|
||||
RES(R43, RES_M(1))
|
||||
RES(R44, RES_K(2.2))
|
||||
RES(R45, RES_K(3.3))
|
||||
RES(R46, RES_K(27))
|
||||
RES(R47, RES_K(82))
|
||||
RES(R48, RES_K(10))
|
||||
RES(R49, RES_K(100))
|
||||
RES(R50, RES_K(160))
|
||||
RES(R51, RES_K(16))
|
||||
RES(R52, RES_K(16))
|
||||
RES(R53, RES_K(16))
|
||||
RES(R54, RES_K(100))
|
||||
RES(R55, RES_K(100))
|
||||
RES(R56, RES_K(4.7))
|
||||
RES(R57, RES_K(10))
|
||||
RES(R58, RES_K(82))
|
||||
RES(R59, RES_K(27))
|
||||
RES(R60, RES_K(2.7))
|
||||
RES(R61, RES_K(10))
|
||||
RES(R62, RES_M(1))
|
||||
RES(R63, RES_M(1))
|
||||
RES(R64, RES_K(4.7))
|
||||
RES(R67, RES_K(10))
|
||||
RES(R68, RES_K(2.7))
|
||||
RES(R69, RES_K(470))
|
||||
RES(R70, RES_K(470))
|
||||
RES(R71, RES_K(100))
|
||||
RES(R72, RES_K(330))
|
||||
RES(R73, RES_K(4.7))
|
||||
RES(R74, RES_K(100))
|
||||
RES(R75, RES_K(27))
|
||||
RES(R77, RES_K(470))
|
||||
RES(R78, RES_K(4.7))
|
||||
RES(R79, RES_K(10))
|
||||
RES(R80, RES_K(3))
|
||||
RES(R81, RES_K(1))
|
||||
RES(R82, RES_K(10))
|
||||
RES(R83, RES_K(4.7))
|
||||
RES(R84, RES_K(1))
|
||||
RES(R85, RES_K(3))
|
||||
RES(R86, RES_K(1))
|
||||
RES(R87, RES_K(2))
|
||||
//RES(R88, RES_K(82))
|
||||
RES(R89, RES_K(22))
|
||||
RES(R90, RES_K(22))
|
||||
RES(R91, RES_M(1))
|
||||
//RES(R, RES_K())
|
||||
|
||||
CAP(C7, CAP_U(0.1))
|
||||
CAP(C9, CAP_U(0.1))
|
||||
CAP(C10, CAP_U(0.1))
|
||||
CAP(C11, CAP_U(0.1))
|
||||
CAP(C12, CAP_U(0.01))
|
||||
CAP(C13, CAP_U(1.0))
|
||||
CAP(C14, CAP_U(0.1))
|
||||
CAP(C15, CAP_U(0.01))
|
||||
CAP(C18, CAP_U(1.0))
|
||||
CAP(C20, CAP_U(1.0))
|
||||
CAP(C21, CAP_U(0.1))
|
||||
CAP(C22, CAP_U(0.1))
|
||||
CAP(C23, CAP_U(0.1))
|
||||
CAP(C25, CAP_U(1.0))
|
||||
CAP(C26, CAP_U(0.1))
|
||||
CAP(C27, CAP_U(1.0))
|
||||
CAP(C29, CAP_U(0.1))
|
||||
CAP(C32, CAP_U(1.0))
|
||||
CAP(C34, CAP_U(1.0))
|
||||
CAP(C38, CAP_U(0.1))
|
||||
CAP(C39, CAP_U(0.01))
|
||||
CAP(C45, CAP_U(4.7))
|
||||
//CAP(C, CAP_U())
|
||||
|
||||
DIODE(D3, "1N914")
|
||||
|
||||
TTL_7406_GATE(IC_6C_A)
|
||||
TTL_7406_GATE(IC_6C_B)
|
||||
TTL_7406_GATE(IC_6C_C)
|
||||
TTL_7406_GATE(IC_6C_D)
|
||||
TTL_7406_GATE(IC_6C_E)
|
||||
TTL_7406_GATE(IC_6C_F)
|
||||
NET_C(VCC, IC_6C_A.VCC, IC_6C_B.VCC, IC_6C_C.VCC, IC_6C_D.VCC, IC_6C_E.VCC, IC_6C_F.VCC)
|
||||
NET_C(GND, IC_6C_A.GND, IC_6C_B.GND, IC_6C_C.GND, IC_6C_D.GND, IC_6C_E.GND, IC_6C_F.GND)
|
||||
|
||||
CD4070_GATE(IC_7E_A)
|
||||
CD4070_GATE(IC_7E_B)
|
||||
CD4070_GATE(IC_7E_C)
|
||||
CD4070_GATE(IC_7E_D)
|
||||
NET_C(V12, IC_7E_A.VDD, IC_7E_B.VDD, IC_7E_C.VDD, IC_7E_D.VDD)
|
||||
NET_C(GND, IC_7E_A.VSS, IC_7E_B.VSS, IC_7E_C.VSS, IC_7E_D.VSS)
|
||||
|
||||
NE555(IC_5B_A)
|
||||
NE555(IC_6E_A)
|
||||
NET_C(V5, IC_5B_A.VCC)
|
||||
NET_C(V12, IC_6E_A.VCC)
|
||||
NET_C(GND, IC_5B_A.GND, IC_6E_A.GND)
|
||||
|
||||
SUBMODEL(NE556_DIP, IC_6A)
|
||||
SUBMODEL(NE556_DIP, IC_8F)
|
||||
NET_C(V5, IC_6A.14)
|
||||
NET_C(V12, IC_8F.14)
|
||||
NET_C(GND, IC_6A.7, IC_8F.7)
|
||||
|
||||
CD4006_DIP(IC_8E)
|
||||
NET_C(V12, IC_8E.14)
|
||||
NET_C(GND, IC_8E.7)
|
||||
|
||||
OPAMP(IC_6D_A, "LM324_12V")
|
||||
OPAMP(IC_6D_B, "LM324_12V")
|
||||
OPAMP(IC_6D_C, "LM324_12V")
|
||||
OPAMP(IC_6D_D, "LM324_12V")
|
||||
OPAMP(IC_8D_A, "LM324_12V")
|
||||
OPAMP(IC_8D_B, "LM324_12V")
|
||||
OPAMP(IC_8D_C, "LM324_12V")
|
||||
OPAMP(IC_8D_D, "LM324_12V")
|
||||
NET_C(V12, IC_6D_A.VCC, IC_6D_B.VCC, IC_6D_C.VCC, IC_6D_D.VCC, IC_8D_A.VCC, IC_8D_B.VCC, IC_8D_C.VCC, IC_8D_D.VCC)
|
||||
NET_C(VM12, IC_6D_A.GND, IC_6D_B.GND, IC_6D_C.GND, IC_6D_D.GND, IC_8D_A.GND, IC_8D_B.GND, IC_8D_C.GND, IC_8D_D.GND)
|
||||
|
||||
OPAMP(IC_7C_A, "LM324_5V")
|
||||
OPAMP(IC_7C_B, "LM324_5V")
|
||||
OPAMP(IC_7C_C, "LM324_5V")
|
||||
OPAMP(IC_7C_D, "LM324_5V")
|
||||
NET_C(V5, IC_7C_A.VCC, IC_7C_B.VCC, IC_7C_C.VCC, IC_7C_D.VCC)
|
||||
NET_C(VM5, IC_7C_A.GND, IC_7C_B.GND, IC_7C_C.GND, IC_7C_D.GND)
|
||||
|
||||
MC3340_DIP(IC_7D)
|
||||
MC3340_DIP(IC_6B)
|
||||
NET_C(V12, IC_6B.8, IC_7D.8)
|
||||
NET_C(GND, IC_6B.3, IC_7D.3)
|
||||
|
||||
SUBMODEL(ICL8038_DIP, IC_6F)
|
||||
NET_C(V12, IC_6F.6)
|
||||
NET_C(VM12, IC_6F.11)
|
||||
|
||||
CD4016_DIP(IC_7B)
|
||||
NET_C(V5, IC_7B.14)
|
||||
NET_C(VM5, IC_7B.7)
|
||||
|
||||
QBJT_EB(Q1, "2N3702")
|
||||
QBJT_EB(Q2, "2N3702")
|
||||
|
||||
// Tie Weapon
|
||||
NET_C(STIE.Q, IC_6C_E.A)
|
||||
NET_C(IC_6C_E.Y, R39.1, IC_7E_C.A)
|
||||
NET_C(V1_2, IC_7C_C.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse.
|
||||
NET_C(V12, R39.2, IC_7E_C.B, R83.1, R91.1, R86.1, IC_7E_A.A, IC_8F.10)
|
||||
NET_C(IC_7E_C.Q, IC_8F.4, IC_8F.6)
|
||||
NET_C(IC_8F.1, C45.1, Q2.C, IC_8D_D.PLUS)
|
||||
NET_C(GND, C38.2, C45.2, R82.2, R57.1, R61.2, R84.2, IC_8D_A.PLUS)
|
||||
NET_C(R83.2, R82.1, Q2.B)
|
||||
NET_C(R91.2, Q2.E)
|
||||
NET_C(IC_8F.5, R85.1)
|
||||
NET_C(R85.2, R84.1, IC_7C_C.PLUS)
|
||||
ALIAS(TIE_ON, IC_7C_C.OUT)
|
||||
ALIAS(TIEON1, R84.1)
|
||||
NET_C(R58.2, VM12)
|
||||
NET_C(R58.1, R57.2, R59.1, IC_8D_D.MINUS)
|
||||
NET_C(R59.2, IC_8D_D.OUT, R60.1, IC_8F.11)
|
||||
NET_C(R60.2, R61.1, IC_8F.2)
|
||||
NET_C(R86.2, R87.1, IC_8F.13)
|
||||
NET_C(R87.2, IC_8F.8, IC_8F.12, C38.1)
|
||||
NET_C(IC_8F.9, IC_8E.3)
|
||||
NET_C(IC_8E.13, IC_7E_A.B)
|
||||
NET_C(IC_7E_A.Q, IC_8E.5)
|
||||
NET_C(IC_8E.1, IC_8E.12, IC_7E_B.B)
|
||||
NET_C(IC_8E.8, IC_7E_B.A)
|
||||
NET_C(IC_7E_B.Q, IC_8E.4)
|
||||
NET_C(IC_8E.10, IC_8E.6, R73.1)
|
||||
NET_C(SIZE.Q, IC_6C_F.A)
|
||||
NET_C(IC_6C_F.Y, R56.1)
|
||||
NET_C(R56.2, R73.2, C29.1)
|
||||
NET_C(C29.2, R74.1)
|
||||
NET_C(R74.2, R75.1, IC_8D_A.MINUS)
|
||||
NET_C(R75.2, IC_8D_A.OUT)
|
||||
ALIAS(NOISE, IC_8D_A.OUT)
|
||||
|
||||
// Explosion
|
||||
NET_C(NOISE, R53.1)
|
||||
NET_C(R53.2, C23.1, R52.1)
|
||||
NET_C(R52.2, C22.1, IC_6D_C.PLUS)
|
||||
NET_C(R50.2, R49.1, IC_6D_C.MINUS)
|
||||
NET_C(C23.2, R50.1, R51.1, R54.1, IC_6D_C.OUT)
|
||||
NET_C(R51.2, C21.1)
|
||||
ALIAS(RUMBLE_2, C21.1)
|
||||
NET_C(C21.2, C22.2, R49.2, C27.2, R55.2, C26.2, GND)
|
||||
NET_C(R54.2, R55.1, C34.1)
|
||||
NET_C(C34.2, IC_7D.1)
|
||||
NET_C(SEXPLO.Q, IC_6C_C.A)
|
||||
NET_C(IC_6C_C.Y, R40.1)
|
||||
NET_C(R40.2, C27.1, R63.1)
|
||||
NET_C(R63.2, R62.2, IC_8D_C.PLUS)
|
||||
NET_C(R62.1, V5)
|
||||
NET_C(IC_8D_C.MINUS, IC_8D_C.OUT, IC_7D.2)
|
||||
NET_C(IC_7D.6, C26.1)
|
||||
NET_C(IC_7D.7, C25.1)
|
||||
ALIAS(EXPLO, C25.2)
|
||||
|
||||
// Tracking Computer
|
||||
NET_C(SCANNER.Q, IC_5B_A.RESET)
|
||||
NET_C(V5, R24.1, R70.1, R13.1, R27.1)
|
||||
NET_C(GND, C15.2, R26.2, C20.2, C11.2, C7.2, C12.2, R29.2)
|
||||
NET_C(R24.2, R23.1, R12.1, IC_6A.5, IC_5B_A.DISCH)
|
||||
NET_C(R23.2, C15.1, IC_5B_A.THRESH, IC_5B_A.TRIG)
|
||||
NET_C(OHEAT.Q, IC_6C_B.A)
|
||||
NET_C(IC_6C_B.Y, R38.1)
|
||||
NET_C(R38.2, C20.1, R69.1)
|
||||
NET_C(R69.2, R70.2, IC_6D_A.PLUS)
|
||||
NET_C(IC_6D_A.MINUS, IC_6D_A.OUT, IC_6B.2)
|
||||
NET_C(IC_5B_A.OUT, R25.1)
|
||||
NET_C(R25.2, C9.1, R26.1)
|
||||
NET_C(C9.2, IC_6B.1)
|
||||
NET_C(IC_6B.6, C11.1)
|
||||
NET_C(IC_6B.7, C10.1)
|
||||
ALIAS(LOH, C10.2)
|
||||
NET_C(R13.2, R14.1, IC_6A.1)
|
||||
NET_C(R14.2, C7.1, IC_6A.2, IC_6A.6)
|
||||
NET_C(LOCK.Q, IC_6A.4)
|
||||
NET_C(R12.2, IC_6A.11)
|
||||
NET_C(R27.2, R28.1, IC_6A.13)
|
||||
NET_C(R28.2, C12.1, IC_6A.12, IC_6A.8)
|
||||
NET_C(TRACK.Q, IC_6A.10)
|
||||
NET_C(IC_6A.9, C13.1)
|
||||
NET_C(C13.2, R30.1)
|
||||
NET_C(R30.2, R29.1)
|
||||
ALIAS(COMPUTER, R30.2)
|
||||
|
||||
// Laser
|
||||
NET_C(SIZE.Q, IC_6C_D.A)
|
||||
NET_C(IC_6C_D.Y, R41.1)
|
||||
NET_C(R41.2, R78.2, R79.1, Q1.B)
|
||||
NET_C(V1_2, IC_7C_B.MINUS) // HACK: +12V is actually fed into this pin per the schematic, but it relies on LM324 abuse.
|
||||
NET_C(V12, R78.1, R77.1, R37.1, IC_7E_D.B, R89.1, R90.1)
|
||||
NET_C(GND, R79.2, C32.2, R48.2, R81.2, R67.2, IC_6D_B.PLUS)
|
||||
NET_C(R77.2, Q1.E)
|
||||
NET_C(Q1.C, C32.1, IC_6E_A.DISCH, IC_6D_D.PLUS)
|
||||
NET_C(SLASER.Q, IC_6C_A.A)
|
||||
NET_C(IC_6C_A.Y, R37.2, IC_7E_D.A)
|
||||
NET_C(IC_7E_D.Q, IC_6E_A.TRIG, IC_6E_A.RESET)
|
||||
NET_C(IC_6E_A.OUT, R80.1)
|
||||
NET_C(R80.2, R81.1, IC_7C_B.PLUS)
|
||||
ALIAS(LASERON1, R80.2)
|
||||
ALIAS(LASER_ON, IC_7C_B.OUT)
|
||||
NET_C(R48.1, R47.1, R46.1, IC_6D_D.MINUS)
|
||||
NET_C(VM12, R47.2, C39.2)
|
||||
NET_C(R46.2, IC_6D_D.OUT, R68.1, IC_6F.8)
|
||||
NET_C(R68.2, R67.1, IC_6E_A.THRESH)
|
||||
NET_C(C39.1, IC_6F.10)
|
||||
NET_C(R89.2, IC_6F.4)
|
||||
NET_C(R90.2, IC_6F.5)
|
||||
NET_C(IC_6F.3, R72.1)
|
||||
NET_C(R72.2, R71.1, IC_6D_B.MINUS)
|
||||
NET_C(R71.2, IC_6D_B.OUT)
|
||||
ALIAS(LASER, R71.2)
|
||||
|
||||
// Mixer
|
||||
NET_C(V5, R45.1, R42.2)
|
||||
NET_C(R45.2, R44.1, IC_7C_A.MINUS, IC_7C_D.MINUS)
|
||||
NET_C(GND, R44.2, C18.2, R43.2)
|
||||
NET_C(SIZE.Q, R42.1, D3.A)
|
||||
NET_C(D3.K, C18.1, R43.1, IC_7C_D.PLUS)
|
||||
|
||||
NET_C(TRACK.Q, IC_7C_A.PLUS)
|
||||
NET_C(IC_7C_A.OUT, IC_7B.13)
|
||||
NET_C(COMPUTER, IC_7B.1)
|
||||
NET_C(IC_7B.2, R16.1, R16.2)
|
||||
|
||||
NET_C(LASER, IC_7B.11)
|
||||
NET_C(LASER_ON, IC_7B.12)
|
||||
NET_C(IC_7B.10, R18.1, R18.2)
|
||||
|
||||
NET_C(NOISE, IC_7B.4)
|
||||
NET_C(TIE_ON, IC_7B.5)
|
||||
NET_C(IC_7B.3, R17.1, R17.2)
|
||||
|
||||
NET_C(RUMBLE_2, IC_7B.8)
|
||||
NET_C(IC_7C_D.OUT, IC_7B.6)
|
||||
NET_C(IC_7B.9, R19.1, R19.2)
|
||||
|
||||
NET_C(EXPLO, R20.1, R20.2)
|
||||
|
||||
NET_C(LOH, R15.1, R15.2)
|
||||
|
||||
NET_C(R16.3, R18.3, R17.3, R19.3, R20.3, R15.3, R64.1, IC_8D_B.MINUS)
|
||||
NET_C(GND, IC_8D_B.PLUS)
|
||||
NET_C(R64.2, R21.3, IC_8D_B.OUT)
|
||||
NET_C(R21.1, R31.2, GND)
|
||||
NET_C(R21.2, C14.1)
|
||||
NET_C(C14.2, R31.1)
|
||||
ALIAS(OUTPUT, R31.1)
|
||||
NETLIST_END()
|
10
src/mame/audio/nl_starfire.h
Normal file
10
src/mame/audio/nl_starfire.h
Normal file
@ -0,0 +1,10 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
#ifndef MAME_AUDIO_NL_STARFIRE_H
|
||||
#define MAME_AUDIO_NL_STARFIRE_H
|
||||
|
||||
#pragma once
|
||||
|
||||
NETLIST_EXTERNAL(starfire)
|
||||
|
||||
#endif // MAME_AUDIO_NL_STARFIRE_H
|
@ -43,11 +43,8 @@
|
||||
|
||||
Notes:
|
||||
|
||||
starfira has one less rom in total than starfire but everything passes as
|
||||
ok in the rom test so its probably just an earlier revision or something
|
||||
|
||||
fireone currently lacks the "alert" sound effect due to missing netlist
|
||||
support for the 8038 function generator IC.
|
||||
starfira has one less ROM in total than starfire, but everything passes as
|
||||
OK in the ROM test, so it's probably just an earlier revision.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -55,10 +52,8 @@ support for the 8038 function generator IC.
|
||||
#include "includes/starfire.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/samples.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Scratch RAM, mapped into video RAM
|
||||
@ -74,8 +69,9 @@ void starfire_base_state::scratch_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
case 0: m_vidctrl = data; break;
|
||||
case 1: m_vidctrl1 = data; break;
|
||||
case 2: sound_w(0, data); break;
|
||||
case 3: sound_w(1, data); break;
|
||||
case 2:
|
||||
case 3: sound_w(offset & 1, data); break;
|
||||
case 7: music_w((offset >> 10) & 3, data); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@ -107,30 +103,15 @@ uint8_t starfire_base_state::scratch_r(offs_t offset)
|
||||
|
||||
void starfire_state::sound_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
// starfire sound samples (preliminary)
|
||||
uint8_t rise = data & ~m_prev_sound;
|
||||
m_prev_sound = data;
|
||||
|
||||
// d0: rumble
|
||||
if (BIT(rise, 0)) m_samples->start(0, 0, true);
|
||||
if (BIT(~data, 0)) m_samples->stop(0);
|
||||
|
||||
// d1: explosion
|
||||
// d2: tie weapon
|
||||
// d3: laser
|
||||
if (BIT(rise, 1)) m_samples->start(1, 1);
|
||||
if (BIT(rise, 2)) m_samples->start(2, 2);
|
||||
if (BIT(rise, 3)) m_samples->start(3, 3);
|
||||
|
||||
// these are from the same generator (called "computer" in schematics)
|
||||
// d4: track
|
||||
// d5: lock
|
||||
// d6: scanner
|
||||
// d7: overheat
|
||||
if (BIT(rise, 7)) m_samples->start(4, 7);
|
||||
else if (BIT(rise, 6)) m_samples->start(4, 6);
|
||||
else if (BIT(rise, 5)) m_samples->start(4, 5);
|
||||
else if (BIT(rise, 4)) m_samples->start(4, 4);
|
||||
m_sound_size->write(BIT(data, 0));
|
||||
m_sound_explosion->write(BIT(data, 1));
|
||||
m_sound_tie->write(BIT(data, 2));
|
||||
m_sound_laser->write(BIT(data, 3));
|
||||
m_sound_track->write(BIT(data, 4));
|
||||
m_sound_lock->write(BIT(data, 5));
|
||||
m_sound_scanner->write(BIT(data, 6));
|
||||
m_sound_overheat->write(BIT(data, 7));
|
||||
synchronize();
|
||||
}
|
||||
|
||||
void fireone_state::sound_w(offs_t offset, uint8_t data)
|
||||
@ -141,6 +122,11 @@ void fireone_state::sound_w(offs_t offset, uint8_t data)
|
||||
m_sound_left_partial_hit->write(BIT(data, 1));
|
||||
m_sound_left_boom->write(BIT(data, 2));
|
||||
m_player_select = BIT(~data, 3);
|
||||
m_pit->write_gate0(BIT(data, 4));
|
||||
m_pit->write_gate1(BIT(data, 5));
|
||||
m_pit->write_gate2(BIT(data, 6));
|
||||
m_sound_off_left->write(BIT(data, 7)); // HACK: There's only one SOUND_OFF signal, but it splits into the left and right mixer stages.
|
||||
m_sound_off_right->write(BIT(data, 7)); // Having the left and right halves split provides a better opportunity for frontier isolation.
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -149,33 +135,60 @@ void fireone_state::sound_w(offs_t offset, uint8_t data)
|
||||
m_sound_right_boom->write(BIT(data, 2));
|
||||
m_sound_torpedo_collision->write(BIT(data, 3));
|
||||
m_sound_submarine_engine->write(BIT(data, 4));
|
||||
m_sound_alert->write(BIT(data, 5));
|
||||
m_sound_sonar_sync->write(BIT(data, 6));
|
||||
m_sound_sonar_enable->write(BIT(~data, 7));
|
||||
}
|
||||
}
|
||||
|
||||
void fireone_state::music_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_pit->write(offset, data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(fireone_state::music_a_out_cb)
|
||||
{
|
||||
m_music_a->write(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(fireone_state::music_b_out_cb)
|
||||
{
|
||||
m_music_b->write(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(fireone_state::music_c_out_cb)
|
||||
{
|
||||
m_music_c->write(state);
|
||||
}
|
||||
|
||||
uint8_t starfire_state::input_r(offs_t offset)
|
||||
{
|
||||
switch (offset & 15)
|
||||
{
|
||||
case 0: return m_dsw->read();
|
||||
case 1:
|
||||
{
|
||||
// d3 and d4 come from the audio circuit, how does it work exactly?
|
||||
// tie_on sounds ok, but laser_on sounds buggy
|
||||
const uint8_t tie_on = m_samples->playing(2) ? 0x00 : 0x08;
|
||||
const uint8_t laser_on = m_samples->playing(3) ? 0x00 : 0x10;
|
||||
const uint8_t input = m_system->read() & 0xe7;
|
||||
return input | tie_on | laser_on | 0x10; // disable laser_on for now
|
||||
}
|
||||
case 5: return m_stick2->read();
|
||||
case 1: return (m_system->read() & 0xe7) | m_sound_tie_on | m_sound_laser_on;
|
||||
case 5: return m_stickz->read();
|
||||
case 6: return m_stickx->read();
|
||||
case 7: return m_sticky->read();
|
||||
default: return 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::tieon1_cb)
|
||||
{
|
||||
m_sound_tie_on = (data > 2.5) ? 0x00 : 0x08;
|
||||
}
|
||||
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::laseron1_cb)
|
||||
{
|
||||
m_sound_laser_on = (data > 2.5) ? 0x00 : 0x10;
|
||||
}
|
||||
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(starfire_state::sound_out_cb)
|
||||
{
|
||||
m_dac->write(std::round(8192.0 * data));
|
||||
}
|
||||
|
||||
uint8_t fireone_state::input_r(offs_t offset)
|
||||
{
|
||||
static const uint8_t s_paddle_map[64] =
|
||||
@ -275,6 +288,27 @@ static INPUT_PORTS_START( starfire )
|
||||
PORT_CONFNAME( 0x01, 0x01, "Jumper J6/4G: Enable NMI" )
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_CONFSETTING( 0x01, DEF_STR( Yes ) )
|
||||
|
||||
PORT_START("POT_TRACK")
|
||||
PORT_ADJUSTER( 50, "Tracking Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "trackvol")
|
||||
|
||||
PORT_START("POT_LASER")
|
||||
PORT_ADJUSTER( 50, "Laser Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "laservol")
|
||||
|
||||
PORT_START("POT_TIE")
|
||||
PORT_ADJUSTER( 50, "Enemy Shot Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "enemyvol")
|
||||
|
||||
PORT_START("POT_SIZE")
|
||||
PORT_ADJUSTER( 50, "'Size' Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "sizevol")
|
||||
|
||||
PORT_START("POT_EXPLO")
|
||||
PORT_ADJUSTER( 50, "Explosion Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "explovol")
|
||||
|
||||
PORT_START("POT_LOH")
|
||||
PORT_ADJUSTER( 50, "Lock/Scan/Overheat Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "lohvol")
|
||||
|
||||
PORT_START("POT_MAIN")
|
||||
PORT_ADJUSTER( 50, "Main Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "mainvol")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -337,19 +371,23 @@ INPUT_PORTS_END
|
||||
|
||||
void starfire_state::machine_start()
|
||||
{
|
||||
/* register for state saving */
|
||||
save_item(NAME(m_prev_sound));
|
||||
save_item(NAME(m_sound_tie_on));
|
||||
save_item(NAME(m_sound_laser_on));
|
||||
}
|
||||
|
||||
void starfire_state::machine_reset()
|
||||
{
|
||||
m_prev_sound = 0;
|
||||
m_sound_tie_on = 0x08;
|
||||
m_sound_laser_on = 0x10;
|
||||
}
|
||||
|
||||
void fireone_state::machine_start()
|
||||
{
|
||||
/* register for state saving */
|
||||
save_item(NAME(m_player_select));
|
||||
|
||||
m_pit->set_clockin(0, STARFIRE_CPU_CLOCK.dvalue());
|
||||
m_pit->set_clockin(1, STARFIRE_CPU_CLOCK.dvalue());
|
||||
m_pit->set_clockin(2, STARFIRE_CPU_CLOCK.dvalue());
|
||||
}
|
||||
|
||||
void fireone_state::machine_reset()
|
||||
@ -357,20 +395,6 @@ void fireone_state::machine_reset()
|
||||
m_player_select = 0;
|
||||
}
|
||||
|
||||
static const char *const starfire_sample_names[] =
|
||||
{
|
||||
"*starfire",
|
||||
"size",
|
||||
"explosion",
|
||||
"tie",
|
||||
"laser",
|
||||
"track",
|
||||
"lock",
|
||||
"scanner",
|
||||
"overheat",
|
||||
nullptr
|
||||
};
|
||||
|
||||
INTERRUPT_GEN_MEMBER(starfire_state::vblank_int)
|
||||
{
|
||||
// starfire has a jumper for disabling NMI, used to do a complete RAM test
|
||||
@ -400,6 +424,11 @@ void fireone_state::fireone(machine_config &config)
|
||||
base_config(config);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(fireone_state::vblank_int));
|
||||
|
||||
PIT8253(config, m_pit);
|
||||
m_pit->out_handler<0>().set(FUNC(fireone_state::music_a_out_cb));
|
||||
m_pit->out_handler<1>().set(FUNC(fireone_state::music_b_out_cb));
|
||||
m_pit->out_handler<2>().set(FUNC(fireone_state::music_c_out_cb));
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
@ -412,7 +441,8 @@ void fireone_state::fireone(machine_config &config)
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:ltorp", "LTORP.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:lshpht", "LSHPHT.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:lboom", "LBOOM.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:sound_off", "SOUND_OFF.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:lsound_off", "SOUND_OFF_L.IN", 0); // HACK: Split the SOUND OFF into left/right halves for better netlist isolation.
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:rsound_off", "SOUND_OFF_R.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:rtorp", "RTORP.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:rshpht", "RSHPHT.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:rboom", "RBOOM.IN", 0);
|
||||
@ -421,6 +451,9 @@ void fireone_state::fireone(machine_config &config)
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:alert", "ALERT.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:sonar_enable", "SONAR_ENABLE.POS", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:sonar_sync", "SONAR_SYNC.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:music_a", "MUSIC_A.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:music_b", "MUSIC_B.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:music_c", "MUSIC_C.IN", 0);
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:volume_l", "R64.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:volume_r", "R65.DIAL");
|
||||
|
||||
@ -436,10 +469,33 @@ void starfire_state::starfire(machine_config &config)
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
SAMPLES(config, m_samples);
|
||||
m_samples->set_channels(5);
|
||||
m_samples->set_samples_names(starfire_sample_names);
|
||||
m_samples->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
NETLIST_CPU(config, "sound_nl", netlist::config::DEFAULT_CLOCK()).set_source(NETLIST_NAME(starfire));
|
||||
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:size", "SIZE.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:sexplo", "SEXPLO.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:stie", "STIE.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:slaser", "SLASER.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:track", "TRACK.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:lock", "LOCK.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:scanner", "SCANNER.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:oheat", "OHEAT.IN", 0);
|
||||
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:trackvol", "R16.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:laservol", "R18.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:enemyvol", "R17.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:sizevol", "R19.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:explovol", "R20.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:lohvol", "R15.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:mainvol", "R21.DIAL");
|
||||
|
||||
NETLIST_ANALOG_OUTPUT(config, "sound_nl:tieon1", 0).set_params("TIEON1", FUNC(starfire_state::tieon1_cb));
|
||||
NETLIST_ANALOG_OUTPUT(config, "sound_nl:laseron1", 0).set_params("LASERON1", FUNC(starfire_state::laseron1_cb));
|
||||
NETLIST_ANALOG_OUTPUT(config, "sound_nl:output", 0).set_params("OUTPUT", FUNC(starfire_state::sound_out_cb));
|
||||
|
||||
DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_dac, 0).add_route(ALL_OUTPUTS, "mono", 0.5); // Not actually a DAC, just here to receive output.
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT);
|
||||
}
|
||||
|
||||
|
||||
@ -535,7 +591,7 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1979, starfire, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starfirea,starfire, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, fireone, 0, fireone, fireone, fireone_state, empty_init, ROT0, "Exidy", "Fire One", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starfir2, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starfire, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starfirea,starfire, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, fireone, 0, fireone, fireone, fireone_state, empty_init, ROT0, "Exidy", "Fire One", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, starfir2, 0, starfire, starfire, starfire_state, empty_init, ROT0, "Exidy", "Star Fire 2", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -11,9 +11,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "machine/netlist.h"
|
||||
#include "machine/pit8253.h"
|
||||
#include "netlist/nl_setup.h"
|
||||
#include "audio/nl_fireone.h"
|
||||
#include "sound/samples.h"
|
||||
#include "audio/nl_starfire.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "screen.h"
|
||||
|
||||
|
||||
@ -65,6 +68,7 @@ protected:
|
||||
|
||||
virtual uint8_t input_r(offs_t offset) = 0;
|
||||
virtual void sound_w(offs_t offset, uint8_t data) = 0;
|
||||
virtual void music_w(offs_t offset, uint8_t data) { };
|
||||
|
||||
void scratch_w(offs_t offset, uint8_t data);
|
||||
uint8_t scratch_r(offs_t offset);
|
||||
@ -83,11 +87,19 @@ class starfire_state : public starfire_base_state
|
||||
public:
|
||||
starfire_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: starfire_base_state(mconfig, type, tag)
|
||||
, m_samples(*this, "samples")
|
||||
, m_dac(*this, "dac") // just to have a sound device
|
||||
, m_nmi(*this, "NMI")
|
||||
, m_stick2(*this, "STICK2")
|
||||
, m_stickz(*this, "STICKZ")
|
||||
, m_stickx(*this, "STICKX")
|
||||
, m_sticky(*this, "STICKY")
|
||||
, m_sound_size(*this, "sound_nl:size")
|
||||
, m_sound_explosion(*this, "sound_nl:sexplo")
|
||||
, m_sound_tie(*this, "sound_nl:stie")
|
||||
, m_sound_laser(*this, "sound_nl:slaser")
|
||||
, m_sound_track(*this, "sound_nl:track")
|
||||
, m_sound_lock(*this, "sound_nl:lock")
|
||||
, m_sound_scanner(*this, "sound_nl:scanner")
|
||||
, m_sound_overheat(*this, "sound_nl:oheat")
|
||||
{ }
|
||||
|
||||
void starfire(machine_config &config);
|
||||
@ -96,9 +108,10 @@ private:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
required_device<samples_device> m_samples;
|
||||
required_device<dac_word_interface> m_dac;
|
||||
|
||||
required_ioport m_nmi;
|
||||
required_ioport m_stick2;
|
||||
required_ioport m_stickz;
|
||||
required_ioport m_stickx;
|
||||
required_ioport m_sticky;
|
||||
|
||||
@ -107,7 +120,21 @@ private:
|
||||
|
||||
INTERRUPT_GEN_MEMBER(vblank_int);
|
||||
|
||||
uint8_t m_prev_sound;
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(tieon1_cb);
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(laseron1_cb);
|
||||
NETDEV_ANALOG_CALLBACK_MEMBER(sound_out_cb);
|
||||
|
||||
uint8_t m_sound_tie_on;
|
||||
uint8_t m_sound_laser_on;
|
||||
|
||||
required_device<netlist_mame_logic_input_device> m_sound_size;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_explosion;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_tie;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_laser;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_track;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_lock;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_scanner;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_overheat;
|
||||
};
|
||||
|
||||
class fireone_state : public starfire_base_state
|
||||
@ -115,6 +142,7 @@ class fireone_state : public starfire_base_state
|
||||
public:
|
||||
fireone_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: starfire_base_state(mconfig, type, tag)
|
||||
, m_pit(*this, "pit")
|
||||
, m_controls(*this, "P%u", 1U)
|
||||
, m_sound_left_partial_hit(*this, "sound_nl:lshpht")
|
||||
, m_sound_right_partial_hit(*this, "sound_nl:rshpht")
|
||||
@ -124,8 +152,14 @@ public:
|
||||
, m_sound_right_boom(*this, "sound_nl:rboom")
|
||||
, m_sound_torpedo_collision(*this, "sound_nl:torpcoll")
|
||||
, m_sound_submarine_engine(*this, "sound_nl:subeng")
|
||||
, m_sound_alert(*this, "sound_nl:alert")
|
||||
, m_sound_sonar_enable(*this, "sound_nl:sonar_enable")
|
||||
, m_sound_sonar_sync(*this, "sound_nl:sonar_sync")
|
||||
, m_sound_off_left(*this, "sound_nl:lsound_off")
|
||||
, m_sound_off_right(*this, "sound_nl:rsound_off")
|
||||
, m_music_a(*this, "sound_nl:music_a")
|
||||
, m_music_b(*this, "sound_nl:music_b")
|
||||
, m_music_c(*this, "sound_nl:music_c")
|
||||
{ }
|
||||
|
||||
void fireone(machine_config &config);
|
||||
@ -134,10 +168,16 @@ private:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
required_device<pit8253_device> m_pit;
|
||||
required_ioport_array<2> m_controls;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(music_a_out_cb);
|
||||
DECLARE_WRITE_LINE_MEMBER(music_b_out_cb);
|
||||
DECLARE_WRITE_LINE_MEMBER(music_c_out_cb);
|
||||
|
||||
virtual uint8_t input_r(offs_t offset) override;
|
||||
virtual void sound_w(offs_t offset, uint8_t data) override;
|
||||
virtual void music_w(offs_t offset, uint8_t data) override;
|
||||
|
||||
uint8_t m_player_select;
|
||||
|
||||
@ -151,8 +191,14 @@ private:
|
||||
required_device<netlist_mame_logic_input_device> m_sound_right_boom;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_torpedo_collision;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_submarine_engine;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_alert;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_sonar_enable;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_sonar_sync;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_off_left;
|
||||
required_device<netlist_mame_logic_input_device> m_sound_off_right;
|
||||
required_device<netlist_mame_logic_input_device> m_music_a;
|
||||
required_device<netlist_mame_logic_input_device> m_music_b;
|
||||
required_device<netlist_mame_logic_input_device> m_music_c;
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_STARFIRE_H
|
||||
|
Loading…
Reference in New Issue
Block a user