1 // license:BSD-3-Clause
2 // copyright-holders:Frank Palazzolo, Ryan Holtz
3 #ifndef MAME_INCLUDES_STARCRUS_H
4 #define MAME_INCLUDES_STARCRUS_H
5 
6 #pragma once
7 
8 #include "emupal.h"
9 #include "machine/netlist.h"
10 #include "netlist/nl_setup.h"
11 #include "audio/nl_starcrus.h"
12 
13 class starcrus_state : public driver_device
14 {
15 public:
starcrus_state(const machine_config & mconfig,device_type type,const char * tag)16 	starcrus_state(const machine_config &mconfig, device_type type, const char *tag) :
17 		driver_device(mconfig, type, tag) ,
18 		m_maincpu(*this, "maincpu"),
19 		m_gfxdecode(*this, "gfxdecode"),
20 		m_palette(*this, "palette"),
21 		m_led(*this, "led2"),
22 		m_explode(*this, "sound_nl:explode%u", 1U),
23 		m_launch(*this, "sound_nl:launch%u", 1U),
24 		m_engine(*this, "sound_nl:engine%u", 1U)
25 	{ }
26 
27 	void starcrus(machine_config &config);
28 
29 private:
30 	void s1_x_w(uint8_t data);
31 	void s1_y_w(uint8_t data);
32 	void s2_x_w(uint8_t data);
33 	void s2_y_w(uint8_t data);
34 	void p1_x_w(uint8_t data);
35 	void p1_y_w(uint8_t data);
36 	void p2_x_w(uint8_t data);
37 	void p2_y_w(uint8_t data);
38 	void ship_parm_1_w(uint8_t data);
39 	void ship_parm_2_w(uint8_t data);
40 	void proj_parm_1_w(uint8_t data);
41 	void proj_parm_2_w(uint8_t data);
42 	uint8_t coll_det_r();
43 
44 	virtual void machine_start() override;
45 	virtual void video_start() override;
46 
47 	required_device<cpu_device> m_maincpu;
48 	required_device<gfxdecode_device> m_gfxdecode;
49 	required_device<palette_device> m_palette;
50 
51 	output_finder<> m_led;
52 
53 	std::unique_ptr<bitmap_ind16> m_ship1_vid;
54 	std::unique_ptr<bitmap_ind16> m_ship2_vid;
55 	std::unique_ptr<bitmap_ind16> m_proj1_vid;
56 	std::unique_ptr<bitmap_ind16> m_proj2_vid;
57 
58 	int m_s1_x;
59 	int m_s1_y;
60 	int m_s2_x;
61 	int m_s2_y;
62 	int m_p1_x;
63 	int m_p1_y;
64 	int m_p2_x;
65 	int m_p2_y;
66 
67 	int m_p1_sprite;
68 	int m_p2_sprite;
69 	int m_s1_sprite;
70 	int m_s2_sprite;
71 
72 	int m_collision_reg;
73 
74 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
75 	int collision_check_s1s2();
76 	int collision_check_p1p2();
77 	int collision_check_s1p1p2();
78 	int collision_check_s2p1p2();
79 
80 	void starcrus_io_map(address_map &map);
81 	void starcrus_map(address_map &map);
82 
83 	required_device_array<netlist_mame_logic_input_device, 2> m_explode;
84 	required_device_array<netlist_mame_logic_input_device, 2> m_launch;
85 	required_device_array<netlist_mame_logic_input_device, 2> m_engine;
86 };
87 
88 #endif // MAME_INCLUDES_STARCRUS_H
89