1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /***************************************************************************
4 
5 Mr Do!
6 driver by Nicola Salmoria
7 
8 PCB Model: 8201
9 Main Clock: XTAL = 8.2 MHz
10 Video clock: XTAL = 19.6 MHz
11 
12 Horizontal video frequency: HSYNC = XTAL/4/312 = 15.7051282051 kHz
13 Video frequency: VSYNC = HSYNC/262 = 59.94323742 Hz
14 VBlank duration: 1/VSYNC * (70/262) = 4457 us
15 
16 The manual for this model clearly shows above values in 'Misc' parts listings.
17 There's a chance that certain bootlegs might have the different 8/20 MHz XTALS.
18 
19 Sound chips have custom label "U8106". Or "8106" or unlabeled with the original
20 label scratched off. They are presumedly SN76489. Note that Lady Bug's PCB S/N
21 is also 8106 and has the same sound chips.
22 
23 ***************************************************************************/
24 
25 #include "emu.h"
26 #include "includes/mrdo.h"
27 
28 #include "cpu/z80/z80.h"
29 #include "sound/sn76496.h"
30 #include "screen.h"
31 #include "speaker.h"
32 
33 
34 namespace {
35 
36 constexpr XTAL MAIN_CLOCK  =  8.2_MHz_XTAL;
37 constexpr XTAL VIDEO_CLOCK = 19.6_MHz_XTAL;
38 
39 } // anonymous namespace
40 
41 
42 
43 /* PAL16R6CN used for protection. The game doesn't clear the screen
44    if a read from this address doesn't return the value it expects. */
mrdo_SECRE_r()45 uint8_t mrdo_state::mrdo_SECRE_r()
46 {
47 	uint8_t *RAM = memregion("maincpu")->base();
48 
49 	return RAM[m_maincpu->state_int(Z80_HL)];
50 }
51 
52 
53 
main_map(address_map & map)54 void mrdo_state::main_map(address_map &map)
55 {
56 	map(0x0000, 0x7fff).rom();
57 	map(0x8000, 0x87ff).ram().w(FUNC(mrdo_state::mrdo_bgvideoram_w)).share("bgvideoram");
58 	map(0x8800, 0x8fff).ram().w(FUNC(mrdo_state::mrdo_fgvideoram_w)).share("fgvideoram");
59 	map(0x9000, 0x90ff).writeonly().share("spriteram");
60 	map(0x9800, 0x9800).w(FUNC(mrdo_state::mrdo_flipscreen_w)); // screen flip + playfield priority
61 	map(0x9801, 0x9801).w("sn1", FUNC(sn76489_device::write));
62 	map(0x9802, 0x9802).w("sn2", FUNC(sn76489_device::write));
63 	map(0x9803, 0x9803).r(FUNC(mrdo_state::mrdo_SECRE_r));
64 	map(0xa000, 0xa000).portr("P1");
65 	map(0xa001, 0xa001).portr("P2");
66 	map(0xa002, 0xa002).portr("DSW1");
67 	map(0xa003, 0xa003).portr("DSW2");
68 	map(0xe000, 0xefff).ram();
69 	map(0xf000, 0xf7ff).w(FUNC(mrdo_state::mrdo_scrollx_w));
70 	map(0xf800, 0xffff).w(FUNC(mrdo_state::mrdo_scrolly_w));
71 }
72 
73 
74 static INPUT_PORTS_START( mrdo )
75 	PORT_START("P1")
76 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
77 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
78 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
79 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
80 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
81 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
82 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
83 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_TILT )
84 
85 	PORT_START("P2")
86 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
87 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
88 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
89 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
90 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
91 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
92 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
93 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
94 
95 	PORT_START("DSW1")
96 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:8,7")
97 	PORT_DIPSETTING(    0x03, DEF_STR( Easy ) )
98 	PORT_DIPSETTING(    0x02, DEF_STR( Medium ) )
99 	PORT_DIPSETTING(    0x01, DEF_STR( Hard ) )
100 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
101 	PORT_DIPNAME( 0x04, 0x04, "Rack Test (Cheat)") PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SW1:6")
102 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
103 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
104 	PORT_DIPNAME( 0x08, 0x08, "Special" ) PORT_DIPLOCATION("SW1:5")
105 	PORT_DIPSETTING(    0x08, DEF_STR( Easy ) )
106 	PORT_DIPSETTING(    0x00, DEF_STR( Hard ) )
107 	PORT_DIPNAME( 0x10, 0x10, "Extra" ) PORT_DIPLOCATION("SW1:4")
108 	PORT_DIPSETTING(    0x10, DEF_STR( Easy ) )
109 	PORT_DIPSETTING(    0x00, DEF_STR( Hard ) )
110 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:3")
111 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
112 	PORT_DIPSETTING(    0x20, DEF_STR( Cocktail ) )
113 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:2,1")
114 	PORT_DIPSETTING(    0x00, "2" )
115 	PORT_DIPSETTING(    0xc0, "3" )
116 	PORT_DIPSETTING(    0x80, "4" )
117 	PORT_DIPSETTING(    0x40, "5" )
118 
119 	PORT_START("DSW2")
120 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:8,7,6,5")
121 	PORT_DIPSETTING(    0x06, DEF_STR( 4C_1C ) )
122 	PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) )
123 	PORT_DIPSETTING(    0x0a, DEF_STR( 2C_1C ) )
124 	PORT_DIPSETTING(    0x07, DEF_STR( 3C_2C ) )
125 	PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
126 	PORT_DIPSETTING(    0x09, DEF_STR( 2C_3C ) )
127 	PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) )
128 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) )
129 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) )
130 	PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) )
131 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
132 	// settings 0x01 through 0x05 all give 1 Coin/1 Credit
133 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:4,3,2,1")
134 	PORT_DIPSETTING(    0x60, DEF_STR( 4C_1C ) )
135 	PORT_DIPSETTING(    0x80, DEF_STR( 3C_1C ) )
136 	PORT_DIPSETTING(    0xa0, DEF_STR( 2C_1C ) )
137 	PORT_DIPSETTING(    0x70, DEF_STR( 3C_2C ) )
138 	PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )
139 	PORT_DIPSETTING(    0x90, DEF_STR( 2C_3C ) )
140 	PORT_DIPSETTING(    0xe0, DEF_STR( 1C_2C ) )
141 	PORT_DIPSETTING(    0xd0, DEF_STR( 1C_3C ) )
142 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_4C ) )
143 	PORT_DIPSETTING(    0xb0, DEF_STR( 1C_5C ) )
144 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
145 	// settings 0x10 through 0x50 all give 1 Coin/1 Credit
146 INPUT_PORTS_END
147 
148 
149 
150 static const gfx_layout charlayout =
151 {
152 	8,8,
153 	RGN_FRAC(1,2),
154 	2,
155 	{ RGN_FRAC(0,2), RGN_FRAC(1,2) },
156 	{ STEP8(7,-1) },
157 	{ STEP8(0,8) },
158 	8*8
159 };
160 
161 static const gfx_layout spritelayout =
162 {
163 	16,16,
164 	RGN_FRAC(1,1),
165 	2,
166 	{ 4, 0 },
167 	{ STEP4(0*8+3,-1), STEP4(1*8+3,-1), STEP4(2*8+3,-1), STEP4(3*8+3,-1) },
168 	{ STEP16(0,32) },
169 	64*8
170 };
171 
172 static GFXDECODE_START( gfx_mrdo )
173 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,      0, 64 ) // colors 0-255 directly mapped
174 	GFXDECODE_ENTRY( "gfx2", 0, charlayout,      0, 64 )
175 	GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 4*64, 16 )
176 GFXDECODE_END
177 
178 
mrdo(machine_config & config)179 void mrdo_state::mrdo(machine_config &config)
180 {
181 	// Basic machine hardware
182 	Z80(config, m_maincpu, MAIN_CLOCK/2); // Verified
183 	m_maincpu->set_addrmap(AS_PROGRAM, &mrdo_state::main_map);
184 	m_maincpu->set_vblank_int("screen", FUNC(mrdo_state::irq0_line_hold));
185 
186 	// Video hardware
187 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
188 	screen.set_raw(VIDEO_CLOCK/4, 312, 8, 248, 262, 32, 224);
189 	screen.set_screen_update(FUNC(mrdo_state::screen_update_mrdo));
190 	screen.set_palette(m_palette);
191 
192 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_mrdo);
193 	PALETTE(config, m_palette, FUNC(mrdo_state::mrdo_palette), 64*4 + 16*4, 256);
194 
195 	// Sound hardware
196 	SPEAKER(config, "mono").front_center();
197 
198 	SN76489(config, "sn1", MAIN_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 0.50); // Verified
199 	SN76489(config, "sn2", MAIN_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 0.50); // Verified
200 }
201 
mrlo(machine_config & config)202 void mrdo_state::mrlo(machine_config &config)
203 {
204 	mrdo(config);
205 	//config.device_remove("pal16r6");
206 }
207 
208 // Main Clock: XTAL = 8.000 MHz, Video clock: XTAL = 19.908 MHz
mrdobl(machine_config & config)209 void mrdo_state::mrdobl(machine_config &config)
210 {
211 	mrdo(config);
212 	m_maincpu->set_clock(8_MHz_XTAL/2);
213 }
214 
215 
216 
217 /***************************************************************************
218 
219   Game driver(s)
220 
221 ***************************************************************************/
222 
223 ROM_START( mrdo )
224 	ROM_REGION( 0x10000, "maincpu", 0 )
225 	ROM_LOAD( "a4-01.bin",    0x0000, 0x2000, CRC(03dcfba2) SHA1(c15e3d0c4225e0ca120bcd28aca39632575f8e11) )
226 	ROM_LOAD( "c4-02.bin",    0x2000, 0x2000, CRC(0ecdd39c) SHA1(c64b3363593911a676c647bf3dba8fe063fcb0de) )
227 	ROM_LOAD( "e4-03.bin",    0x4000, 0x2000, CRC(358f5dc2) SHA1(9fed1f5d1d04935d1b77687c8b2f3bfce970dc08) )
228 	ROM_LOAD( "f4-04.bin",    0x6000, 0x2000, CRC(f4190cfc) SHA1(24f5125d900f944294d4eda068b710c8f1c6d39f) )
229 
230 	ROM_REGION( 0x2000, "gfx1", 0 )
231 	ROM_LOAD( "s8-09.bin",    0x0000, 0x1000, CRC(aa80c5b6) SHA1(76f9f90deb74598470e7ed565237da38dd07e4e9) )
232 	ROM_LOAD( "u8-10.bin",    0x1000, 0x1000, CRC(d20ec85b) SHA1(9762bbe34d3fa209ea719807c723f57cb6bf4e01) )
233 
234 	ROM_REGION( 0x2000, "gfx2", 0 )
235 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
236 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
237 
238 	ROM_REGION( 0x2000, "gfx3", 0 )
239 	ROM_LOAD( "h5-05.bin",    0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
240 	ROM_LOAD( "k5-06.bin",    0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
241 
242 	ROM_REGION( 0x0080, "proms", 0 )
243 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
244 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
245 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
246 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
247 
248 	ROM_REGION( 0x0200, "pal16r6", 0 )
249 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
250 ROM_END
251 
252 ROM_START( mrdot )
253 	ROM_REGION( 0x10000, "maincpu", 0 )
254 	ROM_LOAD( "d1",           0x0000, 0x2000, CRC(3dcd9359) SHA1(bfe00450ee8822f437d87514f051ad1be6de9463) )
255 	ROM_LOAD( "d2",           0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
256 	ROM_LOAD( "d3",           0x4000, 0x2000, CRC(467d12d8) SHA1(7bb85e6a780de1c0c224229ee571cab39098f78d) )
257 	ROM_LOAD( "d4",           0x6000, 0x2000, CRC(fce9afeb) SHA1(26236a42c1c620975d4480c4315d0c6f112429b6) )
258 
259 	ROM_REGION( 0x2000, "gfx1", 0 )
260 	ROM_LOAD( "d9",           0x0000, 0x1000, CRC(de4cfe66) SHA1(c217dcc24305f3b4badfb778a1cf4e57c178d168) )
261 	ROM_LOAD( "d10",          0x1000, 0x1000, CRC(a6c2f38b) SHA1(7c132771bf385c8ed28d8c8bdfc3dbf0b4aa75e8) )
262 
263 	ROM_REGION( 0x2000, "gfx2", 0 )
264 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
265 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
266 
267 	ROM_REGION( 0x2000, "gfx3", 0 )
268 	ROM_LOAD( "h5-05.bin",    0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
269 	ROM_LOAD( "k5-06.bin",    0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
270 
271 	ROM_REGION( 0x0080, "proms", 0 )
272 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
273 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
274 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
275 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
276 
277 	ROM_REGION( 0x0200, "pal16r6", 0 )
278 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
279 ROM_END
280 
281 ROM_START( mrdofix )
282 	ROM_REGION( 0x10000, "maincpu", 0 )
283 	ROM_LOAD( "d1",           0x0000, 0x2000, CRC(3dcd9359) SHA1(bfe00450ee8822f437d87514f051ad1be6de9463) )
284 	ROM_LOAD( "d2",           0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
285 	ROM_LOAD( "dofix.d3",     0x4000, 0x2000, CRC(3a7d039b) SHA1(ac87a3c9fa6433d1700e858914a995dce35113fa) )
286 	ROM_LOAD( "dofix.d4",     0x6000, 0x2000, CRC(32db845f) SHA1(5c58532ae2cfab9bd81383824d970b20015c960e) )
287 
288 	ROM_REGION( 0x2000, "gfx1", 0 )
289 	ROM_LOAD( "d9",           0x0000, 0x1000, CRC(de4cfe66) SHA1(c217dcc24305f3b4badfb778a1cf4e57c178d168) )
290 	ROM_LOAD( "d10",          0x1000, 0x1000, CRC(a6c2f38b) SHA1(7c132771bf385c8ed28d8c8bdfc3dbf0b4aa75e8) )
291 
292 	ROM_REGION( 0x2000, "gfx2", 0 )
293 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
294 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
295 
296 	ROM_REGION( 0x2000, "gfx3", 0 )
297 	ROM_LOAD( "h5-05.bin",    0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
298 	ROM_LOAD( "k5-06.bin",    0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
299 
300 	ROM_REGION( 0x0080, "proms", 0 )
301 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
302 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
303 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
304 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
305 
306 	ROM_REGION( 0x0200, "pal16r6", 0 )
307 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
308 ROM_END
309 
310 ROM_START( mrlo )
311 	ROM_REGION( 0x10000, "maincpu", 0 )
312 	ROM_LOAD( "mrlo01.bin",   0x0000, 0x2000, CRC(6f455e7d) SHA1(82fbe05229f19fb849c90b41e3365be74f4f448f) )
313 	ROM_LOAD( "d2",           0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
314 	ROM_LOAD( "dofix.d3",     0x4000, 0x2000, CRC(3a7d039b) SHA1(ac87a3c9fa6433d1700e858914a995dce35113fa) )
315 	ROM_LOAD( "mrlo04.bin",   0x6000, 0x2000, CRC(49c10274) SHA1(e94b638f9888ebdff114f80e2c5906bbc81d9c6b) )
316 
317 	ROM_REGION( 0x2000, "gfx1", 0 )
318 	ROM_LOAD( "mrlo09.bin",   0x0000, 0x1000, CRC(fdb60d0d) SHA1(fe3502058a68247e5a55b930136f8d0cb80f894f) )
319 	ROM_LOAD( "mrlo10.bin",   0x1000, 0x1000, CRC(0492c10e) SHA1(782e541539537ab3f3a590770ca48bdc0fabdc10) )
320 
321 	ROM_REGION( 0x2000, "gfx2", 0 )
322 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
323 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
324 
325 	ROM_REGION( 0x2000, "gfx3", 0 )
326 	ROM_LOAD( "h5-05.bin",    0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
327 	ROM_LOAD( "k5-06.bin",    0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
328 
329 	ROM_REGION( 0x0080, "proms", 0 )
330 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
331 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
332 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
333 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
334 ROM_END
335 
336 ROM_START( mrdu )
337 	ROM_REGION( 0x10000, "maincpu", 0 )
338 	ROM_LOAD( "d1",           0x0000, 0x2000, CRC(3dcd9359) SHA1(bfe00450ee8822f437d87514f051ad1be6de9463) )
339 	ROM_LOAD( "d2",           0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
340 	ROM_LOAD( "d3",           0x4000, 0x2000, CRC(467d12d8) SHA1(7bb85e6a780de1c0c224229ee571cab39098f78d) )
341 	ROM_LOAD( "du4.bin",      0x6000, 0x2000, CRC(893bc218) SHA1(2b546989c4eef9f94594c50a48458c91e3f4983f) )
342 
343 	ROM_REGION( 0x2000, "gfx1", 0 )
344 	ROM_LOAD( "du9.bin",      0x0000, 0x1000, CRC(4090dcdc) SHA1(7f481f2e966d6a98fd7d82404afefc1483658ffa) )
345 	ROM_LOAD( "du10.bin",     0x1000, 0x1000, CRC(1e63ab69) SHA1(f0a4a12f818bc21c2bf0fe755c2e378b968b977b) )
346 
347 	ROM_REGION( 0x2000, "gfx2", 0 )
348 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
349 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
350 
351 	ROM_REGION( 0x2000, "gfx3", 0 )
352 	ROM_LOAD( "h5-05.bin",    0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
353 	ROM_LOAD( "k5-06.bin",    0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
354 
355 	ROM_REGION( 0x0080, "proms", 0 )
356 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
357 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
358 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
359 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
360 
361 	ROM_REGION( 0x0200, "pal16r6", 0 )
362 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) )
363 ROM_END
364 
365 ROM_START( mrdoy )
366 	ROM_REGION( 0x10000, "maincpu", 0 )
367 	ROM_LOAD( "dosnow.1",     0x0000, 0x2000, CRC(d3454e2c) SHA1(f8ecb9eec414badbcb65b7188d4a4d06739534cc) )
368 	ROM_LOAD( "dosnow.2",     0x2000, 0x2000, CRC(5120a6b2) SHA1(1db6dc3a91ac024e763179f425ad46d9d0aff8f9) )
369 	ROM_LOAD( "dosnow.3",     0x4000, 0x2000, CRC(96416dbe) SHA1(55f5262448b65899309f3e9e16c62b0c1e0b86c3) )
370 	ROM_LOAD( "dosnow.4",     0x6000, 0x2000, CRC(c05051b6) SHA1(6f528370dc097bf1550f4fa4b5f740214bc18f0b) )
371 
372 	ROM_REGION( 0x2000, "gfx1", 0 )
373 	ROM_LOAD( "dosnow.9",     0x0000, 0x1000, CRC(85d16217) SHA1(35cb4e4a9e55f42f7818aeaa3f72892d2ddc99aa) )
374 	ROM_LOAD( "dosnow.10",    0x1000, 0x1000, CRC(61a7f54b) SHA1(19b0074f098955d61e5dfab060873ac96fdb30b4) )
375 
376 	ROM_REGION( 0x2000, "gfx2", 0 )
377 	ROM_LOAD( "dosnow.8",     0x0000, 0x1000, CRC(2bd1239a) SHA1(43a36afbf7374578e9735956f54412823486b3ff) )
378 	ROM_LOAD( "dosnow.7",     0x1000, 0x1000, CRC(ac8ffddf) SHA1(9911524de6b4e9056944b92a53ac93de110d52bd) )
379 
380 	ROM_REGION( 0x2000, "gfx3", 0 )
381 	ROM_LOAD( "dosnow.5",     0x0000, 0x1000, CRC(7662d828) SHA1(559150326e3edc7ee062bfd962fe8d39f9423b45) )
382 	ROM_LOAD( "dosnow.6",     0x1000, 0x1000, CRC(413f88d1) SHA1(830df0def7289536e2d08e0517cdb6edbc947400) )
383 
384 	ROM_REGION( 0x0080, "proms", 0 )
385 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
386 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
387 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
388 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
389 
390 	ROM_REGION( 0x0200, "pal16r6", 0 )
391 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
392 ROM_END
393 
394 /* The white garbled graphics on the title screen should be the Fabremar logo (32px height), but it's drawn as
395    16px height, like the original Taito logo. Since the F4 ROM had a different label than the others and it matches
396    with 'mrdot', someone probably replaced the original F4 Fabremar ROM with the one from Taito. */
397 ROM_START( mrdofabr )
398 	ROM_REGION( 0x10000, "maincpu", 0 )
399 	ROM_LOAD( "md_fabre.a4", 0x0000, 0x2000, CRC(62593aed) SHA1(ac1cc4fa4ee3799e84938333a2a698d1ec0b527b) )
400 	ROM_LOAD( "md_fabre.b4", 0x2000, 0x2000, CRC(710058d8) SHA1(168cc179f2266bbf9437445bef9ff7d3358a8e6b) )
401 	ROM_LOAD( "md_fabre.c4", 0x4000, 0x2000, CRC(467d12d8) SHA1(7bb85e6a780de1c0c224229ee571cab39098f78d) )
402 	ROM_LOAD( "md_fabre.f4", 0x6000, 0x2000, BAD_DUMP CRC(fce9afeb) SHA1(26236a42c1c620975d4480c4315d0c6f112429b6) )
403 
404 	ROM_REGION( 0x2000, "gfx1", 0 )
405 	ROM_LOAD( "md_fabre.t8", 0x0000, 0x1000, CRC(f2dff901) SHA1(ddc3b38bfd8b822d7803ee51e2c13443b25e39ee) )
406 	ROM_LOAD( "md_fabre.u8", 0x1000, 0x1000, CRC(f3e443bd) SHA1(10e134962b0c7500f57d4058cbd0475f5c5fa6ab) )
407 
408 	ROM_REGION( 0x2000, "gfx2", 0 )
409 	ROM_LOAD( "md_fabre.r8", 0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
410 	ROM_LOAD( "md_fabre.n8", 0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
411 
412 	ROM_REGION( 0x2000, "gfx3", 0 )
413 	ROM_LOAD( "md_fabre.h5", 0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
414 	ROM_LOAD( "md_fabre.k5", 0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
415 
416 	ROM_REGION( 0x0080, "proms", 0 )
417 	ROM_LOAD( "82s123.u2",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
418 	ROM_LOAD( "82s123.t2",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
419 	ROM_LOAD( "82s123.f10n", 0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
420 	ROM_LOAD( "82s123.j10",  0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
421 
422 	ROM_REGION( 0x0200, "pal16r6", 0 )
423 	ROM_LOAD( "pal16r6.j2",  0x0000, 0x0117, BAD_DUMP CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // From parent, protected on this set
424 ROM_END
425 
426 ROM_START( mrdobl )
427 	ROM_REGION( 0x10000, "maincpu", 0 )
428 	ROM_LOAD( "d1.a4",  0x0000, 0x2000, CRC(03dcfba2) SHA1(c15e3d0c4225e0ca120bcd28aca39632575f8e11) )
429 	ROM_LOAD( "d2.c4",  0x2000, 0x2000, CRC(0ecdd39c) SHA1(c64b3363593911a676c647bf3dba8fe063fcb0de) )
430 	ROM_LOAD( "d3.e4",  0x4000, 0x2000, CRC(afc518e3) SHA1(abfb874e22ce375a2badecafaf95a3cd8c6179b1) )
431 	ROM_LOAD( "d4.f4",  0x6000, 0x2000, CRC(f4190cfc) SHA1(24f5125d900f944294d4eda068b710c8f1c6d39f) )
432 
433 	ROM_REGION( 0x2000, "gfx1", 0 )
434 	ROM_LOAD( "d9.s8",  0x0000, 0x1000, CRC(aa80c5b6) SHA1(76f9f90deb74598470e7ed565237da38dd07e4e9) )
435 	ROM_LOAD( "d10.u8", 0x1000, 0x1000, CRC(d20ec85b) SHA1(9762bbe34d3fa209ea719807c723f57cb6bf4e01) )
436 
437 	ROM_REGION( 0x2000, "gfx2", 0 )
438 	ROM_LOAD( "d8.r8",  0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
439 	ROM_LOAD( "d7.n8",  0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
440 
441 	ROM_REGION( 0x2000, "gfx3", 0 )
442 	ROM_LOAD( "d5.h5",  0x0000, 0x1000, CRC(e1218cc5) SHA1(d946613a1cf1c97f7533a4f8c2d0078d1b7daaa8) )
443 	ROM_LOAD( "d6.k5",  0x1000, 0x1000, CRC(b1f68b04) SHA1(25709cd81c03df51f27cd730fecf86a1daa9e27e) )
444 
445 	ROM_REGION( 0x0080, "proms", 0 )
446 	ROM_LOAD( "2_18s030.u2", 0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
447 	ROM_LOAD( "1_18s030.t2", 0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
448 	ROM_LOAD( "7603-5.e10",  0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
449 	ROM_LOAD( "82s123.j10",  0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
450 
451 	ROM_REGION( 0x0104, "pal16r6", 0 )
452 	ROM_LOAD( "u001_pal16r6cn.j2", 0x0000, 0x0104, CRC(84dbe498) SHA1(5863342b2db85ffef31b5e9ce26bfd8fca9923b0) )
453 ROM_END
454 
455 ROM_START( yankeedo )
456 	ROM_REGION( 0x10000, "maincpu", 0 )
457 	ROM_LOAD( "a4-01.bin",    0x0000, 0x2000, CRC(03dcfba2) SHA1(c15e3d0c4225e0ca120bcd28aca39632575f8e11) )
458 	ROM_LOAD( "yd_d2.c4",     0x2000, 0x2000, CRC(7c9d7ce0) SHA1(37889575c7c83cb647008b038e4efdc87355bd3e) )
459 	ROM_LOAD( "e4-03.bin",    0x4000, 0x2000, CRC(358f5dc2) SHA1(9fed1f5d1d04935d1b77687c8b2f3bfce970dc08) )
460 	ROM_LOAD( "f4-04.bin",    0x6000, 0x2000, CRC(f4190cfc) SHA1(24f5125d900f944294d4eda068b710c8f1c6d39f) )
461 
462 	ROM_REGION( 0x2000, "gfx1", 0 )
463 	ROM_LOAD( "s8-09.bin",    0x0000, 0x1000, CRC(aa80c5b6) SHA1(76f9f90deb74598470e7ed565237da38dd07e4e9) )
464 	ROM_LOAD( "u8-10.bin",    0x1000, 0x1000, CRC(d20ec85b) SHA1(9762bbe34d3fa209ea719807c723f57cb6bf4e01) )
465 
466 	ROM_REGION( 0x2000, "gfx2", 0 )
467 	ROM_LOAD( "r8-08.bin",    0x0000, 0x1000, CRC(dbdc9ffa) SHA1(93f29fc106283eecbba3fd69cf3c4658aa38ab9f) )
468 	ROM_LOAD( "n8-07.bin",    0x1000, 0x1000, CRC(4b9973db) SHA1(8766c51a345a5e63446e65614c6f665ab5fbe0d7) )
469 
470 	ROM_REGION( 0x2000, "gfx3", 0 )
471 	ROM_LOAD( "yd_d5.h5",     0x0000, 0x1000, CRC(f530b79b) SHA1(bffc4ddf8aa26933c8a15ed40bfa0b4cee85b408) )
472 	ROM_LOAD( "yd_d6.k5",     0x1000, 0x1000, CRC(790579aa) SHA1(89d8a77d2046cf8cfc393e0f08d361d1886bfec1) )
473 
474 	ROM_REGION( 0x0080, "proms", 0 )
475 	ROM_LOAD( "u02--2.bin",   0x0000, 0x0020, CRC(238a65d7) SHA1(a5b20184a1989db23544296331462ec4d7be7516) ) // palette (high bits)
476 	ROM_LOAD( "t02--3.bin",   0x0020, 0x0020, CRC(ae263dc0) SHA1(7072c100b9d692f5bb12b0c9e304425f534481e2) ) // palette (low bits)
477 	ROM_LOAD( "f10--1.bin",   0x0040, 0x0020, CRC(16ee4ca2) SHA1(fcba4d103708b9711452009cd29c4f88d2f64cd3) ) // sprite color lookup table
478 	ROM_LOAD( "j10--4.bin",   0x0060, 0x0020, CRC(ff7fe284) SHA1(3ac8e30011c1fcba0ee8f4dc932f82296c3ba143) ) // timing (not used)
479 
480 	ROM_REGION( 0x0200, "pal16r6", 0 )
481 	ROM_LOAD( "j2-u001.bin",  0x0000, 0x0117, CRC(badf5876) SHA1(b301cfc7f8e83408fdcb742f552a0414af6aa16e) ) // PAL16R6 converted to GAL16V8
482 ROM_END
483 
484 
485 GAME( 1982, mrdo,     0,    mrdo,   mrdo, mrdo_state, empty_init, ROT270, "Universal",                 "Mr. Do!",                    MACHINE_SUPPORTS_SAVE )
486 GAME( 1982, mrdoy,    mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "Universal",                 "Mr. Do! (prototype)",        MACHINE_SUPPORTS_SAVE ) /* aka "Yukidaruma" */
487 GAME( 1982, mrdot,    mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (Taito)",            MACHINE_SUPPORTS_SAVE )
488 GAME( 1982, mrdofix,  mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "Universal (Taito license)", "Mr. Do! (bugfixed)",         MACHINE_SUPPORTS_SAVE )
489 GAME( 1982, mrlo,     mrdo, mrlo,   mrdo, mrdo_state, empty_init, ROT270, "bootleg",                   "Mr. Lo!",                    MACHINE_SUPPORTS_SAVE )
490 GAME( 1982, mrdu,     mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "bootleg",                   "Mr. Du!",                    MACHINE_SUPPORTS_SAVE )
491 GAME( 1982, mrdofabr, mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "bootleg (Fabremar)",        "Mr. Do! (Fabremar bootleg)", MACHINE_SUPPORTS_SAVE )
492 GAME( 1982, mrdobl,   mrdo, mrdobl, mrdo, mrdo_state, empty_init, ROT270, "bootleg",                   "Mr. Do! (bootleg)",          MACHINE_SUPPORTS_SAVE )
493 GAME( 1982, yankeedo, mrdo, mrdo,   mrdo, mrdo_state, empty_init, ROT270, "hack",                      "Yankee DO!",                 MACHINE_SUPPORTS_SAVE )
494