1 // license:BSD-3-Clause
2 // copyright-holders:Farfetch'd, David Haywood
3 #ifndef MAME_INCLUDES_GSTRIKER_H
4 #define MAME_INCLUDES_GSTRIKER_H
5 
6 #pragma once
7 
8 #include "machine/6850acia.h"
9 #include "machine/gen_latch.h"
10 #include "machine/mb3773.h"
11 #include "video/vsystem_spr.h"
12 #include "video/mb60553.h"
13 #include "video/vs920a.h"
14 #include "emupal.h"
15 #include "screen.h"
16 
17 
18 
19 class gstriker_state : public driver_device
20 {
21 public:
gstriker_state(const machine_config & mconfig,device_type type,const char * tag)22 	gstriker_state(const machine_config &mconfig, device_type type, const char *tag) :
23 		driver_device(mconfig, type, tag),
24 		m_maincpu(*this, "maincpu"),
25 		m_audiocpu(*this, "audiocpu"),
26 		m_spr(*this, "vsystem_spr"),
27 		m_bg(*this, "zoomtilemap"),
28 		m_tx(*this, "texttilemap"),
29 		m_gfxdecode(*this, "gfxdecode"),
30 		m_screen(*this, "screen"),
31 		m_palette(*this, "palette"),
32 		m_soundlatch(*this, "soundlatch"),
33 		m_watchdog(*this, "watchdog"),
34 		m_acia(*this, "acia"),
35 		m_CG10103_m_vram(*this, "cg10103_m_vram"),
36 		m_work_ram(*this, "work_ram"),
37 		m_mixerregs(*this, "mixerregs")
38 	{ }
39 
40 	void base(machine_config &config);
41 	void twc94(machine_config &config);
42 	void gstriker(machine_config &config);
43 	void vgoal(machine_config &config);
44 
45 	void init_vgoalsoc();
46 	void init_twcup94();
47 	void init_twcup94a();
48 	void init_twcup94b();
49 
50 protected:
51 	virtual void machine_start() override;
52 	virtual void video_start() override;
53 
54 private:
55 	required_device<cpu_device> m_maincpu;
56 	required_device<cpu_device> m_audiocpu;
57 	required_device<vsystem_spr_device> m_spr;
58 	required_device<mb60553_zooming_tilemap_device> m_bg;
59 	required_device<vs920a_text_tilemap_device> m_tx;
60 	required_device<gfxdecode_device> m_gfxdecode;
61 	required_device<screen_device> m_screen;
62 	required_device<palette_device> m_palette;
63 	required_device<generic_latch_8_device> m_soundlatch;
64 	required_device<mb3773_device> m_watchdog;
65 	optional_device<acia6850_device> m_acia;
66 
67 	required_shared_ptr<uint16_t> m_CG10103_m_vram;
68 	std::unique_ptr<uint16_t[]>    m_buffered_spriteram;
69 	std::unique_ptr<uint16_t[]>    m_buffered_spriteram2;
70 	required_shared_ptr<uint16_t> m_work_ram;
71 	required_shared_ptr<uint16_t> m_mixerregs;
72 
73 	enum {
74 		TECMO_WCUP94_MCU = 1,
75 		TECMO_WCUP94A_MCU,
76 		TECMO_WCUP94B_MCU,
77 		VGOAL_SOCCER_MCU
78 	}m_mcutype;
79 	int m_gametype;
80 	uint16_t m_prot_reg[2];
81 
82 	// common
83 	void sh_bankswitch_w(uint8_t data);
84 
85 	// vgoalsoc and twrldc
86 	void twcup94_prot_reg_w(uint8_t data);
87 
88 	// vgoalsoc only
89 	uint16_t vbl_toggle_r();
90 	void vbl_toggle_w(uint16_t data);
91 
92 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
93 	DECLARE_WRITE_LINE_MEMBER(screen_vblank);
94 
95 	void mcu_init();
96 	void gstriker_map(address_map &map);
97 	void sound_io_map(address_map &map);
98 	void sound_map(address_map &map);
99 	void twcup94_map(address_map &map);
100 };
101 
102 #endif // MAME_INCLUDES_GSTRIKER_H
103