1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /*************************************************************************
4 
5     Gotcha
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_GOTCHA_H
9 #define MAME_INCLUDES_GOTCHA_H
10 
11 #pragma once
12 
13 #include "sound/okim6295.h"
14 #include "video/decospr.h"
15 #include "tilemap.h"
16 
17 class gotcha_state : public driver_device
18 {
19 public:
gotcha_state(const machine_config & mconfig,device_type type,const char * tag)20 	gotcha_state(const machine_config &mconfig, device_type type, const char *tag) :
21 		driver_device(mconfig, type, tag),
22 		m_fgvideoram(*this, "fgvideoram"),
23 		m_bgvideoram(*this, "bgvideoram"),
24 		m_spriteram(*this, "spriteram"),
25 		m_sprgen(*this, "spritegen"),
26 		m_audiocpu(*this, "audiocpu"),
27 		m_maincpu(*this, "maincpu"),
28 		m_oki(*this, "oki"),
29 		m_gfxdecode(*this, "gfxdecode"),
30 		m_lamp_r(*this, "lamp_p%u_r", 1U),
31 		m_lamp_g(*this, "lamp_p%u_g", 1U),
32 		m_lamp_b(*this, "lamp_p%u_b", 1U),
33 		m_lamp_s(*this, "lamp_p%u_s", 1U)
34 	{
35 	}
36 
37 	void gotcha(machine_config &config);
38 
39 protected:
40 	virtual void machine_start() override;
41 	virtual void machine_reset() override;
42 	virtual void video_start() override;
43 
44 private:
45 	void lamps_w(uint16_t data);
46 	void fgvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
47 	void bgvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
48 	void gfxbank_select_w(uint8_t data);
49 	void gfxbank_w(uint8_t data);
50 	void scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
51 	void oki_bank_w(uint8_t data);
52 	TILEMAP_MAPPER_MEMBER(tilemap_scan);
53 	TILE_GET_INFO_MEMBER(fg_get_tile_info);
54 	TILE_GET_INFO_MEMBER(bg_get_tile_info);
55 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
56 	inline void get_tile_info( tile_data &tileinfo, int tile_index ,uint16_t *vram, int color_offs);
57 	void main_map(address_map &map);
58 	void sound_map(address_map &map);
59 
60 	/* memory pointers */
61 	required_shared_ptr<uint16_t> m_fgvideoram;
62 	required_shared_ptr<uint16_t> m_bgvideoram;
63 	required_shared_ptr<uint16_t> m_spriteram;
64 	optional_device<decospr_device> m_sprgen;
65 
66 	/* video-related */
67 	tilemap_t *m_bg_tilemap;
68 	tilemap_t *m_fg_tilemap;
69 	uint8_t m_banksel;
70 	uint8_t m_gfxbank[4];
71 	uint16_t m_scroll[4];
72 
73 	/* devices */
74 	required_device<cpu_device> m_audiocpu;
75 	required_device<cpu_device> m_maincpu;
76 	required_device<okim6295_device> m_oki;
77 	required_device<gfxdecode_device> m_gfxdecode;
78 
79 	output_finder<3> m_lamp_r;
80 	output_finder<3> m_lamp_g;
81 	output_finder<3> m_lamp_b;
82 	output_finder<3> m_lamp_s;
83 };
84 
85 #endif // MAME_INCLUDES_GOTCHA_H
86