1 // license:BSD-3-Clause
2 // copyright-holders:Mike Coates
3 #ifndef MAME_INCLUDES_CIRCUS_H
4 #define MAME_INCLUDES_CIRCUS_H
5 
6 #pragma once
7 
8 #include "machine/timer.h"
9 #include "sound/discrete.h"
10 #include "sound/samples.h"
11 #include "emupal.h"
12 #include "tilemap.h"
13 
14 class circus_state : public driver_device
15 {
16 public:
circus_state(const machine_config & mconfig,device_type type,const char * tag)17 	circus_state(const machine_config &mconfig, device_type type, const char *tag) :
18 		driver_device(mconfig, type, tag),
19 		m_videoram(*this, "videoram"),
20 		m_maincpu(*this, "maincpu"),
21 		m_samples(*this, "samples"),
22 		m_discrete(*this, "discrete"),
23 		m_gfxdecode(*this, "gfxdecode"),
24 		m_palette(*this, "palette")
25 	{ }
26 
27 	void robotbwl(machine_config &config);
28 	void ripcord(machine_config &config);
29 	void crash(machine_config &config);
30 	void circus(machine_config &config);
31 
32 	void init_ripcord();
33 	void init_circus();
34 	void init_robotbwl();
35 	void init_crash();
36 
37 protected:
38 	virtual void machine_start() override;
39 	virtual void machine_reset() override;
40 	virtual void video_start() override;
41 
42 private:
43 	/* memory pointers */
44 	required_shared_ptr<uint8_t> m_videoram;
45 
46 	/* video-related */
47 	tilemap_t  *m_bg_tilemap;
48 	int m_clown_x;
49 	int m_clown_y;
50 	int m_clown_z;
51 
52 	/* devices */
53 	required_device<cpu_device> m_maincpu;
54 	required_device<samples_device> m_samples;
55 	required_device<discrete_sound_device> m_discrete;
56 	required_device<gfxdecode_device> m_gfxdecode;
57 	required_device<palette_device> m_palette;
58 
59 	/* game id */
60 	int m_game_id;
61 	uint8_t circus_paddle_r();
62 	void circus_videoram_w(offs_t offset, uint8_t data);
63 	void circus_clown_x_w(uint8_t data);
64 	void circus_clown_y_w(uint8_t data);
65 	void circus_clown_z_w(uint8_t data);
66 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
67 	uint32_t screen_update_circus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
68 	uint32_t screen_update_robotbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
69 	uint32_t screen_update_crash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
70 	uint32_t screen_update_ripcord(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
71 	TIMER_DEVICE_CALLBACK_MEMBER(crash_scanline);
72 	void draw_line( bitmap_ind16 &bitmap, const rectangle &cliprect, int x1, int y1, int x2, int y2, int dotted );
73 	void draw_sprite_collision( bitmap_ind16 &bitmap, const rectangle &cliprect );
74 	void circus_draw_fg( bitmap_ind16 &bitmap, const rectangle &cliprect );
75 	void robotbwl_draw_box( bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y );
76 	void robotbwl_draw_scoreboard( bitmap_ind16 &bitmap, const rectangle &cliprect );
77 	void robotbwl_draw_bowling_alley( bitmap_ind16 &bitmap, const rectangle &cliprect );
78 	void robotbwl_draw_ball( bitmap_ind16 &bitmap, const rectangle &cliprect );
79 	void crash_draw_car( bitmap_ind16 &bitmap, const rectangle &cliprect );
80 	void circus_map(address_map &map);
81 };
82 /*----------- defined in audio/circus.c -----------*/
83 
84 DISCRETE_SOUND_EXTERN( circus_discrete );
85 DISCRETE_SOUND_EXTERN( robotbwl_discrete );
86 DISCRETE_SOUND_EXTERN( crash_discrete );
87 extern const char *const circus_sample_names[];
88 extern const char *const crash_sample_names[];
89 extern const char *const ripcord_sample_names[];
90 extern const char *const robotbwl_sample_names[];
91 
92 #endif // MAME_INCLUDES_CIRCUS_H
93