1 // license:BSD-3-Clause
2 // copyright-holders:Pierpaolo Prazzoli, David Haywood
3 /*************************************************************************
4 
5     Cross Pang
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_CROSPANG_H
9 #define MAME_INCLUDES_CROSPANG_H
10 
11 #pragma once
12 
13 #include "machine/gen_latch.h"
14 #include "video/decospr.h"
15 #include "tilemap.h"
16 
17 class crospang_state : public driver_device
18 {
19 public:
crospang_state(const machine_config & mconfig,device_type type,const char * tag)20 	crospang_state(const machine_config &mconfig, device_type type, const char *tag)
21 		: driver_device(mconfig, type, tag)
22 		, m_fg_videoram(*this, "fg_videoram")
23 		, m_bg_videoram(*this, "bg_videoram")
24 		, m_spriteram(*this, "spriteram")
25 		, m_maincpu(*this, "maincpu")
26 		, m_sprgen(*this, "spritegen")
27 		, m_gfxdecode(*this, "gfxdecode")
28 		, m_soundlatch(*this, "soundlatch")
29 	{ }
30 
31 	void crospang(machine_config &config);
32 	void bestri(machine_config &config);
33 	void bestria(machine_config &config);
34 	void pitapat(machine_config &config);
35 
36 protected:
37 	virtual void machine_start() override;
38 	virtual void machine_reset() override;
39 	virtual void video_start() override;
40 
41 private:
42 	/* memory pointers */
43 	required_shared_ptr<u16> m_fg_videoram;
44 	required_shared_ptr<u16> m_bg_videoram;
45 	required_shared_ptr<u16> m_spriteram;
46 
47 	/* video-related */
48 	tilemap_t   *m_bg_layer;
49 	tilemap_t   *m_fg_layer;
50 	u8          m_tilebank[4];
51 	u8          m_tilebankselect;
52 
53 	/* devices */
54 	required_device<cpu_device> m_maincpu;
55 	required_device<decospr_device> m_sprgen;
56 	required_device<gfxdecode_device> m_gfxdecode;
57 	required_device<generic_latch_8_device> m_soundlatch;
58 
59 	void tilebank_data_w(u16 data);
60 	void tilebank_select_w(u16 data);
61 	void bestri_bg_scrolly_w(u16 data);
62 	void bestri_fg_scrolly_w(u16 data);
63 	void bestri_fg_scrollx_w(u16 data);
64 	void bestri_bg_scrollx_w(u16 data);
65 	void fg_scrolly_w(u16 data);
66 	void bg_scrolly_w(u16 data);
67 	void fg_scrollx_w(u16 data);
68 	void bg_scrollx_w(u16 data);
69 	void fg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
70 	void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
71 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
72 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
73 	u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
74 	void base_map(address_map &map);
75 	void bestri_map(address_map &map);
76 	void bestria_map(address_map &map);
77 	void crospang_map(address_map &map);
78 	void pitapat_map(address_map &map);
79 	void sound_io_map(address_map &map);
80 	void sound_map(address_map &map);
81 };
82 
83 #endif // MAME_INCLUDES_CROSPANG_H
84