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