1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria,Chris Hardy, Couriersud
3 /*************************************************************************
4 
5     Circus Charlie
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_CIRCUSC_H
9 #define MAME_INCLUDES_CIRCUSC_H
10 
11 #pragma once
12 
13 #include "sound/dac.h"
14 #include "sound/sn76496.h"
15 #include "sound/discrete.h"
16 #include "emupal.h"
17 #include "tilemap.h"
18 
19 class circusc_state : public driver_device
20 {
21 public:
circusc_state(const machine_config & mconfig,device_type type,const char * tag)22 	circusc_state(const machine_config &mconfig, device_type type, const char *tag) :
23 		driver_device(mconfig, type, tag),
24 		m_scroll(*this, "scroll"),
25 		m_colorram(*this, "colorram"),
26 		m_videoram(*this, "videoram"),
27 		m_spriteram_2(*this, "spriteram_2"),
28 		m_spriteram(*this, "spriteram"),
29 		m_audiocpu(*this, "audiocpu"),
30 		m_sn_1(*this, "sn1"),
31 		m_sn_2(*this, "sn2"),
32 		m_dac(*this, "dac"),
33 		m_discrete(*this, "fltdisc"),
34 		m_maincpu(*this, "maincpu"),
35 		m_gfxdecode(*this, "gfxdecode"),
36 		m_palette(*this, "palette")
37 	{ }
38 
39 	/* memory pointers */
40 	required_shared_ptr<uint8_t> m_scroll;
41 	required_shared_ptr<uint8_t> m_colorram;
42 	required_shared_ptr<uint8_t> m_videoram;
43 	required_shared_ptr<uint8_t> m_spriteram_2;
44 	required_shared_ptr<uint8_t> m_spriteram;
45 
46 	/* video-related */
47 	tilemap_t        *m_bg_tilemap;
48 	bool             m_spritebank;
49 
50 	/* sound-related */
51 	uint8_t          m_sn_latch;
52 
53 	/* devices */
54 	required_device<cpu_device> m_audiocpu;
55 	required_device<sn76496_device> m_sn_1;
56 	required_device<sn76496_device> m_sn_2;
57 	required_device<dac_byte_interface> m_dac;
58 	required_device<discrete_device> m_discrete;
59 
60 	bool             m_irq_mask;
61 
62 	uint8_t circusc_sh_timer_r();
63 	void circusc_sh_irqtrigger_w(uint8_t data);
64 	DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
65 	DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
66 	void circusc_sound_w(offs_t offset, uint8_t data);
67 	DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
68 	void circusc_videoram_w(offs_t offset, uint8_t data);
69 	void circusc_colorram_w(offs_t offset, uint8_t data);
70 	DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
71 	DECLARE_WRITE_LINE_MEMBER(spritebank_w);
72 	void init_circusc();
73 	TILE_GET_INFO_MEMBER(get_tile_info);
74 	virtual void machine_start() override;
75 	virtual void machine_reset() override;
76 	virtual void video_start() override;
77 	void circusc_palette(palette_device &palette) const;
78 	uint32_t screen_update_circusc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
79 	DECLARE_WRITE_LINE_MEMBER(vblank_irq);
80 	void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
81 	required_device<cpu_device> m_maincpu;
82 	required_device<gfxdecode_device> m_gfxdecode;
83 	required_device<palette_device> m_palette;
84 	void circusc(machine_config &config);
85 	void circusc_map(address_map &map);
86 	void sound_map(address_map &map);
87 };
88 
89 #endif // MAME_INCLUDES_CIRCUSC_H
90