summaryrefslogtreecommitdiffstats
path: root/src/mame/includes/funworld.h
blob: a4a7dffa4fb662622a2315b9cbe382f457a305e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
// license:BSD-3-Clause
// copyright-holders:Roberto Fresca, Peter Ferrie
#ifndef MAME_INCLUDES_FUNWORLD_H
#define MAME_INCLUDES_FUNWORLD_H

#pragma once

#include "emupal.h"
#include "machine/i2cmem.h"
#include "sound/ay8910.h"
#include "video/mc6845.h"
#include "tilemap.h"

class funworld_state : public driver_device
{
public:
	funworld_state(const machine_config &mconfig, device_type type, const char *tag) :
		driver_device(mconfig, type, tag),
		m_maincpu(*this, "maincpu"),
		m_gfxdecode(*this, "gfxdecode"),
		m_videoram(*this, "videoram"),
		m_colorram(*this, "colorram"),
		m_palette(*this, "palette"),
		m_i2cmem(*this, "i2cmem"),
		m_lamps(*this, "lamp%u", 0U)
	{ }

	void royalcd1(machine_config &config);
	void royalcd2(machine_config &config);
	void fw1stpal(machine_config &config);
	void fw2ndpal(machine_config &config);
	void saloon(machine_config &config);
	void cuoreuno(machine_config &config);
	void funquiz(machine_config &config);
	void witchryl(machine_config &config);
	void fw_brick_1(machine_config &config);
	void fw_brick_2(machine_config &config);
	void gratispk(machine_config &config);

	void init_saloon();
	void init_mongolnw();
	void init_soccernw();
	void init_tabblue();
	void init_dino4();
	void init_ctunk();
	void init_jolycdig();
	void init_impera16();

protected:
	void funworld_videoram_w(offs_t offset, uint8_t data);
	void funworld_colorram_w(offs_t offset, uint8_t data);
	void funworld_lamp_a_w(uint8_t data);
	void funworld_lamp_b_w(uint8_t data);

	virtual void machine_start() override { m_lamps.resolve(); }
	virtual void video_start() override;
	void funworld_palette(palette_device &palette) const;
	uint32_t screen_update_funworld(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
	TILE_GET_INFO_MEMBER(get_bg_tile_info);

	void magicrd2_map(address_map &map);

	required_device<cpu_device> m_maincpu;
	required_device<gfxdecode_device> m_gfxdecode;
	tilemap_t *m_bg_tilemap = nullptr;

private:
	uint8_t questions_r(offs_t offset);
	void question_bank_w(uint8_t data);
	DECLARE_WRITE_LINE_MEMBER(pia1_ca2_w);
	uint8_t funquiz_ay8910_a_r();
	uint8_t funquiz_ay8910_b_r();

	void cuoreuno_map(address_map &map);
	void funquiz_map(address_map &map);
	void funworld_map(address_map &map);
	void fw_brick_map(address_map &map);
	void saloon_map(address_map &map);
	void witchryl_map(address_map &map);
	void gratispk_map(address_map &map);

	required_shared_ptr<uint8_t> m_videoram;
	required_shared_ptr<uint8_t> m_colorram;
	required_device<palette_device> m_palette;
	optional_device<i2cmem_device> m_i2cmem;
	output_finder<8> m_lamps;
};


class magicrd2_state : public funworld_state
{
public:
	using funworld_state::funworld_state;

	void magicrd2(machine_config &config);

	void init_magicd2b();
	void init_magicd2c();

protected:
	virtual void video_start() override;
};


class lunapark_state : public funworld_state
{
public:
	using funworld_state::funworld_state;

	void lunapark(machine_config &config);

protected:
	virtual void machine_start() override;
	virtual void machine_reset() override;

private:
	void lunapark_map(address_map &map);
};


class chinatow_state : public funworld_state
{
public:
	using funworld_state::funworld_state;

	void chinatow(machine_config &config);
	void rcdino4(machine_config &config);

	void init_rcdino4();
	void init_rcdinch();

protected:
	virtual void video_start() override;

private:
	uint8_t chinatow_r_32f0(offs_t offset);

	void chinatow_map(address_map &map);
};


class multiwin_state : public funworld_state
{
public:

	using funworld_state::funworld_state;

	void multiwin(machine_config& config);

	void driver_init() override;

protected:
	virtual void video_start() override;

private:
	cpu_device* _maincpu {};
	uint8_t multiwin_opcode_r(offs_t offset);

	void multiwin_opcodes_map(address_map& map);
};

class royalcrdf_state : public funworld_state
{
public:
	using funworld_state::funworld_state;

	void royalcrdf(machine_config& config);

	void driver_init() override;

private:
	cpu_device* _maincpu {};
	uint8_t royalcrdf_opcode_r(offs_t offset);

	void royalcrdf_map(address_map& map);
	void royalcrdf_opcodes_map(address_map& map);
};

class intergames_state : public funworld_state
{
public:
	intergames_state(const machine_config &mconfig, device_type type, const char *tag) :
		funworld_state(mconfig, type, tag),
		m_crtc(*this, "crtc"),
		m_ay8910(*this, "ay8910"),
		m_crtc_selected(false)
	{ }

	void intrgmes(machine_config &config);

protected:
	virtual void driver_init() override;
	virtual void machine_reset() override;

private:
	uint8_t crtc_or_psg_r(offs_t offset);
	void crtc_or_psg_w(offs_t offset, uint8_t data);
	uint8_t prot_r(offs_t offset);
	void prot_w(offs_t offset, uint8_t data);

	void intergames_map(address_map &map);

	required_device<mc6845_device> m_crtc;
	required_device<ay8910_device> m_ay8910;

	bool m_crtc_selected;
};

#endif // MAME_INCLUDES_FUNWORLD_H