1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood, Mike Coates
3 /***************************************************************************
4 
5   Snow Brothers (Toaplan) / SemiCom Hardware
6   uses Kaneko's Pandora sprite chip (also used in DJ Boy, Air Buster ..)
7 
8 Snow Bros Nick & Tom
9 Toaplan, 1990
10 
11     PCB Layout
12     ----------
13     MIN16-02
14 
15     |------------------------------------------|
16     | VOL     YM3812  6116  4464  4464         |
17     | LA4460  YM3014        4464  4464         |
18     |       458   SBROS-4.29         SBROS1.40 |
19     |   2003       Z80B     PANDORA            |
20     |J                    D41101C-1 LS07  LS32 |
21     |A SBROS-3A.5 SBROS-2A.6        LS139 LS174|
22     |M                  LS245 LS74  LS04  16MHz|
23     |M   6264     6264  F32   LS74  LS74       |
24     |A      68000       LS20  F138  LS04  12MHz|
25     |                   LS04  LS148 LS251 LS00 |
26     | LS273 LS245 LS245 LS158 LS257 LS257 LS32 |
27     |                                          |
28     | LS273  6116  6116 LS157   DSW2  DSW1     |
29     |------------------------------------------|
30 
31     Notes:
32            68k clock: 8.000MHz
33           Z80B clock: 6.000MHz
34         YM3812 clock: 3.000MHz
35                VSync: 57.5Hz
36                HSync: 15.68kHz
37 
38   driver by Mike Coates
39 
40   Hyper Pacman addition by David Haywood
41    + some bits by Nicola Salmoria
42 
43  !!DO NOT TRUST THE SERVICE MODES FOR DIPSWITCH SETTINGS!!
44 
45 Stephh's notes (hyperpac):
46 
47   - According to the "Language" Dip Switch, this game is a Korean game.
48      (although the Language Dipswitch doesn't affect language, but yes
49       I believe SemiCom to be a Korean Company)
50   - There is no "cocktail mode", nor way to flip the screen.
51 
52 Notes:
53 
54 Cookie & Bibi 3
55 This game is quite buggy.  The test mode is incomplete and displays garbage
56 on the 'Dipswitch settings' screens, and during some of the attract mode
57 scenes the credit counter is not updated when you insert coins until the next
58 scene.  Both these bugs are verified as occurring on the original hardware.
59 
60 Honey Doll / Twin Adventure
61 
62 These appear to have clipping problems on the left / right edges, but this
63 may be correct, the sprites which should be drawn there are simply blanked
64 out of the sprite list at that point.. (verify on real hw)
65 
66 Ma Cheon Ru
67 
68 The electrified maze + ball minigame appears unresponsive to controls, this
69 is because it actually requires you to move the joysticks in a circular
70 motion through all 8 directions at a very even speed, a task which is
71 practically impossible to perform on keyboard, and not even that easy with
72 a joystick.  This is not an emulation bug.
73 
74 
75 ***************************************************************************/
76 
77 #include "emu.h"
78 #include "includes/snowbros.h"
79 
80 #include "cpu/m68000/m68000.h"
81 #include "cpu/mcs51/mcs51.h" // for semicom mcu
82 #include "cpu/z80/z80.h"
83 #include "machine/watchdog.h"
84 #include "sound/ym2151.h"
85 #include "sound/3812intf.h"
86 
87 #include "speaker.h"
88 
89 
snowbros_flipscreen_w(uint8_t data)90 void snowbros_state::snowbros_flipscreen_w(uint8_t data)
91 {
92 	m_pandora->flip_screen_set(!BIT(data, 7));
93 }
94 
95 
bootleg_flipscreen_w(uint8_t data)96 void snowbros_state::bootleg_flipscreen_w(uint8_t data)
97 {
98 	flip_screen_set(~data & 0x80);
99 }
100 
101 
screen_update_snowbros(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)102 uint32_t snowbros_state::screen_update_snowbros(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
103 {
104 	/* This clears & redraws the entire screen each pass */
105 	bitmap.fill(0xf0, cliprect);
106 	m_pandora->update(bitmap, cliprect);
107 	return 0;
108 }
109 
110 
WRITE_LINE_MEMBER(snowbros_state::screen_vblank_snowbros)111 WRITE_LINE_MEMBER(snowbros_state::screen_vblank_snowbros)
112 {
113 	// rising edge
114 	if (state)
115 	{
116 		m_pandora->eof();
117 	}
118 }
119 
120 
121 
snowbros_irq4_ack_w(uint16_t data)122 void snowbros_state::snowbros_irq4_ack_w(uint16_t data)
123 {
124 	m_maincpu->set_input_line(4, CLEAR_LINE);
125 }
126 
snowbros_irq3_ack_w(uint16_t data)127 void snowbros_state::snowbros_irq3_ack_w(uint16_t data)
128 {
129 	m_maincpu->set_input_line(3, CLEAR_LINE);
130 }
131 
snowbros_irq2_ack_w(uint16_t data)132 void snowbros_state::snowbros_irq2_ack_w(uint16_t data)
133 {
134 	m_maincpu->set_input_line(2, CLEAR_LINE);
135 }
136 
TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros_irq)137 TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros_irq)
138 {
139 	int scanline = param;
140 
141 	if(scanline == 240)
142 		m_maincpu->set_input_line(2, ASSERT_LINE);
143 
144 	if(scanline == 128)
145 		m_maincpu->set_input_line(3, ASSERT_LINE);
146 
147 	if(scanline == 32)
148 		m_maincpu->set_input_line(4, ASSERT_LINE);
149 }
150 
TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros3_irq)151 TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros3_irq)
152 {
153 	int status = m_oki->read();
154 	int scanline = param;
155 
156 	if(scanline == 240)
157 		m_maincpu->set_input_line(2, ASSERT_LINE);
158 
159 	if(scanline == 128)
160 		m_maincpu->set_input_line(3, ASSERT_LINE);
161 
162 	if(scanline == 32)
163 		m_maincpu->set_input_line(4, ASSERT_LINE);
164 
165 	if (m_sb3_music_is_playing)
166 	{
167 		if ((status&0x08)==0x00)
168 		{
169 			m_oki->write(0x80|m_sb3_music);
170 			m_oki->write(0x00|0x82);
171 		}
172 
173 	}
174 	else
175 	{
176 		if ((status&0x08)==0x08)
177 		{
178 			m_oki->write(0x40);     /* Stop playing music */
179 		}
180 	}
181 
182 }
183 
toto_read(offs_t offset,uint16_t mem_mask)184 uint16_t snowbros_state::toto_read(offs_t offset, uint16_t mem_mask)
185 {
186 	int pc = m_maincpu->pc();
187 	if ((pc!= 0x3f010) && (pc!= 0x38008)) printf("toto prot %08x %04x\n", pc, mem_mask);
188 	return 0x0700;
189 }
190 
191 /* Snow Bros Memory Map */
192 
snowbros_map(address_map & map)193 void snowbros_state::snowbros_map(address_map &map)
194 {
195 	map(0x000000, 0x03ffff).rom();
196 	map(0x100000, 0x103fff).ram();
197 	map(0x200000, 0x200001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
198 	map(0x300001, 0x300001).r("soundlatch2", FUNC(generic_latch_8_device::read));
199 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
200 	map(0x400000, 0x400000).w(FUNC(snowbros_state::snowbros_flipscreen_w));
201 	map(0x500000, 0x500001).portr("DSW1");
202 	map(0x500002, 0x500003).portr("DSW2");
203 	map(0x500004, 0x500005).portr("SYSTEM");
204 	map(0x600000, 0x6001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
205 	map(0x700000, 0x701fff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_LSB_r), FUNC(kaneko_pandora_device::spriteram_LSB_w));
206 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
207 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
208 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
209 }
210 
sound_map(address_map & map)211 void snowbros_state::sound_map(address_map &map)
212 {
213 	map(0x0000, 0x7fff).rom();
214 	map(0x8000, 0x87ff).ram();
215 }
216 
sound_io_map(address_map & map)217 void snowbros_state::sound_io_map(address_map &map)
218 {
219 	map.global_mask(0xff);
220 	map(0x02, 0x03).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
221 	map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read));
222 	map(0x04, 0x04).w("soundlatch2", FUNC(generic_latch_8_device::write)); // goes back to the main CPU, checked during boot
223 }
224 
225 
226 /* Semicom AT89C52 MCU */
227 
228 // probably not endian safe
prot_p0_w(uint8_t data)229 void snowbros_state::prot_p0_w(uint8_t data)
230 {
231 	uint16_t word = m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset];
232 	word = (word & 0xff00) | (data << 0);
233 	m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset] = word;
234 }
235 
236 // probably not endian safe
prot_p1_w(uint8_t data)237 void snowbros_state::prot_p1_w(uint8_t data)
238 {
239 	uint16_t word = m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset];
240 	word = (word & 0x00ff) | (data << 8);
241 	m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset] = word;
242 }
243 
prot_p2_w(uint8_t data)244 void snowbros_state::prot_p2_w(uint8_t data)
245 {
246 	// offset
247 	m_semicom_prot_offset = data;
248 }
249 
250 /* Winter Bobble - bootleg GFX chip */
251 
wintbob_map(address_map & map)252 void snowbros_state::wintbob_map(address_map &map)
253 {
254 	map(0x000000, 0x03ffff).rom();
255 	map(0x100000, 0x103fff).ram();
256 	map(0x200000, 0x200001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
257 	map(0x300001, 0x300001).r("soundlatch2", FUNC(generic_latch_8_device::read));
258 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
259 	map(0x400000, 0x400000).w(FUNC(snowbros_state::bootleg_flipscreen_w));
260 	map(0x500000, 0x500001).portr("DSW1");
261 	map(0x500002, 0x500003).portr("DSW2");
262 	map(0x500004, 0x500005).portr("SYSTEM");
263 	map(0x600000, 0x6001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
264 	map(0x700000, 0x701fff).ram().share("spriteram16b");
265 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
266 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
267 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
268 }
269 
270 /* Honey Dolls */
271 
honeydol_map(address_map & map)272 void snowbros_state::honeydol_map(address_map &map)
273 {
274 	map(0x000000, 0x03ffff).rom();
275 	map(0x100000, 0x10ffff).ram().share("hyperpac_ram");
276 	map(0x200000, 0x200001).nopw();    /* ? */
277 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
278 	map(0x400000, 0x400001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
279 	map(0x500000, 0x500001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
280 	map(0x600000, 0x600001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
281 	map(0x800000, 0x800001).nopw();    /* ? */
282 	map(0x900000, 0x900001).portr("DSW1");
283 	map(0x900002, 0x900003).portr("DSW2");
284 	map(0x900004, 0x900005).portr("SYSTEM");
285 	map(0xa00000, 0xa007ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
286 	map(0xb00000, 0xb01fff).ram().share("spriteram16b");
287 }
288 
honeydol_sound_map(address_map & map)289 void snowbros_state::honeydol_sound_map(address_map &map)
290 {
291 	map(0x0000, 0x7fff).rom();
292 	map(0x8000, 0x87ff).ram();
293 	map(0xe010, 0xe010).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
294 }
295 
honeydol_sound_io_map(address_map & map)296 void snowbros_state::honeydol_sound_io_map(address_map &map)
297 {
298 	map.global_mask(0xff);
299 	map(0x02, 0x03).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));                                // not connected?
300 	map(0x04, 0x04).r(m_soundlatch, FUNC(generic_latch_8_device::read));
301 	map(0x04, 0x04).nopw(); // still written but never actually read by the main CPU
302 }
303 
304 /* Twin Adventure */
305 
twinadv_map(address_map & map)306 void snowbros_state::twinadv_map(address_map &map)
307 {
308 	map(0x000000, 0x03ffff).rom();
309 	map(0x100000, 0x10ffff).ram();
310 	map(0x200000, 0x200001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
311 	map(0x300001, 0x300001).r("soundlatch2", FUNC(generic_latch_8_device::read));
312 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
313 	map(0x400000, 0x400000).w(FUNC(snowbros_state::bootleg_flipscreen_w));
314 
315 	map(0x500000, 0x500001).portr("DSW1");
316 	map(0x500002, 0x500003).portr("DSW2");
317 	map(0x500004, 0x500005).portr("SYSTEM");
318 	map(0x600000, 0x6001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
319 	map(0x700000, 0x701fff).ram().share("spriteram16b");
320 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
321 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
322 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
323 }
324 
twinadv_oki_bank_w(uint8_t data)325 void snowbros_state::twinadv_oki_bank_w(uint8_t data)
326 {
327 	int bank = (data &0x02)>>1;
328 
329 	if (data&0xfd) logerror ("Unused bank bits! %02x\n",data);
330 
331 	m_oki->set_rom_bank(bank);
332 }
333 
twinadv_sound_io_map(address_map & map)334 void snowbros_state::twinadv_sound_io_map(address_map &map)
335 {
336 	map.global_mask(0xff);
337 	map(0x02, 0x02).r(m_soundlatch, FUNC(generic_latch_8_device::read));
338 	map(0x02, 0x02).w("soundlatch2", FUNC(generic_latch_8_device::write)); // back to 68k?
339 	map(0x04, 0x04).w(FUNC(snowbros_state::twinadv_oki_bank_w)); // oki bank?
340 	map(0x06, 0x06).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
341 }
342 
343 
344 /* SemiCom Memory Map
345 
346 the SemiCom games have slightly more ram and are protected
347 sound hardware is also different
348 
349 */
350 
hyperpac_map(address_map & map)351 void snowbros_state::hyperpac_map(address_map &map)
352 {
353 	map(0x000000, 0x0fffff).rom();
354 	map(0x100000, 0x10ffff).ram().share("hyperpac_ram");
355 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
356 //  map(0x400000, 0x400001) ???
357 	map(0x500000, 0x500001).portr("DSW1");
358 	map(0x500002, 0x500003).portr("DSW2");
359 	map(0x500004, 0x500005).portr("SYSTEM");
360 
361 	map(0x600000, 0x6001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
362 	map(0x700000, 0x701fff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_LSB_r), FUNC(kaneko_pandora_device::spriteram_LSB_w));
363 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
364 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
365 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
366 }
367 
hyperpac_sound_map(address_map & map)368 void snowbros_state::hyperpac_sound_map(address_map &map)
369 {
370 	map(0x0000, 0xcfff).rom();
371 	map(0xd000, 0xd7ff).ram();
372 	map(0xf000, 0xf001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
373 	map(0xf002, 0xf002).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
374 	map(0xf008, 0xf008).r(m_soundlatch, FUNC(generic_latch_8_device::read));
375 }
376 
377 /* Same volume used for all samples at the Moment, could be right, we have no
378    way of knowing .. */
sb3_sound_r()379 uint16_t snowbros_state::sb3_sound_r()
380 {
381 	return 0x0003;
382 }
383 
sb3_play_music(int data)384 void snowbros_state::sb3_play_music(int data)
385 {
386 	uint8_t *snd;
387 
388 	/* sample is actually played in interrupt function so it loops */
389 	m_sb3_music = data;
390 
391 	switch (data)
392 	{
393 		case 0x23:
394 		case 0x26:
395 		snd = memregion("oki")->base();
396 		memcpy(snd+0x20000, snd+0x80000+0x00000, 0x20000);
397 		m_sb3_music_is_playing = 1;
398 		break;
399 
400 		case 0x24:
401 		snd = memregion("oki")->base();
402 		memcpy(snd+0x20000, snd+0x80000+0x20000, 0x20000);
403 		m_sb3_music_is_playing = 1;
404 		break;
405 
406 		case 0x25:
407 		case 0x27:
408 		case 0x28:
409 		case 0x29:
410 		case 0x2a:
411 		case 0x2b:
412 		case 0x2c:
413 		case 0x2d:
414 		snd = memregion("oki")->base();
415 		memcpy(snd+0x20000, snd+0x80000+0x40000, 0x20000);
416 		m_sb3_music_is_playing = 1;
417 		break;
418 
419 		case 0x2e:
420 		m_sb3_music_is_playing = 0;
421 		break;
422 	}
423 }
424 
sb3_play_sound(int data)425 void snowbros_state::sb3_play_sound (int data)
426 {
427 	int status = m_oki->read();
428 
429 	if ((status&0x01)==0x00)
430 	{
431 		m_oki->write(0x80|data);
432 		m_oki->write(0x00|0x12);
433 	}
434 	else if ((status&0x02)==0x00)
435 	{
436 		m_oki->write(0x80|data);
437 		m_oki->write(0x00|0x22);
438 	}
439 	else if ((status&0x04)==0x00)
440 	{
441 		m_oki->write(0x80|data);
442 		m_oki->write(0x00|0x42);
443 	}
444 
445 
446 }
447 
sb3_sound_w(uint16_t data)448 void snowbros_state::sb3_sound_w(uint16_t data)
449 {
450 	if (data == 0x00fe)
451 	{
452 		m_sb3_music_is_playing = 0;
453 		m_oki->write(0x78);       /* Stop sounds */
454 	}
455 	else /* the alternating 0x00-0x2f or 0x30-0x5f might be something to do with the channels */
456 	{
457 		data = data>>8;
458 
459 		if (data <= 0x21)
460 		{
461 			sb3_play_sound(data);
462 		}
463 
464 		if (data>=0x22 && data<=0x31)
465 		{
466 			sb3_play_music(data);
467 		}
468 
469 		if ((data>=0x30) && (data<=0x51))
470 		{
471 			sb3_play_sound(data-0x30);
472 		}
473 
474 		if (data>=0x52 && data<=0x5f)
475 		{
476 			sb3_play_music(data-0x30);
477 		}
478 
479 	}
480 }
481 
482 
483 
snowbros3_map(address_map & map)484 void snowbros_state::snowbros3_map(address_map &map)
485 {
486 	map(0x000000, 0x03ffff).rom();
487 	map(0x100000, 0x103fff).ram();
488 	map(0x200000, 0x200001).w("watchdog", FUNC(watchdog_timer_device::reset16_w));
489 	map(0x300000, 0x300001).r(FUNC(snowbros_state::sb3_sound_r)); // ?
490 	map(0x300000, 0x300001).w(FUNC(snowbros_state::sb3_sound_w));  // ?
491 	map(0x400000, 0x400000).w(FUNC(snowbros_state::bootleg_flipscreen_w));
492 	map(0x500000, 0x500001).portr("DSW1");
493 	map(0x500002, 0x500003).portr("DSW2");
494 	map(0x500004, 0x500005).portr("SYSTEM");
495 	map(0x600000, 0x6003ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
496 	map(0x700000, 0x7021ff).ram().share("spriteram16b");
497 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
498 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
499 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
500 }
501 
502 /* Final Tetris */
503 
finalttr_map(address_map & map)504 void snowbros_state::finalttr_map(address_map &map)
505 {
506 	map(0x000000, 0x0fffff).rom();
507 	map(0x100000, 0x103fff).ram().share("hyperpac_ram");
508 	map(0x300001, 0x300001).w(m_soundlatch, FUNC(generic_latch_8_device::write));
509 //  map(0x400000, 0x400001) ???
510 
511 	map(0x500000, 0x500001).portr("DSW1");
512 	map(0x500002, 0x500003).portr("DSW2");
513 	map(0x500004, 0x500005).portr("SYSTEM");
514 
515 	map(0x600000, 0x6001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
516 	map(0x700000, 0x701fff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_LSB_r), FUNC(kaneko_pandora_device::spriteram_LSB_w));
517 	map(0x800000, 0x800001).w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
518 	map(0x900000, 0x900001).w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
519 	map(0xa00000, 0xa00001).w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
520 }
521 
522 
523 // Yutnori protection.
524 // The sequence MEN is sent to the protection device, followed by the code request (4 bytes in all).
525 // After each byte, a number of NOPs are executed to give the device time to catch up.
526 // After the 4th byte, the code reads the device to get its response.
yutnori_prot_r()527 uint16_t snowbros_state::yutnori_prot_r()
528 {
529 	switch(m_yutnori_prot_val) // the 4th byte
530 	{
531 		case 0x33: // C3B6
532 			return 0xcc;
533 		case 0x60: // 4878
534 			return 0xf9;
535 		case 0xb8: // D820
536 			return 0x74;
537 	}
538 	logerror("%s: Unhandled protection sequence found: %02X\n", machine().describe_context(), m_yutnori_prot_val);
539 	return 0;
540 }
541 
yutnori_prot_w(uint16_t data)542 void snowbros_state::yutnori_prot_w(uint16_t data)
543 {
544 	m_yutnori_prot_val = data;
545 }
546 
yutnori_map(address_map & map)547 void snowbros_state::yutnori_map(address_map &map)
548 {
549 	map(0x000000, 0x03ffff).rom();
550 
551 	// 0x100000  clr.w on startup
552 
553 	map(0x200000, 0x200001).rw(FUNC(snowbros_state::yutnori_prot_r),FUNC(snowbros_state::yutnori_prot_w)); // protection
554 
555 	map(0x300000, 0x300001).portr("DSW1");
556 	map(0x300002, 0x300003).portr("DSW2");
557 	map(0x300004, 0x300005).portr("SYSTEM");
558 
559 	// could be one of the OKIs? but gets value to write from RAM, always seems to be 0?
560 	map(0x30000c, 0x30000d).nopw();
561 	map(0x30000e, 0x30000f).nopr(); //.r(FUNC(snowbros_state::yutnori_unk_r)); // ??
562 
563 //  map(0x400000, 0x400001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); // maybe?
564 	map(0x400000, 0x400001).noprw();
565 
566 	map(0x500000, 0x5001ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
567 
568 	map(0x600000, 0x601fff).rw(m_pandora, FUNC(kaneko_pandora_device::spriteram_LSB_r), FUNC(kaneko_pandora_device::spriteram_LSB_w));
569 
570 	map(0x700000, 0x70ffff).ram();
571 
572 	map(0x800000, 0x800001).nopr().w(FUNC(snowbros_state::snowbros_irq4_ack_w));  /* IRQ 4 acknowledge */
573 	map(0x900000, 0x900001).nopr().w(FUNC(snowbros_state::snowbros_irq3_ack_w));  /* IRQ 3 acknowledge */
574 	map(0xa00000, 0xa00001).nopr().w(FUNC(snowbros_state::snowbros_irq2_ack_w));  /* IRQ 2 acknowledge */
575 }
576 
577 static INPUT_PORTS_START( snowbros )
578 	PORT_START("DSW1")  /* 500001 */
579 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Region ) )       PORT_DIPLOCATION("SW1:1") /* Listed as "NOT USE" in the manual */
580 	PORT_DIPSETTING(    0x00, DEF_STR( Europe ) )
581 	PORT_DIPSETTING(    0x01, "America (Romstar license)" )
582 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SW1:2")
583 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
584 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
585 	PORT_SERVICE_DIPLOC(  0x04, IP_ACTIVE_LOW, "SW1:3" )
586 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:4")
587 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
588 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
589 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )   PORT_DIPLOCATION("SW1:5,6")
590 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
591 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
592 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
593 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
594 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
595 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
596 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
597 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )   PORT_DIPLOCATION("SW1:7,8")
598 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
599 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
600 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
601 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
602 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
603 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
604 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
605 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
606 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
607 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
608 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
609 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
610 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
611 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
612 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
613 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
614 													/* probably VBlank */
615 
616 	PORT_START("DSW2")  /* 500003 */
617 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW2:1,2")
618 	PORT_DIPSETTING(    0x02, DEF_STR( Easy ) )
619 	PORT_DIPSETTING(    0x03, DEF_STR( Normal ) )
620 	PORT_DIPSETTING(    0x01, DEF_STR( Hard ) )
621 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
622 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:3,4")
623 	PORT_DIPSETTING(    0x04, "100k and every 200k" )
624 	PORT_DIPSETTING(    0x0c, "100k Only" )
625 	PORT_DIPSETTING(    0x08, "200k Only" )
626 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
627 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )        PORT_DIPLOCATION("SW2:5,6")
628 	PORT_DIPSETTING(    0x20, "1" )
629 	PORT_DIPSETTING(    0x00, "2" )
630 	PORT_DIPSETTING(    0x30, "3" )
631 	PORT_DIPSETTING(    0x10, "4" )
632 	PORT_DIPNAME( 0x40, 0x40, "Invulnerability" )       PORT_DIPLOCATION("SW2:7")
633 	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
634 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
635 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SW2:8") /* Listed as "NOT USE" in the manual */
636 	PORT_DIPSETTING(    0x00, DEF_STR( No ) )
637 	PORT_DIPSETTING(    0x80, DEF_STR( Yes ) )
638 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
639 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
640 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
641 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
642 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
643 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
644 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
645 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
646 
647 	PORT_START("SYSTEM")    /* 500005 */
648 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
649 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
650 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
651 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
652 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
653 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
654 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
655 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
656 INPUT_PORTS_END
657 
658 static INPUT_PORTS_START( snowbroj )
659 	PORT_INCLUDE(snowbros)
660 
661 	PORT_MODIFY("DSW1")
662 	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:1") /* Listed as "NOT USE" in the manual */
663 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
664 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
665 INPUT_PORTS_END
666 
667 static INPUT_PORTS_START( honeydol )
668 	PORT_START("DSW1")
669 	PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
670 	PORT_DIPSETTING(      0x0000, DEF_STR( 3C_1C ) )
671 	PORT_DIPSETTING(      0x0001, DEF_STR( 2C_1C ) )
672 	PORT_DIPSETTING(      0x0003, DEF_STR( 1C_1C ) )
673 	PORT_DIPSETTING(      0x0002, DEF_STR( 1C_2C ) )
674 	PORT_DIPNAME( 0x0004, 0x0004, "Show Girls" )
675 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
676 	PORT_DIPSETTING(      0x0004, DEF_STR( On ) )
677 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
678 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
679 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
680 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) )
681 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
682 	PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
683 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
684 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
685 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
686 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Level_Select ) ) /* Up & Down to set level, then punch to start */
687 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
688 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
689 	PORT_DIPNAME( 0x0080, 0x0080, "Slide Show On Boot-up" )  /* Joystick to scroll. Seems to happen once at boot up, then the game auto starts */
690 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
691 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
692 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
693 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
694 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
695 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
696 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
697 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
698 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
699 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")    /* Must be low or game stops! */
700 
701 	PORT_START("DSW2")
702 	PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
703 	PORT_DIPSETTING(      0x0003, DEF_STR( Normal ) )
704 	PORT_DIPSETTING(      0x0002, DEF_STR( Hard ) )
705 	PORT_DIPSETTING(      0x0001, DEF_STR( Harder ) )
706 	PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
707 	PORT_DIPNAME( 0x000c, 0x000c, "Timer Speed" )     /* Based on Normal Difficulty, Stage 1-1 first try */
708 	PORT_DIPSETTING(      0x000c, DEF_STR( Normal ) ) /* About 40 Seconds */
709 	PORT_DIPSETTING(      0x0008, "Fast" )            /* About 35 Seconds */
710 	PORT_DIPSETTING(      0x0004, "Faster" )          /* About 30 Seconds */
711 	PORT_DIPSETTING(      0x0000, "Fastest" )         /* About 20 Seconds */
712 	PORT_DIPNAME( 0x0030, 0x0020, DEF_STR( Lives ) )
713 	PORT_DIPSETTING(      0x0000, "1" )
714 	PORT_DIPSETTING(      0x0010, "2" )
715 	PORT_DIPSETTING(      0x0020, "3" )
716 	PORT_DIPSETTING(      0x0030, "5" )
717 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
718 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
719 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
720 	PORT_DIPNAME( 0x0080, 0x0080, "Max Vs Round" )
721 	PORT_DIPSETTING(      0x0080, "3" ) /* 44 Seconds each */
722 	PORT_DIPSETTING(      0x0000, "1" ) /* 89 Seconds */
723 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
724 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
725 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
726 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
727 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
728 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
729 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
730 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
731 
732 	PORT_START("SYSTEM")
733 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
734 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
735 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
736 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
737 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
738 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
739 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
740 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
741 INPUT_PORTS_END
742 
743 static INPUT_PORTS_START( twinadv )
744 	PORT_START("DSW1")
745 	PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
746 	PORT_DIPSETTING(      0x0000, DEF_STR( 3C_1C ) )
747 	PORT_DIPSETTING(      0x0001, DEF_STR( 2C_1C ) )
748 	PORT_DIPSETTING(      0x0003, DEF_STR( 1C_1C ) )
749 	PORT_DIPSETTING(      0x0002, DEF_STR( 1C_2C ) )
750 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
751 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
752 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
753 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
754 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
755 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
756 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) )
757 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
758 	PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
759 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Flip_Screen ) )
760 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
761 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
762 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
763 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
764 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
765 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Level_Select ) ) /* P1 Button 2 to advance, P1 Button 1 to start, starts game with 10 credits */
766 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
767 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
768 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
769 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
770 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
771 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
772 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
773 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
774 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
775 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")    /* Must be low or game stops! */
776 
777 	PORT_START("DSW2")
778 	PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
779 	PORT_DIPSETTING(      0x0003, DEF_STR( Normal ) )
780 	PORT_DIPSETTING(      0x0002, DEF_STR( Hard ) )
781 	PORT_DIPSETTING(      0x0001, DEF_STR( Harder ) )
782 	PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
783 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Lives ) )
784 	PORT_DIPSETTING(      0x0004, "3" )
785 	PORT_DIPSETTING(      0x0000, "5" )
786 	PORT_DIPNAME( 0x0008, 0x0008, "Ticket Mode #1" ) /* Shows on title screen "EVERY 4 GAMES = 1 TICKET" same as 0x0040 below? */
787 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
788 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
789 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
790 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
791 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
792 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
793 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
794 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
795 	PORT_DIPNAME( 0x0040, 0x0040, "Ticket Mode #2" ) /* Shows on title screen "EVERY 4 GAMES = 1 TICKET" same as 0x0008 above? */
796 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
797 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
798 	PORT_DIPNAME( 0x80,   0x0080, DEF_STR( Free_Play ) ) /* Always shows 24 credits */
799 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
800 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
801 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
802 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
803 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
804 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
805 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
806 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
807 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
808 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
809 
810 	PORT_START("SYSTEM")
811 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
812 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
813 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
814 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
815 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
816 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
817 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
818 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
819 INPUT_PORTS_END
820 
821 static INPUT_PORTS_START( 4in1boot )
822 	PORT_START("DSW1")  /* 500001 */
823 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
824 	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
825 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
826 	PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:2,3")
827 	PORT_DIPSETTING(    0x04, DEF_STR( Easy ) )
828 	PORT_DIPSETTING(    0x06, DEF_STR( Normal ) )
829 	PORT_DIPSETTING(    0x02, DEF_STR( Hard ) )
830 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
831 	PORT_DIPNAME( 0x78, 0x78, DEF_STR( Coinage ) )      PORT_DIPLOCATION("SW1:4,5,6,7")
832 	PORT_DIPSETTING(    0x18, DEF_STR( 4C_1C ) )
833 	PORT_DIPSETTING(    0x38, DEF_STR( 3C_1C ) )
834 	PORT_DIPSETTING(    0x10, DEF_STR( 4C_2C ) )
835 	PORT_DIPSETTING(    0x58, DEF_STR( 2C_1C ) )
836 	PORT_DIPSETTING(    0x30, DEF_STR( 3C_2C ) )
837 	PORT_DIPSETTING(    0x08, DEF_STR( 4C_3C ) )
838 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_4C ) )
839 	PORT_DIPSETTING(    0x28, DEF_STR( 3C_3C ) )
840 	PORT_DIPSETTING(    0x50, DEF_STR( 2C_2C ) )
841 	PORT_DIPSETTING(    0x78, DEF_STR( 1C_1C ) )
842 	PORT_DIPSETTING(    0x20, DEF_STR( 3C_4C ) )
843 	PORT_DIPSETTING(    0x48, DEF_STR( 2C_3C ) )
844 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_4C ) )
845 	PORT_DIPSETTING(    0x70, DEF_STR( 1C_2C ) )
846 	PORT_DIPSETTING(    0x68, DEF_STR( 1C_3C ) )
847 	PORT_DIPSETTING(    0x60, DEF_STR( 1C_4C ) )
848 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW1:8")
849 	PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
850 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
851 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
852 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
853 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
854 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
855 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
856 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
857 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
858 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
859 													/* probably VBlank */
860 
861 	PORT_START("DSW2")  /* 500003 */
862 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2")
863 	PORT_DIPSETTING(    0x02, "1" )
864 	PORT_DIPSETTING(    0x00, "2" )
865 	PORT_DIPSETTING(    0x03, "3" )
866 	PORT_DIPSETTING(    0x01, "4" )
867 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
868 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
869 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
870 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
871 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
872 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW2:8" )
873 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
874 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
875 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
876 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
877 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
878 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
879 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
880 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
881 
882 	PORT_START("SYSTEM")    /* 500005 */
883 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
884 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
885 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
886 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
887 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
888 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
889 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
890 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
891 INPUT_PORTS_END
892 
893 static INPUT_PORTS_START( hyperpac )
894 	PORT_START("DSW1")  /* 500000.w */
895 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
896 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
897 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
898 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW1:2")   // "Language" in the "test mode"
899 	PORT_DIPSETTING(      0x0002, "3" )                         // "Korean"
900 	PORT_DIPSETTING(      0x0000, "5" )                         // "English"
901 	PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
902 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
903 	PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
904 	PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
905 	PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
906 	PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
907 	PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
908 	PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
909 	PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
910 	PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
911 	PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
912 	PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
913 	PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
914 	PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )          // DEF_STR( Very_Hard )
915 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
916 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
917 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
918 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
919 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
920 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
921 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
922 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
923 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
924 
925 	PORT_START("DSW2")  /* 500002.w */
926 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
927 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
928 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
929 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
930 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
931 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
932 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
933 	PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0000, "SW2:8" )
934 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
935 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
936 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
937 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
938 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
939 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
940 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
941 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
942 
943 	PORT_START("SYSTEM")    /* 500004.w */
944 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
945 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
946 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
947 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
948 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
949 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
950 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
951 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
952 INPUT_PORTS_END
953 
954 static INPUT_PORTS_START( cookbib2 )
955 	PORT_START("DSW1")  /* 500000.w */
956 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
957 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
958 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
959 	PORT_DIPNAME( 0x0002, 0x0002, "Max Vs Round" )      PORT_DIPLOCATION("SW1:2")   // "Language" in the "test mode"
960 	PORT_DIPSETTING(      0x0002, "3" )
961 	PORT_DIPSETTING(      0x0000, "1" )
962 	PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
963 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
964 	PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
965 	PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
966 	PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
967 	PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
968 	PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
969 	PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
970 	PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
971 	PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
972 	PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
973 	PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
974 	PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
975 	PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )          // DEF_STR( Very_Hard )
976 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
977 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
978 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
979 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
980 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
981 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
982 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
983 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
984 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
985 
986 	PORT_START("DSW2")  /* 500002.w */
987 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
988 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
989 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
990 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
991 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
992 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
993 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
994 	PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0000, "SW2:8" )
995 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
996 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
997 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
998 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
999 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
1000 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
1001 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
1002 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1003 
1004 	PORT_START("SYSTEM")    /* 500004.w */
1005 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1006 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1007 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1008 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1009 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1010 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1011 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1012 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1013 INPUT_PORTS_END
1014 
1015 static INPUT_PORTS_START( cookbib3 )
1016 	PORT_START("DSW1")  /* 500000.w */
1017 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1018 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1019 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1020 	PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
1021 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
1022 	PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
1023 	PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
1024 	PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
1025 	PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
1026 	PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
1027 	PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
1028 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
1029 	PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
1030 	PORT_DIPSETTING(      0x0020, "Level 1" )
1031 	PORT_DIPSETTING(      0x0010, "Level 2" )
1032 	PORT_DIPSETTING(      0x0000, "Level 3" )
1033 	PORT_DIPSETTING(      0x0070, "Level 4" )
1034 	PORT_DIPSETTING(      0x0060, "Level 5" )
1035 	PORT_DIPSETTING(      0x0050, "Level 6" )
1036 	PORT_DIPSETTING(      0x0040, "Level 7" )
1037 	PORT_DIPSETTING(      0x0030, "Level 8" )
1038 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1039 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1040 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1041 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1042 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1043 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
1044 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
1045 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
1046 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1047 
1048 	PORT_START("DSW2")  /* 500002.w */
1049 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
1050 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
1051 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
1052 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
1053 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
1054 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
1055 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
1056 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8") /* Will go into negative credits and cause graphics issues */
1057 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1058 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1059 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1060 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1061 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1062 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1063 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
1064 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
1065 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
1066 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1067 
1068 	PORT_START("SYSTEM")    /* 500004.w */
1069 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1070 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1071 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1072 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1073 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1074 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1075 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1076 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1077 INPUT_PORTS_END
1078 
1079 static INPUT_PORTS_START( moremore )
1080 	PORT_START("DSW1")  /* 500000.w */
1081 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1082 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1083 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1084 	PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
1085 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
1086 	PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
1087 	PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
1088 	PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
1089 	PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
1090 	PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
1091 	PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
1092 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
1093 	PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
1094 	PORT_DIPSETTING(      0x0020, "Level 1" )
1095 	PORT_DIPSETTING(      0x0010, "Level 2" )
1096 	PORT_DIPSETTING(      0x0000, "Level 3" )
1097 	PORT_DIPSETTING(      0x0070, "Level 4" )
1098 	PORT_DIPSETTING(      0x0060, "Level 5" )
1099 	PORT_DIPSETTING(      0x0050, "Level 6" )
1100 	PORT_DIPSETTING(      0x0040, "Level 7" )
1101 	PORT_DIPSETTING(      0x0030, "Level 8" )
1102 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1103 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1104 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1105 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1106 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1107 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
1108 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
1109 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
1110 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1111 
1112 	PORT_START("DSW2")  /* 500002.w */
1113 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
1114 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
1115 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
1116 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
1117 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
1118 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
1119 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
1120 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
1121 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1122 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1123 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1124 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1125 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1126 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1127 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
1128 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
1129 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
1130 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1131 
1132 	PORT_START("SYSTEM")    /* 500004.w */
1133 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1134 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1135 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1136 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1137 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1138 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1139 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1140 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1141 INPUT_PORTS_END
1142 
1143 // don't trust the test mode! <-- Verified via actual game play: Demo Sounds, Coinage & Free Play
1144 static INPUT_PORTS_START( mcheonru )
1145 	PORT_START("DSW1")  /* 500000.w */
1146 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1147 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1148 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1149 	PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
1150 	PORT_DIPSETTING(      0x0000, DEF_STR( 3C_1C ) ) /* Duplicate */
1151 	PORT_DIPSETTING(      0x0002, DEF_STR( 3C_1C ) ) /* Duplicate */
1152 	PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
1153 	PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
1154 	PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
1155 	PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
1156 	PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
1157 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
1158 	PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
1159 	PORT_DIPSETTING(      0x0020, "Level 1" )
1160 	PORT_DIPSETTING(      0x0010, "Level 2" )
1161 	PORT_DIPSETTING(      0x0000, "Level 3" )
1162 	PORT_DIPSETTING(      0x0070, "Level 4" )
1163 	PORT_DIPSETTING(      0x0060, "Level 5" )
1164 	PORT_DIPSETTING(      0x0050, "Level 6" )
1165 	PORT_DIPSETTING(      0x0040, "Level 7" )
1166 	PORT_DIPSETTING(      0x0030, "Level 8" )
1167 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1168 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1169 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1170 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1171 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1172 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
1173 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
1174 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
1175 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1176 
1177 	PORT_START("DSW2")  /* 500002.w */
1178 	PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )    PORT_DIPLOCATION("SW2:1")
1179 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1180 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1181 	PORT_DIPNAME( 0x0002, 0x0002, "Tile Type" )    PORT_DIPLOCATION("SW2:2") /* Does NOT show up in service mode! */
1182 	PORT_DIPSETTING(      0x0002, "Picture" )
1183 	PORT_DIPSETTING(      0x0000, "Traditional" )
1184 	PORT_DIPNAME( 0x0004, 0x0004, "Mini Game Frequency" )    PORT_DIPLOCATION("SW2:3") /* Does NOT show up in service mode! */
1185 	PORT_DIPSETTING(      0x0004, "Every 3 Rounds" )
1186 	PORT_DIPSETTING(      0x0000, "Every Round" )
1187 	PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )    PORT_DIPLOCATION("SW2:4")
1188 	PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
1189 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1190 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )    PORT_DIPLOCATION("SW2:5")
1191 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
1192 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1193 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )    PORT_DIPLOCATION("SW2:6")
1194 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
1195 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1196 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )    PORT_DIPLOCATION("SW2:7")
1197 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1198 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1199 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
1200 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1201 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1202 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1203 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1204 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1205 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1206 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1207 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
1208 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
1209 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1210 
1211 	PORT_START("SYSTEM")    /* 500004.w */
1212 	PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1213 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1214 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1215 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1216 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1217 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1218 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1219 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1220 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1221 INPUT_PORTS_END
1222 
1223 static INPUT_PORTS_START( twinkle )
1224 	PORT_START("DSW1")  /* 500000.w */
1225 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1226 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1227 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1228 	PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
1229 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
1230 	PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
1231 	PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
1232 	PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
1233 	PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
1234 	PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
1235 	PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
1236 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
1237 	PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7") // this is what service mode lists, but I don't trust it.
1238 	PORT_DIPSETTING(      0x0020, "Level 1" )
1239 	PORT_DIPSETTING(      0x0010, "Level 2" )
1240 	PORT_DIPSETTING(      0x0000, "Level 3" )
1241 	PORT_DIPSETTING(      0x0070, "Level 4" )
1242 	PORT_DIPSETTING(      0x0060, "Level 5" )
1243 	PORT_DIPSETTING(      0x0050, "Level 6" )
1244 	PORT_DIPSETTING(      0x0040, "Level 7" )
1245 	PORT_DIPSETTING(      0x0030, "Level 8" )
1246 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1247 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1248 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1249 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1250 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1251 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
1252 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
1253 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
1254 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1255 
1256 	PORT_START("DSW2")  /* 500002.w */
1257 	PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2") // unlisted in service mode
1258 	PORT_DIPSETTING(      0x0000, "1" )
1259 	PORT_DIPSETTING(      0x0003, "2" )
1260 	PORT_DIPSETTING(      0x0002, "3" )
1261 	PORT_DIPSETTING(      0x0001, "4" )
1262 	PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0000, "SW2:3" )
1263 	PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0000, "SW2:4" )
1264 	PORT_DIPNAME( 0x0010, 0x0010, "Pellet Animations" )     PORT_DIPLOCATION("SW2:5") // unlisted in service mode
1265 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
1266 	PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
1267 	PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0000, "SW2:6" )
1268 	PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0000, "SW2:7" )
1269 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
1270 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1271 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1272 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1273 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1274 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1275 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1276 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
1277 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
1278 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
1279 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1280 
1281 	PORT_START("SYSTEM")    /* 500004.w */
1282 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1283 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1284 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1285 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1286 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1287 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1288 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1289 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1290 INPUT_PORTS_END
1291 
1292 // don't trust the test mode! <-- Verified via actual game play: Demo Sounds, Coinage & Free Play
1293 static INPUT_PORTS_START( pzlbreak )
1294 	PORT_START("DSW1")  /* 500000.w */
1295 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1296 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1297 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1298 	PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
1299 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
1300 	PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
1301 	PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
1302 	PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
1303 	PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
1304 	PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
1305 	PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
1306 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
1307 	PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
1308 	PORT_DIPSETTING(      0x0020, "Level 1" )
1309 	PORT_DIPSETTING(      0x0010, "Level 2" )
1310 	PORT_DIPSETTING(      0x0000, "Level 3" )
1311 	PORT_DIPSETTING(      0x0070, "Level 4" )
1312 	PORT_DIPSETTING(      0x0060, "Level 5" )
1313 	PORT_DIPSETTING(      0x0050, "Level 6" )
1314 	PORT_DIPSETTING(      0x0040, "Level 7" )
1315 	PORT_DIPSETTING(      0x0030, "Level 8" )
1316 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1317 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1318 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1319 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1320 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1321 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
1322 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
1323 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
1324 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1325 
1326 	PORT_START("DSW2")  /* 500002.w */
1327 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
1328 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
1329 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
1330 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
1331 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
1332 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
1333 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
1334 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
1335 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1336 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1337 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1338 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1339 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1340 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1341 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
1342 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
1343 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
1344 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1345 
1346 	PORT_START("SYSTEM")    /* 500004.w */
1347 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1348 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1349 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1350 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1351 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1352 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1353 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1354 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1355 INPUT_PORTS_END
1356 
1357 static INPUT_PORTS_START( toppyrap )
1358 	PORT_START("DSW1")  /* 500000.w */
1359 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
1360 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1361 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1362 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW1:2" )
1363 	PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
1364 	PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
1365 	PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
1366 	PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
1367 	PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
1368 	PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
1369 	PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
1370 	PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
1371 	PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
1372 	PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
1373 	PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
1374 	PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
1375 	PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
1376 	PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )
1377 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
1378 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
1379 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
1380 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
1381 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
1382 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
1383 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
1384 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
1385 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1386 
1387 	PORT_START("DSW2")  /* 500002.w */
1388 	PORT_DIPNAME( 0x03,   0x0003, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2")
1389 	PORT_DIPSETTING(      0x0000, "2" )
1390 	PORT_DIPSETTING(      0x0003, "3" )
1391 	PORT_DIPSETTING(      0x0002, "4" )
1392 	PORT_DIPSETTING(      0x0001, "5" )
1393 	PORT_DIPNAME( 0x000c, 0x000c, "Time" )          PORT_DIPLOCATION("SW2:3,4")
1394 	PORT_DIPSETTING(      0x0004, "40 Seconds" )
1395 	PORT_DIPSETTING(      0x0008, "50 Seconds" )
1396 	PORT_DIPSETTING(      0x000c, "60 Seconds" )
1397 	PORT_DIPSETTING(      0x0000, "70 Seconds" )
1398 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
1399 	PORT_DIPNAME( 0x0020, 0x0020, "God Mode" )      PORT_DIPLOCATION("SW2:6")
1400 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
1401 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1402 	PORT_DIPNAME( 0x0040, 0x0040, "Internal Test" )     PORT_DIPLOCATION("SW2:7")
1403 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1404 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1405 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
1406 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1407 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1408 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1409 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1410 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1411 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1412 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
1413 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
1414 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
1415 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1416 
1417 	PORT_START("SYSTEM")    /* 500004.w */
1418 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
1419 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
1420 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1421 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1422 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1423 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1424 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1425 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1426 INPUT_PORTS_END
1427 
1428 static INPUT_PORTS_START( finalttr )
1429 	PORT_START("DSW1")  /* 500001 */
1430 	PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) )
1431 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
1432 	PORT_DIPSETTING(      0x0001, DEF_STR( On ) )
1433 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
1434 	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
1435 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1436 	PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
1437 	PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
1438 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1439 	PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coinage ) )
1440 	PORT_DIPSETTING(      0x0000, DEF_STR( 4C_1C ) )
1441 	PORT_DIPSETTING(      0x0010, DEF_STR( 3C_1C ) )
1442 	PORT_DIPSETTING(      0x0030, DEF_STR( 2C_1C ) )
1443 	PORT_DIPSETTING(      0x0038, DEF_STR( 1C_1C ) )
1444 /*  PORT_DIPSETTING(      0x0018, DEF_STR( 1C_1C ) ) Duplicate setting? */
1445 	PORT_DIPSETTING(      0x0020, DEF_STR( 2C_3C ) )
1446 	PORT_DIPSETTING(      0x0028, DEF_STR( 1C_2C ) )
1447 	PORT_DIPSETTING(      0x0008, DEF_STR( 1C_4C ) )
1448 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
1449 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1450 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1451 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
1452 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1453 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1454 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
1455 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
1456 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
1457 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
1458 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
1459 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
1460 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
1461 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
1462 													/* probably VBlank */
1463 	PORT_START("DSW2")  /* 500003 */
1464 	PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
1465 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1466 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1467 	PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
1468 	PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
1469 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1470 	PORT_DIPNAME( 0x000c, 0x000c, "Time" )
1471 	PORT_DIPSETTING(      0x0000, "60 Seconds" )
1472 	PORT_DIPSETTING(      0x000c, "90 Seconds" )
1473 	PORT_DIPSETTING(      0x0008, "120 Seconds" )
1474 	PORT_DIPSETTING(      0x0004, "150 Seconds" )
1475 	PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
1476 	PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
1477 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1478 	PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
1479 	PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
1480 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1481 	PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
1482 	PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
1483 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1484 	PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
1485 	PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
1486 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1487 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1488 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1489 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1490 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1491 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1492 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
1493 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
1494 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1495 
1496 	PORT_START("SYSTEM")    /* 500005 */
1497 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
1498 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
1499 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
1500 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
1501 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1502 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
1503 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
1504 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1505 INPUT_PORTS_END
1506 
1507 // ignore service mode, it shows a regular joystick + 3 buttons config, these game simply uses 6 buttons
1508 static INPUT_PORTS_START( suhosong )
1509 	PORT_START("DSW1")
1510 	PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )    PORT_DIPLOCATION("SW1:1")
1511 	PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
1512 	PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
1513 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW1:2" )
1514 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW1:3" )
1515 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW1:4" )
1516 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW1:5" )
1517 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW1:6" )
1518 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW1:7" )
1519 	PORT_SERVICE_DIPLOC(   0x0080, IP_ACTIVE_LOW, "SW1:8" )
1520 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Button 4 / Stand / Stop / Drop / Full Bet / Take") PORT_CODE(KEYCODE_V)
1521 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Button 1 / High") PORT_CODE(KEYCODE_Z)
1522 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Button 2 / Low") PORT_CODE(KEYCODE_X)
1523 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Button 3 / Hit / Go / Double Up") PORT_CODE(KEYCODE_C)
1524 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1525 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Button 6 / Bet / Raise") PORT_CODE(KEYCODE_N)
1526 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1527 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1528 
1529 	PORT_START("DSW2")
1530 	PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
1531 	PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
1532 	PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
1533 	PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
1534 	PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
1535 	PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
1536 	PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
1537 	PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0000, "SW2:8" )
1538 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1539 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1540 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1541 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1542 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1543 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1544 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1545 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1546 
1547 	PORT_START("SYSTEM")
1548 	PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Button 5 / Start / Double / Call / Check") PORT_CODE(KEYCODE_B) // Double != Double Up
1549 	PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1550 	PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
1551 	PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
1552 	PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1553 	PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1554 	PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1555 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1556 INPUT_PORTS_END
1557 
1558 
1559 
1560 
1561 static INPUT_PORTS_START( yutnori )
1562 	PORT_START("DSW1")
1563 	PORT_DIPNAME( 0x007,  0x0007, "Coin / Credit" ) PORT_DIPLOCATION("SW1:1,2,3")
1564 	PORT_DIPSETTING(      0x0004, "1 / 50" )
1565 	PORT_DIPSETTING(      0x0003, "1 / 40" )
1566 	PORT_DIPSETTING(      0x0002, "1 / 30" )
1567 	PORT_DIPSETTING(      0x0007, "2 / 50" )
1568 	PORT_DIPSETTING(      0x0006, "2 / 40" )
1569 	PORT_DIPSETTING(      0x0005, "2 / 30" )
1570 	PORT_DIPSETTING(      0x0001, "3 / 50" )
1571 	PORT_DIPSETTING(      0x0000, "3 / 40" )
1572 	PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:4,5,6")
1573 	PORT_DIPSETTING(      0x0030, "1" )
1574 	PORT_DIPSETTING(      0x0028, "2" )
1575 	PORT_DIPSETTING(      0x0020, "3" )
1576 	PORT_DIPSETTING(      0x0038, "4" )
1577 	PORT_DIPSETTING(      0x0018, "5" )
1578 	PORT_DIPSETTING(      0x0010, "6" )
1579 	PORT_DIPSETTING(      0x0008, "7" )
1580 	PORT_DIPSETTING(      0x0000, "8" )
1581 	PORT_DIPNAME( 0xc0, 0xc0, "Mal Count" )   PORT_DIPLOCATION("SW1:7,8")
1582 	PORT_DIPSETTING(    0x40, "2" )
1583 	PORT_DIPSETTING(    0xc0, "3" )
1584 	PORT_DIPSETTING(    0x00, "4" )
1585 	PORT_DIPSETTING(    0x80, "5" )
1586 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
1587 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
1588 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
1589 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
1590 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
1591 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
1592 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
1593 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1594 
1595 	PORT_START("DSW2")
1596 	PORT_DIPNAME( 0x03, 0x03, "Base Bet" ) PORT_DIPLOCATION("SW2:1,2")
1597 	PORT_DIPSETTING(    0x00, "20" )
1598 	PORT_DIPSETTING(    0x01, "30" )
1599 	PORT_DIPSETTING(    0x02, "40" )
1600 	PORT_DIPSETTING(    0x03, "50" )
1601 	PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) PORT_DIPLOCATION("SW2:3,4")
1602 	PORT_DIPSETTING(    0x04, "150" )
1603 	PORT_DIPSETTING(    0x08, "200" )
1604 	PORT_DIPSETTING(    0x0c, "300" )
1605 	PORT_DIPSETTING(    0x00, "400" )
1606 	PORT_DIPNAME( 0x30, 0x30, "Score" ) PORT_DIPLOCATION("SW2:5,6")
1607 	PORT_DIPSETTING(    0x10, "800 1200 1600" )
1608 	PORT_DIPSETTING(    0x30, "1000 1500 2000" )
1609 	PORT_DIPSETTING(    0x00, "1200 1800 2400" )
1610 	PORT_DIPSETTING(    0x20, "1000 2000 3000" )
1611 	PORT_DIPNAME( 0x0040, 0x0040, "Bet -> Score" ) PORT_DIPLOCATION("SW2:7")
1612 	PORT_DIPSETTING(      0x0040, DEF_STR( On ) )
1613 	PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
1614 	PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW2:8" )
1615 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
1616 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
1617 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
1618 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
1619 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
1620 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
1621 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
1622 	PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
1623 
1624 	PORT_START("SYSTEM")
1625 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
1626 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
1627 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
1628 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
1629 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1630 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
1631 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
1632 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1633 INPUT_PORTS_END
1634 
1635 
1636 /* SnowBros */
1637 
1638 static GFXDECODE_START( gfx_snowbros )
1639 	GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 16 )
1640 GFXDECODE_END
1641 
1642 /* Honey Doll */
1643 
1644 static const gfx_layout honeydol_tilelayout8bpp =
1645 {
1646 	16,16,
1647 	RGN_FRAC(1,2),
1648 	8,
1649 	{ 0, 1, 2, 3, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+1, RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+3},
1650 	{ STEP8(0,4), STEP8(8*32,4) },
1651 	{ STEP8(0,32), STEP8(16*32,32) },
1652 	32*32
1653 };
1654 
1655 static GFXDECODE_START( gfx_honeydol )
1656 	GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 64 ) // how does it use 0-15
1657 	GFXDECODE_ENTRY( "gfx2", 0, honeydol_tilelayout8bpp,            0,  4 )
1658 
1659 GFXDECODE_END
1660 
1661 static GFXDECODE_START( gfx_twinadv )
1662 	GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 64 )
1663 GFXDECODE_END
1664 
1665 /* Winter Bobble */
1666 
1667 static const gfx_layout tilelayout_wb =
1668 {
1669 	16,16,
1670 	RGN_FRAC(1,1),
1671 	4,
1672 	{ 0, 1, 2, 3 },
1673 	{ STEP4(3*4,-4), STEP4(7*4,-4), STEP4(11*4,-4), STEP4(15*4,-4) },
1674 	{ STEP16(0,64) },
1675 	16*64
1676 };
1677 
1678 static GFXDECODE_START( gfx_wb )
1679 	GFXDECODE_ENTRY( "gfx1", 0, tilelayout_wb, 0, 16 )
1680 GFXDECODE_END
1681 
1682 /* SemiCom */
1683 
1684 static const gfx_layout hyperpac_tilelayout =
1685 {
1686 	16,16,
1687 	RGN_FRAC(1,1),
1688 	4,
1689 	{ 0, 1, 2, 3 },
1690 	{ 4, 0, 8*32+4, 8*32+0, 20,16, 8*32+20, 8*32+16,
1691 		12, 8, 8*32+12, 8*32+8, 28, 24, 8*32+28, 8*32+24 },
1692 	{ 0*32, 2*32, 1*32, 3*32, 16*32+0*32, 16*32+2*32, 16*32+1*32, 16*32+3*32,
1693 		4*32, 6*32, 5*32, 7*32, 16*32+4*32, 16*32+6*32, 16*32+5*32, 16*32+7*32 },
1694 	32*32
1695 };
1696 
1697 
1698 static const gfx_layout sb3_tilebglayout =
1699 {
1700 	16,16,
1701 	RGN_FRAC(1,1),
1702 	8,
1703 	{8, 9,10, 11, 0, 1, 2, 3  },
1704 	{ 0, 4, 16, 20, 32, 36, 48, 52,
1705 	512+0,512+4,512+16,512+20,512+32,512+36,512+48,512+52},
1706 	{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
1707 	1024+0*16,1024+1*64,1024+2*64,1024+3*64,1024+4*64,1024+5*64,1024+6*64,1024+7*64},
1708 	32*64
1709 };
1710 
1711 
1712 static GFXDECODE_START( gfx_sb3 )
1713 	GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_row_2x2_group_packed_msb, 0, 16 )
1714 	GFXDECODE_ENTRY( "gfx2", 0, sb3_tilebglayout,                   0,  2 )
1715 GFXDECODE_END
1716 
GFXDECODE_START(gfx_hyperpac)1717 static GFXDECODE_START( gfx_hyperpac )
1718 	GFXDECODE_ENTRY( "gfx1", 0, hyperpac_tilelayout, 0, 16 )
1719 GFXDECODE_END
1720 
1721 MACHINE_RESET_MEMBER(snowbros_state,semiprot)
1722 {
1723 	uint16_t *PROTDATA = (uint16_t*)memregion("user1")->base();
1724 	int i;
1725 
1726 	for (i = 0;i < 0x200/2;i++)
1727 		m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
1728 }
1729 
MACHINE_RESET_MEMBER(snowbros_state,finalttr)1730 MACHINE_RESET_MEMBER(snowbros_state,finalttr)
1731 {
1732 	uint16_t *PROTDATA = (uint16_t*)memregion("user1")->base();
1733 	int i;
1734 
1735 	for (i = 0;i < 0x200/2;i++)
1736 		m_hyperpac_ram[0x2000/2 + i] = PROTDATA[i];
1737 }
1738 
snowbros(machine_config & config)1739 void snowbros_state::snowbros(machine_config &config)
1740 {
1741 	/* basic machine hardware */
1742 	M68000(config, m_maincpu, XTAL(16'000'000)/2); /* 8 Mhz - confirmed */
1743 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::snowbros_map);
1744 	TIMER(config, "scantimer", 0).configure_scanline(FUNC(snowbros_state::snowbros_irq), "screen", 0, 1);
1745 	WATCHDOG_TIMER(config, "watchdog");
1746 
1747 	Z80(config, m_soundcpu, XTAL(12'000'000)/2); /* 6 MHz - confirmed */
1748 	m_soundcpu->set_addrmap(AS_PROGRAM, &snowbros_state::sound_map);
1749 	m_soundcpu->set_addrmap(AS_IO, &snowbros_state::sound_io_map);
1750 
1751 	/* video hardware */
1752 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1753 	m_screen->set_refresh_hz(57.5); /* ~57.5 - confirmed */
1754 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
1755 	m_screen->set_size(32*8, 262);
1756 	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
1757 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_snowbros));
1758 	m_screen->screen_vblank().set(FUNC(snowbros_state::screen_vblank_snowbros));
1759 	m_screen->set_palette(m_palette);
1760 
1761 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_snowbros);
1762 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 256);
1763 
1764 	KANEKO_PANDORA(config, m_pandora, 0);
1765 	m_pandora->set_gfxdecode_tag(m_gfxdecode);
1766 
1767 	/* sound hardware */
1768 	SPEAKER(config, "mono").front_center();
1769 
1770 	GENERIC_LATCH_8(config, m_soundlatch);
1771 	m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI);
1772 
1773 	GENERIC_LATCH_8(config, "soundlatch2");
1774 
1775 	ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(12'000'000)/4)); /* 3 MHz - confirmed */
1776 	ymsnd.irq_handler().set_inputline("soundcpu", 0);
1777 	ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
1778 }
1779 
wintbob(machine_config & config)1780 void snowbros_state::wintbob(machine_config &config)
1781 {
1782 	snowbros(config);
1783 
1784 	/* basic machine hardware */
1785 	m_maincpu->set_clock(10000000); /* 10mhz - Confirmed */
1786 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::wintbob_map);
1787 
1788 	config.device_remove("pandora");
1789 
1790 	/* video hardware */
1791 	m_gfxdecode->set_info(gfx_wb);
1792 
1793 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_wintbob));
1794 	m_screen->screen_vblank().set_nop();
1795 }
1796 
semicom(machine_config & config)1797 void snowbros_state::semicom(machine_config &config)
1798 {
1799 	snowbros(config);
1800 
1801 	/* basic machine hardware */
1802 	m_maincpu->set_clock(XTAL(12'000'000)); /* 12MHz - Confirmed */
1803 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::hyperpac_map);
1804 
1805 	m_soundcpu->set_clock(XTAL(16'000'000)/4); /* 4MHz - Confirmed */
1806 	m_soundcpu->set_addrmap(AS_PROGRAM, &snowbros_state::hyperpac_sound_map);
1807 	m_soundcpu->set_addrmap(AS_IO, address_map_constructor());
1808 
1809 	m_gfxdecode->set_info(gfx_hyperpac);
1810 
1811 	m_soundlatch->data_pending_callback().set_nop();
1812 
1813 	config.device_remove("soundlatch2");
1814 
1815 	/* sound hardware */
1816 	ym2151_device &ymsnd(YM2151(config.replace(), "ymsnd", XTAL(16'000'000)/4)); /* 4MHz - Confirmed */
1817 	ymsnd.irq_handler().set_inputline(m_soundcpu, 0);
1818 	ymsnd.add_route(0, "mono", 0.10);
1819 	ymsnd.add_route(1, "mono", 0.10);
1820 
1821 	OKIM6295(config, m_oki, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH); /* 1MHz & pin 7 High - Confirmed */
1822 	m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
1823 }
1824 
semicom_mcu(machine_config & config)1825 void snowbros_state::semicom_mcu(machine_config &config)
1826 {
1827 	semicom(config);
1828 
1829 	/* basic machine hardware */
1830 	at89c52_device &prot(AT89C52(config, "protection", XTAL(16'000'000)));
1831 	prot.port_out_cb<0>().set(FUNC(snowbros_state::prot_p0_w));
1832 	prot.port_out_cb<1>().set(FUNC(snowbros_state::prot_p1_w));
1833 	prot.port_out_cb<2>().set(FUNC(snowbros_state::prot_p2_w));
1834 }
1835 
1836 
semiprot(machine_config & config)1837 void snowbros_state::semiprot(machine_config &config)
1838 {
1839 	semicom(config);
1840 	MCFG_MACHINE_RESET_OVERRIDE(snowbros_state, semiprot)
1841 }
1842 
1843 
honeydol(machine_config & config)1844 void snowbros_state::honeydol(machine_config &config)
1845 {
1846 	/* basic machine hardware */
1847 	M68000(config, m_maincpu, XTAL(12'000'000)); /* MC68000P12 @ 12MHz */
1848 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::honeydol_map);
1849 	TIMER(config, "scantimer", 0).configure_scanline(FUNC(snowbros_state::snowbros_irq), "screen", 0, 1);
1850 
1851 	Z80(config, m_soundcpu, XTAL(16'000'000)/4); /* 4Mhz (16MHz/4) like SemiCom or 6MHz (12MHz/2) like snowbros??? */
1852 	m_soundcpu->set_addrmap(AS_PROGRAM, &snowbros_state::honeydol_sound_map);
1853 	m_soundcpu->set_addrmap(AS_IO, &snowbros_state::honeydol_sound_io_map);
1854 
1855 	/* video hardware */
1856 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1857 	m_screen->set_refresh_hz(57.5);
1858 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
1859 	m_screen->set_size(32*8, 262);
1860 	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
1861 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_honeydol));
1862 	m_screen->set_palette(m_palette);
1863 
1864 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_honeydol);
1865 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800/2);
1866 
1867 	/* sound hardware */
1868 	SPEAKER(config, "mono").front_center();
1869 
1870 	GENERIC_LATCH_8(config, m_soundlatch);
1871 	m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI);
1872 
1873 	ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(12'000'000)/4)); /* 3Mhz */
1874 	ymsnd.irq_handler().set_inputline("soundcpu", 0);
1875 	ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
1876 
1877 	OKIM6295(config, m_oki, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH); /* freq? */
1878 	m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
1879 }
1880 
twinadv(machine_config & config)1881 void snowbros_state::twinadv(machine_config &config)
1882 {
1883 	/* basic machine hardware */
1884 	M68000(config, m_maincpu, XTAL(12'000'000)); /* 12MHz like Honey Dolls ? */
1885 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::twinadv_map);
1886 	TIMER(config, "scantimer", 0).configure_scanline(FUNC(snowbros_state::snowbros_irq), "screen", 0, 1);
1887 	WATCHDOG_TIMER(config, "watchdog");
1888 
1889 	Z80(config, m_soundcpu, XTAL(16'000'000)/4); /* 4Mhz (16MHz/4) like SemiCom or 6MHz (12MHz/2) like snowbros??? */
1890 	m_soundcpu->set_addrmap(AS_PROGRAM, &snowbros_state::sound_map);
1891 	m_soundcpu->set_addrmap(AS_IO, &snowbros_state::twinadv_sound_io_map);
1892 	m_soundcpu->set_vblank_int("screen", FUNC(snowbros_state::irq0_line_hold));
1893 
1894 	/* video hardware */
1895 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1896 	m_screen->set_refresh_hz(57.5);
1897 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
1898 	m_screen->set_size(32*8, 262);
1899 	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
1900 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_twinadv));
1901 	m_screen->set_palette(m_palette);
1902 
1903 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_twinadv);
1904 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x100);
1905 
1906 	/* sound hardware */
1907 	SPEAKER(config, "mono").front_center();
1908 
1909 	GENERIC_LATCH_8(config, m_soundlatch);
1910 	m_soundlatch->data_pending_callback().set_inputline(m_soundcpu, INPUT_LINE_NMI);
1911 
1912 	GENERIC_LATCH_8(config, "soundlatch2");
1913 
1914 	/* sound hardware */
1915 	OKIM6295(config, m_oki, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH); /* freq? */
1916 	m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
1917 }
1918 
1919 
1920 /*
1921 
1922 Final Tetris
1923 
1924 the pcb is korean and probably original even if it's very cheap.
1925 
1926 osc 12mhz
1927 osc 3.579545mhz
1928 68000
1929 z8004b
1930 CA5101 (sound chip)
1931 OKI M6295 (sound chip)
1932 Intel P8752 (mcu)
1933 
1934 2x dips banks
1935 
1936 */
1937 
finalttr(machine_config & config)1938 void snowbros_state::finalttr(machine_config &config)
1939 {
1940 	semicom(config);
1941 
1942 	m_maincpu->set_clock(XTAL(12'000'000));
1943 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::finalttr_map);
1944 
1945 	m_soundcpu->set_clock(XTAL(3'579'545));
1946 
1947 	MCFG_MACHINE_RESET_OVERRIDE(snowbros_state, finalttr)
1948 
1949 	ym2151_device &ymsnd(YM2151(config.replace(), "ymsnd", XTAL(3'579'545))); /* possible but less likely 4MHz (12MHz/3) */
1950 	ymsnd.irq_handler().set_inputline(m_soundcpu, 0);
1951 	ymsnd.add_route(0, "mono", 0.08);
1952 	ymsnd.add_route(1, "mono", 0.08);
1953 
1954 	m_oki->set_clock(999900);
1955 	m_oki->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.4);
1956 }
1957 
1958 
_4in1(machine_config & config)1959 void snowbros_state::_4in1(machine_config &config)
1960 {
1961 	semicom(config);
1962 
1963 	/* basic machine hardware */
1964 	m_gfxdecode->set_info(gfx_snowbros);
1965 }
1966 
snowbro3(machine_config & config)1967 void snowbros_state::snowbro3(machine_config &config) /* PCB has 16MHz & 12MHz OSCs */
1968 {
1969 	/* basic machine hardware */
1970 	M68000(config, m_maincpu, XTAL(12'000'000)); /* MC68000P10 CPU @ 12mhz or 8MHz (16MHz/2) ? */
1971 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::snowbros3_map);
1972 	TIMER(config, "scantimer", 0).configure_scanline(FUNC(snowbros_state::snowbros3_irq), "screen", 0, 1);
1973 	WATCHDOG_TIMER(config, "watchdog");
1974 
1975 	/* video hardware */
1976 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
1977 	m_screen->set_refresh_hz(60);
1978 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
1979 	m_screen->set_size(32*8, 32*8);
1980 	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
1981 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_snowbro3));
1982 	m_screen->set_palette(m_palette);
1983 
1984 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_sb3);
1985 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 512);
1986 
1987 	/* sound hardware */
1988 	SPEAKER(config, "mono").front_center();
1989 
1990 	OKIM6295(config, m_oki, XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
1991 	m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
1992 }
1993 
yutnori(machine_config & config)1994 void snowbros_state::yutnori(machine_config &config)
1995 {
1996 	/* basic machine hardware */
1997 	M68000(config, m_maincpu, XTAL(16'000'000)/2);
1998 	m_maincpu->set_addrmap(AS_PROGRAM, &snowbros_state::yutnori_map);
1999 	TIMER(config, "scantimer", 0).configure_scanline(FUNC(snowbros_state::snowbros_irq), "screen", 0, 1);
2000 
2001 //  WATCHDOG_TIMER(config, "watchdog"); // maybe
2002 
2003 	/* video hardware */
2004 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
2005 	m_screen->set_refresh_hz(57.5);
2006 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
2007 	m_screen->set_size(32*8, 262);
2008 	m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
2009 	m_screen->set_screen_update(FUNC(snowbros_state::screen_update_snowbros));
2010 	m_screen->screen_vblank().set(FUNC(snowbros_state::screen_vblank_snowbros));
2011 	m_screen->set_palette(m_palette);
2012 
2013 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_hyperpac);
2014 	PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 256);
2015 
2016 	KANEKO_PANDORA(config, m_pandora, 0);
2017 	m_pandora->set_gfxdecode_tag(m_gfxdecode);
2018 
2019 	/* sound hardware */
2020 	SPEAKER(config, "mono").front_center();
2021 
2022 	okim6295_device &oki1(OKIM6295(config, "oki1", XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
2023 	oki1.add_route(ALL_OUTPUTS, "mono", 1.0);
2024 
2025 	okim6295_device &oki2(OKIM6295(config, "oki2", XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified
2026 	oki2.add_route(ALL_OUTPUTS, "mono", 1.0);
2027 }
2028 
2029 /***************************************************************************
2030 
2031   ROM definitions
2032 
2033 ***************************************************************************/
2034 
2035 ROM_START( snowbros )
2036 	ROM_REGION( 0x40000, "maincpu", 0 )
2037 	ROM_LOAD16_BYTE( "sn6.bin",  0x00000, 0x20000, CRC(4899ddcf) SHA1(47d750d3022a80e47ffabe47566bb2556cc8d477) )
CRC(ad310d3f)2038 	ROM_LOAD16_BYTE( "sn5.bin",  0x00001, 0x20000, CRC(ad310d3f) SHA1(f39295b38d99087dbb9c5b00bf9cb963337a50e2) )
2039 
2040 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2041 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2042 
2043 	ROM_REGION( 0x80000, "gfx1", 0 )
2044 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2045 	/* where were these from, a bootleg? */
2046 //  ROM_LOAD( "ch0",          0x00000, 0x20000, CRC(36d84dfe) SHA1(5d45a750220930bc409de30f19282bb143fbf94f) )
2047 //  ROM_LOAD( "ch1",          0x20000, 0x20000, CRC(76347256) SHA1(48ec03965905adaba5e50eb3e42a2813f7883bb4) )
2048 //  ROM_LOAD( "ch2",          0x40000, 0x20000, CRC(fdaa634c) SHA1(1271c74df7da7596caf67caae3c51b4c163a49f4) )
2049 //  ROM_LOAD( "ch3",          0x60000, 0x20000, CRC(34024aef) SHA1(003a9b9ee3aaab3d787894d3d4126d372b19d2a8) )
2050 ROM_END
2051 
2052 ROM_START( snowbrosa )
2053 	ROM_REGION( 0x40000, "maincpu", 0 )
2054 	ROM_LOAD16_BYTE( "sbros-3a.5",  0x00000, 0x20000, CRC(10cb37e1) SHA1(786be4640f8df2c81a32decc189ea7657ace00c6) )
2055 	ROM_LOAD16_BYTE( "sbros-2a.6",  0x00001, 0x20000, CRC(ab91cc1e) SHA1(8cff61539dc7d35fcbf110d3e54fc1883e7b8509) )
2056 
2057 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2058 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2059 
2060 	ROM_REGION( 0x80000, "gfx1", 0 )
2061 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2062 ROM_END
2063 
2064 ROM_START( snowbrosb )
2065 	ROM_REGION( 0x40000, "maincpu", 0 )
2066 	ROM_LOAD16_BYTE( "sbros3-a",     0x00000, 0x20000, CRC(301627d6) SHA1(0d1dc70091c87e9c27916d4232ff31b7381a64e1) )
2067 	ROM_LOAD16_BYTE( "sbros2-a",     0x00001, 0x20000, CRC(f6689f41) SHA1(e4fd27b930a31479c0d99e0ddd23d5db34044666) )
2068 
2069 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2070 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2071 
2072 	ROM_REGION( 0x80000, "gfx1", 0 )
2073 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2074 ROM_END
2075 
2076 ROM_START( snowbrosc )
2077 	ROM_REGION( 0x40000, "maincpu", 0 )
2078 	ROM_LOAD16_BYTE( "3-a.ic5",  0x00000, 0x20000, CRC(e1bc346b) SHA1(a20c343d9ed2ad4f785d21076499008edad251f9) )
2079 	ROM_LOAD16_BYTE( "2-a.ic6",  0x00001, 0x20000, CRC(1be27f9d) SHA1(76dd14480b9274831e51016f7bb57459d7b15cf9) )
2080 
2081 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2082 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2083 
2084 	ROM_REGION( 0x80000, "gfx1", 0 )
2085 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2086 ROM_END
2087 
2088 ROM_START( snowbrosd ) /* Korean release, but no specific "For use in Korea only..." notice screen */
2089 	ROM_REGION( 0x40000, "maincpu", 0 )
2090 	ROM_LOAD16_BYTE( "sbk_3-a.bin",   0x00000, 0x20000, CRC(97174d40) SHA1(481e8c680af8b03d4bcf97b87ca0ba5a3ffca0d7) )
2091 	ROM_LOAD16_BYTE( "sbk_2-a.bin",   0x00001, 0x20000, CRC(80cc80e5) SHA1(1eeca0924c93e9f0536683160e80c59871569088) )
2092 
2093 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2094 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2095 
2096 	ROM_REGION( 0x80000, "gfx1", 0 )
2097 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2098 ROM_END
2099 
2100 ROM_START( snowbrosj )/* "For use in Japan only..." notice screen */
2101 	ROM_REGION( 0x40000, "maincpu", 0 )
2102 	ROM_LOAD16_BYTE( "snowbros.3",   0x00000, 0x20000, CRC(3f504f9e) SHA1(700758b114c3fde6ea8f84222af0850dba13cd3b) )
2103 	ROM_LOAD16_BYTE( "snowbros.2",   0x00001, 0x20000, CRC(854b02bc) SHA1(4ad1548eef94dcb95119cb4a7dcdefa037591b5b) )
2104 
2105 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2106 	ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
2107 
2108 	ROM_REGION( 0x80000, "gfx1", 0 )
2109 	/* The gfx ROM (snowbros.1) was bad, I'm using the ones from the other sets. */
2110 	ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
2111 ROM_END
2112 
2113 ROM_START( wintbob )
2114 	ROM_REGION( 0x40000, "maincpu", 0 )
2115 	ROM_LOAD16_BYTE( "wb3", 0x00000, 0x10000, CRC(b9719767) SHA1(431c97d409f2a5ff7f46116a4d8907e446434431) )
2116 	ROM_LOAD16_BYTE( "wb1", 0x00001, 0x10000, CRC(a4488998) SHA1(4e927e31c1b865dbdba2b985c7a819a07e2e81b8) )
2117 
2118 	/* The wb03.bin below is bad, the set has a different copyright message (IN KOREA is replaced with 1990)
2119 	   but also clearly suffers from bitrot at the following addresses
2120 	    4FC2, 5F02, 6642, D6C2, D742
2121 	   in all cases bit 0x20 is incorrectly set in the bad rom
2122 	*/
2123 
2124 //  ROM_LOAD16_BYTE( "wb03.bin", 0x00000, 0x10000, CRC(df56e168) SHA1(20dbabdd97e6f3d4bf6500bf9e8476942cb48ae3) )
2125 //  ROM_LOAD16_BYTE( "wb01.bin", 0x00001, 0x10000, CRC(05722f17) SHA1(9356e2488ea35e0a2978689f2ca6dfa0d57fd2ed) )
2126 
2127 	ROM_LOAD16_BYTE( "wb04.bin", 0x20000, 0x10000, CRC(53be758d) SHA1(56cf85ba23fe699031d73e8f367a1b8ac837d5f8) )
2128 	ROM_LOAD16_BYTE( "wb02.bin", 0x20001, 0x10000, CRC(fc8e292e) SHA1(857cfeb0be121e64e6117120514ae1f2ffeae4d6) )
2129 
2130 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2131 	ROM_LOAD( "wb05.bin",     0x0000, 0x10000, CRC(53fe59df) SHA1(a99053e82b9fed76f744fa9f67078294641c6317) )
2132 
2133 	ROM_REGION( 0x80000, "gfx1", 0 )
2134 	ROM_LOAD16_BYTE( "wb13.bin",     0x00000, 0x10000, CRC(426921de) SHA1(5107c58e7e08d71895baa67fe260b17ebd61389c) )
2135 	ROM_LOAD16_BYTE( "wb06.bin",     0x00001, 0x10000, CRC(68204937) SHA1(fd2ef93df5fd8aa2d36072858dbcfce41157ef3e) )
2136 	ROM_LOAD16_BYTE( "wb12.bin",     0x20000, 0x10000, CRC(ef4e04c7) SHA1(17158b61b3c158e0491db9abb2e1a8c20d981d37) )
2137 	ROM_LOAD16_BYTE( "wb07.bin",     0x20001, 0x10000, CRC(53f40978) SHA1(058bbf3b7877f0cd320383e0386c5959e0d6589b) )
2138 	ROM_LOAD16_BYTE( "wb11.bin",     0x40000, 0x10000, CRC(41cb4563) SHA1(94f1d12d299ac08fc8522139e1927f0cf739be75) )
2139 	ROM_LOAD16_BYTE( "wb08.bin",     0x40001, 0x10000, CRC(9497b88c) SHA1(367c6106276f3816528341f11f3a97ae458d25cd) )
2140 	ROM_LOAD16_BYTE( "wb10.bin",     0x60000, 0x10000, CRC(5fa22b1e) SHA1(1164003d873e9738a3ca133cce689c7120061e3c) )
2141 	ROM_LOAD16_BYTE( "wb09.bin",     0x60001, 0x10000, CRC(9be718ca) SHA1(5c195e4f13efbdb229201d2408d018861bf389cc) )
2142 ROM_END
2143 
2144 
2145 ROM_START( snowbroswb )
2146 	ROM_REGION( 0x40000, "maincpu", 0 )
2147 	ROM_LOAD16_BYTE( "toa3.bin", 0x00000, 0x10000, CRC(55d302da) SHA1(235f1cd5adeb783f42bd7261e6f575826235c5b2) )
2148 	ROM_LOAD16_BYTE( "toa1.bin", 0x00001, 0x10000, CRC(3c64e145) SHA1(46c3ba17aac516fc203d2d82ed5452b8212f5edb) )
2149 	ROM_LOAD16_BYTE( "wb04.bin", 0x20000, 0x10000, CRC(53be758d) SHA1(56cf85ba23fe699031d73e8f367a1b8ac837d5f8) )
2150 	ROM_LOAD16_BYTE( "wb02.bin", 0x20001, 0x10000, CRC(fc8e292e) SHA1(857cfeb0be121e64e6117120514ae1f2ffeae4d6) )
2151 
2152 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2153 	ROM_LOAD( "wb05.bin",     0x0000, 0x10000, CRC(53fe59df) SHA1(a99053e82b9fed76f744fa9f67078294641c6317) )
2154 
2155 	ROM_REGION( 0x80000, "gfx1", 0 )
2156 	ROM_LOAD16_BYTE( "wb13.bin",     0x00000, 0x10000, CRC(426921de) SHA1(5107c58e7e08d71895baa67fe260b17ebd61389c) )
2157 	ROM_LOAD16_BYTE( "wb06.bin",     0x00001, 0x10000, CRC(68204937) SHA1(fd2ef93df5fd8aa2d36072858dbcfce41157ef3e) )
2158 	ROM_LOAD16_BYTE( "wb12.bin",     0x20000, 0x10000, CRC(ef4e04c7) SHA1(17158b61b3c158e0491db9abb2e1a8c20d981d37) )
2159 	ROM_LOAD16_BYTE( "wb07.bin",     0x20001, 0x10000, CRC(53f40978) SHA1(058bbf3b7877f0cd320383e0386c5959e0d6589b) )
2160 	ROM_LOAD16_BYTE( "wb11.bin",     0x40000, 0x10000, CRC(41cb4563) SHA1(94f1d12d299ac08fc8522139e1927f0cf739be75) )
2161 	ROM_LOAD16_BYTE( "wb08.bin",     0x40001, 0x10000, CRC(9497b88c) SHA1(367c6106276f3816528341f11f3a97ae458d25cd) )
2162 	ROM_LOAD16_BYTE( "wb10.bin",     0x60000, 0x10000, CRC(5fa22b1e) SHA1(1164003d873e9738a3ca133cce689c7120061e3c) )
2163 	ROM_LOAD16_BYTE( "wb09.bin",     0x60001, 0x10000, CRC(9be718ca) SHA1(5c195e4f13efbdb229201d2408d018861bf389cc) )
2164 ROM_END
2165 
2166 ROM_START( toto )
2167 	ROM_REGION( 0x40000, "maincpu", 0 )
2168 	ROM_LOAD16_BYTE( "u60.5j",  0x00000, 0x20000, CRC(39203792) SHA1(4c8d560be02a514cbf91774c7a0b4a95cf573356) )
2169 	ROM_LOAD16_BYTE( "u51.4j",  0x00001, 0x20000, CRC(7b846cd4) SHA1(04aa0bbaab4303fb08dff52d5515f7e764f1be6d))
2170 
2171 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2172 	ROM_LOAD( "u46.4c",   0x0000, 0x8000, CRC(77b1ef42) SHA1(75e3c8c2b687669cc56f972dd7375dab5185859c) )
2173 
2174 	ROM_REGION( 0x80000, "gfx1", 0 )
2175 	ROM_LOAD( "u107.8k",          0x00000, 0x20000, CRC(4486153b) SHA1(a6dc0c17bf2328ab725bce4aaa0a413a42129fb0) )
2176 	ROM_LOAD( "u108.8l",          0x20000, 0x20000, CRC(3286cf5f) SHA1(133366b0e10ab86111247cbedf329e8e3a7f2148) )
2177 	ROM_LOAD( "u109.8m",          0x40000, 0x20000, CRC(464d7251) SHA1(f03ee54e9301ea87de4171cecdbad4a5e17929c4) )
2178 	ROM_LOAD( "u110.8n",          0x60000, 0x20000, CRC(7dea56df) SHA1(7e7b9238837c6f4221cff416a2de21723d2c9272) )
2179 ROM_END
2180 
2181 /* Barko */
2182 
2183 /*
2184 
2185 Honey Doll - Barko Corp 1995
2186 
2187 Rom Board include a Cypress cy7C382-0JC chip
2188 
2189 Main Board :
2190 
2191 CPU : 1 X MC68000P12
2192       1 X Z80B
2193 
2194 1 X Oki M6295
2195 2 X Cypress CY7C384A-XJC
2196 
2197 2 x quartz - 12Mhz and 16Mhz
2198 
2199 */
2200 
2201 ROM_START( honeydol )
2202 	ROM_REGION( 0x40000, "maincpu", 0 )
2203 	ROM_LOAD16_BYTE( "d-16.uh12",  0x00001, 0x20000, CRC(cee1a2e3) SHA1(6d1ff5358ec704616b724eea2ab9b60b84709eb1) )
2204 	ROM_LOAD16_BYTE( "d-17.ui12",  0x00000, 0x20000, CRC(cac44154) SHA1(2c30dc033001fc9303da7e117e3401bc7af16607) )
2205 
2206 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2207 	ROM_LOAD( "d-12.uh15",   0x0000, 0x8000, CRC(386f1b63) SHA1(d719875226cd3d380e2ebec49209590d91b6f07b) )
2208 
2209 	ROM_REGION( 0x80000, "gfx1", 0 ) // 4 bpp gfx
2210 	ROM_LOAD( "d-13.1",          0x000000, 0x80000, CRC(ff6a57fb) SHA1(2fbf61f4ac2655a60b1fa82bb6d001f0ef8b4654) )
2211 
2212 	ROM_REGION( 0x200000, "gfx2", 0 )
2213 	ROM_LOAD( "d-14.5",          0x000000, 0x80000, CRC(2178996f) SHA1(04368384cb191b28b23199c8175e93271ab79103) )
2214 	ROM_LOAD( "d-15.6",          0x080000, 0x80000, CRC(6629239e) SHA1(5f462c04eb11c2b662236fd65bbf74fa08038eec) )
2215 	ROM_LOAD( "d-18.9",          0x100000, 0x80000, CRC(0210507a) SHA1(5b7348bf253b1ae8bfa86cdee2ff80aa2b3faa79) )
2216 	ROM_LOAD( "d-19.10",         0x180000, 0x80000, CRC(d27375d5) SHA1(2a39ce9b985e00a290c3ea75be3b1edbc00d39ec) )
2217 
2218 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2219 	ROM_LOAD( "d-11.u14", 0x00000, 0x40000, CRC(f3ee4861) SHA1(f24f1f855ae6c96a6d84a4b5e5c196df8f922d0a) )
2220 ROM_END
2221 
2222 /*
2223 
2224 +--------------------------------+
2225 |      Z80A                      |
2226 |GL324  6116                  ua4|
2227 |M6295 uh15  HY6264           ua5|
2228 |J     sra   HY6264           ua6|
2229 |A     srb   84256               |
2230 |M           84256               |
2231 |M           84256    CY7C384A   |
2232 |A           84256               |
2233 | SWA1       uh12                |
2234 |      68000 84256               |
2235 | SWA2       ui12  12MHz 16MHz   |
2236 +--------------------------------+
2237 
2238 Produttore: Barko
2239 N.revisione: S16K951102
2240 CPU
2241 1x 68000 (main)
2242 1x Z8400B (sound)
2243 1x OKI M6295 (sound)
2244 1x GL324 (sound)
2245 1x CY7C384A
2246 1x oscillator 12.000MHz
2247 1x oscillator 16.000MHz
2248 
2249 ROMs
2250 
2251 1x 27256 (uh15)
2252 2x M27C2001 (sra,srb)
2253 1x AM27C010 (12)
2254 1x D27C010 (13)
2255 1x M27C4001 (14)
2256 1x AT27C040 (15)
2257 1x TMS27C040 (16)
2258 
2259 6x HY18CV8S (read protected)
2260 
2261 */
2262 
2263 ROM_START( twinadv )
2264 	ROM_REGION( 0x40000, "maincpu", 0 )
2265 	ROM_LOAD16_BYTE( "13.uh12",  0x00001, 0x20000, CRC(9f70a39b) SHA1(d49823be58b00c4c5a4f6cc4e4371531492aff1e) )
2266 	ROM_LOAD16_BYTE( "12.ui12",  0x00000, 0x20000, CRC(d8776495) SHA1(15b93ded80bf9f240faef2d89b6076f33f1f4ece) )
2267 
2268 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2269 	ROM_LOAD( "uh15.bin", 0x0000, 0x8000, CRC(3d5acd08) SHA1(c19f686862dfc12d2fa91c2dd3d3b75d9cb410c3) )
2270 
2271 	ROM_REGION( 0x180000, "gfx1", 0 ) /* 4bpp gfx */
2272 	ROM_LOAD( "16.ua4", 0x000000, 0x80000, CRC(f491e171) SHA1(f31b945b0c4b30d1b3dc6c5928b77aad4e956bc7) )
2273 	ROM_LOAD( "15.ua5", 0x080000, 0x80000, CRC(79a08b8d) SHA1(034c0a3b9e27ac174092d265b32fb82d6ee45d47) )
2274 	ROM_LOAD( "14.ua6", 0x100000, 0x80000, CRC(79faee0b) SHA1(7421a5fa038d01658ba5ac1f65ea87b97ac25c36) )
2275 
2276 	ROM_REGION( 0x080000, "oki", 0 ) /* Samples - both banks are almost the same */
2277 	/* todo, check bank ordering .. */
2278 	ROM_LOAD( "sra.bin", 0x00000, 0x40000, CRC(82f452c4) SHA1(95ad6ede87ceafb045ed7df40496baf96190b97f) ) // bank 1
2279 	ROM_LOAD( "srb.bin", 0x40000, 0x40000, CRC(109e51e6) SHA1(3344c68d63bbad4a02b47143b2d2f72ce9bcb4bb) ) // bank 2
2280 ROM_END
2281 
2282 ROM_START( twinadvk )
2283 	ROM_REGION( 0x40000, "maincpu", 0 )
2284 	ROM_LOAD16_BYTE( "uh12",  0x00001, 0x20000, CRC(e0bcc738) SHA1(7fc6a793fcdd80122c0ac6409ae4cac5597b7b5a) )
2285 	ROM_LOAD16_BYTE( "ui12",  0x00000, 0x20000, CRC(a3ee6451) SHA1(9c0b415a2f325513739f2047780c2a56df350aa5) )
2286 
2287 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2288 	ROM_LOAD( "uh15.bin", 0x0000, 0x8000, CRC(3d5acd08) SHA1(c19f686862dfc12d2fa91c2dd3d3b75d9cb410c3) )
2289 
2290 	ROM_REGION( 0x180000, "gfx1", 0 ) /* 4bpp gfx */
2291 	ROM_LOAD( "ua4", 0x000000, 0x80000, CRC(a5aff49b) SHA1(ee162281ba643729ee007f9634c21fadd3c1cb48) )
2292 	ROM_LOAD( "ua5", 0x080000, 0x80000, CRC(f83b3b97) SHA1(2e967d49ef411d164a0b6cf32444f60fcd8068a9) )
2293 	ROM_LOAD( "ua6", 0x100000, 0x80000, CRC(4dfcffb9) SHA1(c157e031acbb321b9435389f9fc4e1ffebca106d) )
2294 
2295 	ROM_REGION( 0x080000, "oki", 0 ) /* Samples - both banks are almost the same */
2296 	/* todo, check bank ordering .. */
2297 	ROM_LOAD( "sra.bin", 0x00000, 0x40000, CRC(82f452c4) SHA1(95ad6ede87ceafb045ed7df40496baf96190b97f) ) // bank 1
2298 	ROM_LOAD( "srb.bin", 0x40000, 0x40000, CRC(109e51e6) SHA1(3344c68d63bbad4a02b47143b2d2f72ce9bcb4bb) ) // bank 2
2299 ROM_END
2300 
2301 ROM_START( multi96 )
2302 	ROM_REGION( 0x40000, "maincpu", 0 )
2303 	ROM_LOAD16_BYTE( "uh12",  0x00001, 0x20000, CRC(e912ea4e) SHA1(cf0b37d6b6fbdd311ef7b404c4ba2c6a7e1f8486) ) // sldh
2304 	ROM_LOAD16_BYTE( "ui12",  0x00000, 0x20000, CRC(ac99e837) SHA1(20bc1599f78a4eac65cae54350872fa292daa807) ) // sldh
2305 
2306 	ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
2307 	ROM_LOAD( "uh15.bin", 0x0000, 0x8000, CRC(3d5acd08) SHA1(c19f686862dfc12d2fa91c2dd3d3b75d9cb410c3) )
2308 
2309 	ROM_REGION( 0x180000, "gfx1", 0 ) /* 4bpp gfx */
2310 	ROM_LOAD( "ua4", 0x000000, 0x80000, CRC(66cae586) SHA1(22af524b26241a6456b777a847db73ff8d3db11f) ) // sldh
2311 	ROM_LOAD( "ua5", 0x080000, 0x80000, CRC(0bd9f6bb) SHA1(400ddff7a76860caacfe8bfd803f9ccd2dba3356) ) // sldh
2312 	ROM_LOAD( "ua6", 0x100000, 0x80000, CRC(0e90b26c) SHA1(fd9b40988d03db8ed797abf859a8828bb65db8d5) ) // sldh
2313 
2314 	ROM_REGION( 0x080000, "oki", 0 ) /* Samples - both banks are almost the same */
2315 	/* todo, check bank ordering .. */
2316 	ROM_LOAD( "sra.bin", 0x00000, 0x40000, CRC(82f452c4) SHA1(95ad6ede87ceafb045ed7df40496baf96190b97f) ) // bank 1
2317 	ROM_LOAD( "srb.bin", 0x40000, 0x40000, CRC(109e51e6) SHA1(3344c68d63bbad4a02b47143b2d2f72ce9bcb4bb) ) // bank 2
2318 ROM_END
2319 
2320 /* SemiCom Games */
2321 
2322 ROM_START( hyperpac )
2323 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2324 	ROM_LOAD16_BYTE( "hyperpac.h12", 0x00001, 0x20000, CRC(2cf0531a) SHA1(c4321d728845035507352d0bcf4348d28b92e85e) )
2325 	ROM_LOAD16_BYTE( "hyperpac.i12", 0x00000, 0x20000, CRC(9c7d85b8) SHA1(432d5fbe8bef875ce4a9aeb74a7b57dc79c709fd) )
2326 
2327 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2328 	ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) )
2329 
2330 	ROM_REGION( 0x10000, "protection", 0 ) /* Intel 87C52 MCU Code */
2331 	ROM_LOAD( "at89c52.bin", 0x00000, 0x2000 , CRC(291f9326) SHA1(e440ce7d92188faa86e02e7f9db4ec6bce21efd3) ) /* decapped */
2332 
2333 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2334 	ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
2335 
2336 	ROM_REGION( 0x0c0000, "gfx1", 0 ) /* Sprites */
2337 	ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
2338 	ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
2339 	ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
2340 ROM_END
2341 
2342 ROM_START( hyperpacb )
2343 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2344 	ROM_LOAD16_BYTE( "hpacuh12.bin", 0x00001, 0x20000, CRC(633ab2c6) SHA1(534435fa602adebf651e1d42f7c96b01eb6634ef) )
2345 	ROM_LOAD16_BYTE( "hpacui12.bin", 0x00000, 0x20000, CRC(23dc00d1) SHA1(8d4d00f450b94912adcbb24073f9b3b01eab0450) )
2346 
2347 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2348 	ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) ) // was missing from this set, using the one from the original
2349 
2350 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2351 	ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
2352 
2353 	ROM_REGION( 0x0c0000, "gfx1", 0 ) /* Sprites */
2354 	ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
2355 	ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
2356 	ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
2357 ROM_END
2358 
2359 ROM_START( twinkle )
2360 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2361 	ROM_LOAD16_BYTE( "uh12.bin", 0x00001, 0x20000, CRC(a99626fe) SHA1(489098a2ceb36df97b6b1d59b7b696300deee3ab) )
2362 	ROM_LOAD16_BYTE( "ui12.bin", 0x00000, 0x20000, CRC(5af73684) SHA1(9be43e5c71152d515366e422eb077a41dbb3fe62) )
2363 
2364 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2365 	ROM_LOAD( "u1.bin", 0x00000, 0x10000 , CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) )
2366 
2367 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2368 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2369 
2370 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2371 	/* this is not a real rom but instead the data extracted from
2372 	   shared ram, the MCU puts it there */
2373 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(00d3e4b4) SHA1(afa359a8b48605ff034133bad2a0a182429dec71) )
2374 
2375 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2376 	ROM_LOAD( "uj15.bin", 0x00000, 0x40000, CRC(0a534b37) SHA1(b7d780eb4668f1f757a60884c022f5bbc424dc97) )
2377 
2378 	ROM_REGION( 0x080000, "gfx1", 0 ) /* Sprites */
2379 	ROM_LOAD( "ua4.bin", 0x000000, 0x80000, CRC(6b64bb09) SHA1(547eac1ad931a6b937dff0b922d06af92cc7ab73) )
2380 ROM_END
2381 
2382 
2383 ROM_START( pzlbreak )
2384 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2385 	ROM_LOAD16_BYTE( "4.uh12", 0x00001, 0x20000, CRC(b3f04f80) SHA1(79b5414727004719ff172e084a672b21e955f0bc) )
2386 	ROM_LOAD16_BYTE( "5.ui12", 0x00000, 0x20000, CRC(13c298a0) SHA1(9455de7ea45c9a61ed6105023eb909c086c44007) )
2387 
2388 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2389 	ROM_LOAD( "0.u1", 0x00000, 0x10000 , CRC(1ad646b7) SHA1(0132baa097e48df2450afdcd316375dc546ea4d0) )
2390 
2391 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2392 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2393 
2394 	ROM_REGION16_BE( 0x200, "user1", ROMREGION_ERASEFF ) /* Data from Shared RAM */
2395 	/* this is not a real rom but instead the data extracted from
2396 	   shared ram, the MCU puts it there */
2397 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(092cb794) SHA1(eb2b336d97b440453ca37ee7605654b35dfb6bad) )
2398 
2399 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2400 	ROM_LOAD( "1.uj15", 0x00000, 0x40000, CRC(dbfae77c) SHA1(cc509d52cd9c608fc80df799890e62e7b4c143c6) )
2401 
2402 	ROM_REGION( 0x100000, "gfx1", 0 ) /* Sprites */
2403 	ROM_LOAD( "2.ua4", 0x000000, 0x80000, CRC(d211705a) SHA1(b3a7f8198dc8c034b17b843b2ab0298426de3f55) )
2404 	ROM_LOAD( "3.ua5", 0x080000, 0x80000, CRC(6cdb73e9) SHA1(649e91ee54de2b359a207bed4d950db95515a3d8) )
2405 ROM_END
2406 
2407 
2408 ROM_START( toppyrap )
2409 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2410 	ROM_LOAD16_BYTE( "uh12.bin", 0x00001, 0x40000, CRC(6f5ad699) SHA1(42f7201d6274ff8338a7d4627af99001f473e841) )
2411 	ROM_LOAD16_BYTE( "ui12.bin", 0x00000, 0x40000, CRC(caf5a7e1) SHA1(b521b2f06a804a52dad1b07657db2a29e1411844) )
2412 
2413 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2414 	ROM_LOAD( "u1.bin", 0x00000, 0x10000 , CRC(07f50947) SHA1(83740655ab5f677bd009191bb0de60e237aaa11c) )
2415 
2416 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2417 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2418 
2419 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2420 	/* this contains the code for 2 of the IRQ functions, but the game only uses one of them, the other is
2421 	   executed from ROM.  The version in ROM is slightly patched version so maybe there is an earlier revision
2422 	   which uses the code provided by the MCU instead */
2423 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(0704e6c7) SHA1(22387257db569990378c304af9677e6dc1436207) )
2424 
2425 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2426 	ROM_LOAD( "uj15.bin", 0x00000, 0x20000, CRC(a3bacfd7) SHA1(d015d8bd26d0189fc13d09fefcb9b8baaaacec8a) )
2427 
2428 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2429 	ROM_LOAD( "ua4.bin", 0x000000, 0x80000, CRC(a9577bcf) SHA1(9918d982ebee1c88bd203fa2b3ce2468c160fb95) )
2430 	ROM_LOAD( "ua5.bin", 0x080000, 0x80000, CRC(7179d32d) SHA1(dae7126401b5bb7f99689587e05a8bf5033ec06e) )
2431 	ROM_LOAD( "ua6.bin", 0x100000, 0x80000, CRC(4834e5b1) SHA1(cd8a4c329b2bfe1a9c2dea9d72ca09b71366c60a) )
2432 	ROM_LOAD( "ua7.bin", 0x180000, 0x80000, CRC(663dd099) SHA1(84b52af54ac49e8b4bae23995e3cf94494be2bb3) )
2433 ROM_END
2434 
2435 ROM_START( moremore )
2436 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2437 	ROM_LOAD16_BYTE( "u52.bin",  0x00001, 0x40000, CRC(cea4b246) SHA1(5febcb5dda6581caccfe9079b28c2366dfc1db2b) )
2438 	ROM_LOAD16_BYTE( "u74.bin",  0x00000, 0x40000, CRC(2acdcb88) SHA1(74d661d07752bbccab7eab151209a414e9bf7675) )
2439 
2440 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2441 	ROM_LOAD( "u35.bin", 0x00000, 0x10000 , CRC(92dc95fc) SHA1(f04e63cc680835458246989532faf5657e28db13) )
2442 
2443 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2444 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2445 
2446 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2447 	/* this is not a real rom but instead the data extracted from
2448 	   shared ram, the MCU puts it there */
2449 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(782dd2aa) SHA1(2587734271e0c85cb76bcdee171366c4e6fc9f81) )
2450 
2451 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2452 	ROM_LOAD( "u14.bin", 0x00000, 0x40000, CRC(90580088) SHA1(c64de2c0db95ab4ce06fc0a29c0cc8b7f3deeb28) )
2453 
2454 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2455 	ROM_LOAD( "u75.bin", 0x000000, 0x80000, CRC(d671815c) SHA1(a7e8d3bf688ce51b5d9a2b306cc557974328c322) )
2456 	ROM_LOAD( "u76.bin", 0x080000, 0x80000, CRC(e0d479e8) SHA1(454b53949664aca07a86229d3b6c9ce4e9449ea6) )
2457 	ROM_LOAD( "u77.bin", 0x100000, 0x80000, CRC(60a281da) SHA1(3f268f8b1cd8efd3e32d0fcdba5483c93122800e) )
2458 	ROM_LOAD( "u78.bin", 0x180000, 0x80000, CRC(e2723b4e) SHA1(6b4ba1e2e937b3231d76526af3f5a4a67144e4d5) )
2459 ROM_END
2460 
2461 ROM_START( moremorp )
2462 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2463 	ROM_LOAD16_BYTE( "mmp_u52.bin",  0x00001, 0x40000, CRC(66baf9b2) SHA1(f1d383a94ef4313cb02c59ace17b9562eddcfb3c) )
2464 	ROM_LOAD16_BYTE( "mmp_u74.bin",  0x00000, 0x40000, CRC(7c6fede5) SHA1(41bc539a6efe9eb2304243701857b972d2170bcf) )
2465 
2466 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2467 	ROM_LOAD( "mmp_u35.bin", 0x00000, 0x10000 , CRC(4d098cad) SHA1(a79d417e7525a25dd6697da9f3d1de269e759d2e) )
2468 
2469 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2470 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2471 
2472 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2473 	/* this is not a real rom but instead the data extracted from
2474 	   shared ram, the MCU puts it there */
2475 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(782dd2aa) SHA1(2587734271e0c85cb76bcdee171366c4e6fc9f81) )
2476 
2477 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2478 	ROM_LOAD( "mmp_u14.bin", 0x00000, 0x40000, CRC(211a2566) SHA1(48138547822a8e76c101dd4189d581f80eee1e24) )
2479 
2480 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2481 	ROM_LOAD( "mmp_u75.bin", 0x000000, 0x80000, CRC(af9e824e) SHA1(2b68813bf025a34b8958033108e4f8d39fd618cb) )
2482 	ROM_LOAD( "mmp_u76.bin", 0x080000, 0x80000, CRC(c42af064) SHA1(f9d755e7cb52828d8594f7871932daf11443689f) )
2483 	ROM_LOAD( "mmp_u77.bin", 0x100000, 0x80000, CRC(1d7396e1) SHA1(bde7e925051408dd2371b5da8235a6a4cae8cf6a) )
2484 	ROM_LOAD( "mmp_u78.bin", 0x180000, 0x80000, CRC(5508d80b) SHA1(1b9a70a502b237fa11d1d55dce761e2def18873a) )
2485 ROM_END
2486 
2487 ROM_START( 3in1semi ) /* SemiCom Ser-4331-4 PCB */
2488 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2489 	ROM_LOAD16_BYTE( "u52",  0x00001, 0x40000, CRC(b0e4a0f7) SHA1(e1f8b8ef020a85fcd7817814cf6c5d560e9e608d) )
2490 	ROM_LOAD16_BYTE( "u74",  0x00000, 0x40000, CRC(266862c4) SHA1(2c5c513fee99bdb6e0ae3e0e644e516bdaddd629) )
2491 
2492 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2493 	ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) )
2494 
2495 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2496 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2497 
2498 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2499 	/* this is not a real rom but instead the data extracted from
2500 	   shared ram, the MCU puts it there */
2501 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(85deba7c) SHA1(44c6d9306b4f8e47182f4740a18971c49a8df8db) )
2502 
2503 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2504 	ROM_LOAD( "u14", 0x00000, 0x40000, CRC(c83c11be) SHA1(c05d96d61e5b8245232c85cbbcb7cc1e4e066492) )
2505 
2506 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2507 	ROM_LOAD( "u75", 0x000000, 0x80000, CRC(b66a0db6) SHA1(a4e604eb3c0a5b16b4b0bb99219045bf2146287c) )
2508 	ROM_LOAD( "u76", 0x080000, 0x80000, CRC(5f4b48ea) SHA1(e9dd1100d55b021b060990988c1e5271ce1ae35b) )
2509 	ROM_LOAD( "u77", 0x100000, 0x80000, CRC(d44211e3) SHA1(53af19dec03e76912632450414cdbcbb31cc094c) )
2510 	ROM_LOAD( "u78", 0x180000, 0x80000, CRC(af596afc) SHA1(875d7a51ff5c741cae4483d8da33df9cae8de52a) )
2511 ROM_END
2512 
2513 /*
2514 
2515 Ma Cheon Ru
2516 SemiCom (c) 1999
2517 
2518 PCB:  Ser-4331-4
2519 
2520   CPU: 68000, Z80
2521 Sound: OKIM6295, YM2151+YM3012 (rebadged as KA51+BS902)
2522 Video: QuickLogic QL2003-XPL84C
2523   OSC: 16MHz, 12MHz
2524 
2525 Measurements:
2526    68000 12MHz
2527      Z80 4MHz (16MHz/4)
2528   YM2151 4MHz (16MHz/4)
2529 OKI 6295 1MHz (16MHz/16, pin 7 High)
2530 */
2531 
2532 ROM_START( mcheonru ) /* SemiCom Ser-4331-4 PCB */
2533 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2534 	ROM_LOAD16_BYTE( "u52",  0x00001, 0x40000, CRC(63fd8a9b) SHA1(53054d8072322842c32625ab38e7d62dc0e75627) )
2535 	ROM_LOAD16_BYTE( "u74",  0x00000, 0x40000, CRC(3edb17ce) SHA1(0c6ea239f57eca114d75c173b77b2c8ef43d63a2) )
2536 
2537 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2538 	ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(79e965b4) SHA1(268df67ec6ea828ae01a6e4d2da9ad2a08a837f1) )
2539 
2540 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2541 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2542 
2543 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2544 	/* this is not a real rom but instead the data extracted from
2545 	   shared ram, the MCU puts it there */
2546 	ROM_LOAD( "protdata.bin", 0x00000, 0x200 , CRC(d61f4f07) SHA1(29485bce6e3a7ed2ace540bb81fe028456ae1ae9) )
2547 
2548 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2549 	ROM_LOAD( "u14", 0x00000, 0x40000, CRC(28a62d23) SHA1(24dbe6229647032599e02225de57650205dce5c3) )
2550 
2551 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2552 	ROM_LOAD( "u75", 0x000000, 0x80000, CRC(0142c085) SHA1(9d948a63e4edcdb7f5cef0d2d7f118e6cbf4779e) )
2553 	ROM_LOAD( "u76", 0x080000, 0x80000, CRC(27fda507) SHA1(87820348470979da730956066d3c820faedbec13) )
2554 	ROM_LOAD( "u77", 0x100000, 0x80000, CRC(4dfe0550) SHA1(9a227114765ea5327b64061e4b4e4d4f19bd3293) )
2555 	ROM_LOAD( "u78", 0x180000, 0x80000, CRC(f1b74978) SHA1(d1ac1bc212050d4f1a861045ab612115c73d3fd0) )
2556 ROM_END
2557 
2558 ROM_START( cookbib2 )
2559 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2560 	ROM_LOAD16_BYTE( "cookbib2.02",  0x00001, 0x40000, CRC(b2909460) SHA1(2438638af870cfc105631d2b5e5a27a64ab5394d) )
2561 	ROM_LOAD16_BYTE( "cookbib2.01",  0x00000, 0x40000, CRC(65aafde2) SHA1(01f9f261527c35182f0445d641d987aa86ad750f) )
2562 
2563 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2564 	ROM_LOAD( "cookbib2.07", 0x00000, 0x10000 , CRC(f59f1c9a) SHA1(2830261fd55249e015514fcb4cf8392e83b7fd0d) )
2565 
2566 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2567 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2568 
2569 	ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
2570 	/* this is not a real rom but instead the data extracted from
2571 	   shared ram, the MCU puts it there */
2572 	ROM_LOAD16_WORD_SWAP( "protdata.bin", 0x00000, 0x200 , CRC(ae6d8ed5) SHA1(410cdacb9b90ea345c0e4be85e60a138f45a51f1) )
2573 
2574 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2575 	ROM_LOAD( "cookbib2.06", 0x00000, 0x20000, CRC(5e6f76b8) SHA1(725800143dfeaa6093ed5fcc5b9f15678ae9e547) )
2576 
2577 	ROM_REGION( 0x140000, "gfx1", 0 ) /* Sprites */
2578 	ROM_LOAD( "cookbib2.05", 0x000000, 0x80000, CRC(89fb38ce) SHA1(1b39dd9c2743916b8d8af590bd92fe4819c2454b) )
2579 	ROM_LOAD( "cookbib2.04", 0x080000, 0x80000, CRC(f240111f) SHA1(b2c3b6e3d916fc68e1fd258b1279b6c39e1f0108) )
2580 	ROM_LOAD( "cookbib2.03", 0x100000, 0x40000, CRC(e1604821) SHA1(bede6bdd8331128b9f2b229d718133470bf407c9) )
2581 ROM_END
2582 
2583 ROM_START( cookbib2a )
2584 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2585 	ROM_LOAD16_BYTE( "uh12.020",  0x00001, 0x40000, CRC(a44ec1f8) SHA1(0c741bf38f5cf667586cd1925417b6e17dbb8916) )
2586 	ROM_LOAD16_BYTE( "ui12.020",  0x00000, 0x40000, CRC(bdbcd0d1) SHA1(9a6a85a492c21f6dd5daef964071a8a1c62f73c8) )
2587 
2588 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2589 	ROM_LOAD( "u1.512", 0x00000, 0x10000 , CRC(f59f1c9a) SHA1(2830261fd55249e015514fcb4cf8392e83b7fd0d) )
2590 
2591 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2592 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2593 
2594 	ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
2595 	/* this is not a real rom but instead the data extracted from
2596 	   shared ram, the MCU puts it there
2597 
2598 	   this one is hacked from the cookbib2 one, absolute code jump needed to be changed at least */
2599 	ROM_LOAD16_WORD_SWAP( "protdata_alt.bin", 0x00000, 0x200, BAD_DUMP CRC(bc136ead) SHA1(96459c2ccf7f95880421ba082c2414fa1040f3ed) )
2600 
2601 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2602 	ROM_LOAD( "uj15.010", 0x00000, 0x20000, CRC(5e6f76b8) SHA1(725800143dfeaa6093ed5fcc5b9f15678ae9e547) )
2603 
2604 	ROM_REGION( 0x180000, "gfx1", 0 ) /* Sprites */
2605 	ROM_LOAD( "ua4.040", 0x000000, 0x80000, CRC(f458d52e) SHA1(f6a145aaa57c64557479e63bb95732a98a7b8b85) )
2606 	ROM_LOAD( "ua6.040", 0x080000, 0x80000, CRC(249e89b4) SHA1(2100eea2c3cee84a046ba7ff6cec1027966b895c) )
2607 	ROM_LOAD( "ua8.040", 0x100000, 0x80000, CRC(caa25138) SHA1(784111255777f5774abf4d34c0a95b5e23a14c9f) )
2608 ROM_END
2609 
2610 ROM_START( cookbib3 )
2611 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2612 	ROM_LOAD16_BYTE( "u52.bin",  0x00001, 0x40000, CRC(65134893) SHA1(b1f26794d1a85893aedf55adb2195ad244f90132) )
2613 	ROM_LOAD16_BYTE( "u74.bin",  0x00000, 0x40000, CRC(c4ab8435) SHA1(7f97d3deafb3eb5412a44308ef20d3317405e94c) )
2614 
2615 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2616 	ROM_LOAD( "u35.bin", 0x0c000, 0x4000 ,  CRC(5dfd2a98) SHA1(193c0cd9272144c25cbc3660967424d34d0da185) ) /* bit strange but verified, not the first time SemiCom have done this, see bcstory.. */
2617 	ROM_CONTINUE(0x8000,0x4000)
2618 	ROM_CONTINUE(0x4000,0x4000)
2619 	ROM_CONTINUE(0x0000,0x4000)
2620 
2621 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2622 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2623 
2624 	ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
2625 	/* this is not a real rom but instead the data extracted from
2626 	   shared ram, the MCU puts it there */
2627 	ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(c819b9a8) SHA1(1d425e8c9940c0e691149e5406dd71808bd73832) )
2628 	/* the 'empty' pattern continued after 0x200 but the game doesn't use it or attempt to decrypt it */
2629 
2630 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2631 	ROM_LOAD( "u14.bin", 0x00000, 0x20000, CRC(e5bf9288) SHA1(12fb9542f9105fe1a21a74a08cda4d6372b984ee) )
2632 
2633 	ROM_REGION( 0x180000, "gfx1", 0 ) /* Sprites */
2634 	ROM_LOAD( "u75.bin", 0x000000, 0x80000, CRC(cbe4d9c8) SHA1(81b043bd2b45ab2a8c9df0ba599c6220ed0c9fbf) )
2635 	ROM_LOAD( "u76.bin", 0x080000, 0x80000, CRC(1be17b57) SHA1(57b58cc094d6b47ed6136266f1d34b8bad3f421f) )
2636 	ROM_LOAD( "u77.bin", 0x100000, 0x80000, CRC(7823600d) SHA1(90d431f324b71758c49f3a72ee07701ceb76403f) )
2637 ROM_END
2638 
2639 ROM_START( 4in1boot ) /* snow bros, tetris, hyperman 1, pacman 2 */
2640 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2641 	ROM_LOAD16_BYTE( "u52",  0x00001, 0x80000, CRC(71815878) SHA1(e3868f5687c1d8ec817671c50ade6c56ee83bfa1) )
2642 	ROM_LOAD16_BYTE( "u74",  0x00000, 0x80000, CRC(e22d3fa2) SHA1(020ab92d8cbf37a9f8186a81934abb97088c16f9) )
2643 
2644 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2645 	ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(c894ac80) SHA1(ee896675b5205ab2dbd0cbb13db16aa145391d06) )
2646 
2647 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2648 	ROM_LOAD( "u14", 0x00000, 0x40000, CRC(94b09b0e) SHA1(414de3e36eff85126038e8ff74145b35076e0a43) )
2649 
2650 	ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
2651 	ROM_LOAD( "u78", 0x000000, 0x200000, CRC(6c1fbc9c) SHA1(067f32cae89fd4d57b90be659d2d648e557c11df) )
2652 ROM_END
2653 
2654 ROM_START( snowbro3 )
2655 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2656 	ROM_LOAD16_BYTE( "ur4",  0x00000, 0x20000, CRC(19c13ffd) SHA1(4f9db70354bd410b7bcafa96be4591de8dc33d90) )
2657 	ROM_LOAD16_BYTE( "ur3",  0x00001, 0x20000, CRC(3f32fa15) SHA1(1402c173c1df142ff9dd7b859689c075813a50e5) )
2658 
2659 	/* the sound is driven by an MCU */
2660 	ROM_REGION( 0x10000, "cpu2", 0 )
2661 	ROM_LOAD( "sound.mcu", 0x00000, 0x10000 , NO_DUMP )
2662 
2663 	ROM_REGION( 0x80000, "gfx1", 0 )
2664 	ROM_LOAD( "ua5",        0x000000, 0x80000, CRC(0604e385) SHA1(96acbc65a8db89a7be100f852dc07ba9a0313167) )   /* 16x16 tiles */
2665 
2666 	ROM_REGION( 0x400000, "gfx2", 0 ) /* 16x16 BG Tiles */
2667 	ROM_LOAD( "un7",        0x000000, 0x200000, CRC(4a79da4c) SHA1(59207d116d39b9ee25c51affe520f5fdff34e536) )
2668 	ROM_LOAD( "un8",        0x200000, 0x200000, CRC(7a4561a4) SHA1(1dd823369c09368d1f0ec8e1cb85d700f10ff448) )
2669 
2670 	ROM_REGION( 0x100000, "oki", 0 )    /* OKIM6295 samples */
2671 	ROM_LOAD( "us5",     0x00000, 0x20000, CRC(7c6368ef) SHA1(53393c570c605f7582b61c630980041e2ed32e2d) )
2672 	ROM_CONTINUE(0x80000,0x60000)
2673 ROM_END
2674 
2675 ROM_START( ballboy )
2676 	ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
2677 	ROM_LOAD16_BYTE( "27c010.ur4",  0x00000, 0x20000, CRC(5fb51b99) SHA1(07e12a3bb51fbb3f192b81497460231c7b609290) )
2678 	ROM_LOAD16_BYTE( "27c010.ur3",  0x00001, 0x20000, CRC(a9c1fdda) SHA1(efb7eaab993f99d89d3b9c159c3b8eb18ace9c2c) )
2679 
2680 	/* the sound is driven by an MCU */
2681 	ROM_REGION( 0x10000, "cpu2", 0 )
2682 	ROM_LOAD( "sound.mcu", 0x00000, 0x10000 , NO_DUMP )
2683 
2684 	ROM_REGION( 0x80000, "gfx1", 0 )
2685 	ROM_LOAD( "27c040.ua5",        0x000000, 0x80000, CRC(0604e385) SHA1(96acbc65a8db89a7be100f852dc07ba9a0313167) )   /* 16x16 tiles */
2686 
2687 	ROM_REGION( 0x400000, "gfx2", 0 ) /* 16x16 BG Tiles */
2688 	ROM_LOAD( "27c160.un7",        0x000000, 0x200000, CRC(4a79da4c) SHA1(59207d116d39b9ee25c51affe520f5fdff34e536) )
2689 	ROM_LOAD( "27c160.un8",        0x200000, 0x200000, CRC(bfef8c44) SHA1(86930cfcaedbd111d5b985e87a76d2211d2ce2ec) )
2690 
2691 	ROM_REGION( 0x100000, "oki", 0 )    /* OKIM6295 samples */
2692 	ROM_LOAD( "27c040.us5",     0x00000, 0x20000, CRC(7c6368ef) SHA1(53393c570c605f7582b61c630980041e2ed32e2d) )
2693 	ROM_CONTINUE(0x80000,0x60000)
2694 ROM_END
2695 
2696 
2697 /*
2698 
2699 Information from Korean arcade gaming magazine
2700 
2701 name : Final Tetris
2702 author : Jeil computer system
2703 year : 1993.08.24
2704 
2705 */
2706 
2707 ROM_START( finalttr )
2708 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2709 	ROM_LOAD16_BYTE( "10.7o",    0x00000, 0x20000, CRC(eecc83e5) SHA1(48088a2fae8852a73a325a9659c24b241515eac3) )
2710 	ROM_LOAD16_BYTE( "9.5o",     0x00001, 0x20000, CRC(58d3640e) SHA1(361bc64174a6c7b15a13e0d1f048c7ea270182ca) )
2711 
2712 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2713 	ROM_LOAD( "12.5r",    0x00000, 0x10000, CRC(4bc21361) SHA1(dab9bea665c0f2fd7cee8ab7f3762e427911bcca) )
2714 
2715 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2716 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2717 
2718 	ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
2719 	/* this is not a real rom but instead the data extracted from
2720 	   shared ram, the MCU puts it there */
2721 	ROM_LOAD16_WORD_SWAP( "protdata.bin", 0x00000, 0x200 , CRC(d5bbb006) SHA1(2f9ce6c4f4f5a304a807134da9c85c68a7b49200) )
2722 	/* after 0xc7 the data read seems meaningless garbage, it doesn't appear to
2723 	   stop at 0x102200, might be worth going back and checking if its simply random
2724 	   values due to ram not being cleared, or actual data */
2725 
2726 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2727 	ROM_LOAD( "11.7p",    0x00000, 0x20000, CRC(2e331022) SHA1(1e74c66d16eb9c8ae04acecbb4040dea037492cc) )
2728 
2729 	ROM_REGION( 0x100000, "gfx1", 0 ) /* Sprites */
2730 	ROM_LOAD( "5.1d",     0x00000, 0x40000, CRC(64a450f3) SHA1(d0560f68fe1527fda7852269ec39237ace66ab32) )
2731 	ROM_LOAD( "6.1f",     0x40000, 0x40000, CRC(7281a3cc) SHA1(3f2ed7893bd7c5ff25ecb6eabce78ab66fe532a7) )
2732 	ROM_LOAD( "7.1g",     0x80000, 0x40000, CRC(ec80f442) SHA1(870e44d28490a324f74af554604b9daa8422b86f) )
2733 	ROM_LOAD( "9.1h",     0xc0000, 0x40000, CRC(2ebd316d) SHA1(2f1249ebd2a0bb0cc15259f7187201576a365fa6) )
2734 ROM_END
2735 
2736 
2737 
2738 ROM_START( suhosong )
2739 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
2740 	ROM_LOAD16_BYTE( "su_ho_sung.uh12",  0x00001, 0x20000, CRC(6bd8bd08) SHA1(668398c9c77cc4cc52858daefd3cb13fbaf29a37) )
2741 	ROM_LOAD16_BYTE( "su_ho_sung.ui12",  0x00000, 0x20000, CRC(79a4806e) SHA1(a4080ea70fa588ada384ffa9877f5cf965fb68df) )
2742 
2743 
2744 	ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
2745 	ROM_LOAD( "su_ho_sung.u1", 0x00000, 0x10000 ,  CRC(509ce74e) SHA1(a93add5ab674671078b55128281dcf9b0db46617) )
2746 
2747 	ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
2748 	ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
2749 
2750 	ROM_REGION16_BE( 0x200, "user1", ROMREGION_ERASE00 ) /* Data from Shared RAM */
2751 	ROM_LOAD16_WORD( "protdata.bin", 0x000, 0x200 , CRC(4478e251) SHA1(08489d6bfe5503c8eb62909e56a07193a922b4c1) )
2752 
2753 	ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
2754 	ROM_LOAD( "su_ho_sung.uj15", 0x00000, 0x40000, CRC(266fcae8) SHA1(0f15f880bde0c12b5c663ed387f9353c13b731b6) )
2755 
2756 	ROM_REGION( 0x180000, "gfx1", 0 ) /* Sprites */
2757 	ROM_LOAD( "su_ho_sung.ua4", 0x000000, 0x80000, CRC(bc83a944) SHA1(fbd46648107c66f328b0a61c74b6b82c718e6f4b) )
2758 	ROM_LOAD( "su_ho_sung.ua5", 0x080000, 0x80000, CRC(a1907ea4) SHA1(e21c29d12e50cce1434dbaff0929c207bfd33344) )
2759 	ROM_LOAD( "su_ho_sung.ua6", 0x100000, 0x80000, CRC(92fea02c) SHA1(946c7bf55354875a1581ce484cb185b640f74166) )
2760 ROM_END
2761 
2762 
2763 ROM_START( yutnori )
2764 	ROM_REGION( 0x80000, "maincpu", 0 )    /* 68000 code */
2765 	ROM_LOAD16_BYTE( "sys_d0-d7",    0x000001, 0x20000, CRC(d5c853da) SHA1(578f29c3a307f82fcaa23a7fe2931c0a673e777e) )
2766 	ROM_LOAD16_BYTE( "sys_d8-d15",   0x000000, 0x20000, CRC(bf108119) SHA1(e64f64ddb577d6750cbc3a6c9d8d2ec4482cafe0) )
2767 
2768 	ROM_REGION( 0x4010, "mcu", 0 )    /* PIC code */
2769 	ROM_LOAD( "pic16c64a-04-p",    0x000000, 0x4010, BAD_DUMP CRC(46fd3671) SHA1(54cf7a38f7743cdad73a2741183b2720ee42e6c8) ) // dump seems to be 99% empty, protected, only configuration bytes dumped?
2770 
2771 	ROM_REGION( 0x120000, "gfx1", ROMREGION_ERASE00 )
2772 	ROM_LOAD( "graphics_rom_1",    0x000000, 0x80000, CRC(d4881b49) SHA1(e169b7eca48a0bd66ad55fe21197a4bb491198bb) )
2773 	ROM_LOAD( "graphics_rom_2",    0x080000, 0x80000, CRC(8cd9ce60) SHA1(d1db929ca6128ec2ebe983e6161f200ba421bd31) )
2774 	ROM_LOAD( "graphics_rom_3",    0x100000, 0x20000, CRC(04f7c2ac) SHA1(927fa0f76ff1801845776d47aa5311f485b0b809) )
2775 
2776 	ROM_REGION(0x80000, "oki1", 0 ) // 2 banks, 1 large sample in each (music)
2777 	ROM_LOAD("sound rom", 0x000000, 0x080000, CRC(d24c2e43) SHA1(5c7a130048463558d695857ffc056a95a8072219) )
2778 
2779 	ROM_REGION(0x40000, "oki2", 0 )
2780 	ROM_LOAD("voice_rom", 0x000000, 0x040000, CRC(25e85201) SHA1(6c0001e2942f49b62e1bbf3a68c59abad1e2f94c) )
2781 ROM_END
2782 
2783 
2784 
2785 void snowbros_state::init_cookbib2()
2786 {
2787 }
2788 
2789 
_4in1_02_read()2790 uint16_t snowbros_state::_4in1_02_read()
2791 {
2792 	return 0x0202;
2793 }
2794 
init_4in1boot()2795 void snowbros_state::init_4in1boot()
2796 {
2797 	uint8_t *src = memregion("maincpu")->base();
2798 	int len = memregion("maincpu")->bytes();
2799 
2800 	/* strange order */
2801 	{
2802 		std::vector<uint8_t> buffer(len);
2803 		for (int i = 0;i < len; i++)
2804 			if (i & 1) buffer[i] = bitswap<8>(src[i],6,7,5,4,3,2,1,0);
2805 			else buffer[i] = src[i];
2806 
2807 		memcpy(src, &buffer[0], len);
2808 	}
2809 
2810 	src = memregion("soundcpu")->base();
2811 	len = memregion("soundcpu")->bytes();
2812 
2813 	/* strange order */
2814 	{
2815 		std::vector<uint8_t> buffer(len);
2816 		for (int i = 0;i < len; i++)
2817 			buffer[i] = src[i^0x4000];
2818 		memcpy(src,&buffer[0],len);
2819 	}
2820 	m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16smo_delegate(*this, FUNC(snowbros_state::_4in1_02_read)));
2821 }
2822 
init_snowbro3()2823 void snowbros_state::init_snowbro3()
2824 {
2825 	uint8_t *src = memregion("maincpu")->base();
2826 	int len = memregion("maincpu")->bytes();
2827 
2828 	/* strange order */
2829 	{
2830 		std::vector<uint8_t> buffer(len);
2831 		for (int i = 0;i < len; i++)
2832 			buffer[i] = src[bitswap<24>(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,3,4,1,2,0)];
2833 		memcpy(src,&buffer[0],len);
2834 	}
2835 
2836 	save_item(NAME(m_sb3_music_is_playing));
2837 	save_item(NAME(m_sb3_music));
2838 }
2839 
_3in1_read()2840 uint16_t snowbros_state::_3in1_read()
2841 {
2842 	return 0x000a;
2843 }
2844 
init_3in1semi()2845 void snowbros_state::init_3in1semi()
2846 {
2847 	m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16smo_delegate(*this, FUNC(snowbros_state::_3in1_read)));
2848 }
2849 
2850 
cookbib3_read()2851 uint16_t snowbros_state::cookbib3_read()
2852 {
2853 	return 0x2a2a;
2854 }
2855 
init_cookbib3()2856 void snowbros_state::init_cookbib3()
2857 {
2858 	m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16smo_delegate(*this, FUNC(snowbros_state::cookbib3_read)));
2859 }
2860 
init_pzlbreak()2861 void snowbros_state::init_pzlbreak()
2862 {
2863 	m_pandora->set_bg_pen(0xc0);
2864 }
2865 
2866 
2867 
init_toto()2868 void snowbros_state::init_toto()
2869 {
2870 	// every single rom has bits 0x10 and 0x08 swapped
2871 	uint8_t *src = memregion("maincpu")->base();
2872 	int len = memregion("maincpu")->bytes();
2873 
2874 	for (int i = 0; i < len; i++)
2875 	{
2876 		src[i] = bitswap<8>(src[i], 7, 6, 5, 3, 4, 2, 1, 0);
2877 	}
2878 
2879 	src = memregion("gfx1")->base();
2880 	len = memregion("gfx1")->bytes();
2881 
2882 	for (int i = 0; i < len; i++)
2883 	{
2884 		src[i] = bitswap<8>(src[i], 7, 6, 5, 3, 4, 2, 1, 0);
2885 	}
2886 
2887 	src = memregion("soundcpu")->base();
2888 	len = memregion("soundcpu")->bytes();
2889 
2890 	for (int i = 0; i < len; i++)
2891 	{
2892 		src[i] = bitswap<8>(src[i], 7, 6, 5, 3, 4, 2, 1, 0);
2893 	}
2894 
2895 	// protection? (just return 0x07)
2896 	m_maincpu->space(AS_PROGRAM).install_read_handler(0x500006, 0x500007, read16s_delegate(*this, FUNC(snowbros_state::toto_read)));
2897 }
2898 
init_hyperpac()2899 void snowbros_state::init_hyperpac()
2900 {
2901 	save_item(NAME(m_semicom_prot_offset));
2902 }
2903 
2904 
init_yutnori()2905 void snowbros_state::init_yutnori()
2906 {
2907 	m_yutnori_prot_val = 0;
2908 	m_pandora->set_bg_pen(0xf0);
2909 	save_item(NAME(m_yutnori_prot_val));
2910 }
2911 
2912 GAME( 1990, snowbros,   0,        snowbros,    snowbros, snowbros_state, empty_init,    ROT0, "Toaplan",                        "Snow Bros. - Nick & Tom (set 1)", MACHINE_SUPPORTS_SAVE )
2913 GAME( 1990, snowbrosa,  snowbros, snowbros,    snowbros, snowbros_state, empty_init,    ROT0, "Toaplan",                        "Snow Bros. - Nick & Tom (set 2)", MACHINE_SUPPORTS_SAVE )
2914 GAME( 1990, snowbrosb,  snowbros, snowbros,    snowbros, snowbros_state, empty_init,    ROT0, "Toaplan",                        "Snow Bros. - Nick & Tom (set 3)", MACHINE_SUPPORTS_SAVE )
2915 GAME( 1990, snowbrosc,  snowbros, snowbros,    snowbros, snowbros_state, empty_init,    ROT0, "Toaplan",                        "Snow Bros. - Nick & Tom (set 4)", MACHINE_SUPPORTS_SAVE )
2916 GAME( 1990, snowbrosj,  snowbros, snowbros,    snowbroj, snowbros_state, empty_init,    ROT0, "Toaplan",                        "Snow Bros. - Nick & Tom (Japan)", MACHINE_SUPPORTS_SAVE )
2917 GAME( 1990, snowbrosd,  snowbros, snowbros,    snowbroj, snowbros_state, empty_init,    ROT0, "Toaplan (Dooyong license)",      "Snow Bros. - Nick & Tom (Dooyong license)", MACHINE_SUPPORTS_SAVE )
2918 GAME( 1990, wintbob,    snowbros, wintbob,     snowbros, snowbros_state, empty_init,    ROT0, "bootleg (Sakowa Project Korea)", "The Winter Bobble (bootleg of Snow Bros.)", MACHINE_SUPPORTS_SAVE )
2919 GAME( 1990, snowbroswb, snowbros, wintbob,     snowbros, snowbros_state, empty_init,    ROT0, "bootleg",                        "Snow Bros. - Nick & Tom (The Winter Bobble hardware bootleg)", MACHINE_SUPPORTS_SAVE ) // this was probably unhacked back from the more common Winter Bobble to make it look more original
2920 
2921 GAME( 1996, toto,       0,        snowbros,    snowbros, snowbros_state, init_toto,     ROT0, "SoftClub",                       "Come Back Toto", MACHINE_SUPPORTS_SAVE ) // modified from 'snowbros' code
2922 
2923 // none of the games below are on genuine SnowBros hardware, but they clone the functionality of it.
2924 
2925 // SemiCom / Jeil titles are protected, a dumb MCU copies code into RAM at startup, some also check for a specific return value from an address on startup.
2926 GAME( 1993, finalttr,   0,        finalttr,    finalttr, snowbros_state, empty_init,    ROT0, "Jeil Computer System", "Final Tetris", MACHINE_SUPPORTS_SAVE )
2927 GAME( 1995, hyperpac,   0,        semicom_mcu, hyperpac, snowbros_state, init_hyperpac, ROT0, "SemiCom",              "Hyper Pacman", MACHINE_SUPPORTS_SAVE )
2928 GAME( 1995, hyperpacb,  hyperpac, semicom,     hyperpac, snowbros_state, empty_init,    ROT0, "bootleg",              "Hyper Pacman (bootleg)", MACHINE_SUPPORTS_SAVE )
2929 GAME( 1996, cookbib2,   0,        semiprot,    cookbib2, snowbros_state, init_cookbib2, ROT0, "SemiCom",              "Cookie & Bibi 2 (set 1)", MACHINE_SUPPORTS_SAVE )
2930 GAME( 1996, cookbib2a,  cookbib2, semiprot,    cookbib2, snowbros_state, init_cookbib2, ROT0, "SemiCom",              "Cookie & Bibi 2 (set 2)", MACHINE_SUPPORTS_SAVE ) // older? test mode looks even worse on this, but neither shows the correct dip info anyway
2931 GAME( 1996, toppyrap,   0,        semiprot,    toppyrap, snowbros_state, empty_init,    ROT0, "SemiCom",              "Toppy & Rappy", MACHINE_SUPPORTS_SAVE )
2932 GAME( 1997, cookbib3,   0,        semiprot,    cookbib3, snowbros_state, init_cookbib3, ROT0, "SemiCom",              "Cookie & Bibi 3", MACHINE_SUPPORTS_SAVE )
2933 GAME( 1997, pzlbreak,   0,        semiprot,    pzlbreak, snowbros_state, init_pzlbreak, ROT0, "SemiCom / Tirano",     "Puzzle Break", MACHINE_SUPPORTS_SAVE )
2934 GAME( 1997, suhosong,   0,        semiprot,    suhosong, snowbros_state, empty_init,    ROT0, "SemiCom",              "Su Ho Seong", MACHINE_SUPPORTS_SAVE )
2935 GAME( 1997, twinkle,    0,        semiprot,    twinkle,  snowbros_state, empty_init,    ROT0, "SemiCom / Tirano",     "Twinkle", MACHINE_SUPPORTS_SAVE )
2936 GAME( 1998, 3in1semi,   0,        semiprot,    moremore, snowbros_state, init_3in1semi, ROT0, "SemiCom / XESS",       "New HyperMan (3-in-1 with Cookie & Bibi & HyperMan)", MACHINE_SUPPORTS_SAVE )
2937 GAME( 1999, mcheonru,   0,        semiprot,    mcheonru, snowbros_state, init_3in1semi, ROT0, "SemiCom / AceVer",     "Ma Cheon Ru", MACHINE_SUPPORTS_SAVE ) // a flyer exists for an English version called Arirang, AceVer team logo is displayed on it
2938 GAME( 1999, moremore,   0,        semiprot,    moremore, snowbros_state, init_3in1semi, ROT0, "SemiCom / Exit",       "More More", MACHINE_SUPPORTS_SAVE )
2939 GAME( 1999, moremorp,   0,        semiprot,    moremore, snowbros_state, init_3in1semi, ROT0, "SemiCom / Exit",       "More More Plus", MACHINE_SUPPORTS_SAVE )
2940 // This is very similar to the SemiCom titles, but unprotected.
2941 GAME( 2002, 4in1boot,   0,        _4in1,       4in1boot, snowbros_state, init_4in1boot, ROT0, "K1 Soft", "Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.)" , MACHINE_SUPPORTS_SAVE )
2942 
2943 GAME( 1995, honeydol,   0,        honeydol,    honeydol, snowbros_state, empty_init,    ROT0, "Barko Corp.", "Honey Dolls", MACHINE_SUPPORTS_SAVE ) // based on snowbros code..
2944 
2945 GAME( 1995, twinadv,    0,        twinadv,     twinadv,  snowbros_state, empty_init,    ROT0, "Barko Corp.", "Twin Adventure (World)", MACHINE_SUPPORTS_SAVE )
2946 GAME( 1995, twinadvk,   twinadv,  twinadv,     twinadv,  snowbros_state, empty_init,    ROT0, "Barko Corp.", "Twin Adventure (Korea)", MACHINE_SUPPORTS_SAVE )
2947 GAME( 1996, multi96,    twinadv,  twinadv,     twinadv,  snowbros_state, empty_init,    ROT0, "Barko Corp.", "Multi Game '96 (Italy)", MACHINE_SUPPORTS_SAVE )
2948 
2949 // The Korean games database shows an earlier version of this called Ball Boy with a different title screen to the version of Ball Boy we have
2950 // http://mamedev.emulab.it/undumped/images/Ballboy.jpg
2951 // it is possible this 'ball boy' is the original bootleg, with snwobro3 being a hack of that, and the ballboy set we have a further hack of that
2952 // there is also a later 2004 version with 3 player support
2953 // these use an MCU to drive the sound
2954 GAME( 2002, snowbro3,   0,        snowbro3,    snowbroj, snowbros_state, init_snowbro3, ROT0, "Syrmex",  "Snow Brothers 3 - Magical Adventure", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // hacked from SnowBros code but released as an original game
2955 GAME( 2003, ballboy,    snowbro3, snowbro3,    snowbroj, snowbros_state, init_snowbro3, ROT0, "bootleg", "Ball Boy", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
2956 // protection appears to handle the sound, should check if it's just a block of code that is conditionally executed like some of the Semicom titles.
2957 GAME( 1999, yutnori,    0,        yutnori,     yutnori,  snowbros_state, init_yutnori,  ROT0, "Nunal",   "Puzzle Yutnori (Korea)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NO_SOUND ) // Nunal is apparently Korean slang for Eyeball, hence the logo.  Some places report 'JCC Soft' as the manufacturer
2958