1 // license:BSD-3-Clause
2 // copyright-holders:Ernesto Corvi, Roberto Fresca
3 #ifndef MAME_INCLUDES_TEHKANWC_H
4 #define MAME_INCLUDES_TEHKANWC_H
5 
6 #pragma once
7 
8 #include "machine/gen_latch.h"
9 #include "sound/msm5205.h"
10 #include "emupal.h"
11 #include "tilemap.h"
12 
13 class tehkanwc_state : public driver_device
14 {
15 public:
tehkanwc_state(const machine_config & mconfig,device_type type,const char * tag)16 	tehkanwc_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_subcpu(*this, "sub"),
21 		m_msm(*this, "msm"),
22 		m_gfxdecode(*this, "gfxdecode"),
23 		m_palette(*this, "palette"),
24 		m_soundlatch(*this, "soundlatch"),
25 		m_soundlatch2(*this, "soundlatch2"),
26 		m_videoram(*this, "videoram"),
27 		m_colorram(*this, "colorram"),
28 		m_videoram2(*this, "videoram2"),
29 		m_spriteram(*this, "spriteram"),
30 		m_digits(*this, "digit%u", 0U)
31 	{ }
32 
33 	void tehkanwcb(machine_config &config);
34 	void tehkanwc(machine_config &config);
35 
36 	void init_teedoff();
37 
38 protected:
39 	enum
40 	{
41 		TIMER_RESET
42 	};
43 
44 	virtual void machine_start() override;
45 	virtual void video_start() override;
46 
47 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
48 
49 private:
50 	required_device<cpu_device> m_maincpu;
51 	required_device<cpu_device> m_audiocpu;
52 	required_device<cpu_device> m_subcpu;
53 	required_device<msm5205_device> m_msm;
54 	required_device<gfxdecode_device> m_gfxdecode;
55 	required_device<palette_device> m_palette;
56 	required_device<generic_latch_8_device> m_soundlatch;
57 	required_device<generic_latch_8_device> m_soundlatch2;
58 
59 	required_shared_ptr<uint8_t> m_videoram;
60 	required_shared_ptr<uint8_t> m_colorram;
61 	required_shared_ptr<uint8_t> m_videoram2;
62 	required_shared_ptr<uint8_t> m_spriteram;
63 
64 	output_finder<2> m_digits;
65 
66 	int m_track0[2];
67 	int m_track1[2];
68 	int m_msm_data_offs;
69 	int m_toggle;
70 	uint8_t m_scroll_x[2];
71 	uint8_t m_led0;
72 	uint8_t m_led1;
73 	tilemap_t *m_bg_tilemap;
74 	tilemap_t *m_fg_tilemap;
75 	emu_timer *m_reset_timer;
76 
77 	void sub_cpu_halt_w(uint8_t data);
78 	uint8_t track_0_r(offs_t offset);
79 	uint8_t track_1_r(offs_t offset);
80 	void track_0_reset_w(offs_t offset, uint8_t data);
81 	void track_1_reset_w(offs_t offset, uint8_t data);
82 	void sound_command_w(uint8_t data);
83 	void sound_answer_w(uint8_t data);
84 	void videoram_w(offs_t offset, uint8_t data);
85 	void colorram_w(offs_t offset, uint8_t data);
86 	void videoram2_w(offs_t offset, uint8_t data);
87 	void scroll_x_w(offs_t offset, uint8_t data);
88 	void scroll_y_w(uint8_t data);
89 	void flipscreen_x_w(uint8_t data);
90 	void flipscreen_y_w(uint8_t data);
91 	void gridiron_led0_w(uint8_t data);
92 	void gridiron_led1_w(uint8_t data);
93 	uint8_t portA_r();
94 	uint8_t portB_r();
95 	void portA_w(uint8_t data);
96 	void portB_w(uint8_t data);
97 	void msm_reset_w(uint8_t data);
98 	DECLARE_WRITE_LINE_MEMBER(adpcm_int);
99 
100 	TILE_GET_INFO_MEMBER(get_bg_tile_info);
101 	TILE_GET_INFO_MEMBER(get_fg_tile_info);
102 
103 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
104 	void gridiron_draw_led(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t led,int player);
105 	void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
106 
107 	void main_mem(address_map &map);
108 	void sound_mem(address_map &map);
109 	void sound_port(address_map &map);
110 	void sub_mem(address_map &map);
111 };
112 
113 #endif // MAME_INCLUDES_TEHKANWC_H
114