diff options
| author | 2020-08-06 20:04:00 +0200 | |
|---|---|---|
| committer | 2020-08-06 20:16:22 +0200 | |
| commit | aa86126fc2be9eabdfc46746967bca8e2f700162 (patch) | |
| tree | 9bd9e090364380dbcab963270f78caca8b44d797 /src | |
| parent | 0f6d29e759b5824c26b395ecd5f8ef195db4e44a (diff) | |
-fireone: Netlist sound now works other than the Alert trigger. [Ryan Holtz, Colin Howell, couriersud]
Diffstat (limited to 'src')
| -rw-r--r-- | src/devices/machine/netlist.cpp | 2 | ||||
| -rw-r--r-- | src/mame/audio/nl_fireone.cpp | 176 | ||||
| -rw-r--r-- | src/mame/drivers/starfire.cpp | 21 | ||||
| -rw-r--r-- | src/mame/includes/starfire.h | 10 |
4 files changed, 192 insertions, 17 deletions
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index c4c76dcb45f..915a0fe0b03 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -381,7 +381,7 @@ void netlist_mame_logic_input_device::write(const uint32_t val) const uint32_t v = (val >> m_shift) & 1; if (v != (*m_param)()) { - printf("write %s: %d\n", this->tag(), val); + LGODEBUG("write %s\n", this->tag()); synchronize(0, v); } } diff --git a/src/mame/audio/nl_fireone.cpp b/src/mame/audio/nl_fireone.cpp index 44598605eb9..09ec213b7da 100644 --- a/src/mame/audio/nl_fireone.cpp +++ b/src/mame/audio/nl_fireone.cpp @@ -59,19 +59,20 @@ NETLIST_START(fireone) TTL_INPUT(RTORP, 0) // active high TTL_INPUT(RSHPHT, 0) // active high TTL_INPUT(RBOOM, 0) // active high + TTL_INPUT(TORPCOLL, 0) // active high TTL_INPUT(SUBENG, 0) // active high TTL_INPUT(ALERT, 0) // active high //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, 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, SUBENG.GND, ALERT.GND, SONAR_SYNC.GND) + 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) LOCAL_SOURCE(_NE556_DIP) - TTL_7404_GATE(IC27_A) - TTL_7404_GATE(IC27_C) - TTL_7404_GATE(IC27_D) + TTL_7406_GATE(IC27_A) + 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) @@ -121,11 +122,26 @@ NETLIST_START(fireone) NET_C(IC30.8, V12) NET_C(IC30.3, GND) + LM3900(IC2_A) + LM3900(IC2_D) LM3900(IC4_A) LM3900(IC4_B) - NET_C(V12, IC4_A.VCC, IC4_B.VCC) - NET_C(GND, IC4_A.GND, IC4_B.GND) - + LM3900(IC4_D) + LM3900(IC14_A) + LM3900(IC14_B) + LM3900(IC14_C) + LM3900(IC14_D) + 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(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(R15, RES_M(5.6)) + RES(R16, RES_K(680)) RES(R19, RES_K(150)) RES(R20, RES_K(2)) RES(R21, RES_K(180)) @@ -137,12 +153,34 @@ NETLIST_START(fireone) RES(R27, RES_K(270)) RES(R28, RES_K(10)) RES(R29, RES_K(130)) + RES(R31, RES_K(560)) + RES(R32, RES_K(220)) + RES(R33, RES_M(1.2)) + RES(R34, RES_K(12)) RES(R35, RES_K(1)) RES(R36, RES_K(15)) RES(R37, RES_K(15)) RES(R38, RES_K(820)) RES(R39, RES_M(1)) + RES(R40, RES_K(220)) + RES(R41, RES_K(680)) + RES(R42, RES_K(820)) + RES(R43, RES_K(12)) + RES(R44, RES_K(560)) + RES(R45, RES_M(1.2)) + RES(R46, RES_K(680)) + RES(R47, RES_M(1.2)) + RES(R48, RES_K(12)) + RES(R49, RES_M(1.2)) + RES(R50, RES_K(820)) + RES(R51, RES_M(5.6)) + RES(R52, RES_K(680)) + RES(R53, RES_K(680)) + RES(R54, RES_M(2)) + RES(R55, RES_K(1)) RES(R56, RES_K(10)) + RES(R57, RES_K(680)) + RES(R61, RES_K(150)) RES(R62, RES_M(1)) POT(R64, RES_K(10)) POT(R65, RES_K(10)) @@ -154,7 +192,11 @@ NETLIST_START(fireone) RES(R71, RES_K(16)) RES(R72, RES_K(68)) RES(R73, RES_K(47)) + RES(R74, RES_K(12)) RES(R75, RES_K(120)) + RES(R76, RES_K(33)) + RES(R77, RES_K(33)) + RES(R78, RES_K(150)) RES(R79, RES_K(130)) RES(R80, RES_K(130)) RES(R82, RES_K(160)) @@ -163,6 +205,10 @@ NETLIST_START(fireone) RES(R85, RES_K(270)) RES(R86, RES_K(16)) RES(R87, RES_K(100)) + RES(R94, RES_K(1)) + RES(R95, RES_K(1)) + RES(R99, RES_K(1)) + RES(R100, RES_K(1)) //RES(R101, RES_K(10)) RES(R102, RES_K(3)) RES(R103, RES_K(3)) @@ -171,8 +217,10 @@ NETLIST_START(fireone) RES(R106, RES_K(100)) RES(R107, RES_K(47)) RES(R108, RES_K(20)) + RES(R109, RES_K(560)) RES(R110, RES_K(1)) RES(R117, RES_K(20)) + RES(R118, RES_K(560)) RES(R120, RES_K(5.6)) RES(R122, RES_K(2.7)) RES(R123, RES_K(100)) @@ -180,6 +228,10 @@ NETLIST_START(fireone) RES(R125, RES_K(3)) RES(R126, RES_K(6.8)) RES(R127, RES_K(8.2)) + RES(R132, RES_M(1)) + RES(R133, RES_M(1)) + RES(R134, RES_M(1)) + RES(R135, RES_M(1)) RES(R137, RES_K(5.6)) RES(R138, RES_K(47)) RES(R139, 100) @@ -191,16 +243,33 @@ NETLIST_START(fireone) 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(C11, CAP_U(2.2)) + CAP(C12, CAP_U(2.2)) + CAP(C13, CAP_U(4.7)) + CAP(C14, CAP_U(2.2)) CAP(C15, CAP_U(1.0)) CAP(C16, CAP_U(10)) CAP(C17, CAP_U(0.1)) CAP(C18, CAP_U(0.1)) CAP(C20, CAP_U(10)) + CAP(C22, CAP_U(0.033)) CAP(C23, CAP_U(0.33)) CAP(C26, CAP_U(0.022)) CAP(C27, CAP_U(0.022)) + CAP(C35, CAP_U(0.0022)) + CAP(C37, CAP_U(0.0022)) + CAP(C38, CAP_U(0.1)) + CAP(C39, CAP_U(0.0022)) + CAP(C40, CAP_U(0.033)) + CAP(C42, CAP_U(1.0)) CAP(C45, CAP_U(0.1)) CAP(C48, CAP_U(0.1)) + CAP(C49, CAP_U(0.0022)) CAP(C50, CAP_U(1.0)) CAP(C51, CAP_U(0.1)) CAP(C52, CAP_U(0.1)) @@ -215,6 +284,8 @@ NETLIST_START(fireone) CAP(C82, CAP_U(0.1)) CAP(C84, CAP_U(0.1)) CAP(C85, CAP_U(2.2)) + CAP(C97, CAP_U(0.0022)) + CAP(C98, CAP_U(0.0022)) CAP(C100, CAP_U(0.22)) //CAP(C102, CAP_U(0.001)) CAP(C106, CAP_U(0.1)) @@ -224,12 +295,19 @@ NETLIST_START(fireone) CAP(C122, CAP_U(0.001)) //CAP(C, CAP_U()) + DIODE(D1, "1N914") DIODE(D2, "1N914") DIODE(D3, "1N914") DIODE(D4, "1N914") DIODE(D5, "1N914") + DIODE(D6, "1N914") DIODE(D7, "1N914") DIODE(D8, "1N914") + DIODE(D9, "1N914") + DIODE(D10, "1N914") + DIODE(D11, "1N914") + DIODE(D12, "1N914") + DIODE(D13, "1N914") DIODE(D14, "1N914") QBJT_EB(Q2, "2N3704") @@ -257,7 +335,7 @@ NETLIST_START(fireone) // Sonar NET_C(IC27_A.A, SONAR_SYNC.Q) - NET_C(IC27_A.Q, R70.1, IC25.15, IC41_D.B) + NET_C(IC27_A.Y, R70.1, IC25.15, IC41_D.B) NET_C(R70.2, V12, IC29.RESET) NET_C(IC29.GND, GND) NET_C(IC29.VCC, V12) @@ -339,7 +417,7 @@ NETLIST_START(fireone) NET_C(IC30.6, C81.1) NET_C(C81.2, GND) NET_C(LBOOM.Q, IC27_C.A) - NET_C(IC27_C.Q, R103.1) + NET_C(IC27_C.Y, R103.1) NET_C(R103.2, R104.1, C70.1) NET_C(C70.2, GND) NET_C(R104.2, IC17.3, R83.1) @@ -356,7 +434,7 @@ NETLIST_START(fireone) NET_C(IC28.6, C75.1) NET_C(C75.2, GND) NET_C(RBOOM.Q, IC27_D.A) - NET_C(IC27_D.Q, R102.1) + NET_C(IC27_D.Y, R102.1) NET_C(R102.2, R69.1, C73.1) NET_C(C73.2, GND) NET_C(R69.2, IC16.3, R62.1) @@ -364,6 +442,82 @@ NETLIST_START(fireone) NET_C(IC16.1, IC16.2, IC28.2) NET_C(R108.2, MIX_R) + // Torpedo (L) + NET_C(LTORP.Q, R100.1, D10.A, D11.A) + NET_C(R100.2, V5) + NET_C(D10.K, C7.1, R46.1) + NET_C(D11.K, C14.1, R53.1) + NET_C(C7.2, C14.2, R132.2, R133.2, GND) + NET_C(R53.2, IC14_C.PLUS) + NET_C(R51.1, V12) + NET_C(R51.2, C42.1, R54.1, IC14_C.MINUS) + NET_C(R54.2, C42.2, IC14_C.OUT, R57.1) + NET_C(R57.2, R46.2, IC14_B.PLUS) + NET_C(NOISE, R42.1) + NET_C(R42.2, R47.1, IC14_B.MINUS) + NET_C(R47.2, C35.1, IC14_B.OUT) + NET_C(C35.2, R132.1, C98.1) + NET_C(C98.2, R133.1, R118.1) + NET_C(R118.2, MIX_L) + + // Torpedo (R) + NET_C(RTORP.Q, R55.1, D12.A, D9.A) + NET_C(R55.2, V5) + NET_C(D12.K, C8.1, R52.1) + NET_C(D9.K, C12.1, R16.1) + NET_C(C8.2, C12.2, R134.2, R135.2, GND) + NET_C(R16.2, IC2_A.PLUS) + NET_C(R15.1, V12) + NET_C(R15.2, C3.1, R8.1, IC2_A.MINUS) + NET_C(R8.2, C3.2, IC2_A.OUT, R41.1) + NET_C(R41.2, R52.2, IC14_A.PLUS) + NET_C(NOISE, R50.1) + NET_C(R50.2, R49.1, IC14_A.MINUS) + NET_C(R49.2, C37.1, IC14_A.OUT) + NET_C(C37.2, R134.1, C97.1) + NET_C(C97.2, R135.1, R109.1) + NET_C(R109.2, MIX_R) + + // Ship Partial Hit (L) + NET_C(LSHPHT.Q, R94.1, D6.A) + NET_C(R94.2, V5) + NET_C(D6.K, C13.1, R32.1) + NET_C(C13.2, C49.2, C22.2, GND) + NET_C(R32.2, IC4_D.PLUS) + NET_C(NOISE, R31.1) + NET_C(R31.2, R33.1, IC4_D.MINUS) + NET_C(R33.2, R34.1, IC4_D.OUT) + NET_C(R34.2, C49.1, R74.1) + NET_C(R74.2, C22.1, R78.1) + NET_C(R78.2, MIX_L) + + // Ship Partial Hit (R) + NET_C(RSHPHT.Q, R99.1, D13.A) + NET_C(R99.2, V5) + NET_C(D13.K, C6.1, R40.1) + NET_C(C6.2, C39.2, C40.2, GND) + NET_C(R40.2, IC14_D.PLUS) + NET_C(NOISE, R44.1) + NET_C(R44.2, R45.1, IC14_D.MINUS) + NET_C(R45.2, R48.1, IC14_D.OUT) + NET_C(R48.2, C39.1, R43.1) + NET_C(R43.2, C40.1, R61.1) + NET_C(R61.2, MIX_L) + + // Torpedo Collision + NET_C(TORPCOLL.Q, R95.1, D1.A) + NET_C(R95.2, V5) + NET_C(D1.K, C11.1, R10.1) + NET_C(C11.2, C4.2, C38.2, GND) + NET_C(R10.2, IC2_D.PLUS) + NET_C(NOISE, R11.1) + NET_C(R11.2, R9.1, IC2_D.MINUS) + NET_C(R9.2, R12.1, IC2_D.OUT) + NET_C(R12.2, C4.1, R13.1) + NET_C(R13.2, C38.1, R76.1, R77.1) + NET_C(R77.2, MIX_L) + NET_C(R76.2, MIX_R) + // Mixers (shared) NET_C(SOUND_OFF.Q, D4.A, D5.A) diff --git a/src/mame/drivers/starfire.cpp b/src/mame/drivers/starfire.cpp index 59c35c09e83..84ddd895144 100644 --- a/src/mame/drivers/starfire.cpp +++ b/src/mame/drivers/starfire.cpp @@ -1,11 +1,13 @@ // license:BSD-3-Clause -// copyright-holders:Dan Boris, Olivier Galibert, Aaron Giles +// copyright-holders:Dan Boris, Olivier Galibert, Aaron Giles, Ryan Holtz /*************************************************************************** Star Fire/Fire One system driver by Daniel Boris, Olivier Galibert, Aaron Giles + netlist audio by Ryan Holtz + **************************************************************************** Memory map @@ -44,6 +46,9 @@ 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. + ***************************************************************************/ #include "emu.h" @@ -132,12 +137,17 @@ void fireone_state::sound_w(offs_t offset, uint8_t data) { if (offset == 0) { + m_sound_left_torpedo->write(BIT(data, 0)); + m_sound_left_partial_hit->write(BIT(data, 1)); m_sound_left_boom->write(BIT(data, 2)); m_player_select = BIT(~data, 3); } else { + m_sound_right_torpedo->write(BIT(data, 0)); + m_sound_right_partial_hit->write(BIT(data, 1)); 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_sonar_sync->write(BIT(data, 6)); m_sound_sonar_enable->write(BIT(~data, 7)); @@ -397,7 +407,7 @@ void fireone_state::fireone(machine_config &config) NETLIST_SOUND(config, "sound_nl", 48000) .set_source(NETLIST_NAME(fireone)) .add_route(0, "lspeaker", 1.0) - .add_route(0, "rspeaker", 1.0); + .add_route(1, "rspeaker", 1.0); NETLIST_LOGIC_INPUT(config, "sound_nl:ltorp", "LTORP.IN", 0); NETLIST_LOGIC_INPUT(config, "sound_nl:lshpht", "LSHPHT.IN", 0); @@ -406,6 +416,7 @@ void fireone_state::fireone(machine_config &config) 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); + NETLIST_LOGIC_INPUT(config, "sound_nl:torpcoll", "TORPCOLL.IN", 0); NETLIST_LOGIC_INPUT(config, "sound_nl:subeng", "SUBENG.IN", 0); NETLIST_LOGIC_INPUT(config, "sound_nl:alert", "ALERT.IN", 0); NETLIST_LOGIC_INPUT(config, "sound_nl:sonar_enable", "SONAR_ENABLE.POS", 0); @@ -413,8 +424,8 @@ void fireone_state::fireone(machine_config &config) NETLIST_ANALOG_INPUT(config, "sound_nl:volume_l", "R64.DIAL"); NETLIST_ANALOG_INPUT(config, "sound_nl:volume_r", "R65.DIAL"); - NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUT_L").set_mult_offset(500000.0, 0.0); - NETLIST_STREAM_OUTPUT(config, "sound_nl:cout1", 1, "OUT_R").set_mult_offset(500000.0, 0.0); + NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUT_L").set_mult_offset(100000.0, 0.0); + NETLIST_STREAM_OUTPUT(config, "sound_nl:cout1", 1, "OUT_R").set_mult_offset(100000.0, 0.0); } void starfire_state::starfire(machine_config &config) @@ -526,5 +537,5 @@ 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_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 ) diff --git a/src/mame/includes/starfire.h b/src/mame/includes/starfire.h index 1b4c70360f0..6c410d00571 100644 --- a/src/mame/includes/starfire.h +++ b/src/mame/includes/starfire.h @@ -116,8 +116,13 @@ public: fireone_state(const machine_config &mconfig, device_type type, const char *tag) : starfire_base_state(mconfig, type, tag) , m_controls(*this, "P%u", 1U) + , m_sound_left_partial_hit(*this, "sound_nl:lshpht") + , m_sound_right_partial_hit(*this, "sound_nl:rshpht") + , m_sound_left_torpedo(*this, "sound_nl:ltorp") + , m_sound_right_torpedo(*this, "sound_nl:rtorp") , m_sound_left_boom(*this, "sound_nl:lboom") , 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_sonar_enable(*this, "sound_nl:sonar_enable") , m_sound_sonar_sync(*this, "sound_nl:sonar_sync") @@ -138,8 +143,13 @@ private: INTERRUPT_GEN_MEMBER(vblank_int); + required_device<netlist_mame_logic_input_device> m_sound_left_partial_hit; + required_device<netlist_mame_logic_input_device> m_sound_right_partial_hit; + required_device<netlist_mame_logic_input_device> m_sound_left_torpedo; + required_device<netlist_mame_logic_input_device> m_sound_right_torpedo; required_device<netlist_mame_logic_input_device> m_sound_left_boom; 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_sonar_enable; required_device<netlist_mame_logic_input_device> m_sound_sonar_sync; |
