1 // license:BSD-3-Clause
2 // copyright-holders:Ernesto Corvi
3 /***************************************************************************
4 
5     Kyugo hardware games
6 
7 ***************************************************************************/
8 #ifndef MAME_INCLUDES_KYUGO_H
9 #define MAME_INCLUDES_KYUGO_H
10 
11 #pragma once
12 
13 #include "emupal.h"
14 #include "tilemap.h"
15 
16 class kyugo_state : public driver_device
17 {
18 public:
kyugo_state(const machine_config & mconfig,device_type type,const char * tag)19 	kyugo_state(const machine_config &mconfig, device_type type, const char *tag) :
20 		driver_device(mconfig, type, tag),
21 		m_fgvideoram(*this, "fgvideoram"),
22 		m_bgvideoram(*this, "bgvideoram"),
23 		m_bgattribram(*this, "bgattribram"),
24 		m_spriteram(*this, "spriteram_%u", 1U),
25 		m_shared_ram(*this, "shared_ram"),
26 		m_maincpu(*this, "maincpu"),
27 		m_subcpu(*this, "sub"),
28 		m_gfxdecode(*this, "gfxdecode"),
29 		m_palette(*this, "palette")
30 	{ }
31 
32 	void kyugo_base(machine_config &config);
33 	void repulse(machine_config &config);
34 	void flashgala(machine_config &config);
35 	void srdmissn(machine_config &config);
36 	void legend(machine_config &config);
37 	void gyrodine(machine_config &config);
38 
39 	void init_srdmissn();
40 
41 protected:
42 	virtual void machine_start() override;
43 	virtual void machine_reset() override;
44 	virtual void video_start() override;
45 
46 private:
47 	void nmi_mask_w(int state);
48 	void coin_counter_w(offs_t offset, uint8_t data);
49 	void fgvideoram_w(offs_t offset, uint8_t data);
50 	void bgvideoram_w(offs_t offset, uint8_t data);
51 	void bgattribram_w(offs_t offset, uint8_t data);
52 	uint8_t spriteram_2_r(offs_t offset);
53 	void scroll_x_lo_w(uint8_t data);
54 	void gfxctrl_w(uint8_t data);
55 	void scroll_y_w(uint8_t data);
56 	void flipscreen_w(int state);
57 
58 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
59 	INTERRUPT_GEN_MEMBER(vblank_irq);
60 
61 	void flashgala_sub_map(address_map &map);
62 	void flashgala_sub_portmap(address_map &map);
63 	void gyrodine_main_map(address_map &map);
64 	void gyrodine_sub_map(address_map &map);
65 	void gyrodine_sub_portmap(address_map &map);
66 	void kyugo_main_map(address_map &map);
67 	void kyugo_main_portmap(address_map &map);
68 	void legend_sub_map(address_map &map);
69 	void repulse_sub_map(address_map &map);
70 	void repulse_sub_portmap(address_map &map);
71 	void srdmissn_sub_map(address_map &map);
72 	void srdmissn_sub_portmap(address_map &map);
73 
74 	// memory pointers
75 	required_shared_ptr<uint8_t> m_fgvideoram;
76 	required_shared_ptr<uint8_t> m_bgvideoram;
77 	required_shared_ptr<uint8_t> m_bgattribram;
78 	required_shared_ptr_array<uint8_t, 2> m_spriteram;
79 	required_shared_ptr<uint8_t> m_shared_ram;
80 
81 	uint8_t m_nmi_mask;
82 
83 	// video-related
84 	tilemap_t     *m_bg_tilemap;
85 	tilemap_t     *m_fg_tilemap;
86 	uint8_t       m_scroll_x_lo;
87 	uint8_t       m_scroll_x_hi;
88 	uint8_t       m_scroll_y;
89 	uint8_t       m_bgpalbank;
90 	uint8_t       m_fgcolor;
91 	const uint8_t *m_color_codes;
92 
93 	// devices
94 	required_device<cpu_device> m_maincpu;
95 	required_device<cpu_device> m_subcpu;
96 	required_device<gfxdecode_device> m_gfxdecode;
97 	required_device<palette_device> m_palette;
98 
99 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
100 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
101 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
102 };
103 
104 #endif // MAME_INCLUDES_KYUGO_H
105