1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 
4 #ifndef MAME_INCLUDES_XEVIOUS
5 #define MAME_INCLUDES_XEVIOUS
6 
7 #pragma once
8 
9 #include "machine/timer.h"
10 #include "tilemap.h"
11 
12 class xevious_state : public galaga_state
13 {
14 public:
xevious_state(const machine_config & mconfig,device_type type,const char * tag)15 	xevious_state(const machine_config &mconfig, device_type type, const char *tag) :
16 		galaga_state(mconfig, type, tag),
17 		m_xevious_sr1(*this, "xevious_sr1"),
18 		m_xevious_sr2(*this, "xevious_sr2"),
19 		m_xevious_sr3(*this, "xevious_sr3"),
20 		m_xevious_fg_colorram(*this, "fg_colorram"),
21 		m_xevious_bg_colorram(*this, "bg_colorram"),
22 		m_xevious_fg_videoram(*this, "fg_videoram"),
23 		m_xevious_bg_videoram(*this, "bg_videoram"),
24 		m_samples(*this, "samples"),
25 		m_subcpu3(*this, "sub3")
26 	{ }
27 
28 	void xevious(machine_config &config);
29 
30 	void init_xevious();
31 	void init_xevios();
32 
33 protected:
34 	required_shared_ptr<uint8_t> m_xevious_sr1;
35 	required_shared_ptr<uint8_t> m_xevious_sr2;
36 	required_shared_ptr<uint8_t> m_xevious_sr3;
37 	required_shared_ptr<uint8_t> m_xevious_fg_colorram;
38 	required_shared_ptr<uint8_t> m_xevious_bg_colorram;
39 	required_shared_ptr<uint8_t> m_xevious_fg_videoram;
40 	required_shared_ptr<uint8_t> m_xevious_bg_videoram;
41 	optional_device<samples_device> m_samples;
42 
43 	int32_t m_xevious_bs[2];
44 
45 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
46 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
47 	DECLARE_VIDEO_START(xevious);
48 	void xevious_palette(palette_device &palette) const;
49 	DECLARE_MACHINE_RESET(xevios);
50 	uint32_t screen_update_xevious(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
51 	void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
52 	void xevious_fg_videoram_w(offs_t offset, uint8_t data);
53 	void xevious_fg_colorram_w(offs_t offset, uint8_t data);
54 	void xevious_bg_videoram_w(offs_t offset, uint8_t data);
55 	void xevious_bg_colorram_w(offs_t offset, uint8_t data);
56 	void xevious_vh_latch_w(offs_t offset, uint8_t data);
57 	void xevious_bs_w(offs_t offset, uint8_t data);
58 	uint8_t xevious_bb_r(offs_t offset);
59 
60 	optional_device<cpu_device> m_subcpu3;
61 
62 	void xevious_map(address_map &map);
63 };
64 
65 class battles_state : public xevious_state
66 {
67 public:
battles_state(const machine_config & mconfig,device_type type,const char * tag)68 	battles_state(const machine_config &mconfig, device_type type, const char *tag)
69 		: xevious_state(mconfig, type, tag),
70 		m_nmi_timer(*this, "nmi")
71 	{
72 	}
73 
74 	void driver_init() override;
75 
76 	void battles(machine_config &config);
77 
78 protected:
79 	void machine_reset() override;
80 
81 	DECLARE_WRITE_LINE_MEMBER(interrupt_4);
82 	TIMER_DEVICE_CALLBACK_MEMBER(nmi_generate);
83 
84 	void battles_mem4(address_map &map);
85 
86 	// Custom I/O
87 	uint8_t customio0_r();
88 	uint8_t customio_data0_r(offs_t offset);
89 	uint8_t customio3_r();
90 	uint8_t customio_data3_r(offs_t offset);
91 	uint8_t input_port_r(offs_t offset);
92 
93 	void customio0_w(uint8_t data);
94 	void customio_data0_w(offs_t offset, uint8_t data);
95 	void customio3_w(uint8_t data);
96 	void customio_data3_w(offs_t offset, uint8_t data);
97 	void cpu4_coin_w(uint8_t data);
98 	void noise_sound_w(offs_t offset, uint8_t data);
99 
100 	required_device<timer_device> m_nmi_timer;
101 
102 	uint8_t m_customio[16];
103 	char m_customio_command;
104 	char m_customio_prev_command;
105 	char m_customio_command_count;
106 	char m_customio_data;
107 	char m_sound_played;
108 };
109 
110 #endif // MAME_INCLUDES_XEVIOUS
111