1 // license:BSD-3-Clause
2 // copyright-holders:Brad Oliver, Bernd Wiebelt, Allard van der Bas
3 /*************************************************************************
4 
5     Atari Asteroids hardware
6 
7 *************************************************************************/
8 
9 #include "sound/discrete.h"
10 #include "video/avgdvg.h"
11 #include "machine/74153.h"
12 #include "machine/er2055.h"
13 
14 class asteroid_state : public driver_device
15 {
16 public:
asteroid_state(const machine_config & mconfig,device_type type,const char * tag)17 	asteroid_state(const machine_config &mconfig, device_type type, const char *tag) :
18 		driver_device(mconfig, type, tag),
19 		m_maincpu(*this, "maincpu"),
20 		m_dvg(*this, "dvg"),
21 		m_earom(*this, "earom"),
22 		m_discrete(*this, "discrete"),
23 		m_dsw1(*this, "DSW1"),
24 		m_dsw_sel(*this, "dsw_sel"),
25 		m_cocktail(*this, "COCKTAIL"),
26 		m_ram1(*this, "ram1"),
27 		m_ram2(*this, "ram2")
28 	{ }
29 
30 	/* devices */
31 	required_device<cpu_device> m_maincpu;
32 	required_device<dvg_device> m_dvg;
33 	optional_device<er2055_device> m_earom;
34 	required_device<discrete_device> m_discrete;
35 	required_ioport m_dsw1;
36 	required_device<ttl153_device> m_dsw_sel;
37 	optional_ioport m_cocktail;
38 
39 	/* memory banks */
40 	optional_memory_bank m_ram1;
41 	optional_memory_bank m_ram2;
42 
43 	DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w);
44 	DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w);
45 	DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w);
46 	uint8_t asteroid_IN0_r(offs_t offset);
47 	uint8_t asterock_IN0_r(offs_t offset);
48 	uint8_t asteroid_IN1_r(offs_t offset);
49 	uint8_t asteroid_DSW1_r(offs_t offset);
50 	void asteroid_explode_w(uint8_t data);
51 	void asteroid_thump_w(uint8_t data);
52 	void asteroid_noise_reset_w(uint8_t data);
53 	void llander_snd_reset_w(uint8_t data);
54 	void llander_sounds_w(uint8_t data);
55 
56 	uint8_t earom_read();
57 	void earom_write(offs_t offset, uint8_t data);
58 	void earom_control_w(uint8_t data);
59 
60 	DECLARE_READ_LINE_MEMBER(clock_r);
61 
62 	INTERRUPT_GEN_MEMBER(asteroid_interrupt);
63 	INTERRUPT_GEN_MEMBER(asterock_interrupt);
64 	INTERRUPT_GEN_MEMBER(llander_interrupt);
65 
66 	DECLARE_WRITE_LINE_MEMBER(cocktail_inv_w);
67 
68 	void init_asterock();
69 	void init_asteroidb();
70 
71 	virtual void machine_start() override;
72 	virtual void machine_reset() override;
73 	void asteroid_base(machine_config &config);
74 	void asterock(machine_config &config);
75 	void asteroid(machine_config &config);
76 	void llander(machine_config &config);
77 	void astdelux(machine_config &config);
78 	void asteroid_sound(machine_config &config);
79 	void astdelux_sound(machine_config &config);
80 	void llander_sound(machine_config &config);
81 	void astdelux_map(address_map &map);
82 	void asteroid_map(address_map &map);
83 	void llander_map(address_map &map);
84 };
85