1 // license:BSD-3-Clause
2 // copyright-holders:David Graves
3 /*************************************************************************
4 
5     World Grand Prix
6 
7 *************************************************************************/
8 #ifndef MAME_INCLUDES_WGP_H
9 #define MAME_INCLUDES_WGP_H
10 
11 #pragma once
12 
13 #include "audio/taitosnd.h"
14 #include "machine/taitoio.h"
15 #include "video/tc0100scn.h"
16 #include "emupal.h"
17 #include "tilemap.h"
18 
19 
20 class wgp_state : public driver_device
21 {
22 public:
wgp_state(const machine_config & mconfig,device_type type,const char * tag)23 	wgp_state(const machine_config &mconfig, device_type type, const char *tag) :
24 		driver_device(mconfig, type, tag),
25 		m_spritemap(*this, "spritemap"),
26 		m_spriteram(*this, "spriteram"),
27 		m_pivram(*this, "pivram"),
28 		m_piv_ctrlram(*this, "piv_ctrlram"),
29 		m_maincpu(*this, "maincpu"),
30 		m_audiocpu(*this, "audiocpu"),
31 		m_subcpu(*this, "sub"),
32 		m_tc0100scn(*this, "tc0100scn"),
33 		m_tc0140syt(*this, "tc0140syt"),
34 		m_tc0220ioc(*this, "tc0220ioc"),
35 		m_gfxdecode(*this, "gfxdecode"),
36 		m_palette(*this, "palette"),
37 		m_z80bank(*this, "z80bank"),
38 		m_steer(*this, "STEER"),
39 		m_unknown(*this, "UNKNOWN"),
40 		m_fake(*this, "FAKE")
41 	{ }
42 
43 	void wgp2(machine_config &config);
44 	void wgp(machine_config &config);
45 
46 	void init_wgp();
47 	void init_wgp2();
48 
49 protected:
50 	enum
51 	{
52 		TIMER_INTERRUPT4,
53 		TIMER_CPUB_INTERRUPT6
54 	};
55 
56 	virtual void machine_start() override;
57 	virtual void machine_reset() override;
58 	virtual void video_start() override;
59 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
60 	virtual void device_post_load() override;
61 
62 private:
63 	void coins_w(u8 data);
64 	void cpua_ctrl_w(u16 data);
65 	u16 lan_status_r();
66 	void rotate_port_w(offs_t offset, u16 data);
67 	u8 accel_r();
68 	u8 steer_r();
69 	u8 steer_offset_r();
70 	u8 accel_offset_r();
71 	u8 brake_r();
72 	u8 unknown_r();
73 	void sound_bankswitch_w(u8 data);
74 	void pivram_word_w(offs_t offset, u16 data, u16 mem_mask = ~0);
75 	void piv_ctrl_word_w(offs_t offset, u16 data, u16 mem_mask = ~0);
76 
77 	DECLARE_VIDEO_START(wgp2);
78 	u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
79 	INTERRUPT_GEN_MEMBER(cpub_interrupt);
80 
81 	void cpu2_map(address_map &map);
82 	void main_map(address_map &map);
83 	void z80_sound_map(address_map &map);
84 
85 	template<unsigned Offset> TILE_GET_INFO_MEMBER(get_piv_tile_info);
86 
87 	void core_vh_start(int piv_xoffs, int piv_yoffs);
88 	void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs);
89 	void piv_layer_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u32 priority);
90 	void parse_control();
91 
92 	/* memory pointers */
93 	required_shared_ptr<u16> m_spritemap;
94 	required_shared_ptr<u16> m_spriteram;
95 	required_shared_ptr<u16> m_pivram;
96 	required_shared_ptr<u16> m_piv_ctrlram;
97 
98 	/* video-related */
99 	tilemap_t *m_piv_tilemap[3];
100 	u16       m_piv_ctrl_reg;
101 	u16       m_piv_zoom[3];
102 	u16       m_piv_scrollx[3];
103 	u16       m_piv_scrolly[3];
104 	u16       m_rotate_ctrl[8];
105 	int       m_piv_xoffs;
106 	int       m_piv_yoffs;
107 	u8        m_dislayer[4];
108 
109 	/* misc */
110 	u16       m_cpua_ctrl;
111 	u16       m_port_sel;
112 	emu_timer *m_cpub_int6_timer;
113 
114 	/* devices */
115 	required_device<cpu_device> m_maincpu;
116 	required_device<cpu_device> m_audiocpu;
117 	required_device<cpu_device> m_subcpu;
118 	required_device<tc0100scn_device> m_tc0100scn;
119 	required_device<tc0140syt_device> m_tc0140syt;
120 	required_device<tc0220ioc_device> m_tc0220ioc;
121 	required_device<gfxdecode_device> m_gfxdecode;
122 	required_device<palette_device> m_palette;
123 	required_memory_bank m_z80bank;
124 	optional_ioport m_steer;
125 	optional_ioport m_unknown;
126 	optional_ioport m_fake;
127 };
128 
129 #endif // MAME_INCLUDES_WGP_H
130