1 // license:BSD-3-Clause
2 // copyright-holders:Luca Elia, Nicola Salmoria
3 /***************************************************************************
4 
5       Dynax hardware
6 
7 ***************************************************************************/
8 #ifndef MAME_INCLUDES_DYNAX_H
9 #define MAME_INCLUDES_DYNAX_H
10 
11 #pragma once
12 
13 #include "machine/bankdev.h"
14 #include "machine/gen_latch.h"
15 #include "machine/rstbuf.h"
16 #include "sound/msm5205.h"
17 #include "sound/okim6295.h"
18 #include "machine/74259.h"
19 #include "video/dynax_blitter_rev2.h"
20 #include "emupal.h"
21 #include "screen.h"
22 
23 class dynax_state : public driver_device
24 {
25 public:
dynax_state(const machine_config & mconfig,device_type type,const char * tag)26 	dynax_state(const machine_config &mconfig, device_type type, const char *tag)
27 		: driver_device(mconfig, type, tag)
28 		, m_maincpu(*this, "maincpu")
29 		, m_soundcpu(*this, "soundcpu")
30 		, m_oki(*this, "oki")
31 		, m_screen(*this, "screen")
32 		, m_palette(*this, "palette")
33 		, m_mainlatch(*this, "mainlatch")
34 		, m_bankdev(*this, "bankdev")
35 		, m_blitter(*this, "blitter")
36 		, m_msm(*this, "msm")
37 		, m_mainirq(*this, "mainirq")
38 		, m_soundirq(*this, "soundirq")
39 		, m_soundlatch(*this, "soundlatch")
40 		, m_blitter2(*this, "blitter2")
41 		, m_blitter_gfx(*this, "blitter")
42 		, m_led(*this, "led0")
43 	{
44 	}
45 
46 	void mjfriday(machine_config &config);
47 	void yarunara(machine_config &config);
48 	void janyuki(machine_config &config);
49 	void hnoridur(machine_config &config);
50 	void gekisha(machine_config &config);
51 	void majrjhdx(machine_config &config);
52 	void mcnpshnt(machine_config &config);
53 	void nanajign(machine_config &config);
54 	void cdracula(machine_config &config);
55 	void tenkai(machine_config &config);
56 	void hjingi(machine_config &config);
57 	void mjreach(machine_config &config);
58 	void neruton(machine_config &config);
59 	void mjdialq2(machine_config &config);
60 	void jantouki(machine_config &config);
61 	void quiztvqq(machine_config &config);
62 	void mjelctrn(machine_config &config);
63 	void mjembase(machine_config &config);
64 	void mjangels(machine_config &config);
65 	void hanamai(machine_config &config);
66 	void sprtmtch(machine_config &config);
67 
68 	void init_mjelct3();
69 	void init_blktouch();
70 	void init_mjelct3a();
71 	void init_maya_common();
72 	void init_mayac();
73 	void init_maya();
74 
75 	DECLARE_WRITE_LINE_MEMBER(blitter_ack_w);
76 	DECLARE_WRITE_LINE_MEMBER(sprtmtch_blitter_irq_w);
77 	DECLARE_WRITE_LINE_MEMBER(sprtmtch_vblank_w);
78 	DECLARE_WRITE_LINE_MEMBER(layer_half_w);
79 	DECLARE_WRITE_LINE_MEMBER(layer_half2_w);
80 	DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
81 
82 	void hnoridur_blit_pixel_w(offs_t offset, uint8_t data);
83 	void dynax_blit_scrollx_w(uint8_t data);
84 	void dynax_blit_scrolly_w(uint8_t data);
85 
86 protected:
87 	required_device<cpu_device> m_maincpu;
88 	optional_device<cpu_device> m_soundcpu;
89 	optional_device<okim6295_device> m_oki;
90 	optional_device<screen_device> m_screen;
91 	required_device<palette_device> m_palette;
92 	optional_device<ls259_device> m_mainlatch;
93 	optional_device<address_map_bank_device> m_bankdev;
94 	optional_device<dynax_blitter_rev2_device> m_blitter;
95 
96 	/* input / output */
97 	uint8_t m_input_sel;
98 	uint8_t m_dsw_sel;
99 	uint8_t m_keyb;
100 	uint8_t m_coins;
101 	uint8_t m_hopper;
102 
103 	DECLARE_VIDEO_START(hnoridur);
104 
105 	void dynax_vblank_ack_w(uint8_t data);
106 	void dynax_blit_dest_w(uint8_t data);
107 	void dynax_blit_romregion_w(uint8_t data);
108 	void dynax_extra_scrollx_w(uint8_t data);
109 	void dynax_extra_scrolly_w(uint8_t data);
110 
111 	void hanamai_copylayer(bitmap_ind16 &bitmap, const rectangle &cliprect, int i );
112 
113 	DECLARE_MACHINE_START(dynax);
114 	DECLARE_MACHINE_RESET(dynax);
115 
116 	void htengoku_banked_map(address_map &map);
117 
118 private:
119 	void jantouki_vblank_ack_w(uint8_t data);
120 	DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_ack_w);
121 	DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_irq_w);
122 	DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_ack_w);
123 	DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_irq_w);
124 	void jantouki_sound_vblank_ack_w(uint8_t data);
125 	DECLARE_WRITE_LINE_MEMBER(coincounter_0_w);
126 	DECLARE_WRITE_LINE_MEMBER(coincounter_1_w);
127 	uint8_t ret_ff();
128 	uint8_t hanamai_keyboard_0_r();
129 	uint8_t hanamai_keyboard_1_r();
130 	void hanamai_keyboard_w(uint8_t data);
131 	void dynax_rombank_w(uint8_t data);
132 	void jantouki_sound_rombank_w(uint8_t data);
133 	void cdracula_sound_rombank_w(uint8_t data);
134 	void hnoridur_rombank_w(uint8_t data);
135 	void hnoridur_palbank_w(uint8_t data);
136 	void hnoridur_palette_lo_w(offs_t offset, uint8_t data);
137 	void hnoridur_palette_hi_w(offs_t offset, uint8_t data);
138 	void hnoridur_palette_update(offs_t offset);
139 	void nanajign_palette_lo_w(offs_t offset, uint8_t data);
140 	void nanajign_palette_hi_w(offs_t offset, uint8_t data);
141 	void nanajign_palette_update(offs_t offset);
142 	void adpcm_data_w(uint8_t data);
143 	DECLARE_WRITE_LINE_MEMBER(hjingi_lockout_w);
144 	DECLARE_WRITE_LINE_MEMBER(hjingi_hopper_w);
145 	uint8_t hjingi_hopper_bit();
146 	uint8_t hjingi_keyboard_0_r();
147 	uint8_t hjingi_keyboard_1_r();
148 	void yarunara_input_w(offs_t offset, uint8_t data);
149 	uint8_t yarunara_input_r(offs_t offset);
150 	void yarunara_rombank_w(uint8_t data);
151 	void yarunara_blit_romregion_w(uint8_t data);
152 	uint8_t jantouki_soundlatch_ack_r();
153 	void jantouki_soundlatch_w(uint8_t data);
154 	uint8_t jantouki_blitter_busy_r();
155 	void jantouki_rombank_w(uint8_t data);
156 	uint8_t jantouki_soundlatch_status_r();
157 	uint8_t mjelctrn_keyboard_1_r();
158 	uint8_t mjelctrn_dsw_r();
159 	void tenkai_ipsel_w(offs_t offset, uint8_t data);
160 	void tenkai_ip_w(uint8_t data);
161 	uint8_t tenkai_ip_r(offs_t offset);
162 	uint8_t tenkai_palette_r(offs_t offset);
163 	void tenkai_palette_w(offs_t offset, uint8_t data);
164 	uint8_t tenkai_p3_r();
165 	void tenkai_p3_w(uint8_t data);
166 	void tenkai_p4_w(uint8_t data);
167 	uint8_t tenkai_p5_r();
168 	void tenkai_p6_w(uint8_t data);
169 	void tenkai_p7_w(uint8_t data);
170 	void tenkai_p8_w(uint8_t data);
171 	uint8_t tenkai_p8_r();
172 	DECLARE_WRITE_LINE_MEMBER(tenkai_6c_w);
173 	DECLARE_WRITE_LINE_MEMBER(tenkai_70_w);
174 	void tenkai_blit_romregion_w(uint8_t data);
175 	uint8_t gekisha_keyboard_0_r();
176 	uint8_t gekisha_keyboard_1_r();
177 	void gekisha_hopper_w(offs_t offset, uint8_t data);
178 	void gekisha_p4_w(uint8_t data);
179 	//void dynax_blit_pen_w(uint8_t data);
180 	void dynax_blit2_dest_w(uint8_t data);
181 	void tenkai_blit_dest_w(uint8_t data);
182 	void mjembase_blit_dest_w(uint8_t data);
183 	void dynax_blit_backpen_w(uint8_t data);
184 	void dynax_blit_palette01_w(uint8_t data);
185 	void tenkai_blit_palette01_w(uint8_t data);
186 	void dynax_blit_palette45_w(uint8_t data);
187 	void dynax_blit_palette23_w(uint8_t data);
188 	void tenkai_blit_palette23_w(uint8_t data);
189 	void mjembase_blit_palette23_w(uint8_t data);
190 	void dynax_blit_palette67_w(uint8_t data);
191 	DECLARE_WRITE_LINE_MEMBER(blit_palbank_w);
192 	DECLARE_WRITE_LINE_MEMBER(blit2_palbank_w);
193 	DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest0_w);
194 	DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest1_w);
195 	void dynax_layer_enable_w(uint8_t data);
196 	void jantouki_layer_enable_w(offs_t offset, uint8_t data);
197 	DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer0_enable_w);
198 	DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer1_enable_w);
199 	void dynax_blit2_romregion_w(uint8_t data);
200 	void hanamai_blit_pixel_w(offs_t offset, uint8_t data);
201 	void cdracula_blit_pixel_w(offs_t offset, uint8_t data);
202 	void drgpunch_blit_pixel_w(offs_t offset, uint8_t data);
203 	void jantouki_blit_pixel_w(offs_t offset, uint8_t data);
204 	void jantouki_blit2_pixel_w(offs_t offset, uint8_t data);
205 	void mjdialq2_blit_pixel_w(offs_t offset, uint8_t data);
206 	void dynax_blit2_scrollx_w(uint8_t data);
207 	void dynax_blit2_scrolly_w(uint8_t data);
208 	void tenkai_blit_scrollx_w(uint8_t data);
209 	void tenkai_blit_scrolly_w(uint8_t data);
210 	void hanamai_priority_w(uint8_t data);
211 	void tenkai_priority_w(uint8_t data);
212 	void mjembase_priority_w(uint8_t data);
213 
214 	uint32_t screen_update_hanamai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
215 	uint32_t screen_update_hnoridur(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
216 	uint32_t screen_update_sprtmtch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
217 	uint32_t screen_update_mjdialq2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
218 	uint32_t screen_update_jantouki_top(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
219 	uint32_t screen_update_jantouki_bottom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
220 	uint32_t screen_update_cdracula(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
221 
222 	DECLARE_WRITE_LINE_MEMBER(jantouki_vblank_w);
223 	DECLARE_WRITE_LINE_MEMBER(mjfriday_vblank_w);
224 
225 	void tenkai_update_rombank();
226 
227 	DECLARE_WRITE_LINE_MEMBER(adpcm_int);
228 	DECLARE_WRITE_LINE_MEMBER(adpcm_int_cpu1);
229 
230 	DECLARE_MACHINE_RESET(adpcm);
231 	void adpcm_reset_w(uint8_t data);
232 	DECLARE_WRITE_LINE_MEMBER(adpcm_reset_kludge_w);
233 	void tenkai_dswsel_w(uint8_t data);
234 	uint8_t tenkai_dsw_r();
235 	DECLARE_WRITE_LINE_MEMBER(tenkai_blitter_irq_w);
236 	DECLARE_WRITE_LINE_MEMBER(tenkai_blitter_ack_w);
237 	DECLARE_MACHINE_START(hanamai);
238 	DECLARE_MACHINE_START(hjingi);
239 	DECLARE_VIDEO_START(hanamai);
240 	void sprtmtch_palette(palette_device &palette) const;
241 	DECLARE_VIDEO_START(sprtmtch);
242 	DECLARE_MACHINE_START(jantouki);
243 	DECLARE_VIDEO_START(jantouki);
244 	DECLARE_VIDEO_START(mjelctrn);
245 	DECLARE_VIDEO_START(mjembase);
246 	DECLARE_VIDEO_START(mjdialq2);
247 	DECLARE_VIDEO_START(mcnpshnt);
248 	void janyuki_palette(palette_device &palette) const;
249 	DECLARE_VIDEO_START(neruton);
250 
251 	//int blitter_drawgfx( int layer, int mask, memory_region *gfx, int src, int pen, int x, int y, int wrap, int flags );
252 	void jantouki_copylayer( bitmap_ind16 &bitmap, const rectangle &cliprect, int i, int y );
253 	void mjdialq2_copylayer( bitmap_ind16 &bitmap, const rectangle &cliprect, int i );
254 	int debug_mask();
255 	int debug_viewer( bitmap_ind16 &bitmap, const rectangle &cliprect );
256 	void dynax_common_reset();
257 	void tenkai_show_6c();
258 	void cdracula_io_map(address_map &map);
259 	void cdracula_mem_map(address_map &map);
260 	void gekisha_banked_map(address_map &map);
261 	void gekisha_map(address_map &map);
262 	void hanamai_io_map(address_map &map);
263 	void hjingi_banked_map(address_map &map);
264 	void hjingi_io_map(address_map &map);
265 	void hjingi_mem_map(address_map &map);
266 	void hnoridur_banked_map(address_map &map);
267 	void hnoridur_io_map(address_map &map);
268 	void hnoridur_mem_map(address_map &map);
269 	void jantouki_io_map(address_map &map);
270 	void jantouki_mem_map(address_map &map);
271 	void jantouki_sound_io_map(address_map &map);
272 	void jantouki_sound_mem_map(address_map &map);
273 	void mcnpshnt_io_map(address_map &map);
274 	void mcnpshnt_mem_map(address_map &map);
275 	void mjangels_banked_map(address_map &map);
276 	void mjdialq2_mem_map(address_map &map);
277 	void mjelctrn_banked_map(address_map &map);
278 	void mjelctrn_io_map(address_map &map);
279 	void mjembase_io_map(address_map &map);
280 	void mjfriday_io_map(address_map &map);
281 	void nanajign_banked_map(address_map &map);
282 	void nanajign_io_map(address_map &map);
283 	void nanajign_mem_map(address_map &map);
284 	void quiztvqq_mem_map(address_map &map);
285 	void sprtmtch_io_map(address_map &map);
286 	void sprtmtch_mem_map(address_map &map);
287 	void tenkai_banked_map(address_map &map);
288 	void tenkai_map(address_map &map);
289 	void yarunara_banked_map(address_map &map);
290 	void yarunara_io_map(address_map &map);
291 	void yarunara_mem_map(address_map &map);
292 
293 	/* devices */
294 	optional_device<msm5205_device> m_msm;
295 	optional_device<rst_pos_buffer_device> m_mainirq;
296 	optional_device<rst_pos_buffer_device> m_soundirq;
297 	optional_device<generic_latch_8_device> m_soundlatch;
298 	optional_device<dynax_blitter_rev2_device> m_blitter2;
299 	optional_region_ptr<uint8_t> m_blitter_gfx;
300 	output_finder<> m_led;
301 
302 	// up to 8 layers, 2 images per layer (interleaved on screen)
303 	std::unique_ptr<uint8_t[]>  m_pixmap[8][2];
304 
305 	/* irq */
306 	bool m_blitter_irq_mask;
307 	bool m_blitter2_irq_mask;
308 
309 	/* blitters */
310 	int m_blit_scroll_x;
311 	int m_blit2_scroll_x;
312 	int m_blit_scroll_y;
313 	int m_blit2_scroll_y;
314 	int m_blit_dest;
315 	int m_blit2_dest;
316 	int m_blit_palbank;
317 	int m_blit2_palbank;
318 	int m_blit_palettes;
319 	int m_blit2_palettes;
320 	int m_layer_enable;
321 	int m_blit_backpen;
322 
323 	int m_hanamai_layer_half;
324 	int m_hnoridur_layer_half2;
325 
326 	int m_extra_scroll_x;
327 	int m_extra_scroll_y;
328 	int m_flipscreen;
329 
330 	int m_layer_layout;
331 
332 	const int *m_priority_table;
333 	int m_hanamai_priority;
334 
335 	/* misc */
336 	uint8_t m_palette_ram[16*256*2];
337 	int m_palbank;
338 	int m_msm5205next;
339 	int m_resetkludge;
340 	int m_toggle;
341 	int m_toggle_cpu1;
342 	int m_rombank;
343 	uint8_t m_tenkai_p5_val;
344 	int m_tenkai_6c;
345 	int m_tenkai_70;
346 	uint8_t m_gekisha_val[2];
347 
348 };
349 
350 #endif // MAME_INCLUDES_DYNAX_H
351