mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
-flyball: Added netlist sound. [Ryan Holtz, Ivan Vangelista]
This commit is contained in:
parent
ffdd676ece
commit
461b8338a2
@ -1213,6 +1213,8 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/firetrk.h",
|
||||
MAME_DIR .. "src/mame/audio/firetrk.cpp",
|
||||
MAME_DIR .. "src/mame/video/firetrk.cpp",
|
||||
MAME_DIR .. "src/mame/audio/nl_flyball.cpp",
|
||||
MAME_DIR .. "src/mame/audio/nl_flyball.h",
|
||||
MAME_DIR .. "src/mame/drivers/flyball.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/foodf.cpp",
|
||||
MAME_DIR .. "src/mame/includes/foodf.h",
|
||||
|
@ -157,6 +157,10 @@ files{
|
||||
MAME_DIR .. "src/mame/machine/nl_gtrak10.cpp",
|
||||
MAME_DIR .. "src/mame/machine/nl_gtrak10.h",
|
||||
|
||||
MAME_DIR .. "src/mame/audio/nl_flyball.cpp",
|
||||
MAME_DIR .. "src/mame/audio/nl_flyball.h",
|
||||
MAME_DIR .. "src/mame/drivers/flyball.cpp",
|
||||
|
||||
MAME_DIR .. "src/mame/drivers/hazeltin.cpp",
|
||||
|
||||
MAME_DIR .. "src/mame/drivers/1942.cpp",
|
||||
|
File diff suppressed because it is too large
Load Diff
190
src/mame/audio/nl_flyball.cpp
Normal file
190
src/mame/audio/nl_flyball.cpp
Normal file
@ -0,0 +1,190 @@
|
||||
// license:CC0
|
||||
// copyright-holders:Ryan Holtz, Ivan Vangelista
|
||||
//
|
||||
// Netlist for Atari's Flyball
|
||||
//
|
||||
// Derived from the schematics in the manual.
|
||||
//
|
||||
// Known problems/issues:
|
||||
// * None.
|
||||
//
|
||||
|
||||
#include "netlist/devices/net_lib.h"
|
||||
|
||||
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()
|
||||
|
||||
NETLIST_START(flyball)
|
||||
|
||||
SOLVER(Solver, 48000)
|
||||
ANALOG_INPUT(V5, 5)
|
||||
ANALOG_INPUT(V18, 18)
|
||||
ALIAS(VCC, V5)
|
||||
CLOCK(H256, 15750.0)
|
||||
CLOCK(V128, 61.5234375)
|
||||
NET_C(VCC, H256.VCC, V128.VCC)
|
||||
NET_C(GND, H256.GND, V128.GND)
|
||||
|
||||
LOCAL_SOURCE(NE556_DIP)
|
||||
|
||||
TTL_INPUT(BAT_SOUND, 1)
|
||||
TTL_INPUT(FOOTSTEP, 1)
|
||||
TTL_INPUT(CROWD_SL, 1)
|
||||
TTL_INPUT(CROWD_ON, 1)
|
||||
TTL_INPUT(CROWD_VL, 1)
|
||||
NET_C(VCC, BAT_SOUND.VCC, FOOTSTEP.VCC, CROWD_SL.VCC, CROWD_ON.VCC, CROWD_VL.VCC)
|
||||
NET_C(GND, BAT_SOUND.GND, FOOTSTEP.GND, CROWD_SL.GND, CROWD_ON.GND, CROWD_VL.GND)
|
||||
|
||||
RES(R43, RES_K(68)) // RES., CARBON, 5%, 1/4W, 68K
|
||||
RES(R73, RES_K(1)) // RES., CARBON, 5%, 1/4W, 1K
|
||||
RES(R74, RES_K(1)) // RES., CARBON, 5%, 1/4W, 1K
|
||||
POT(R75, RES_K(50)) // TRIMPOT, 50K
|
||||
RES(R76, RES_K(100)) // RES., CARBON, 5%, 1/4W, 100K
|
||||
RES(R77, 820) // RES., CARBON, 5%, 1/4W, 820
|
||||
RES(R78, RES_K(100)) // RES., CARBON, 5%, 1/4W, 100K
|
||||
RES(R79, RES_K(820)) // RES., CARBON, 5%, 1/4W, 820K
|
||||
RES(R80, RES_K(330)) // RES., CARBON, 5%, 1/4W, 330 // (330 on parts list, but 330K on schematic, 330 does not work in the netlist)
|
||||
RES(R87, RES_K(1)) // RES., CARBON, 5%, 1/4W, 1K
|
||||
RES(R88, RES_K(3.3)) // RES., CARBON, 5%, 1/4W, 3.3K
|
||||
RES(R89, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
RES(R90, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
RES(R91, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
RES(R92, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
POT(R95, RES_K(10)) // TRIMPOT, 10K
|
||||
RES(R96, RES_K(47)) // RES., CARBON, 5%, 1/4W, 47K
|
||||
RES(R97, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
RES(R98, RES_K(10)) // RES., CARBON, 5%, 1/4W, 10K
|
||||
RES(R99, RES_K(33)) // RES., CARBON, 5%, 1/4W, 33K
|
||||
|
||||
CAP(C34, CAP_U(0.0047)) // CAP., MYLAR, .0047uf
|
||||
CAP(C44, CAP_U(0.0047)) // CAP., MYLAR, .0047uf
|
||||
CAP(C45, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
CAP(C46, CAP_U(0.015)) // CAP., CERAMIC DISC., 0.015 uf, 25V
|
||||
CAP(C47, CAP_U(0.015)) // CAP., CERAMIC DISC., 0.015 uf, 25V
|
||||
CAP(C48, CAP_U(10)) // CAP., ELECTROLYTIC, 10 uf, 25V
|
||||
CAP(C49, CAP_U(100)) // CAP., ELECTROLYTIC, 100 uf, 25V
|
||||
CAP(C51, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
CAP(C52, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
CAP(C53, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
CAP(C79, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
CAP(C80, CAP_U(0.1)) // CAP., CERAMIC DISC., 0.1 uf, 25V
|
||||
|
||||
TTL_7486_DIP(IC_E7)
|
||||
TTL_74164_DIP(IC_B7)
|
||||
TTL_74164_DIP(IC_C7)
|
||||
TTL_7474_DIP(IC_D7)
|
||||
NET_C(VCC, IC_E7.14, IC_B7.14, IC_C7.14, IC_D7.14, IC_E7.13, IC_B7.9, IC_B7.2, IC_C7.9, IC_C7.2)
|
||||
NET_C(GND, IC_E7.7, IC_B7.7, IC_C7.7, IC_D7.7, IC_D7.2, IC_E7.4, IC_E7.5)
|
||||
|
||||
SUBMODEL(NE556_DIP, IC_E8)
|
||||
NET_C(VCC, IC_E8.14)
|
||||
NET_C(GND, IC_E8.7)
|
||||
|
||||
MC3340_DIP(IC_A8)
|
||||
MC3340_DIP(IC_C8)
|
||||
NET_C(V18, IC_A8.8, IC_C8.8)
|
||||
NET_C(GND, IC_A8.3, IC_C8.3)
|
||||
|
||||
UA741_DIP8(IC_D8)
|
||||
NET_C(V18, IC_D8.7)
|
||||
NET_C(GND, IC_D8.4)
|
||||
|
||||
// Random Noise Generator
|
||||
NET_C(H256.Q, IC_B7.8, IC_C7.8, IC_D7.11, IC_D7.4)
|
||||
NET_C(VCC, IC_D7.13, IC_D7.1)
|
||||
NET_C(IC_B7.13, IC_C7.1)
|
||||
NET_C(IC_C7.13, IC_D7.12)
|
||||
NET_C(IC_D7.9, IC_E7.9)
|
||||
NET_C(IC_B7.5, IC_E7.10)
|
||||
NET_C(IC_E7.8, IC_E7.12)
|
||||
NET_C(IC_E7.11, IC_B7.1)
|
||||
NET_C(IC_D7.5, IC_D7.10)
|
||||
NET_C(V128, IC_D7.3)
|
||||
|
||||
// Band Pass Filter
|
||||
NET_C(IC_D7.8, R78.1)
|
||||
NET_C(R78.2, R77.1, C46.1, C47.1)
|
||||
NET_C(GND, R77.2)
|
||||
NET_C(C46.2, R80.1, IC_D8.6)
|
||||
NET_C(C47.2, R80.2, IC_D8.2)
|
||||
NET_C(V5, IC_D8.3)
|
||||
|
||||
// Bat Sound
|
||||
NET_C(BAT_SOUND.Q, IC_E8.4, IC_E8.10, IC_E7.1)
|
||||
NET_C(V5, IC_E7.2, R73.1, R74.1)
|
||||
NET_C(R74.2, R75.3, R75.2, IC_E8.1)
|
||||
NET_C(R75.1, R43.1)
|
||||
NET_C(R43.2, IC_E8.2, IC_E8.6, C34.1)
|
||||
NET_C(R73.2, IC_E8.13, R76.1)
|
||||
NET_C(R76.2, IC_E8.12, IC_E8.8, C44.1)
|
||||
NET_C(IC_E8.3, IC_E8.11, C45.1)
|
||||
NET_C(GND, C34.2, C44.2, C45.2)
|
||||
NET_C(IC_E8.5, R91.1)
|
||||
NET_C(IC_E8.9, R90.1)
|
||||
NET_C(IC_E7.3, R89.1)
|
||||
|
||||
// Footstep Envelope Generator
|
||||
NET_C(FOOTSTEP.Q, R88.1)
|
||||
NET_C(IC_D7.8, R79.1)
|
||||
NET_C(R79.2, C79.1)
|
||||
NET_C(C79.2, IC_C8.1)
|
||||
NET_C(R88.2, C48.1, IC_C8.2)
|
||||
NET_C(GND, C48.2)
|
||||
NET_C(IC_C8.7, R92.1)
|
||||
|
||||
// Crowd & Whistle Volume Control
|
||||
NET_C(IC_D8.6, R87.1)
|
||||
NET_C(R87.2, C80.1)
|
||||
NET_C(C80.2, IC_A8.1)
|
||||
NET_C(CROWD_VL.Q, R97.2)
|
||||
NET_C(CROWD_ON.Q, R98.2)
|
||||
NET_C(CROWD_SL.Q, R99.2)
|
||||
NET_C(R97.1, R98.1, R99.1, C49.1, IC_A8.2)
|
||||
NET_C(GND, C49.2)
|
||||
NET_C(IC_A8.7, R96.1)
|
||||
|
||||
// Mixer
|
||||
NET_C(R89.2, R90.2, R91.2, R92.2, R96.2, C51.1, R95.3)
|
||||
NET_C(GND, C51.2, R95.1)
|
||||
NET_C(R95.2, C53.1)
|
||||
NET_C(C53.2, C52.1)
|
||||
NET_C(C52.2, GND)
|
||||
ALIAS(OUTPUT, C53.2)
|
||||
|
||||
// Unconnected pins
|
||||
HINT(IC_A8.6, NC)
|
||||
HINT(IC_C8.6, NC)
|
||||
HINT(IC_B7.2, NC)
|
||||
HINT(IC_B7.9, NC)
|
||||
HINT(IC_B7.3, NC)
|
||||
HINT(IC_B7.4, NC)
|
||||
HINT(IC_B7.6, NC)
|
||||
HINT(IC_B7.10, NC)
|
||||
HINT(IC_B7.11, NC)
|
||||
HINT(IC_B7.12, NC)
|
||||
HINT(IC_C7.3, NC)
|
||||
HINT(IC_C7.4, NC)
|
||||
HINT(IC_C7.5, NC)
|
||||
HINT(IC_C7.6, NC)
|
||||
HINT(IC_C7.10, NC)
|
||||
HINT(IC_C7.11, NC)
|
||||
HINT(IC_C7.12, NC)
|
||||
HINT(IC_D7.6, NC)
|
||||
HINT(IC_E7.6, NC)
|
||||
NETLIST_END()
|
10
src/mame/audio/nl_flyball.h
Normal file
10
src/mame/audio/nl_flyball.h
Normal file
@ -0,0 +1,10 @@
|
||||
// license:CC0
|
||||
// copyright-holders:Ivan Vangelista, Ryan Holtz
|
||||
#ifndef MAME_AUDIO_NL_FLYBALL_H
|
||||
#define MAME_AUDIO_NL_FLYBALL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
NETLIST_EXTERNAL(flyball)
|
||||
|
||||
#endif // MAME_AUDIO_NL_FLYBALL_H
|
@ -1,5 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Stefan Jokisch
|
||||
// copyright-holders:Stefan Jokisch, Ivan Vangelista, Ryan Holtz
|
||||
/***************************************************************************
|
||||
|
||||
Atari Flyball Driver
|
||||
@ -11,9 +11,7 @@ Etched in copper on top of board:
|
||||
MADE IN USA
|
||||
PAT NO 3793483
|
||||
|
||||
|
||||
TODO:
|
||||
- discrete sound
|
||||
- accurate video timing
|
||||
|
||||
***************************************************************************/
|
||||
@ -23,7 +21,12 @@ TODO:
|
||||
#include "machine/74259.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "tilemap.h"
|
||||
#include "machine/netlist.h"
|
||||
|
||||
#include "netlist/nl_setup.h"
|
||||
#include "audio/nl_flyball.h"
|
||||
|
||||
static constexpr XTAL MASTER_CLOCK = 12.096_MHz_XTAL;
|
||||
static constexpr XTAL PIXEL_CLOCK = MASTER_CLOCK / 2;
|
||||
@ -39,6 +42,11 @@ public:
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
m_outlatch(*this, "outlatch"),
|
||||
m_bat_sound(*this, "sound_nl:bat_sound"),
|
||||
m_footstep(*this, "sound_nl:footstep"),
|
||||
m_crowd_sl(*this, "sound_nl:crowd_sl"),
|
||||
m_crowd_on(*this, "sound_nl:crowd_on"),
|
||||
m_crowd_vl(*this, "sound_nl:crowd_vl"),
|
||||
m_playfield_ram(*this, "playfield_ram"),
|
||||
m_lamp(*this, "lamp0")
|
||||
{ }
|
||||
@ -87,6 +95,11 @@ private:
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<f9334_device> m_outlatch;
|
||||
required_device<netlist_mame_logic_input_device> m_bat_sound;
|
||||
required_device<netlist_mame_logic_input_device> m_footstep;
|
||||
required_device<netlist_mame_logic_input_device> m_crowd_sl;
|
||||
required_device<netlist_mame_logic_input_device> m_crowd_on;
|
||||
required_device<netlist_mame_logic_input_device> m_crowd_vl;
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_playfield_ram;
|
||||
@ -317,7 +330,7 @@ void flyball_state::flyball_map(address_map &map)
|
||||
map(0x0900, 0x0900).w(FUNC(flyball_state::potmask_w));
|
||||
map(0x0a00, 0x0a07).w(FUNC(flyball_state::misc_w));
|
||||
map(0x0b00, 0x0b00).r(FUNC(flyball_state::input_r));
|
||||
map(0x0d00, 0x0eff).writeonly().share("playfield_ram");
|
||||
map(0x0d00, 0x0eff).writeonly().share("playfield_ram").nopr();
|
||||
map(0x1000, 0x1fff).rom().region("maincpu", 0);
|
||||
}
|
||||
|
||||
@ -358,6 +371,12 @@ static INPUT_PORTS_START( flyball )
|
||||
PORT_START("IN1") /* IN5 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0xFE, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("BAT_VOL")
|
||||
PORT_ADJUSTER( 50, "Bat Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "bat_volume")
|
||||
|
||||
PORT_START("MAIN_VOL")
|
||||
PORT_ADJUSTER( 50, "Main Volume" ) NETLIST_ANALOG_PORT_CHANGED("sound_nl", "main_volume")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -467,11 +486,11 @@ void flyball_state::flyball(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &flyball_state::flyball_map);
|
||||
|
||||
F9334(config, m_outlatch); // F7
|
||||
m_outlatch->q_out_cb<2>().set_nop(); // bat hit
|
||||
m_outlatch->q_out_cb<3>().set_nop(); // crowd soft-loud
|
||||
m_outlatch->q_out_cb<4>().set_nop(); // crowd off-on
|
||||
m_outlatch->q_out_cb<5>().set_nop(); // footstep off-on
|
||||
m_outlatch->q_out_cb<6>().set_nop(); // crowd very loud
|
||||
m_outlatch->q_out_cb<2>().set(m_bat_sound, FUNC(netlist_mame_logic_input_device::write));
|
||||
m_outlatch->q_out_cb<3>().set(m_crowd_sl, FUNC(netlist_mame_logic_input_device::write));
|
||||
m_outlatch->q_out_cb<4>().set(m_crowd_on, FUNC(netlist_mame_logic_input_device::write));
|
||||
m_outlatch->q_out_cb<5>().set(m_footstep, FUNC(netlist_mame_logic_input_device::write));
|
||||
m_outlatch->q_out_cb<6>().set(m_crowd_vl, FUNC(netlist_mame_logic_input_device::write));
|
||||
m_outlatch->q_out_cb<7>().set(FUNC(flyball_state::lamp_w)); // 1 player lamp
|
||||
|
||||
/* video hardware */
|
||||
@ -487,6 +506,21 @@ void flyball_state::flyball(machine_config &config)
|
||||
PALETTE(config, m_palette, FUNC(flyball_state::flyball_palette), 4);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
NETLIST_SOUND(config, "sound_nl", 48000)
|
||||
.set_source(NETLIST_NAME(flyball))
|
||||
.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:bat_sound", "BAT_SOUND.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:footstep", "FOOTSTEP.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:crowd_sl", "CROWD_SL.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:crowd_on", "CROWD_ON.IN", 0);
|
||||
NETLIST_LOGIC_INPUT(config, "sound_nl:crowd_vl", "CROWD_VL.IN", 0);
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:bat_volume", "R75.DIAL");
|
||||
NETLIST_ANALOG_INPUT(config, "sound_nl:main_volume", "R95.DIAL");
|
||||
|
||||
NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUTPUT").set_mult_offset(32767.0 / 0.13, -(32767.0 / 0.13) * 0.78);
|
||||
}
|
||||
|
||||
|
||||
@ -547,5 +581,5 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1976, flyball, 0, flyball, flyball, flyball_state, empty_init, 0, "Atari", "Flyball (rev 2)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1976, flyball1, flyball, flyball, flyball, flyball_state, empty_init, 0, "Atari", "Flyball (rev 1)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1976, flyball, 0, flyball, flyball, flyball_state, empty_init, 0, "Atari", "Flyball (rev 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1976, flyball1, flyball, flyball, flyball, flyball_state, empty_init, 0, "Atari", "Flyball (rev 1)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -58,6 +58,9 @@ starfir2 // (c) 1979 Exidy
|
||||
starfire // Exidy [1979?]
|
||||
starfirea // Exidy [1979?]
|
||||
|
||||
@source:flyball.cpp
|
||||
flyball
|
||||
|
||||
@source:galaxian.cpp
|
||||
600 // GX353 (c) 1981 Konami
|
||||
amidar // GX337 (c) 1982 Konami
|
||||
|
Loading…
Reference in New Issue
Block a user