-flyball: Added netlist sound. [Ryan Holtz, Ivan Vangelista]

This commit is contained in:
Ryan Holtz 2020-08-11 05:36:30 +02:00
parent ffdd676ece
commit 461b8338a2
7 changed files with 2175 additions and 11 deletions

View File

@ -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",

View File

@ -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

View 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()

View 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

View File

@ -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 )

View File

@ -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