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