1 // license:BSD-3-Clause
2 // copyright-holders:Mirko Buffoni
3 #ifndef MAME_INCLUDES_SENJYO_H
4 #define MAME_INCLUDES_SENJYO_H
5 
6 #pragma once
7 
8 #include "sound/dac.h"
9 #include "machine/z80daisy.h"
10 #include "machine/z80pio.h"
11 #include "machine/z80ctc.h"
12 #include "emupal.h"
13 #include "tilemap.h"
14 
15 class senjyo_state : public driver_device
16 {
17 public:
senjyo_state(const machine_config & mconfig,device_type type,const char * tag)18 	senjyo_state(const machine_config &mconfig, device_type type, const char *tag) :
19 		driver_device(mconfig, type, tag),
20 		m_maincpu(*this, "maincpu"),
21 		m_pio(*this, "z80pio"),
22 		m_dac(*this, "dac"),
23 		m_gfxdecode(*this, "gfxdecode"),
24 		m_palette(*this, "palette"),
25 		m_radar_palette(*this, "radar_palette"),
26 		m_spriteram(*this, "spriteram"),
27 		m_fgscroll(*this, "fgscroll"),
28 		m_scrollx1(*this, "scrollx1"),
29 		m_scrolly1(*this, "scrolly1"),
30 		m_scrollx2(*this, "scrollx2"),
31 		m_scrolly2(*this, "scrolly2"),
32 		m_scrollx3(*this, "scrollx3"),
33 		m_scrolly3(*this, "scrolly3"),
34 		m_fgvideoram(*this, "fgvideoram"),
35 		m_fgcolorram(*this, "fgcolorram"),
36 		m_bg1videoram(*this, "bg1videoram"),
37 		m_bg2videoram(*this, "bg2videoram"),
38 		m_bg3videoram(*this, "bg3videoram"),
39 		m_radarram(*this, "radarram"),
40 		m_bgstripesram(*this, "bgstripesram"),
41 		m_decrypted_opcodes(*this, "decrypted_opcodes")
42 	{ }
43 
44 	void senjyox_e(machine_config &config);
45 	void senjyo(machine_config &config);
46 	void starforb(machine_config &config);
47 	void senjyox_a(machine_config &config);
48 
49 	void init_starfora();
50 	void init_senjyo();
51 	void init_starfore();
52 	void init_starforc();
53 
54 protected:
55 	virtual void machine_start() override;
56 	virtual void machine_reset() override;
57 	virtual void video_start() override;
58 
59 private:
60 	/* devices */
61 	required_device<cpu_device> m_maincpu;
62 	required_device<z80pio_device> m_pio;
63 	required_device<dac_byte_interface> m_dac;
64 	required_device<gfxdecode_device> m_gfxdecode;
65 	required_device<palette_device> m_palette;
66 	required_device<palette_device> m_radar_palette;
67 
68 	/* memory pointers */
69 	required_shared_ptr<uint8_t> m_spriteram;
70 	required_shared_ptr<uint8_t> m_fgscroll;
71 	required_shared_ptr<uint8_t> m_scrollx1;
72 	required_shared_ptr<uint8_t> m_scrolly1;
73 	required_shared_ptr<uint8_t> m_scrollx2;
74 	required_shared_ptr<uint8_t> m_scrolly2;
75 	required_shared_ptr<uint8_t> m_scrollx3;
76 	required_shared_ptr<uint8_t> m_scrolly3;
77 	required_shared_ptr<uint8_t> m_fgvideoram;
78 	required_shared_ptr<uint8_t> m_fgcolorram;
79 	required_shared_ptr<uint8_t> m_bg1videoram;
80 	required_shared_ptr<uint8_t> m_bg2videoram;
81 	required_shared_ptr<uint8_t> m_bg3videoram;
82 	required_shared_ptr<uint8_t> m_radarram;
83 	required_shared_ptr<uint8_t> m_bgstripesram;
84 	optional_shared_ptr<uint8_t> m_decrypted_opcodes;
85 
86 	// game specific initialization
87 	int m_is_senjyo;
88 	int m_scrollhack;
89 
90 	uint8_t m_sound_cmd;
91 	int m_single_volume;
92 	int m_sound_state;
93 	tilemap_t *m_fg_tilemap;
94 	tilemap_t *m_bg1_tilemap;
95 	tilemap_t *m_bg2_tilemap;
96 	tilemap_t *m_bg3_tilemap;
97 
98 	void flip_screen_w(uint8_t data);
99 	void starforb_scrolly2(offs_t offset, uint8_t data);
100 	void starforb_scrollx2(offs_t offset, uint8_t data);
101 	void fgvideoram_w(offs_t offset, uint8_t data);
102 	void fgcolorram_w(offs_t offset, uint8_t data);
103 	void bg1videoram_w(offs_t offset, uint8_t data);
104 	void bg2videoram_w(offs_t offset, uint8_t data);
105 	void bg3videoram_w(offs_t offset, uint8_t data);
106 	void volume_w(uint8_t data);
107 	DECLARE_WRITE_LINE_MEMBER(sound_line_clock);
108 	void sound_cmd_w(uint8_t data);
109 	void irq_ctrl_w(uint8_t data);
110 	uint8_t pio_pa_r();
111 
112 	static rgb_t IIBBGGRR(uint32_t raw);
113 	void radar_palette(palette_device &palette) const;
114 
115 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
116 	TILE_GET_INFO_MEMBER(senjyo_bg1_tile_info);
117 	TILE_GET_INFO_MEMBER(starforc_bg1_tile_info);
118 	TILE_GET_INFO_MEMBER(get_bg2_tile_info);
119 	TILE_GET_INFO_MEMBER(get_bg3_tile_info);
120 
121 	uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
122 	void draw_bgbitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect);
123 	void draw_radar(bitmap_rgb32 &bitmap, const rectangle &cliprect);
124 	void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect,int priority);
125 
126 	void decrypted_opcodes_map(address_map &map);
127 	void senjyo_map(address_map &map);
128 	void senjyo_sound_io_map(address_map &map);
129 	void senjyo_sound_map(address_map &map);
130 	void starforb_map(address_map &map);
131 	void starforb_sound_map(address_map &map);
132 };
133 
134 /*----------- defined in audio/senjyo.c -----------*/
135 extern const z80_daisy_config senjyo_daisy_chain[];
136 
137 #endif // MAME_INCLUDES_SENJYO_H
138