1 // license:BSD-3-Clause
2 // copyright-holders:Carlos A. Lozano
3 #ifndef MAME_INCLUDES_CABAL_H
4 #define MAME_INCLUDES_CABAL_H
5 
6 #pragma once
7 
8 #include "audio/seibu.h"
9 #include "sound/msm5205.h"
10 #include "emupal.h"
11 #include "tilemap.h"
12 
13 class cabal_state : public driver_device
14 {
15 public:
cabal_state(const machine_config & mconfig,device_type type,const char * tag)16 	cabal_state(const machine_config &mconfig, device_type type, const char *tag) :
17 		driver_device(mconfig, type, tag),
18 		m_maincpu(*this, "maincpu"),
19 		m_audiocpu(*this, "audiocpu"),
20 		m_seibu_sound(*this, "seibu_sound"),
21 		m_adpcm1(*this, "adpcm1"),
22 		m_adpcm2(*this, "adpcm2"),
23 		m_msm1(*this, "msm1"),
24 		m_msm2(*this, "msm2"),
25 		m_gfxdecode(*this, "gfxdecode"),
26 		m_palette(*this, "palette"),
27 		m_spriteram(*this, "spriteram"),
28 		m_colorram(*this, "colorram"),
29 		m_videoram(*this, "videoram")
30 	{ }
31 
32 	required_device<cpu_device> m_maincpu;
33 	required_device<cpu_device> m_audiocpu;
34 	optional_device<seibu_sound_device> m_seibu_sound;
35 	optional_device<seibu_adpcm_device> m_adpcm1;
36 	optional_device<seibu_adpcm_device> m_adpcm2;
37 	optional_device<msm5205_device> m_msm1;
38 	optional_device<msm5205_device> m_msm2;
39 	required_device<gfxdecode_device> m_gfxdecode;
40 	required_device<palette_device> m_palette;
41 
42 	required_shared_ptr<uint16_t> m_spriteram;
43 	required_shared_ptr<uint16_t> m_colorram;
44 	required_shared_ptr<uint16_t> m_videoram;
45 
46 	tilemap_t *m_background_layer;
47 	tilemap_t *m_text_layer;
48 	int m_sound_command1;
49 	int m_sound_command2;
50 
51 	// common
52 	void flipscreen_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
53 	void background_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
54 	void text_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
55 
56 	// cabal specific
57 	void sound_irq_trigger_word_w(offs_t, u16 data, u16 mem_mask);
58 
59 	// cabalbl specific
60 	void cabalbl_sndcmd_w(offs_t offset, uint16_t data);
61 	void cabalbl_sound_irq_trigger_word_w(uint16_t data);
62 	uint8_t cabalbl_snd2_r();
63 	uint8_t cabalbl_snd1_r();
64 	void cabalbl_coin_w(uint8_t data);
65 	void cabalbl_1_adpcm_w(uint8_t data);
66 	void cabalbl_2_adpcm_w(uint8_t data);
67 
68 	void init_cabal();
69 	DECLARE_MACHINE_START(cabalbl);
70 	DECLARE_MACHINE_RESET(cabalbl);
71 	virtual void video_start() override;
72 
73 	TILE_GET_INFO_MEMBER(get_back_tile_info);
74 	TILE_GET_INFO_MEMBER(get_text_tile_info);
75 
76 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
77 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
78 	void cabalt(machine_config &config);
79 	void cabalbl2(machine_config &config);
80 	void cabal(machine_config &config);
81 	void cabalbl(machine_config &config);
82 	void cabalbl2_predecrypted_opcodes_map(address_map &map);
83 	void cabalbl2_sound_map(address_map &map);
84 	void cabalbl_main_map(address_map &map);
85 	void cabalbl_sound_map(address_map &map);
86 	void cabalbl_talk1_map(address_map &map);
87 	void cabalbl_talk1_portmap(address_map &map);
88 	void cabalbl_talk2_map(address_map &map);
89 	void cabalbl_talk2_portmap(address_map &map);
90 	void main_map(address_map &map);
91 	void sound_decrypted_opcodes_map(address_map &map);
92 	void sound_map(address_map &map);
93 	void trackball_main_map(address_map &map);
94 };
95 
96 #endif // MAME_INCLUDES_CABAL_H
97