Viewing File: <root>/src/mame/drivers/snowbros.c

    1  /***************************************************************************
    2  
    3    Snow Brothers (Toaplan) / SemiCom Hardware
    4    uses Kaneko's Pandora sprite chip (also used in DJ Boy, Air Buster ..)
    5  
    6  Snow Bros Nick & Tom
    7  Toaplan, 1990
    8  
    9      PCB Layout
   10      ----------
   11      MIN16-02
   12  
   13      |------------------------------------------|
   14      | VOL     YM3812  6116  4464  4464         |
   15      | LA4460  YM3014        4464  4464         |
   16      |       458   SBROS-4.29         SBROS1.40 |
   17      |   2003       Z80B     PANDORA            |
   18      |J                    D41101C-1 LS07  LS32 |
   19      |A SBROS-3A.5 SBROS-2A.6        LS139 LS174|
   20      |M                  LS245 LS74  LS04  16MHz|
   21      |M   6264     6264  F32   LS74  LS74       |
   22      |A      68000       LS20  F138  LS04  12MHz|
   23      |                   LS04  LS148 LS251 LS00 |
   24      | LS273 LS245 LS245 LS158 LS257 LS257 LS32 |
   25      |                                          |
   26      | LS273  6116  6116 LS157   DSW2  DSW1     |
   27      |------------------------------------------|
   28  
   29      Notes:
   30             68k clock: 8.000MHz
   31            Z80B clock: 6.000MHz
   32          YM3812 clock: 3.000MHz
   33                 VSync: 57.5Hz
   34                 HSync: 15.68kHz
   35  
   36    driver by Mike Coates
   37  
   38    Hyper Pacman addition by David Haywood
   39     + some bits by Nicola Salmoria
   40  
   41   !!DO NOT TRUST THE SERVICE MODES FOR DIPSWITCH SETTINGS!!
   42  
   43  Stephh's notes (hyperpac):
   44  
   45    - According to the "Language" Dip Switch, this game is a Korean game.
   46       (although the Language Dipswitch doesn't affect language, but yes
   47        I believe SemiCom to be a Korean Company)
   48    - There is no "cocktail mode", nor way to flip the screen.
   49  
   50  Notes:
   51  
   52  Cookie & Bibi 3
   53  This game is quite buggy.  The test mode is incomplete and displays garbage
   54  on the 'Dipswitch settings' screens, and during some of the attract mode
   55  scenes the credit counter is not updated when you insert coins until the next
   56  scene.  Both these bugs are verified as occuring on the original hardware.
   57  
   58  Honey Doll / Twin Adventure
   59  
   60  These appear to have clipping problems on the left / right edges, but this
   61  may be correct, the sprites which should be drawn there are simply blanked
   62  out of the sprite list at that point.. (verify on real hw)
   63  
   64  ***************************************************************************/
   65  
   66  #include "emu.h"
   67  #include "includes/snowbros.h"
   68  #include "cpu/m68000/m68000.h"
   69  #include "cpu/z80/z80.h"
   70  #include "sound/2151intf.h"
   71  #include "sound/3812intf.h"
   72  #include "sound/okim6295.h"
   73  #include "video/kan_pand.h" // for the original pandora
   74  #include "video/kan_panb.h" // for bootlegs / non-original hw
   75  #include "cpu/mcs51/mcs51.h" // for semicom mcu
   76  
   77  
   78  WRITE16_MEMBER(snowbros_state::snowbros_flipscreen_w)
   79  {
   80      if (ACCESSING_BITS_8_15)
   81          flip_screen_set(~data & 0x8000);
   82  }
   83  
   84  
   85  UINT32 snowbros_state::screen_update_snowbros(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
   86  {
   87      device_t *pandora = machine().device("pandora");
   88  
   89      /* This clears & redraws the entire screen each pass */
   90      bitmap.fill(0xf0, cliprect);
   91      pandora_update(pandora, bitmap, cliprect);
   92      return 0;
   93  }
   94  
   95  
   96  void snowbros_state::screen_eof_snowbros(screen_device &screen, bool state)
   97  {
   98      // rising edge
   99      if (state)
  100      {
  101          device_t *pandora = machine().device("pandora");
  102          pandora_eof(pandora);
  103      }
  104  }
  105  
  106  
  107  
  108  WRITE16_MEMBER(snowbros_state::snowbros_irq4_ack_w)
  109  {
  110      machine().device("maincpu")->execute().set_input_line(4, CLEAR_LINE);
  111  }
  112  
  113  WRITE16_MEMBER(snowbros_state::snowbros_irq3_ack_w)
  114  {
  115      machine().device("maincpu")->execute().set_input_line(3, CLEAR_LINE);
  116  }
  117  
  118  WRITE16_MEMBER(snowbros_state::snowbros_irq2_ack_w)
  119  {
  120      machine().device("maincpu")->execute().set_input_line(2, CLEAR_LINE);
  121  }
  122  
  123  TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros_irq)
  124  {
  125      int scanline = param;
  126  
  127      if(scanline == 240)
  128          m_maincpu->set_input_line(2, ASSERT_LINE);
  129  
  130      if(scanline == 128)
  131          m_maincpu->set_input_line(3, ASSERT_LINE);
  132  
  133      if(scanline == 32)
  134          m_maincpu->set_input_line(4, ASSERT_LINE);
  135  }
  136  
  137  TIMER_DEVICE_CALLBACK_MEMBER(snowbros_state::snowbros3_irq)
  138  {
  139      okim6295_device *adpcm = machine().device<okim6295_device>("oki");
  140      int status = adpcm->read_status();
  141      int scanline = param;
  142  
  143      if(scanline == 240)
  144          m_maincpu->set_input_line(2, ASSERT_LINE);
  145  
  146      if(scanline == 128)
  147          m_maincpu->set_input_line(3, ASSERT_LINE);
  148  
  149      if(scanline == 32)
  150          m_maincpu->set_input_line(4, ASSERT_LINE);
  151  
  152      if (m_sb3_music_is_playing)
  153      {
  154          if ((status&0x08)==0x00)
  155          {
  156              adpcm->write_command(0x80|m_sb3_music);
  157              adpcm->write_command(0x00|0x82);
  158          }
  159  
  160      }
  161      else
  162      {
  163          if ((status&0x08)==0x08)
  164          {
  165              adpcm->write_command(0x40);     /* Stop playing music */
  166          }
  167      }
  168  
  169  }
  170  
  171  
  172  /* Sound Routines */
  173  
  174  READ16_MEMBER(snowbros_state::snowbros_68000_sound_r)
  175  {
  176      return soundlatch_byte_r(space,offset);
  177  }
  178  
  179  
  180  WRITE16_MEMBER(snowbros_state::snowbros_68000_sound_w)
  181  {
  182      if (ACCESSING_BITS_0_7)
  183      {
  184          soundlatch_byte_w(space, offset, data & 0xff);
  185          machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
  186      }
  187  }
  188  
  189  WRITE16_MEMBER(snowbros_state::semicom_soundcmd_w)
  190  {
  191      if (ACCESSING_BITS_0_7) soundlatch_byte_w(space,0,data & 0xff);
  192  }
  193  
  194  /* Snow Bros Memory Map */
  195  
  196  static ADDRESS_MAP_START( snowbros_map, AS_PROGRAM, 16, snowbros_state )
  197      AM_RANGE(0x000000, 0x03ffff) AM_ROM
  198      AM_RANGE(0x100000, 0x103fff) AM_RAM
  199      AM_RANGE(0x200000, 0x200001) AM_WRITE(watchdog_reset16_w)
  200      AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,snowbros_68000_sound_w)
  201      AM_RANGE(0x400000, 0x400001) AM_WRITE(snowbros_flipscreen_w)
  202      AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
  203      AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
  204      AM_RANGE(0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  205      AM_RANGE(0x600000, 0x6001ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  206      AM_RANGE(0x700000, 0x701fff) AM_DEVREADWRITE_LEGACY("pandora", pandora_spriteram_LSB_r, pandora_spriteram_LSB_w)
  207      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  208      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  209      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  210  ADDRESS_MAP_END
  211  
  212  static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, snowbros_state )
  213      AM_RANGE(0x0000, 0x7fff) AM_ROM
  214      AM_RANGE(0x8000, 0x87ff) AM_RAM
  215  ADDRESS_MAP_END
  216  
  217  static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, snowbros_state )
  218      ADDRESS_MAP_GLOBAL_MASK(0xff)
  219      AM_RANGE(0x02, 0x03) AM_DEVREADWRITE_LEGACY("ymsnd", ym3812_r, ym3812_w)
  220      AM_RANGE(0x04, 0x04) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) /* goes back to the main CPU, checked during boot */
  221  ADDRESS_MAP_END
  222  
  223  
  224  
  225  READ8_MEMBER(snowbros_state::prot_io_r)
  226  {
  227      // never read?
  228      return 0x00;
  229  }
  230  
  231  
  232  // probably not endian safe
  233  WRITE8_MEMBER(snowbros_state::prot_io_w)
  234  {
  235      switch (offset)
  236      {
  237          case 0x00:
  238          {
  239              UINT16 word = m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset];
  240              word = (word & 0xff00) | (data << 0);
  241              m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset] = word;
  242              break;
  243          }
  244  
  245          case 0x01:
  246          {
  247              UINT16 word = m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset];
  248              word = (word & 0x00ff) | (data << 8);
  249              m_hyperpac_ram[(0xe000/2)+m_semicom_prot_offset] = word;
  250              break;
  251          }
  252  
  253          case 0x02: // offset
  254          {
  255              m_semicom_prot_offset = data;
  256              break;
  257          }
  258  
  259          case 0x03: // ??
  260          {
  261              //logerror("offset %02x data %02x\n",offset,data);
  262              break;
  263          }
  264      }
  265  }
  266  
  267  /* Semicom AT89C52 MCU */
  268  static ADDRESS_MAP_START( protection_map, AS_PROGRAM, 8, snowbros_state )
  269      AM_RANGE(0x0000, 0x1fff) AM_ROM
  270  ADDRESS_MAP_END
  271  
  272  static ADDRESS_MAP_START( protection_iomap, AS_IO, 8, snowbros_state )
  273      AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READWRITE(prot_io_r,prot_io_w)
  274  ADDRESS_MAP_END
  275  
  276  /* Winter Bobble - bootleg GFX chip */
  277  
  278  static ADDRESS_MAP_START( wintbob_map, AS_PROGRAM, 16, snowbros_state )
  279      AM_RANGE(0x000000, 0x03ffff) AM_ROM
  280      AM_RANGE(0x100000, 0x103fff) AM_RAM
  281      AM_RANGE(0x200000, 0x200001) AM_WRITE(watchdog_reset16_w)
  282      AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,snowbros_68000_sound_w)
  283      AM_RANGE(0x400000, 0x400001) AM_WRITE(snowbros_flipscreen_w)
  284      AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
  285      AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
  286      AM_RANGE(0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  287      AM_RANGE(0x600000, 0x6001ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  288      AM_RANGE(0x700000, 0x701fff) AM_RAM AM_SHARE("spriteram16b")
  289      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  290      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  291      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  292  ADDRESS_MAP_END
  293  
  294  /* Honey Dolls */
  295  
  296  static ADDRESS_MAP_START( honeydol_map, AS_PROGRAM, 16, snowbros_state )
  297      AM_RANGE(0x000000, 0x03ffff) AM_ROM
  298      AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("hyperpac_ram")
  299      AM_RANGE(0x200000, 0x200001) AM_WRITENOP    /* ? */
  300      AM_RANGE(0x300000, 0x300001) AM_WRITE(snowbros_68000_sound_w)   /* ? */
  301      AM_RANGE(0x400000, 0x400001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  302      AM_RANGE(0x500000, 0x500001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  303      AM_RANGE(0x600000, 0x600001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  304      AM_RANGE(0x800000, 0x800001) AM_WRITENOP    /* ? */
  305      AM_RANGE(0x900000, 0x900001) AM_READ_PORT("DSW1")
  306      AM_RANGE(0x900002, 0x900003) AM_READ_PORT("DSW2")
  307      AM_RANGE(0x900004, 0x900005) AM_READ_PORT("SYSTEM")
  308      AM_RANGE(0xa00000, 0xa007ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  309      AM_RANGE(0xb00000, 0xb01fff) AM_RAM AM_SHARE("spriteram16b")
  310  ADDRESS_MAP_END
  311  
  312  static ADDRESS_MAP_START( honeydol_sound_map, AS_PROGRAM, 8, snowbros_state )
  313      AM_RANGE(0x0000, 0x7fff) AM_ROM
  314      AM_RANGE(0x8000, 0x87ff) AM_RAM
  315      AM_RANGE(0xe010, 0xe010) AM_DEVREADWRITE("oki", okim6295_device, read, write)
  316  ADDRESS_MAP_END
  317  
  318  static ADDRESS_MAP_START( honeydol_sound_io_map, AS_IO, 8, snowbros_state )
  319      ADDRESS_MAP_GLOBAL_MASK(0xff)
  320      AM_RANGE(0x02, 0x03) AM_DEVREADWRITE_LEGACY("ymsnd", ym3812_r, ym3812_w)                                // not connected?
  321      AM_RANGE(0x04, 0x04) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) /* goes back to the main CPU, checked during boot */
  322  ADDRESS_MAP_END
  323  
  324  /* Twin Adventure */
  325  
  326  WRITE16_MEMBER(snowbros_state::twinadv_68000_sound_w)
  327  {
  328      if (ACCESSING_BITS_0_7)
  329      {
  330          soundlatch_byte_w(space, offset, data & 0xff);
  331          machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
  332      }
  333  }
  334  
  335  static ADDRESS_MAP_START( twinadv_map, AS_PROGRAM, 16, snowbros_state )
  336      AM_RANGE(0x000000, 0x03ffff) AM_ROM
  337      AM_RANGE(0x100000, 0x10ffff) AM_RAM
  338      AM_RANGE(0x200000, 0x200001) AM_WRITE(watchdog_reset16_w)
  339      AM_RANGE(0x300000, 0x300001) AM_READWRITE(snowbros_68000_sound_r,twinadv_68000_sound_w)
  340      AM_RANGE(0x400000, 0x400001) AM_WRITE(snowbros_flipscreen_w)
  341  
  342      AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
  343      AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
  344      AM_RANGE(0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  345      AM_RANGE(0x600000, 0x6001ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  346      AM_RANGE(0x700000, 0x701fff) AM_RAM AM_SHARE("spriteram16b")
  347      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  348      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  349      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  350  ADDRESS_MAP_END
  351  
  352  WRITE8_MEMBER(snowbros_state::twinadv_oki_bank_w)
  353  {
  354      device_t *device = machine().device("oki");
  355      int bank = (data &0x02)>>1;
  356  
  357      if (data&0xfd) logerror ("Unused bank bits! %02x\n",data);
  358  
  359      downcast<okim6295_device *>(device)->set_bank_base(bank * 0x40000);
  360  }
  361  
  362  static ADDRESS_MAP_START( twinadv_sound_io_map, AS_IO, 8, snowbros_state )
  363      ADDRESS_MAP_GLOBAL_MASK(0xff)
  364      AM_RANGE(0x02, 0x02) AM_READWRITE(soundlatch_byte_r, soundlatch_byte_w) // back to 68k?
  365      AM_RANGE(0x04, 0x04) AM_WRITE(twinadv_oki_bank_w) // oki bank?
  366      AM_RANGE(0x06, 0x06) AM_DEVREADWRITE("oki", okim6295_device, read, write)
  367  ADDRESS_MAP_END
  368  
  369  
  370  /* SemiCom Memory Map
  371  
  372  the SemiCom games have slightly more ram and are protected
  373  sound hardware is also different
  374  
  375  */
  376  
  377  static ADDRESS_MAP_START( hyperpac_map, AS_PROGRAM, 16, snowbros_state )
  378      AM_RANGE(0x000000, 0x0fffff) AM_ROM
  379      AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("hyperpac_ram")
  380      AM_RANGE(0x300000, 0x300001) AM_WRITE(semicom_soundcmd_w)
  381  //  AM_RANGE(0x400000, 0x400001) ???
  382      AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
  383      AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
  384      AM_RANGE(0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  385  
  386      AM_RANGE(0x600000, 0x6001ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  387      AM_RANGE(0x700000, 0x701fff) AM_DEVREADWRITE_LEGACY("pandora", pandora_spriteram_LSB_r,pandora_spriteram_LSB_w)
  388      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  389      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  390      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  391  ADDRESS_MAP_END
  392  
  393  static ADDRESS_MAP_START( hyperpac_sound_map, AS_PROGRAM, 8, snowbros_state )
  394      AM_RANGE(0x0000, 0xcfff) AM_ROM
  395      AM_RANGE(0xd000, 0xd7ff) AM_RAM
  396      AM_RANGE(0xf000, 0xf001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
  397      AM_RANGE(0xf002, 0xf002) AM_DEVREADWRITE("oki", okim6295_device, read, write)
  398      AM_RANGE(0xf008, 0xf008) AM_READ(soundlatch_byte_r)
  399  ADDRESS_MAP_END
  400  
  401  /* Same volume used for all samples at the Moment, could be right, we have no
  402     way of knowing .. */
  403  READ16_MEMBER(snowbros_state::sb3_sound_r)
  404  {
  405      return 0x0003;
  406  }
  407  
  408  static void sb3_play_music(running_machine &machine, int data)
  409  {
  410      snowbros_state *state = machine.driver_data<snowbros_state>();
  411      UINT8 *snd;
  412  
  413      /* sample is actually played in interrupt function so it loops */
  414      state->m_sb3_music = data;
  415  
  416      switch (data)
  417      {
  418          case 0x23:
  419          case 0x26:
  420          snd = state->memregion("oki")->base();
  421          memcpy(snd+0x20000, snd+0x80000+0x00000, 0x20000);
  422          state->m_sb3_music_is_playing = 1;
  423          break;
  424  
  425          case 0x24:
  426          snd = state->memregion("oki")->base();
  427          memcpy(snd+0x20000, snd+0x80000+0x20000, 0x20000);
  428          state->m_sb3_music_is_playing = 1;
  429          break;
  430  
  431          case 0x25:
  432          case 0x27:
  433          case 0x28:
  434          case 0x29:
  435          case 0x2a:
  436          case 0x2b:
  437          case 0x2c:
  438          case 0x2d:
  439          snd = state->memregion("oki")->base();
  440          memcpy(snd+0x20000, snd+0x80000+0x40000, 0x20000);
  441          state->m_sb3_music_is_playing = 1;
  442          break;
  443  
  444          case 0x2e:
  445          state->m_sb3_music_is_playing = 0;
  446          break;
  447      }
  448  }
  449  
  450  static void sb3_play_sound (okim6295_device *oki, int data)
  451  {
  452      int status = oki->read_status();
  453  
  454      if ((status&0x01)==0x00)
  455      {
  456          oki->write_command(0x80|data);
  457          oki->write_command(0x00|0x12);
  458      }
  459      else if ((status&0x02)==0x00)
  460      {
  461          oki->write_command(0x80|data);
  462          oki->write_command(0x00|0x22);
  463      }
  464      else if ((status&0x04)==0x00)
  465      {
  466          oki->write_command(0x80|data);
  467          oki->write_command(0x00|0x42);
  468      }
  469  
  470  
  471  }
  472  
  473  WRITE16_MEMBER(snowbros_state::sb3_sound_w)
  474  {
  475      device_t *device = machine().device("oki");
  476      okim6295_device *oki = downcast<okim6295_device *>(device);
  477      if (data == 0x00fe)
  478      {
  479          m_sb3_music_is_playing = 0;
  480          oki->write_command(0x78);       /* Stop sounds */
  481      }
  482      else /* the alternating 0x00-0x2f or 0x30-0x5f might be something to do with the channels */
  483      {
  484          data = data>>8;
  485  
  486          if (data <= 0x21)
  487          {
  488              sb3_play_sound(oki, data);
  489          }
  490  
  491          if (data>=0x22 && data<=0x31)
  492          {
  493              sb3_play_music(machine(), data);
  494          }
  495  
  496          if ((data>=0x30) && (data<=0x51))
  497          {
  498              sb3_play_sound(oki, data-0x30);
  499          }
  500  
  501          if (data>=0x52 && data<=0x5f)
  502          {
  503              sb3_play_music(machine(), data-0x30);
  504          }
  505  
  506      }
  507  }
  508  
  509  
  510  
  511  static ADDRESS_MAP_START( snowbros3_map, AS_PROGRAM, 16, snowbros_state )
  512      AM_RANGE( 0x000000, 0x03ffff) AM_ROM
  513      AM_RANGE( 0x100000, 0x103fff) AM_RAM
  514      AM_RANGE( 0x200000, 0x200001) AM_WRITE(watchdog_reset16_w)
  515      AM_RANGE( 0x300000, 0x300001) AM_READ(sb3_sound_r) // ?
  516      AM_RANGE( 0x300000, 0x300001) AM_WRITE(sb3_sound_w)  // ?
  517      AM_RANGE( 0x400000, 0x400001) AM_WRITE(snowbros_flipscreen_w)
  518      AM_RANGE( 0x500000, 0x500001) AM_READ_PORT("DSW1")
  519      AM_RANGE( 0x500002, 0x500003) AM_READ_PORT("DSW2")
  520      AM_RANGE( 0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  521      AM_RANGE( 0x600000, 0x6003ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  522      AM_RANGE( 0x700000, 0x7021ff) AM_RAM AM_SHARE("spriteram16b")
  523      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  524      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  525      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  526  ADDRESS_MAP_END
  527  
  528  /* Final Tetris */
  529  
  530  static ADDRESS_MAP_START( finalttr_map, AS_PROGRAM, 16, snowbros_state )
  531      AM_RANGE(0x000000, 0x0fffff) AM_ROM
  532      AM_RANGE(0x100000, 0x103fff) AM_RAM AM_SHARE("hyperpac_ram")
  533      AM_RANGE(0x300000, 0x300001) AM_WRITE(semicom_soundcmd_w)
  534  //  AM_RANGE(0x400000, 0x400001) ???
  535  
  536      AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW1")
  537      AM_RANGE(0x500002, 0x500003) AM_READ_PORT("DSW2")
  538      AM_RANGE(0x500004, 0x500005) AM_READ_PORT("SYSTEM")
  539  
  540      AM_RANGE(0x600000, 0x6001ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
  541      AM_RANGE(0x700000, 0x701fff) AM_DEVREADWRITE_LEGACY("pandora", pandora_spriteram_LSB_r, pandora_spriteram_LSB_w)
  542      AM_RANGE(0x800000, 0x800001) AM_WRITE(snowbros_irq4_ack_w)  /* IRQ 4 acknowledge */
  543      AM_RANGE(0x900000, 0x900001) AM_WRITE(snowbros_irq3_ack_w)  /* IRQ 3 acknowledge */
  544      AM_RANGE(0xa00000, 0xa00001) AM_WRITE(snowbros_irq2_ack_w)  /* IRQ 2 acknowledge */
  545  ADDRESS_MAP_END
  546  
  547  static INPUT_PORTS_START( snowbros )
  548      PORT_START("DSW1")  /* 500001 */
  549      PORT_DIPNAME( 0x01, 0x00, DEF_STR( Region ) )       PORT_DIPLOCATION("SW1:1") /* Listed as "NOT USE" in the manual */
  550      PORT_DIPSETTING(    0x00, DEF_STR( Europe ) )
  551      PORT_DIPSETTING(    0x01, "America (Romstar license)" )
  552      PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) )  PORT_DIPLOCATION("SW1:2")
  553      PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  554      PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  555      PORT_SERVICE_DIPLOC(  0x04, IP_ACTIVE_LOW, "SW1:3" )
  556      PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:4")
  557      PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  558      PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  559      PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) )   PORT_DIPLOCATION("SW1:5,6")
  560      PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  561      PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  562      PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  563      PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  564      PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
  565      PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  566      PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  567      PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) )   PORT_DIPLOCATION("SW1:7,8")
  568      PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  569      PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  570      PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  571      PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x01)
  572      PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  573      PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  574      PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  575      PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )    PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00)
  576      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
  577      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
  578      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
  579      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
  580      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
  581      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
  582      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
  583      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
  584                                                      /* probably VBlank */
  585  
  586      PORT_START("DSW2")  /* 500003 */
  587      PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW2:1,2")
  588      PORT_DIPSETTING(    0x02, DEF_STR( Easy ) )
  589      PORT_DIPSETTING(    0x03, DEF_STR( Normal ) )
  590      PORT_DIPSETTING(    0x01, DEF_STR( Hard ) )
  591      PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
  592      PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:3,4")
  593      PORT_DIPSETTING(    0x04, "100k and every 200k" )
  594      PORT_DIPSETTING(    0x0c, "100k Only" )
  595      PORT_DIPSETTING(    0x08, "200k Only" )
  596      PORT_DIPSETTING(    0x00, DEF_STR( None ) )
  597      PORT_DIPNAME( 0x30, 0x30, DEF_STR( Lives ) )        PORT_DIPLOCATION("SW2:5,6")
  598      PORT_DIPSETTING(    0x20, "1" )
  599      PORT_DIPSETTING(    0x00, "2" )
  600      PORT_DIPSETTING(    0x30, "3" )
  601      PORT_DIPSETTING(    0x10, "4" )
  602      PORT_DIPNAME( 0x40, 0x40, "Invulnerability" )       PORT_DIPLOCATION("SW2:7")
  603      PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  604      PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  605      PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SW2:8") /* Listed as "NOT USE" in the manual */
  606      PORT_DIPSETTING(    0x00, DEF_STR( No ) )
  607      PORT_DIPSETTING(    0x80, DEF_STR( Yes ) )
  608      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  609      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  610      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  611      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  612      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
  613      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
  614      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
  615      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  616  
  617      PORT_START("SYSTEM")    /* 500005 */
  618      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
  619      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
  620      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
  621      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
  622      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  623      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
  624      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
  625      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  626  INPUT_PORTS_END
  627  
  628  static INPUT_PORTS_START( snowbroj )
  629      PORT_INCLUDE(snowbros)
  630  
  631      PORT_MODIFY("DSW1")
  632      PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )      PORT_DIPLOCATION("SW1:1") /* Listed as "NOT USE" in the manual */
  633      PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  634      PORT_DIPSETTING(    0x01, DEF_STR( On ) )
  635  INPUT_PORTS_END
  636  
  637  static INPUT_PORTS_START( honeydol )
  638      PORT_START("DSW1")
  639      PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
  640      PORT_DIPSETTING(      0x0000, DEF_STR( 3C_1C ) )
  641      PORT_DIPSETTING(      0x0001, DEF_STR( 2C_1C ) )
  642      PORT_DIPSETTING(      0x0003, DEF_STR( 1C_1C ) )
  643      PORT_DIPSETTING(      0x0002, DEF_STR( 1C_2C ) )
  644      PORT_DIPNAME( 0x0004, 0x0004, "Show Girls" )
  645      PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
  646      PORT_DIPSETTING(      0x0004, DEF_STR( On ) )
  647      PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
  648      PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
  649      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  650      PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) )
  651      PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
  652      PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
  653      PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
  654      PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
  655      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  656      PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Level_Select ) ) /* Up & Down to set level, then punch to start */
  657      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
  658      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  659      PORT_DIPNAME( 0x0080, 0x0080, "Slide Show On Boot-up" )  /* Joystick to scroll. Seems to happen once at boot up, then the game auto starts */
  660      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
  661      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  662      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
  663      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
  664      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
  665      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
  666      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
  667      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
  668      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
  669      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")    /* Must be low or game stops! */
  670  
  671      PORT_START("DSW2")
  672      PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
  673      PORT_DIPSETTING(      0x0003, DEF_STR( Normal ) )
  674      PORT_DIPSETTING(      0x0002, DEF_STR( Hard ) )
  675      PORT_DIPSETTING(      0x0001, DEF_STR( Harder ) )
  676      PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
  677      PORT_DIPNAME( 0x000c, 0x000c, "Timer Speed" )     /* Based on Normal Difficulty, Stage 1-1 first try */
  678      PORT_DIPSETTING(      0x000c, DEF_STR( Normal ) ) /* About 40 Seconds */
  679      PORT_DIPSETTING(      0x0008, "Fast" )            /* About 35 Seconds */
  680      PORT_DIPSETTING(      0x0004, "Faster" )          /* About 30 Seconds */
  681      PORT_DIPSETTING(      0x0000, "Fastest" )         /* About 20 Seconds */
  682      PORT_DIPNAME( 0x0030, 0x0020, DEF_STR( Lives ) )
  683      PORT_DIPSETTING(      0x0000, "1" )
  684      PORT_DIPSETTING(      0x0010, "2" )
  685      PORT_DIPSETTING(      0x0020, "3" )
  686      PORT_DIPSETTING(      0x0030, "5" )
  687      PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
  688      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
  689      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  690      PORT_DIPNAME( 0x0080, 0x0080, "Max Vs Round" )
  691      PORT_DIPSETTING(      0x0080, "3" ) /* 44 Seconds each */
  692      PORT_DIPSETTING(      0x0000, "1" ) /* 89 Seconds */
  693      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  694      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  695      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  696      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  697      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
  698      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
  699      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
  700      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  701  
  702      PORT_START("SYSTEM")
  703      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
  704      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
  705      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
  706      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
  707      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  708      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
  709      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
  710      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  711  INPUT_PORTS_END
  712  
  713  static INPUT_PORTS_START( twinadv )
  714      PORT_START("DSW1")
  715      PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Coinage ) )
  716      PORT_DIPSETTING(      0x0000, DEF_STR( 3C_1C ) )
  717      PORT_DIPSETTING(      0x0001, DEF_STR( 2C_1C ) )
  718      PORT_DIPSETTING(      0x0003, DEF_STR( 1C_1C ) )
  719      PORT_DIPSETTING(      0x0002, DEF_STR( 1C_2C ) )
  720      PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
  721      PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
  722      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  723      PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
  724      PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
  725      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  726      PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) )
  727      PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
  728      PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
  729      PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Flip_Screen ) )
  730      PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
  731      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  732      PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
  733      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
  734      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  735      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Level_Select ) ) /* P1 Button 2 to advance, P1 Button 1 to start, starts game with 10 credits */
  736      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
  737      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  738      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
  739      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
  740      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
  741      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
  742      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
  743      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
  744      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
  745      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")    /* Must be low or game stops! */
  746  
  747      PORT_START("DSW2")
  748      PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) )
  749      PORT_DIPSETTING(      0x0003, DEF_STR( Normal ) )
  750      PORT_DIPSETTING(      0x0002, DEF_STR( Hard ) )
  751      PORT_DIPSETTING(      0x0001, DEF_STR( Harder ) )
  752      PORT_DIPSETTING(      0x0000, DEF_STR( Hardest ) )
  753      PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Lives ) )
  754      PORT_DIPSETTING(      0x0004, "3" )
  755      PORT_DIPSETTING(      0x0000, "5" )
  756      PORT_DIPNAME( 0x0008, 0x0008, "Ticket Mode #1" ) /* Shows on title screen "EVERY 4 GAMES = 1 TICKET" same as 0x0040 below? */
  757      PORT_DIPSETTING(      0x0008, DEF_STR( Off ) )
  758      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  759      PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
  760      PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
  761      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  762      PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
  763      PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
  764      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  765      PORT_DIPNAME( 0x0040, 0x0040, "Ticket Mode #2" ) /* Shows on title screen "EVERY 4 GAMES = 1 TICKET" same as 0x0008 above? */
  766      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
  767      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  768      PORT_DIPNAME( 0x80,   0x0080, DEF_STR( Free_Play ) ) /* Always shows 24 credits */
  769      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
  770      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  771      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  772      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  773      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  774      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  775      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
  776      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
  777      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
  778      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  779  
  780      PORT_START("SYSTEM")
  781      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
  782      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
  783      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
  784      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
  785      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  786      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
  787      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
  788      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  789  INPUT_PORTS_END
  790  
  791  static INPUT_PORTS_START( 4in1boot )
  792      PORT_START("DSW1")  /* 500001 */
  793      PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
  794      PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  795      PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  796      PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:2,3")
  797      PORT_DIPSETTING(    0x04, DEF_STR( Easy ) )
  798      PORT_DIPSETTING(    0x06, DEF_STR( Normal ) )
  799      PORT_DIPSETTING(    0x02, DEF_STR( Hard ) )
  800      PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
  801      PORT_DIPNAME( 0x78, 0x78, DEF_STR( Coinage ) )      PORT_DIPLOCATION("SW1:4,5,6,7")
  802      PORT_DIPSETTING(    0x18, DEF_STR( 4C_1C ) )
  803      PORT_DIPSETTING(    0x38, DEF_STR( 3C_1C ) )
  804      PORT_DIPSETTING(    0x10, DEF_STR( 4C_2C ) )
  805      PORT_DIPSETTING(    0x58, DEF_STR( 2C_1C ) )
  806      PORT_DIPSETTING(    0x30, DEF_STR( 3C_2C ) )
  807      PORT_DIPSETTING(    0x08, DEF_STR( 4C_3C ) )
  808      PORT_DIPSETTING(    0x00, DEF_STR( 4C_4C ) )
  809      PORT_DIPSETTING(    0x28, DEF_STR( 3C_3C ) )
  810      PORT_DIPSETTING(    0x50, DEF_STR( 2C_2C ) )
  811      PORT_DIPSETTING(    0x78, DEF_STR( 1C_1C ) )
  812      PORT_DIPSETTING(    0x20, DEF_STR( 3C_4C ) )
  813      PORT_DIPSETTING(    0x48, DEF_STR( 2C_3C ) )
  814      PORT_DIPSETTING(    0x40, DEF_STR( 2C_4C ) )
  815      PORT_DIPSETTING(    0x70, DEF_STR( 1C_2C ) )
  816      PORT_DIPSETTING(    0x68, DEF_STR( 1C_3C ) )
  817      PORT_DIPSETTING(    0x60, DEF_STR( 1C_4C ) )
  818      PORT_DIPNAME( 0x80, 0x80, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW1:8")
  819      PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  820      PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  821      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
  822      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
  823      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
  824      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
  825      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
  826      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
  827      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
  828      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
  829                                                      /* probably VBlank */
  830  
  831      PORT_START("DSW2")  /* 500003 */
  832      PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2")
  833      PORT_DIPSETTING(    0x02, "1" )
  834      PORT_DIPSETTING(    0x00, "2" )
  835      PORT_DIPSETTING(    0x03, "3" )
  836      PORT_DIPSETTING(    0x01, "4" )
  837      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
  838      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
  839      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
  840      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
  841      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
  842      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW2:8" )
  843      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  844      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  845      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  846      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  847      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
  848      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
  849      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
  850      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  851  
  852      PORT_START("SYSTEM")    /* 500005 */
  853      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
  854      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
  855      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
  856      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
  857      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  858      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
  859      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
  860      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  861  INPUT_PORTS_END
  862  
  863  static INPUT_PORTS_START( hyperpac )
  864      PORT_START("DSW1")  /* 500000.w */
  865      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
  866      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
  867      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  868      PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW1:2")   // "Language" in the "test mode"
  869      PORT_DIPSETTING(      0x0002, "3" )                         // "Korean"
  870      PORT_DIPSETTING(      0x0000, "5" )                         // "English"
  871      PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
  872      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
  873      PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
  874      PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
  875      PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
  876      PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
  877      PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
  878      PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
  879      PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
  880      PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
  881      PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
  882      PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
  883      PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
  884      PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )          // DEF_STR( Very_Hard )
  885      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
  886      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
  887      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
  888      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
  889      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
  890      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
  891      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
  892      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
  893      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  894  
  895      PORT_START("DSW2")  /* 500002.w */
  896      PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
  897      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
  898      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
  899      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
  900      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
  901      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
  902      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
  903      PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0000, "SW2:8" )
  904      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  905      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  906      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  907      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  908      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
  909      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
  910      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
  911      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  912  
  913      PORT_START("SYSTEM")    /* 500004.w */
  914      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
  915      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
  916      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
  917      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
  918      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  919      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  920      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  921      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  922  INPUT_PORTS_END
  923  
  924  static INPUT_PORTS_START( cookbib2 )
  925      PORT_START("DSW1")  /* 500000.w */
  926      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
  927      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
  928      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  929      PORT_DIPNAME( 0x0002, 0x0002, "Max Vs Round" )      PORT_DIPLOCATION("SW1:2")   // "Language" in the "test mode"
  930      PORT_DIPSETTING(      0x0002, "3" )
  931      PORT_DIPSETTING(      0x0000, "1" )
  932      PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
  933      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
  934      PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
  935      PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
  936      PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
  937      PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
  938      PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
  939      PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
  940      PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
  941      PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
  942      PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
  943      PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
  944      PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
  945      PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )          // DEF_STR( Very_Hard )
  946      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
  947      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
  948      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
  949      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
  950      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
  951      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
  952      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
  953      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
  954      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  955  
  956      PORT_START("DSW2")  /* 500002.w */
  957      PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
  958      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
  959      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
  960      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
  961      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
  962      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
  963      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
  964      PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0000, "SW2:8" )
  965      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
  966      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
  967      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
  968      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
  969      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
  970      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
  971      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
  972      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  973  
  974      PORT_START("SYSTEM")    /* 500004.w */
  975      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
  976      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
  977      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
  978      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
  979      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  980      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  981      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  982      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
  983  INPUT_PORTS_END
  984  
  985  static INPUT_PORTS_START( cookbib3 )
  986      PORT_START("DSW1")  /* 500000.w */
  987      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
  988      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
  989      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
  990      PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
  991      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
  992      PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
  993      PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
  994      PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
  995      PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
  996      PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
  997      PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
  998      PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
  999      PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
 1000      PORT_DIPSETTING(      0x0020, "Level 1" )
 1001      PORT_DIPSETTING(      0x0010, "Level 2" )
 1002      PORT_DIPSETTING(      0x0000, "Level 3" )
 1003      PORT_DIPSETTING(      0x0070, "Level 4" )
 1004      PORT_DIPSETTING(      0x0060, "Level 5" )
 1005      PORT_DIPSETTING(      0x0050, "Level 6" )
 1006      PORT_DIPSETTING(      0x0040, "Level 7" )
 1007      PORT_DIPSETTING(      0x0030, "Level 8" )
 1008      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
 1009      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
 1010      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
 1011      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
 1012      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
 1013      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
 1014      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
 1015      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
 1016      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1017  
 1018      PORT_START("DSW2")  /* 500002.w */
 1019      PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
 1020      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
 1021      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
 1022      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
 1023      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
 1024      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
 1025      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
 1026      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8") /* Will go into negative credits and cause graphics issues */
 1027      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1028      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1029      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1030      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1031      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1032      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1033      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
 1034      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
 1035      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
 1036      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1037  
 1038      PORT_START("SYSTEM")    /* 500004.w */
 1039      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
 1040      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
 1041      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
 1042      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
 1043      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1044      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1045      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1046      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1047  INPUT_PORTS_END
 1048  
 1049  static INPUT_PORTS_START( moremore )
 1050      PORT_START("DSW1")  /* 500000.w */
 1051      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
 1052      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
 1053      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1054      PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
 1055      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
 1056      PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
 1057      PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
 1058      PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
 1059      PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
 1060      PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
 1061      PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
 1062      PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
 1063      PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
 1064      PORT_DIPSETTING(      0x0020, "Level 1" )
 1065      PORT_DIPSETTING(      0x0010, "Level 2" )
 1066      PORT_DIPSETTING(      0x0000, "Level 3" )
 1067      PORT_DIPSETTING(      0x0070, "Level 4" )
 1068      PORT_DIPSETTING(      0x0060, "Level 5" )
 1069      PORT_DIPSETTING(      0x0050, "Level 6" )
 1070      PORT_DIPSETTING(      0x0040, "Level 7" )
 1071      PORT_DIPSETTING(      0x0030, "Level 8" )
 1072      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
 1073      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
 1074      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
 1075      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
 1076      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
 1077      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
 1078      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
 1079      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
 1080      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1081  
 1082      PORT_START("DSW2")  /* 500002.w */
 1083      PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
 1084      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
 1085      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
 1086      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
 1087      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
 1088      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
 1089      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
 1090      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
 1091      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1092      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1093      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1094      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1095      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1096      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1097      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
 1098      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
 1099      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
 1100      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1101  
 1102      PORT_START("SYSTEM")    /* 500004.w */
 1103      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
 1104      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
 1105      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
 1106      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
 1107      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1108      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1109      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1110      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1111  INPUT_PORTS_END
 1112  
 1113  static INPUT_PORTS_START( twinkle )
 1114      PORT_START("DSW1")  /* 500000.w */
 1115      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
 1116      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
 1117      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1118      PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
 1119      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
 1120      PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
 1121      PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
 1122      PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
 1123      PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
 1124      PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
 1125      PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
 1126      PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
 1127      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.
 1128      PORT_DIPSETTING(      0x0020, "Level 1" )
 1129      PORT_DIPSETTING(      0x0010, "Level 2" )
 1130      PORT_DIPSETTING(      0x0000, "Level 3" )
 1131      PORT_DIPSETTING(      0x0070, "Level 4" )
 1132      PORT_DIPSETTING(      0x0060, "Level 5" )
 1133      PORT_DIPSETTING(      0x0050, "Level 6" )
 1134      PORT_DIPSETTING(      0x0040, "Level 7" )
 1135      PORT_DIPSETTING(      0x0030, "Level 8" )
 1136      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
 1137      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
 1138      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
 1139      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
 1140      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
 1141      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
 1142      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
 1143      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
 1144      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1145  
 1146      PORT_START("DSW2")  /* 500002.w */
 1147      PORT_DIPNAME( 0x0003, 0x0002, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2") // unlisted in service mode
 1148      PORT_DIPSETTING(      0x0000, "1" )
 1149      PORT_DIPSETTING(      0x0003, "2" )
 1150      PORT_DIPSETTING(      0x0002, "3" )
 1151      PORT_DIPSETTING(      0x0001, "4" )
 1152      PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0000, "SW2:3" )
 1153      PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0000, "SW2:4" )
 1154      PORT_DIPNAME( 0x0010, 0x0010, "Pellet Animations" )     PORT_DIPLOCATION("SW2:5") // unlisted in service mode
 1155      PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
 1156      PORT_DIPSETTING(      0x0010, DEF_STR( On ) )
 1157      PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0000, "SW2:6" )
 1158      PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0000, "SW2:7" )
 1159      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
 1160      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1161      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1162      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1163      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1164      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1165      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1166      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
 1167      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
 1168      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
 1169      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1170  
 1171      PORT_START("SYSTEM")    /* 500004.w */
 1172      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
 1173      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
 1174      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
 1175      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
 1176      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1177      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1178      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1179      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1180  INPUT_PORTS_END
 1181  
 1182  // don't trust the test mode! <-- Verified via actual game play: Demo Sounds, Coinage & Free Play
 1183  static INPUT_PORTS_START( pzlbreak )
 1184      PORT_START("DSW1")  /* 500000.w */
 1185      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
 1186      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
 1187      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1188      PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:2,3,4")
 1189      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
 1190      PORT_DIPSETTING(      0x0002, DEF_STR( 4C_1C ) )
 1191      PORT_DIPSETTING(      0x0004, DEF_STR( 3C_1C ) )
 1192      PORT_DIPSETTING(      0x0006, DEF_STR( 2C_1C ) )
 1193      PORT_DIPSETTING(      0x000e, DEF_STR( 1C_1C ) )
 1194      PORT_DIPSETTING(      0x000a, DEF_STR( 2C_3C ) )
 1195      PORT_DIPSETTING(      0x000c, DEF_STR( 1C_2C ) )
 1196      PORT_DIPSETTING(      0x0008, DEF_STR( 1C_3C ) )
 1197      PORT_DIPNAME( 0x0070, 0x0070, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:5,6,7")
 1198      PORT_DIPSETTING(      0x0020, "Level 1" )
 1199      PORT_DIPSETTING(      0x0010, "Level 2" )
 1200      PORT_DIPSETTING(      0x0000, "Level 3" )
 1201      PORT_DIPSETTING(      0x0070, "Level 4" )
 1202      PORT_DIPSETTING(      0x0060, "Level 5" )
 1203      PORT_DIPSETTING(      0x0050, "Level 6" )
 1204      PORT_DIPSETTING(      0x0040, "Level 7" )
 1205      PORT_DIPSETTING(      0x0030, "Level 8" )
 1206      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
 1207      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
 1208      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
 1209      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
 1210      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
 1211      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
 1212      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
 1213      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
 1214      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1215  
 1216      PORT_START("DSW2")  /* 500002.w */
 1217      PORT_DIPUNUSED_DIPLOC( 0x0001, 0x0000, "SW2:1" )
 1218      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW2:2" )
 1219      PORT_DIPUNUSED_DIPLOC( 0x0004, 0x0000, "SW2:3" )
 1220      PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0000, "SW2:4" )
 1221      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
 1222      PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0000, "SW2:6" )
 1223      PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0000, "SW2:7" )
 1224      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
 1225      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1226      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1227      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1228      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1229      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1230      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1231      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
 1232      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
 1233      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
 1234      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1235  
 1236      PORT_START("SYSTEM")    /* 500004.w */
 1237      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
 1238      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
 1239      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
 1240      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
 1241      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1242      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1243      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1244      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1245  INPUT_PORTS_END
 1246  
 1247  static INPUT_PORTS_START( toppyrap )
 1248      PORT_START("DSW1")  /* 500000.w */
 1249      PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW1:1")
 1250      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
 1251      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1252      PORT_DIPUNUSED_DIPLOC( 0x0002, 0x0000, "SW1:2" )
 1253      PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:3,4,5")
 1254      PORT_DIPSETTING(      0x0000, DEF_STR( 5C_1C ) )
 1255      PORT_DIPSETTING(      0x0004, DEF_STR( 4C_1C ) )
 1256      PORT_DIPSETTING(      0x0008, DEF_STR( 3C_1C ) )
 1257      PORT_DIPSETTING(      0x000c, DEF_STR( 2C_1C ) )
 1258      PORT_DIPSETTING(      0x001c, DEF_STR( 1C_1C ) )
 1259      PORT_DIPSETTING(      0x0014, DEF_STR( 2C_3C ) )
 1260      PORT_DIPSETTING(      0x0018, DEF_STR( 1C_2C ) )
 1261      PORT_DIPSETTING(      0x0010, DEF_STR( 1C_3C ) )
 1262      PORT_DIPNAME( 0x0060, 0x0060, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW1:6,7")
 1263      PORT_DIPSETTING(      0x0000, DEF_STR( Easy ) )
 1264      PORT_DIPSETTING(      0x0060, DEF_STR( Normal ) )
 1265      PORT_DIPSETTING(      0x0040, DEF_STR( Hard ) )
 1266      PORT_DIPSETTING(      0x0020, DEF_STR( Hardest ) )
 1267      PORT_SERVICE_DIPLOC(  0x0080, IP_ACTIVE_LOW, "SW1:8" )
 1268      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
 1269      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
 1270      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
 1271      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
 1272      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)  // jump
 1273      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)  // fire
 1274      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)  // test mode only?
 1275      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1276  
 1277      PORT_START("DSW2")  /* 500002.w */
 1278      PORT_DIPNAME( 0x03,   0x0003, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:1,2")
 1279      PORT_DIPSETTING(      0x0000, "2" )
 1280      PORT_DIPSETTING(      0x0003, "3" )
 1281      PORT_DIPSETTING(      0x0002, "4" )
 1282      PORT_DIPSETTING(      0x0001, "5" )
 1283      PORT_DIPNAME( 0x000c, 0x000c, "Time" )          PORT_DIPLOCATION("SW2:3,4")
 1284      PORT_DIPSETTING(      0x0004, "40 Seconds" )
 1285      PORT_DIPSETTING(      0x0008, "50 Seconds" )
 1286      PORT_DIPSETTING(      0x000c, "60 Seconds" )
 1287      PORT_DIPSETTING(      0x0000, "70 Seconds" )
 1288      PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0000, "SW2:5" )
 1289      PORT_DIPNAME( 0x0020, 0x0020, "God Mode" )      PORT_DIPLOCATION("SW2:6")
 1290      PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
 1291      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1292      PORT_DIPNAME( 0x0040, 0x0040, "Internal Test" )     PORT_DIPLOCATION("SW2:7")
 1293      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
 1294      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1295      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Free_Play ) )    PORT_DIPLOCATION("SW2:8")
 1296      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1297      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1298      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1299      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1300      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1301      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1302      PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)  // jump
 1303      PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)  // fire
 1304      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)  // test mode only?
 1305      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1306  
 1307      PORT_START("SYSTEM")    /* 500004.w */
 1308      PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
 1309      PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
 1310      PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_COIN1 )
 1311      PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_COIN2 )
 1312      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1313      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1314      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1315      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1316  INPUT_PORTS_END
 1317  
 1318  static INPUT_PORTS_START( finalttr )
 1319      PORT_START("DSW1")  /* 500001 */
 1320      PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) )
 1321      PORT_DIPSETTING(      0x0000, DEF_STR( Off ) )
 1322      PORT_DIPSETTING(      0x0001, DEF_STR( On ) )
 1323      PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
 1324      PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
 1325      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1326      PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
 1327      PORT_DIPSETTING(      0x0004, DEF_STR( Off ) )
 1328      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1329      PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coinage ) )
 1330      PORT_DIPSETTING(      0x0000, DEF_STR( 4C_1C ) )
 1331      PORT_DIPSETTING(      0x0010, DEF_STR( 3C_1C ) )
 1332      PORT_DIPSETTING(      0x0030, DEF_STR( 2C_1C ) )
 1333      PORT_DIPSETTING(      0x0038, DEF_STR( 1C_1C ) )
 1334  /*  PORT_DIPSETTING(      0x0018, DEF_STR( 1C_1C ) ) Duplicate setting? */
 1335      PORT_DIPSETTING(      0x0020, DEF_STR( 2C_3C ) )
 1336      PORT_DIPSETTING(      0x0028, DEF_STR( 1C_2C ) )
 1337      PORT_DIPSETTING(      0x0008, DEF_STR( 1C_4C ) )
 1338      PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
 1339      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
 1340      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1341      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
 1342      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1343      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1344      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
 1345      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
 1346      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
 1347      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
 1348      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
 1349      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
 1350      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
 1351      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Must be low or game stops! */
 1352                                                      /* probably VBlank */
 1353      PORT_START("DSW2")  /* 500003 */
 1354      PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
 1355      PORT_DIPSETTING(      0x0001, DEF_STR( Off ) )
 1356      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1357      PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
 1358      PORT_DIPSETTING(      0x0002, DEF_STR( Off ) )
 1359      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1360      PORT_DIPNAME( 0x000c, 0x000c, "Time" )
 1361      PORT_DIPSETTING(      0x0000, "60 Seconds" )
 1362      PORT_DIPSETTING(      0x000c, "90 Seconds" )
 1363      PORT_DIPSETTING(      0x0008, "120 Seconds" )
 1364      PORT_DIPSETTING(      0x0004, "150 Seconds" )
 1365      PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
 1366      PORT_DIPSETTING(      0x0010, DEF_STR( Off ) )
 1367      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1368      PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
 1369      PORT_DIPSETTING(      0x0020, DEF_STR( Off ) )
 1370      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1371      PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
 1372      PORT_DIPSETTING(      0x0040, DEF_STR( Off ) )
 1373      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1374      PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
 1375      PORT_DIPSETTING(      0x0080, DEF_STR( Off ) )
 1376      PORT_DIPSETTING(      0x0000, DEF_STR( On ) )
 1377      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
 1378      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
 1379      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
 1380      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
 1381      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
 1382      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
 1383      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
 1384      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
 1385  
 1386      PORT_START("SYSTEM")    /* 500005 */
 1387      PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
 1388      PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
 1389      PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
 1390      PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
 1391      PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1392      PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
 1393      PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
 1394      PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
 1395  INPUT_PORTS_END
 1396  
 1397  
 1398  /* SnowBros */
 1399  
 1400  static const gfx_layout tilelayout =
 1401  {
 1402      16,16,
 1403      RGN_FRAC(1,1),
 1404      4,
 1405      { 0, 1, 2, 3 },
 1406      { STEP8(0,4), STEP8(8*32,4) },
 1407      { STEP8(0,32), STEP8(16*32,32) },
 1408      32*32
 1409  };
 1410  
 1411  static GFXDECODE_START( snowbros )
 1412      GFXDECODE_ENTRY( "gfx1", 0, tilelayout,  0, 16 )
 1413  GFXDECODE_END
 1414  
 1415  /* Honey Doll */
 1416  
 1417  static const gfx_layout honeydol_tilelayout8bpp =
 1418  {
 1419      16,16,
 1420      RGN_FRAC(1,2),
 1421      8,
 1422      { 0, 1, 2, 3, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+1, RGN_FRAC(1,2)+2, RGN_FRAC(1,2)+3},
 1423      { STEP8(0,4), STEP8(8*32,4) },
 1424      { STEP8(0,32), STEP8(16*32,32) },
 1425      32*32
 1426  };
 1427  
 1428  static GFXDECODE_START( honeydol )
 1429      GFXDECODE_ENTRY( "gfx1", 0, tilelayout,  0, 64 ) // how does it use 0-15
 1430      GFXDECODE_ENTRY( "gfx2", 0, honeydol_tilelayout8bpp,  0, 4 )
 1431  
 1432  GFXDECODE_END
 1433  
 1434  static GFXDECODE_START( twinadv )
 1435      GFXDECODE_ENTRY( "gfx1", 0, tilelayout,  0, 64 )
 1436  GFXDECODE_END
 1437  
 1438  /* Winter Bobble */
 1439  
 1440  static const gfx_layout tilelayout_wb =
 1441  {
 1442      16,16,
 1443      RGN_FRAC(1,1),
 1444      4,
 1445      { 0, 1, 2, 3 },
 1446      { STEP4(3*4,-4), STEP4(7*4,-4), STEP4(11*4,-4), STEP4(15*4,-4) },
 1447      { STEP16(0,64) },
 1448      16*64
 1449  };
 1450  
 1451  static GFXDECODE_START( wb )
 1452      GFXDECODE_ENTRY( "gfx1", 0, tilelayout_wb,  0, 16 )
 1453  GFXDECODE_END
 1454  
 1455  /* SemiCom */
 1456  
 1457  static const gfx_layout hyperpac_tilelayout =
 1458  {
 1459      16,16,
 1460      RGN_FRAC(1,1),
 1461      4,
 1462      { 0, 1, 2, 3 },
 1463      { 4, 0, 8*32+4, 8*32+0, 20,16, 8*32+20, 8*32+16,
 1464          12, 8, 8*32+12, 8*32+8, 28, 24, 8*32+28, 8*32+24 },
 1465      { 0*32, 2*32, 1*32, 3*32, 16*32+0*32, 16*32+2*32, 16*32+1*32, 16*32+3*32,
 1466          4*32, 6*32, 5*32, 7*32, 16*32+4*32, 16*32+6*32, 16*32+5*32, 16*32+7*32 },
 1467      32*32
 1468  };
 1469  
 1470  
 1471  static const gfx_layout sb3_tilebglayout =
 1472  {
 1473      16,16,
 1474      RGN_FRAC(1,1),
 1475      8,
 1476      {8, 9,10, 11, 0, 1, 2, 3  },
 1477      { 0, 4, 16, 20, 32, 36, 48, 52,
 1478      512+0,512+4,512+16,512+20,512+32,512+36,512+48,512+52},
 1479      { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
 1480      1024+0*16,1024+1*64,1024+2*64,1024+3*64,1024+4*64,1024+5*64,1024+6*64,1024+7*64},
 1481      32*64
 1482  };
 1483  
 1484  
 1485  static GFXDECODE_START( sb3 )
 1486      GFXDECODE_ENTRY( "gfx1", 0, tilelayout,  0, 16 )
 1487      GFXDECODE_ENTRY( "gfx2", 0, sb3_tilebglayout,  0, 2 )
 1488  GFXDECODE_END
 1489  
 1490  static GFXDECODE_START( hyperpac )
 1491      GFXDECODE_ENTRY( "gfx1", 0, hyperpac_tilelayout,  0, 16 )
 1492  GFXDECODE_END
 1493  
 1494  /* handler called by the 3812/2151 emulator when the internal timers cause an IRQ */
 1495  static void irqhandler(device_t *device, int irq)
 1496  {
 1497      device->machine().device("soundcpu")->execute().set_input_line(0, irq ? ASSERT_LINE : CLEAR_LINE);
 1498  }
 1499  
 1500  /* SnowBros Sound */
 1501  
 1502  static const ym3812_interface ym3812_config =
 1503  {
 1504      irqhandler
 1505  };
 1506  
 1507  
 1508  MACHINE_RESET_MEMBER(snowbros_state,semiprot)
 1509  {
 1510      UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
 1511      int i;
 1512  
 1513      for (i = 0;i < 0x200/2;i++)
 1514          m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
 1515  }
 1516  
 1517  MACHINE_RESET_MEMBER(snowbros_state,finalttr)
 1518  {
 1519      UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
 1520      int i;
 1521  
 1522      for (i = 0;i < 0x200/2;i++)
 1523          m_hyperpac_ram[0x2000/2 + i] = PROTDATA[i];
 1524  }
 1525  
 1526  static const kaneko_pandora_interface snowbros_pandora_config =
 1527  {
 1528      "screen",   /* screen tag */
 1529      0,  /* gfx_region */
 1530      0, 0    /* x_offs, y_offs */
 1531  };
 1532  
 1533  static MACHINE_CONFIG_START( snowbros, snowbros_state )
 1534  
 1535      /* basic machine hardware */
 1536      MCFG_CPU_ADD("maincpu", M68000, 8000000) /* 8 Mhz - confirmed */
 1537      MCFG_CPU_PROGRAM_MAP(snowbros_map)
 1538      MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
 1539  
 1540      MCFG_CPU_ADD("soundcpu", Z80, 6000000) /* 6 MHz - confirmed */
 1541      MCFG_CPU_PROGRAM_MAP(sound_map)
 1542      MCFG_CPU_IO_MAP(sound_io_map)
 1543  
 1544      /* video hardware */
 1545      MCFG_SCREEN_ADD("screen", RASTER)
 1546      MCFG_SCREEN_REFRESH_RATE(57.5) /* ~57.5 - confirmed */
 1547      MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
 1548      MCFG_SCREEN_SIZE(32*8, 262)
 1549      MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
 1550      MCFG_SCREEN_UPDATE_DRIVER(snowbros_state, screen_update_snowbros)
 1551      MCFG_SCREEN_VBLANK_DRIVER(snowbros_state, screen_eof_snowbros)
 1552  
 1553      MCFG_GFXDECODE(snowbros)
 1554      MCFG_PALETTE_LENGTH(256)
 1555  
 1556      MCFG_KANEKO_PANDORA_ADD("pandora", snowbros_pandora_config)
 1557  
 1558      /* sound hardware */
 1559      MCFG_SPEAKER_STANDARD_MONO("mono")
 1560  
 1561      MCFG_SOUND_ADD("ymsnd", YM3812, 3000000)
 1562      MCFG_SOUND_CONFIG(ym3812_config)
 1563      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1564  MACHINE_CONFIG_END
 1565  
 1566  
 1567  static MACHINE_CONFIG_DERIVED( wintbob, snowbros )
 1568  
 1569      /* basic machine hardware */
 1570      MCFG_CPU_MODIFY("maincpu")
 1571      MCFG_CPU_CLOCK(10000000) /* 10mhz - Confirmed */
 1572      MCFG_CPU_PROGRAM_MAP(wintbob_map)
 1573  
 1574      MCFG_DEVICE_REMOVE("pandora")
 1575  
 1576      /* video hardware */
 1577      MCFG_GFXDECODE(wb)
 1578      MCFG_SCREEN_MODIFY("screen")
 1579      MCFG_SCREEN_UPDATE_DRIVER(snowbros_state, screen_update_wintbob)
 1580      MCFG_SCREEN_VBLANK_NONE()
 1581  MACHINE_CONFIG_END
 1582  
 1583  
 1584  static MACHINE_CONFIG_DERIVED( semicom, snowbros )
 1585  
 1586      /* basic machine hardware */
 1587      MCFG_CPU_MODIFY("maincpu")
 1588      MCFG_CPU_CLOCK(16000000) /* 16mhz or 12mhz ? */
 1589      MCFG_CPU_PROGRAM_MAP(hyperpac_map)
 1590  
 1591      MCFG_CPU_MODIFY("soundcpu")
 1592      MCFG_CPU_CLOCK(4000000) /* 4.0 MHz ??? */
 1593      MCFG_CPU_PROGRAM_MAP(hyperpac_sound_map)
 1594  
 1595      MCFG_GFXDECODE(hyperpac)
 1596  
 1597      /* sound hardware */
 1598      MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000)
 1599      MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
 1600      MCFG_SOUND_ROUTE(0, "mono", 0.10)
 1601      MCFG_SOUND_ROUTE(1, "mono", 0.10)
 1602  
 1603      MCFG_OKIM6295_ADD("oki", 999900, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
 1604      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1605  MACHINE_CONFIG_END
 1606  
 1607  
 1608  
 1609  static MACHINE_CONFIG_DERIVED( semicom_mcu, semicom )
 1610  
 1611      /* basic machine hardware */
 1612  
 1613      MCFG_CPU_ADD("protection", I8052, 16000000)  // AT89C52
 1614      MCFG_CPU_PROGRAM_MAP(protection_map)
 1615      MCFG_CPU_IO_MAP(protection_iomap)
 1616  MACHINE_CONFIG_END
 1617  
 1618  
 1619  static MACHINE_CONFIG_DERIVED( semiprot, semicom )
 1620      MCFG_MACHINE_RESET_OVERRIDE (snowbros_state, semiprot )
 1621  MACHINE_CONFIG_END
 1622  
 1623  /*
 1624  
 1625  Honey Doll - Barko Corp 1995
 1626  
 1627  Rom Board include a Cypress cy7C382-0JC chip
 1628  
 1629  Main Board :
 1630  
 1631  CPU : 1 X MC68000P12
 1632        1 X Z80B
 1633  
 1634  1 X Oki M6295
 1635  2 X Cypress CY7C384A-XJC
 1636  
 1637  2 x quartz - 12Mhz and 16Mhz
 1638  
 1639  
 1640  See included pics
 1641  */
 1642  
 1643  static MACHINE_CONFIG_START( honeydol, snowbros_state )
 1644  
 1645      /* basic machine hardware */
 1646      MCFG_CPU_ADD("maincpu", M68000, 16000000)
 1647      MCFG_CPU_PROGRAM_MAP(honeydol_map)
 1648      MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
 1649  
 1650      MCFG_CPU_ADD("soundcpu", Z80, 4000000)
 1651      MCFG_CPU_PROGRAM_MAP(honeydol_sound_map)
 1652      MCFG_CPU_IO_MAP(honeydol_sound_io_map)
 1653  
 1654      /* video hardware */
 1655      MCFG_SCREEN_ADD("screen", RASTER)
 1656      MCFG_SCREEN_REFRESH_RATE(57.5)
 1657      MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
 1658      MCFG_SCREEN_SIZE(32*8, 262)
 1659      MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
 1660      MCFG_SCREEN_UPDATE_DRIVER(snowbros_state, screen_update_honeydol)
 1661  
 1662      MCFG_GFXDECODE(honeydol)
 1663      MCFG_PALETTE_LENGTH(0x800/2)
 1664  
 1665      /* sound hardware */
 1666      MCFG_SPEAKER_STANDARD_MONO("mono")
 1667  
 1668      /* sound hardware */
 1669  
 1670      MCFG_SOUND_ADD("ymsnd", YM3812, 3000000)
 1671      MCFG_SOUND_CONFIG(ym3812_config)
 1672      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1673  
 1674  
 1675      MCFG_OKIM6295_ADD("oki", 999900, OKIM6295_PIN7_HIGH) /* freq? */
 1676      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1677  MACHINE_CONFIG_END
 1678  
 1679  static MACHINE_CONFIG_START( twinadv, snowbros_state )
 1680  
 1681      /* basic machine hardware */
 1682      MCFG_CPU_ADD("maincpu", M68000, 16000000) // or 12
 1683      MCFG_CPU_PROGRAM_MAP(twinadv_map)
 1684      MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros_irq, "screen", 0, 1)
 1685  
 1686      MCFG_CPU_ADD("soundcpu", Z80, 4000000)
 1687      MCFG_CPU_PROGRAM_MAP(sound_map)
 1688      MCFG_CPU_IO_MAP(twinadv_sound_io_map)
 1689      MCFG_CPU_VBLANK_INT_DRIVER("screen", snowbros_state,  irq0_line_hold)
 1690  
 1691      /* video hardware */
 1692      MCFG_SCREEN_ADD("screen", RASTER)
 1693      MCFG_SCREEN_REFRESH_RATE(57.5)
 1694      MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
 1695      MCFG_SCREEN_SIZE(32*8, 262)
 1696      MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
 1697      MCFG_SCREEN_UPDATE_DRIVER(snowbros_state, screen_update_twinadv)
 1698  
 1699      MCFG_GFXDECODE(twinadv)
 1700      MCFG_PALETTE_LENGTH(0x100)
 1701  
 1702      /* sound hardware */
 1703      MCFG_SPEAKER_STANDARD_MONO("mono")
 1704  
 1705      /* sound hardware */
 1706      MCFG_OKIM6295_ADD("oki", 12000000/12, OKIM6295_PIN7_HIGH) /* freq? */
 1707      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1708  MACHINE_CONFIG_END
 1709  
 1710  
 1711  /*
 1712  
 1713  Final Tetris
 1714  
 1715  the pcb is korean and probably original even if it's very cheap.
 1716  
 1717  osc 12mhz
 1718  osc 3.579545mhz
 1719  68000
 1720  z8004b
 1721  CA5101 (sound chip)
 1722  OKI M6295 (sound chip)
 1723  Intel P8752 (mcu)
 1724  
 1725  2x dips banks
 1726  
 1727  */
 1728  
 1729  static MACHINE_CONFIG_DERIVED( finalttr, semicom )
 1730  
 1731      MCFG_CPU_MODIFY("maincpu")
 1732      MCFG_CPU_CLOCK(12000000)
 1733      MCFG_CPU_PROGRAM_MAP(finalttr_map)
 1734  
 1735      MCFG_CPU_MODIFY("soundcpu")
 1736      MCFG_CPU_CLOCK(3578545)
 1737  
 1738      MCFG_MACHINE_RESET_OVERRIDE (snowbros_state, finalttr )
 1739  
 1740      MCFG_SOUND_REPLACE("ymsnd", YM2151, 4000000)
 1741      MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
 1742      MCFG_SOUND_ROUTE(0, "mono", 0.08)
 1743      MCFG_SOUND_ROUTE(1, "mono", 0.08)
 1744  
 1745      MCFG_OKIM6295_REPLACE("oki", 999900, OKIM6295_PIN7_HIGH)
 1746      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
 1747  MACHINE_CONFIG_END
 1748  
 1749  
 1750  static MACHINE_CONFIG_DERIVED( _4in1, semicom )
 1751  
 1752      /* basic machine hardware */
 1753      MCFG_GFXDECODE(snowbros)
 1754  MACHINE_CONFIG_END
 1755  
 1756  static MACHINE_CONFIG_START( snowbro3, snowbros_state )
 1757  
 1758      /* basic machine hardware */
 1759      MCFG_CPU_ADD("maincpu", M68000, 16000000) /* 16mhz or 12mhz ? */
 1760      MCFG_CPU_PROGRAM_MAP(snowbros3_map)
 1761      MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", snowbros_state, snowbros3_irq, "screen", 0, 1)
 1762  
 1763      /* video hardware */
 1764      MCFG_SCREEN_ADD("screen", RASTER)
 1765      MCFG_SCREEN_REFRESH_RATE(60)
 1766      MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
 1767      MCFG_SCREEN_SIZE(32*8, 32*8)
 1768      MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
 1769      MCFG_SCREEN_UPDATE_DRIVER(snowbros_state, screen_update_snowbro3)
 1770  
 1771      MCFG_GFXDECODE(sb3)
 1772      MCFG_PALETTE_LENGTH(512)
 1773  
 1774      /* sound hardware */
 1775      MCFG_SPEAKER_STANDARD_MONO("mono")
 1776  
 1777      MCFG_OKIM6295_ADD("oki", 999900, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
 1778      MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
 1779  MACHINE_CONFIG_END
 1780  
 1781  /***************************************************************************
 1782  
 1783    Game driver(s)
 1784  
 1785  ***************************************************************************/
 1786  
 1787  ROM_START( snowbros )
 1788      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1789      ROM_LOAD16_BYTE( "sn6.bin",  0x00000, 0x20000, CRC(4899ddcf) SHA1(47d750d3022a80e47ffabe47566bb2556cc8d477) )
 1790      ROM_LOAD16_BYTE( "sn5.bin",  0x00001, 0x20000, CRC(ad310d3f) SHA1(f39295b38d99087dbb9c5b00bf9cb963337a50e2) )
 1791  
 1792      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1793      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1794  
 1795      ROM_REGION( 0x80000, "gfx1", 0 )
 1796      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1797      /* where were these from, a bootleg? */
 1798  //  ROM_LOAD( "ch0",          0x00000, 0x20000, CRC(36d84dfe) SHA1(5d45a750220930bc409de30f19282bb143fbf94f) )
 1799  //  ROM_LOAD( "ch1",          0x20000, 0x20000, CRC(76347256) SHA1(48ec03965905adaba5e50eb3e42a2813f7883bb4) )
 1800  //  ROM_LOAD( "ch2",          0x40000, 0x20000, CRC(fdaa634c) SHA1(1271c74df7da7596caf67caae3c51b4c163a49f4) )
 1801  //  ROM_LOAD( "ch3",          0x60000, 0x20000, CRC(34024aef) SHA1(003a9b9ee3aaab3d787894d3d4126d372b19d2a8) )
 1802  ROM_END
 1803  
 1804  ROM_START( snowbrosa )
 1805      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1806      ROM_LOAD16_BYTE( "sbros-3a.5",  0x00000, 0x20000, CRC(10cb37e1) SHA1(786be4640f8df2c81a32decc189ea7657ace00c6) )
 1807      ROM_LOAD16_BYTE( "sbros-2a.6",  0x00001, 0x20000, CRC(ab91cc1e) SHA1(8cff61539dc7d35fcbf110d3e54fc1883e7b8509) )
 1808  
 1809      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1810      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1811  
 1812      ROM_REGION( 0x80000, "gfx1", 0 )
 1813      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1814  ROM_END
 1815  
 1816  ROM_START( snowbrosb )
 1817      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1818      ROM_LOAD16_BYTE( "sbros3-a",     0x00000, 0x20000, CRC(301627d6) SHA1(0d1dc70091c87e9c27916d4232ff31b7381a64e1) )
 1819      ROM_LOAD16_BYTE( "sbros2-a",     0x00001, 0x20000, CRC(f6689f41) SHA1(e4fd27b930a31479c0d99e0ddd23d5db34044666) )
 1820  
 1821      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1822      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1823  
 1824      ROM_REGION( 0x80000, "gfx1", 0 )
 1825      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1826  ROM_END
 1827  
 1828  ROM_START( snowbrosc )
 1829      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1830      ROM_LOAD16_BYTE( "3-a.ic5",  0x00000, 0x20000, CRC(e1bc346b) SHA1(a20c343d9ed2ad4f785d21076499008edad251f9) )
 1831      ROM_LOAD16_BYTE( "2-a.ic6",  0x00001, 0x20000, CRC(1be27f9d) SHA1(76dd14480b9274831e51016f7bb57459d7b15cf9) )
 1832  
 1833      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1834      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1835  
 1836      ROM_REGION( 0x80000, "gfx1", 0 )
 1837      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1838  ROM_END
 1839  
 1840  ROM_START( snowbrosd ) /* Korean release, but no specific "For use in Korea only..." notice screen */
 1841      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1842      ROM_LOAD16_BYTE( "sbk_3-a.bin",   0x00000, 0x20000, CRC(97174d40) SHA1(481e8c680af8b03d4bcf97b87ca0ba5a3ffca0d7) )
 1843      ROM_LOAD16_BYTE( "sbk_2-a.bin",   0x00001, 0x20000, CRC(80cc80e5) SHA1(1eeca0924c93e9f0536683160e80c59871569088) )
 1844  
 1845      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1846      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1847  
 1848      ROM_REGION( 0x80000, "gfx1", 0 )
 1849      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1850  ROM_END
 1851  
 1852  ROM_START( snowbrosj )/* "For use in Japan only..." notice screen */
 1853      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1854      ROM_LOAD16_BYTE( "snowbros.3",   0x00000, 0x20000, CRC(3f504f9e) SHA1(700758b114c3fde6ea8f84222af0850dba13cd3b) )
 1855      ROM_LOAD16_BYTE( "snowbros.2",   0x00001, 0x20000, CRC(854b02bc) SHA1(4ad1548eef94dcb95119cb4a7dcdefa037591b5b) )
 1856  
 1857      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1858      ROM_LOAD( "sbros-4.29",   0x0000, 0x8000, CRC(e6eab4e4) SHA1(d08187d03b21192e188784cb840a37a7bdb5ad32) )
 1859  
 1860      ROM_REGION( 0x80000, "gfx1", 0 )
 1861      /* The gfx ROM (snowbros.1) was bad, I'm using the ones from the other sets. */
 1862      ROM_LOAD( "sbros-1.41",   0x00000, 0x80000, CRC(16f06b3a) SHA1(c64d3b2d32f0f0fcf1d8c5f02f8589d59ddfd428) )
 1863  ROM_END
 1864  
 1865  ROM_START( wintbob )
 1866      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1867      ROM_LOAD16_BYTE( "wb3", 0x00000, 0x10000, CRC(b9719767) SHA1(431c97d409f2a5ff7f46116a4d8907e446434431) )
 1868      ROM_LOAD16_BYTE( "wb1", 0x00001, 0x10000, CRC(a4488998) SHA1(4e927e31c1b865dbdba2b985c7a819a07e2e81b8) )
 1869  
 1870      /* The wb03.bin below is bad, the set has a different copyright message (IN KOREA is replaced with 1990)
 1871         but also clearly suffers from bitrot at the following addresses
 1872          4FC2, 5F02, 6642, D6C2, D742
 1873         in all cases bit 0x20 is incorrectly set in the bad rom
 1874      */
 1875  
 1876  //  ROM_LOAD16_BYTE( "wb03.bin", 0x00000, 0x10000, CRC(df56e168) SHA1(20dbabdd97e6f3d4bf6500bf9e8476942cb48ae3) )
 1877  //  ROM_LOAD16_BYTE( "wb01.bin", 0x00001, 0x10000, CRC(05722f17) SHA1(9356e2488ea35e0a2978689f2ca6dfa0d57fd2ed) )
 1878  
 1879      ROM_LOAD16_BYTE( "wb04.bin", 0x20000, 0x10000, CRC(53be758d) SHA1(56cf85ba23fe699031d73e8f367a1b8ac837d5f8) )
 1880      ROM_LOAD16_BYTE( "wb02.bin", 0x20001, 0x10000, CRC(fc8e292e) SHA1(857cfeb0be121e64e6117120514ae1f2ffeae4d6) )
 1881  
 1882      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1883      ROM_LOAD( "wb05.bin",     0x0000, 0x10000, CRC(53fe59df) SHA1(a99053e82b9fed76f744fa9f67078294641c6317) )
 1884  
 1885      ROM_REGION( 0x80000, "gfx1", 0 )
 1886      /* probably identical data to Snow Bros, in a different format */
 1887      ROM_LOAD16_BYTE( "wb13.bin",     0x00000, 0x10000, CRC(426921de) SHA1(5107c58e7e08d71895baa67fe260b17ebd61389c) )
 1888      ROM_LOAD16_BYTE( "wb06.bin",     0x00001, 0x10000, CRC(68204937) SHA1(fd2ef93df5fd8aa2d36072858dbcfce41157ef3e) )
 1889      ROM_LOAD16_BYTE( "wb12.bin",     0x20000, 0x10000, CRC(ef4e04c7) SHA1(17158b61b3c158e0491db9abb2e1a8c20d981d37) )
 1890      ROM_LOAD16_BYTE( "wb07.bin",     0x20001, 0x10000, CRC(53f40978) SHA1(058bbf3b7877f0cd320383e0386c5959e0d6589b) )
 1891      ROM_LOAD16_BYTE( "wb11.bin",     0x40000, 0x10000, CRC(41cb4563) SHA1(94f1d12d299ac08fc8522139e1927f0cf739be75) )
 1892      ROM_LOAD16_BYTE( "wb08.bin",     0x40001, 0x10000, CRC(9497b88c) SHA1(367c6106276f3816528341f11f3a97ae458d25cd) )
 1893      ROM_LOAD16_BYTE( "wb10.bin",     0x60000, 0x10000, CRC(5fa22b1e) SHA1(1164003d873e9738a3ca133cce689c7120061e3c) )
 1894      ROM_LOAD16_BYTE( "wb09.bin",     0x60001, 0x10000, CRC(9be718ca) SHA1(5c195e4f13efbdb229201d2408d018861bf389cc) )
 1895  ROM_END
 1896  
 1897  /* Barko */
 1898  
 1899  ROM_START( honeydol )
 1900      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1901      ROM_LOAD16_BYTE( "d-16.uh12",  0x00001, 0x20000, CRC(cee1a2e3) SHA1(6d1ff5358ec704616b724eea2ab9b60b84709eb1) )
 1902      ROM_LOAD16_BYTE( "d-17.ui12",  0x00000, 0x20000, CRC(cac44154) SHA1(2c30dc033001fc9303da7e117e3401bc7af16607) )
 1903  
 1904      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1905      ROM_LOAD( "d-12.uh15",   0x0000, 0x8000, CRC(386f1b63) SHA1(d719875226cd3d380e2ebec49209590d91b6f07b) )
 1906  
 1907      ROM_REGION( 0x80000, "gfx1", 0 ) // 4 bpp gfx
 1908      ROM_LOAD( "d-13.1",          0x000000, 0x80000, CRC(ff6a57fb) SHA1(2fbf61f4ac2655a60b1fa82bb6d001f0ef8b4654) )
 1909  
 1910      ROM_REGION( 0x200000, "gfx2", 0 )
 1911      ROM_LOAD( "d-14.5",          0x000000, 0x80000, CRC(2178996f) SHA1(04368384cb191b28b23199c8175e93271ab79103) )
 1912      ROM_LOAD( "d-15.6",          0x080000, 0x80000, CRC(6629239e) SHA1(5f462c04eb11c2b662236fd65bbf74fa08038eec) )
 1913      ROM_LOAD( "d-18.9",          0x100000, 0x80000, CRC(0210507a) SHA1(5b7348bf253b1ae8bfa86cdee2ff80aa2b3faa79) )
 1914      ROM_LOAD( "d-19.10",         0x180000, 0x80000, CRC(d27375d5) SHA1(2a39ce9b985e00a290c3ea75be3b1edbc00d39ec) )
 1915  
 1916      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 1917      ROM_LOAD( "d-11.u14", 0x00000, 0x40000, CRC(f3ee4861) SHA1(f24f1f855ae6c96a6d84a4b5e5c196df8f922d0a) )
 1918  ROM_END
 1919  
 1920  /*
 1921  
 1922  +--------------------------------+
 1923  |      Z80A                      |
 1924  |GL324  6116                  ua4|
 1925  |M6295 uh15  HY6264           ua5|
 1926  |J     sra   HY6264           ua6|
 1927  |A     srb   84256               |
 1928  |M           84256               |
 1929  |M           84256    CY7C384A   |
 1930  |A           84256               |
 1931  | SWA1       uh12                |
 1932  |      68000 84256               |
 1933  | SWA2       ui12  12MHz 16MHz   |
 1934  +--------------------------------+
 1935  
 1936  Produttore: Barko
 1937  N.revisione: S16K951102
 1938  CPU
 1939  1x 68000 (main)
 1940  1x Z8400B (sound)
 1941  1x OKI M6295 (sound)
 1942  1x GL324 (sound)
 1943  1x CY7C384A
 1944  1x oscillator 12.000MHz
 1945  1x oscillator 16.000MHz
 1946  
 1947  ROMs
 1948  
 1949  1x 27256 (uh15)
 1950  2x M27C2001 (sra,srb)
 1951  1x AM27C010 (12)
 1952  1x D27C010 (13)
 1953  1x M27C4001 (14)
 1954  1x AT27C040 (15)
 1955  1x TMS27C040 (16)
 1956  
 1957  6x HY18CV8S (read protected)
 1958  
 1959  */
 1960  
 1961  ROM_START( twinadv )
 1962      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1963      ROM_LOAD16_BYTE( "13.uh12",  0x00001, 0x20000, CRC(9f70a39b) SHA1(d49823be58b00c4c5a4f6cc4e4371531492aff1e) )
 1964      ROM_LOAD16_BYTE( "12.ui12",  0x00000, 0x20000, CRC(d8776495) SHA1(15b93ded80bf9f240faef2d89b6076f33f1f4ece) )
 1965  
 1966      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1967      ROM_LOAD( "uh15.bin", 0x0000, 0x8000, CRC(3d5acd08) SHA1(c19f686862dfc12d2fa91c2dd3d3b75d9cb410c3) )
 1968  
 1969      ROM_REGION( 0x180000, "gfx1", 0 ) /* 4bpp gfx */
 1970      ROM_LOAD( "16.ua4", 0x000000, 0x80000, CRC(f491e171) SHA1(f31b945b0c4b30d1b3dc6c5928b77aad4e956bc7) )
 1971      ROM_LOAD( "15.ua5", 0x080000, 0x80000, CRC(79a08b8d) SHA1(034c0a3b9e27ac174092d265b32fb82d6ee45d47) )
 1972      ROM_LOAD( "14.ua6", 0x100000, 0x80000, CRC(79faee0b) SHA1(7421a5fa038d01658ba5ac1f65ea87b97ac25c36) )
 1973  
 1974      ROM_REGION( 0x080000, "oki", 0 ) /* Samples - both banks are almost the same */
 1975      /* todo, check bank ordering .. */
 1976      ROM_LOAD( "sra.bin", 0x00000, 0x40000, CRC(82f452c4) SHA1(95ad6ede87ceafb045ed7df40496baf96190b97f) ) // bank 1
 1977      ROM_LOAD( "srb.bin", 0x40000, 0x40000, CRC(109e51e6) SHA1(3344c68d63bbad4a02b47143b2d2f72ce9bcb4bb) ) // bank 2
 1978  ROM_END
 1979  
 1980  ROM_START( twinadvk )
 1981      ROM_REGION( 0x40000, "maincpu", 0 ) /* 6*64k for 68000 code */
 1982      ROM_LOAD16_BYTE( "uh12",  0x00001, 0x20000, CRC(e0bcc738) SHA1(7fc6a793fcdd80122c0ac6409ae4cac5597b7b5a) )
 1983      ROM_LOAD16_BYTE( "ui12",  0x00000, 0x20000, CRC(a3ee6451) SHA1(9c0b415a2f325513739f2047780c2a56df350aa5) )
 1984  
 1985      ROM_REGION( 0x10000, "soundcpu", 0 )    /* 64k for z80 sound code */
 1986      ROM_LOAD( "uh15.bin", 0x0000, 0x8000, CRC(3d5acd08) SHA1(c19f686862dfc12d2fa91c2dd3d3b75d9cb410c3) )
 1987  
 1988      ROM_REGION( 0x180000, "gfx1", 0 ) /* 4bpp gfx */
 1989      ROM_LOAD( "ua4", 0x000000, 0x80000, CRC(a5aff49b) SHA1(ee162281ba643729ee007f9634c21fadd3c1cb48) )
 1990      ROM_LOAD( "ua5", 0x080000, 0x80000, CRC(f83b3b97) SHA1(2e967d49ef411d164a0b6cf32444f60fcd8068a9) )
 1991      ROM_LOAD( "ua6", 0x100000, 0x80000, CRC(4dfcffb9) SHA1(c157e031acbb321b9435389f9fc4e1ffebca106d) )
 1992  
 1993      ROM_REGION( 0x080000, "oki", 0 ) /* Samples - both banks are almost the same */
 1994      /* todo, check bank ordering .. */
 1995      ROM_LOAD( "sra.bin", 0x00000, 0x40000, CRC(82f452c4) SHA1(95ad6ede87ceafb045ed7df40496baf96190b97f) ) // bank 1
 1996      ROM_LOAD( "srb.bin", 0x40000, 0x40000, CRC(109e51e6) SHA1(3344c68d63bbad4a02b47143b2d2f72ce9bcb4bb) ) // bank 2
 1997  ROM_END
 1998  
 1999  
 2000  /* SemiCom Games */
 2001  
 2002  ROM_START( hyperpac )
 2003      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2004      ROM_LOAD16_BYTE( "hyperpac.h12", 0x00001, 0x20000, CRC(2cf0531a) SHA1(c4321d728845035507352d0bcf4348d28b92e85e) )
 2005      ROM_LOAD16_BYTE( "hyperpac.i12", 0x00000, 0x20000, CRC(9c7d85b8) SHA1(432d5fbe8bef875ce4a9aeb74a7b57dc79c709fd) )
 2006  
 2007      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2008      ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) )
 2009  
 2010      ROM_REGION( 0x10000, "protection", 0 ) /* Intel 87C52 MCU Code */
 2011      ROM_LOAD( "at89c52.bin", 0x00000, 0x2000 , CRC(291f9326) SHA1(e440ce7d92188faa86e02e7f9db4ec6bce21efd3) ) /* decapped */
 2012  
 2013      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2014      ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
 2015  
 2016      ROM_REGION( 0x0c0000, "gfx1", 0 ) /* Sprites */
 2017      ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
 2018      ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
 2019      ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
 2020  ROM_END
 2021  
 2022  ROM_START( hyperpacb )
 2023      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2024      ROM_LOAD16_BYTE( "hpacuh12.bin", 0x00001, 0x20000, CRC(633ab2c6) SHA1(534435fa602adebf651e1d42f7c96b01eb6634ef) )
 2025      ROM_LOAD16_BYTE( "hpacui12.bin", 0x00000, 0x20000, CRC(23dc00d1) SHA1(8d4d00f450b94912adcbb24073f9b3b01eab0450) )
 2026  
 2027      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2028      ROM_LOAD( "hyperpac.u1", 0x00000, 0x10000 , CRC(03faf88e) SHA1(a8da883d4b765b809452bbffca37ff224edbe86d) ) // was missing from this set, using the one from the original
 2029  
 2030      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2031      ROM_LOAD( "hyperpac.j15", 0x00000, 0x40000, CRC(fb9f468d) SHA1(52857b1a04c64ac853340ebb8e92d98eabea8bc1) )
 2032  
 2033      ROM_REGION( 0x0c0000, "gfx1", 0 ) /* Sprites */
 2034      ROM_LOAD( "hyperpac.a4", 0x000000, 0x40000, CRC(bd8673da) SHA1(8466355894da4d2c9a54d03a833cc9b4ec0c67eb) )
 2035      ROM_LOAD( "hyperpac.a5", 0x040000, 0x40000, CRC(5d90cd82) SHA1(56be68478a81bb4e1011990da83334929a0ac886) )
 2036      ROM_LOAD( "hyperpac.a6", 0x080000, 0x40000, CRC(61d86e63) SHA1(974c634607993924fa098eff106b1b288bec1e26) )
 2037  ROM_END
 2038  
 2039  ROM_START( twinkle )
 2040      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2041      ROM_LOAD16_BYTE( "uh12.bin", 0x00001, 0x20000, CRC(a99626fe) SHA1(489098a2ceb36df97b6b1d59b7b696300deee3ab) )
 2042      ROM_LOAD16_BYTE( "ui12.bin", 0x00000, 0x20000, CRC(5af73684) SHA1(9be43e5c71152d515366e422eb077a41dbb3fe62) )
 2043  
 2044      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2045      ROM_LOAD( "u1.bin", 0x00000, 0x10000 , CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) )
 2046  
 2047      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2048      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2049  
 2050      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2051      /* this is not a real rom but instead the data extracted from
 2052         shared ram, the MCU puts it there */
 2053      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(00d3e4b4) SHA1(afa359a8b48605ff034133bad2a0a182429dec71) )
 2054  
 2055      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2056      ROM_LOAD( "uj15.bin", 0x00000, 0x40000, CRC(0a534b37) SHA1(b7d780eb4668f1f757a60884c022f5bbc424dc97) )
 2057  
 2058      ROM_REGION( 0x080000, "gfx1", 0 ) /* Sprites */
 2059      ROM_LOAD( "ua4.bin", 0x000000, 0x80000, CRC(6b64bb09) SHA1(547eac1ad931a6b937dff0b922d06af92cc7ab73) )
 2060  ROM_END
 2061  
 2062  
 2063  ROM_START( pzlbreak )
 2064      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2065      ROM_LOAD16_BYTE( "4.uh12", 0x00001, 0x20000, CRC(b3f04f80) SHA1(79b5414727004719ff172e084a672b21e955f0bc) )
 2066      ROM_LOAD16_BYTE( "5.ui12", 0x00000, 0x20000, CRC(13c298a0) SHA1(9455de7ea45c9a61ed6105023eb909c086c44007) )
 2067  
 2068      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2069      ROM_LOAD( "0.u1", 0x00000, 0x10000 , CRC(1ad646b7) SHA1(0132baa097e48df2450afdcd316375dc546ea4d0) )
 2070  
 2071      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2072      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2073  
 2074      ROM_REGION16_BE( 0x200, "user1", ROMREGION_ERASEFF ) /* Data from Shared RAM */
 2075      /* this is not a real rom but instead the data extracted from
 2076         shared ram, the MCU puts it there */
 2077      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(092cb794) SHA1(eb2b336d97b440453ca37ee7605654b35dfb6bad) )
 2078  
 2079      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2080      ROM_LOAD( "1.uj15", 0x00000, 0x40000, CRC(dbfae77c) SHA1(cc509d52cd9c608fc80df799890e62e7b4c143c6) )
 2081  
 2082      ROM_REGION( 0x100000, "gfx1", 0 ) /* Sprites */
 2083      ROM_LOAD( "2.ua4", 0x000000, 0x80000, CRC(d211705a) SHA1(b3a7f8198dc8c034b17b843b2ab0298426de3f55) )
 2084      ROM_LOAD( "3.ua5", 0x080000, 0x80000, CRC(6cdb73e9) SHA1(649e91ee54de2b359a207bed4d950db95515a3d8) )
 2085  ROM_END
 2086  
 2087  
 2088  ROM_START( toppyrap )
 2089      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2090      ROM_LOAD16_BYTE( "uh12.bin", 0x00001, 0x40000, CRC(6f5ad699) SHA1(42f7201d6274ff8338a7d4627af99001f473e841) )
 2091      ROM_LOAD16_BYTE( "ui12.bin", 0x00000, 0x40000, CRC(caf5a7e1) SHA1(b521b2f06a804a52dad1b07657db2a29e1411844) )
 2092  
 2093      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2094      ROM_LOAD( "u1.bin", 0x00000, 0x10000 , CRC(07f50947) SHA1(83740655ab5f677bd009191bb0de60e237aaa11c) )
 2095  
 2096      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2097      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2098  
 2099      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2100      /* this contains the code for 2 of the IRQ functions, but the game only uses one of them, the other is
 2101         executed from ROM.  The version in ROM is slightly patched version so maybe there is an earlier revision
 2102         which uses the code provided by the MCU instead */
 2103      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200, CRC(0704e6c7) SHA1(22387257db569990378c304af9677e6dc1436207) )
 2104  
 2105      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2106      ROM_LOAD( "uj15.bin", 0x00000, 0x20000, CRC(a3bacfd7) SHA1(d015d8bd26d0189fc13d09fefcb9b8baaaacec8a) )
 2107  
 2108      ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
 2109      ROM_LOAD( "ua4.bin", 0x000000, 0x80000, CRC(a9577bcf) SHA1(9918d982ebee1c88bd203fa2b3ce2468c160fb95) )
 2110      ROM_LOAD( "ua5.bin", 0x080000, 0x80000, CRC(7179d32d) SHA1(dae7126401b5bb7f99689587e05a8bf5033ec06e) )
 2111      ROM_LOAD( "ua6.bin", 0x100000, 0x80000, CRC(4834e5b1) SHA1(cd8a4c329b2bfe1a9c2dea9d72ca09b71366c60a) )
 2112      ROM_LOAD( "ua7.bin", 0x180000, 0x80000, CRC(663dd099) SHA1(84b52af54ac49e8b4bae23995e3cf94494be2bb3) )
 2113  ROM_END
 2114  
 2115  ROM_START( moremore )
 2116      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2117      ROM_LOAD16_BYTE( "u52.bin",  0x00001, 0x40000, CRC(cea4b246) SHA1(5febcb5dda6581caccfe9079b28c2366dfc1db2b) )
 2118      ROM_LOAD16_BYTE( "u74.bin",  0x00000, 0x40000, CRC(2acdcb88) SHA1(74d661d07752bbccab7eab151209a414e9bf7675) )
 2119  
 2120      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2121      ROM_LOAD( "u35.bin", 0x00000, 0x10000 , CRC(92dc95fc) SHA1(f04e63cc680835458246989532faf5657e28db13) )
 2122  
 2123      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2124      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2125  
 2126      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2127      /* this is not a real rom but instead the data extracted from
 2128         shared ram, the MCU puts it there */
 2129      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(782dd2aa) SHA1(2587734271e0c85cb76bcdee171366c4e6fc9f81) )
 2130  
 2131      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2132      ROM_LOAD( "u14.bin", 0x00000, 0x40000, CRC(90580088) SHA1(c64de2c0db95ab4ce06fc0a29c0cc8b7f3deeb28) )
 2133  
 2134      ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
 2135      ROM_LOAD( "u75.bin", 0x000000, 0x80000, CRC(d671815c) SHA1(a7e8d3bf688ce51b5d9a2b306cc557974328c322) )
 2136      ROM_LOAD( "u76.bin", 0x080000, 0x80000, CRC(e0d479e8) SHA1(454b53949664aca07a86229d3b6c9ce4e9449ea6) )
 2137      ROM_LOAD( "u77.bin", 0x100000, 0x80000, CRC(60a281da) SHA1(3f268f8b1cd8efd3e32d0fcdba5483c93122800e) )
 2138      ROM_LOAD( "u78.bin", 0x180000, 0x80000, CRC(e2723b4e) SHA1(6b4ba1e2e937b3231d76526af3f5a4a67144e4d5) )
 2139  ROM_END
 2140  
 2141  ROM_START( moremorp )
 2142      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2143      ROM_LOAD16_BYTE( "mmp_u52.bin",  0x00001, 0x40000, CRC(66baf9b2) SHA1(f1d383a94ef4313cb02c59ace17b9562eddcfb3c) )
 2144      ROM_LOAD16_BYTE( "mmp_u74.bin",  0x00000, 0x40000, CRC(7c6fede5) SHA1(41bc539a6efe9eb2304243701857b972d2170bcf) )
 2145  
 2146      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2147      ROM_LOAD( "mmp_u35.bin", 0x00000, 0x10000 , CRC(4d098cad) SHA1(a79d417e7525a25dd6697da9f3d1de269e759d2e) )
 2148  
 2149      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2150      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2151  
 2152      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2153      /* this is not a real rom but instead the data extracted from
 2154         shared ram, the MCU puts it there */
 2155      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(782dd2aa) SHA1(2587734271e0c85cb76bcdee171366c4e6fc9f81) )
 2156  
 2157      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2158      ROM_LOAD( "mmp_u14.bin", 0x00000, 0x40000, CRC(211a2566) SHA1(48138547822a8e76c101dd4189d581f80eee1e24) )
 2159  
 2160      ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
 2161      ROM_LOAD( "mmp_u75.bin", 0x000000, 0x80000, CRC(af9e824e) SHA1(2b68813bf025a34b8958033108e4f8d39fd618cb) )
 2162      ROM_LOAD( "mmp_u76.bin", 0x080000, 0x80000, CRC(c42af064) SHA1(f9d755e7cb52828d8594f7871932daf11443689f) )
 2163      ROM_LOAD( "mmp_u77.bin", 0x100000, 0x80000, CRC(1d7396e1) SHA1(bde7e925051408dd2371b5da8235a6a4cae8cf6a) )
 2164      ROM_LOAD( "mmp_u78.bin", 0x180000, 0x80000, CRC(5508d80b) SHA1(1b9a70a502b237fa11d1d55dce761e2def18873a) )
 2165  ROM_END
 2166  
 2167  ROM_START( 3in1semi )
 2168      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2169      ROM_LOAD16_BYTE( "u52",  0x00001, 0x40000, CRC(b0e4a0f7) SHA1(e1f8b8ef020a85fcd7817814cf6c5d560e9e608d) )
 2170      ROM_LOAD16_BYTE( "u74",  0x00000, 0x40000, CRC(266862c4) SHA1(2c5c513fee99bdb6e0ae3e0e644e516bdaddd629) )
 2171  
 2172      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2173      ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) )
 2174  
 2175      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2176      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2177  
 2178      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2179      /* this is not a real rom but instead the data extracted from
 2180         shared ram, the MCU puts it there */
 2181      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(85deba7c) SHA1(44c6d9306b4f8e47182f4740a18971c49a8df8db) )
 2182  
 2183      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2184      ROM_LOAD( "u14", 0x00000, 0x40000, CRC(c83c11be) SHA1(c05d96d61e5b8245232c85cbbcb7cc1e4e066492) )
 2185  
 2186      ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
 2187      ROM_LOAD( "u75", 0x000000, 0x80000, CRC(b66a0db6) SHA1(a4e604eb3c0a5b16b4b0bb99219045bf2146287c) )
 2188      ROM_LOAD( "u76", 0x080000, 0x80000, CRC(5f4b48ea) SHA1(e9dd1100d55b021b060990988c1e5271ce1ae35b) )
 2189      ROM_LOAD( "u77", 0x100000, 0x80000, CRC(d44211e3) SHA1(53af19dec03e76912632450414cdbcbb31cc094c) )
 2190      ROM_LOAD( "u78", 0x180000, 0x80000, CRC(af596afc) SHA1(875d7a51ff5c741cae4483d8da33df9cae8de52a) )
 2191  ROM_END
 2192  
 2193  ROM_START( cookbib2 )
 2194      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2195      ROM_LOAD16_BYTE( "cookbib2.02",  0x00001, 0x40000, CRC(b2909460) SHA1(2438638af870cfc105631d2b5e5a27a64ab5394d) )
 2196      ROM_LOAD16_BYTE( "cookbib2.01",  0x00000, 0x40000, CRC(65aafde2) SHA1(01f9f261527c35182f0445d641d987aa86ad750f) )
 2197  
 2198      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2199      ROM_LOAD( "cookbib2.07", 0x00000, 0x10000 , CRC(f59f1c9a) SHA1(2830261fd55249e015514fcb4cf8392e83b7fd0d) )
 2200  
 2201      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2202      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2203  
 2204      ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2205      /* this is not a real rom but instead the data extracted from
 2206         shared ram, the MCU puts it there */
 2207      ROM_LOAD16_WORD_SWAP( "protdata.bin", 0x00000, 0x200 , CRC(ae6d8ed5) SHA1(410cdacb9b90ea345c0e4be85e60a138f45a51f1) )
 2208  
 2209      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2210      ROM_LOAD( "cookbib2.06", 0x00000, 0x20000, CRC(5e6f76b8) SHA1(725800143dfeaa6093ed5fcc5b9f15678ae9e547) )
 2211  
 2212      ROM_REGION( 0x140000, "gfx1", 0 ) /* Sprites */
 2213      ROM_LOAD( "cookbib2.05", 0x000000, 0x80000, CRC(89fb38ce) SHA1(1b39dd9c2743916b8d8af590bd92fe4819c2454b) )
 2214      ROM_LOAD( "cookbib2.04", 0x080000, 0x80000, CRC(f240111f) SHA1(b2c3b6e3d916fc68e1fd258b1279b6c39e1f0108) )
 2215      ROM_LOAD( "cookbib2.03", 0x100000, 0x40000, CRC(e1604821) SHA1(bede6bdd8331128b9f2b229d718133470bf407c9) )
 2216  ROM_END
 2217  
 2218  ROM_START( cookbib3 )
 2219      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2220      ROM_LOAD16_BYTE( "u52.bin",  0x00001, 0x40000, CRC(65134893) SHA1(b1f26794d1a85893aedf55adb2195ad244f90132) )
 2221      ROM_LOAD16_BYTE( "u74.bin",  0x00000, 0x40000, CRC(c4ab8435) SHA1(7f97d3deafb3eb5412a44308ef20d3317405e94c) )
 2222  
 2223      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2224      ROM_LOAD( "u35.bin", 0x0c000, 0x4000 ,  CRC(5dfd2a98) SHA1(193c0cd9272144c25cbc3660967424d34d0da185) ) /* bit strange but verified, not the first time SemiCom have done this, see bcstory.. */
 2225      ROM_CONTINUE(0x8000,0x4000)
 2226      ROM_CONTINUE(0x4000,0x4000)
 2227      ROM_CONTINUE(0x0000,0x4000)
 2228  
 2229      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2230      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2231  
 2232      ROM_REGION16_BE( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2233      /* this is not a real rom but instead the data extracted from
 2234         shared ram, the MCU puts it there */
 2235      ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(c819b9a8) SHA1(1d425e8c9940c0e691149e5406dd71808bd73832) )
 2236      /* the 'empty' pattern continued after 0x200 but the game doesn't use it or attempt to decrypt it */
 2237  
 2238      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2239      ROM_LOAD( "u14.bin", 0x00000, 0x20000, CRC(e5bf9288) SHA1(12fb9542f9105fe1a21a74a08cda4d6372b984ee) )
 2240  
 2241      ROM_REGION( 0x180000, "gfx1", 0 ) /* Sprites */
 2242      ROM_LOAD( "u75.bin", 0x000000, 0x80000, CRC(cbe4d9c8) SHA1(81b043bd2b45ab2a8c9df0ba599c6220ed0c9fbf) )
 2243      ROM_LOAD( "u76.bin", 0x080000, 0x80000, CRC(1be17b57) SHA1(57b58cc094d6b47ed6136266f1d34b8bad3f421f) )
 2244      ROM_LOAD( "u77.bin", 0x100000, 0x80000, CRC(7823600d) SHA1(90d431f324b71758c49f3a72ee07701ceb76403f) )
 2245  ROM_END
 2246  
 2247  ROM_START( 4in1boot ) /* snow bros, tetris, hyperman 1, pacman 2 */
 2248      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2249      ROM_LOAD16_BYTE( "u52",  0x00001, 0x80000, CRC(71815878) SHA1(e3868f5687c1d8ec817671c50ade6c56ee83bfa1) )
 2250      ROM_LOAD16_BYTE( "u74",  0x00000, 0x80000, CRC(e22d3fa2) SHA1(020ab92d8cbf37a9f8186a81934abb97088c16f9) )
 2251  
 2252      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2253      ROM_LOAD( "u35", 0x00000, 0x10000 , CRC(c894ac80) SHA1(ee896675b5205ab2dbd0cbb13db16aa145391d06) )
 2254  
 2255      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2256      ROM_LOAD( "u14", 0x00000, 0x40000, CRC(94b09b0e) SHA1(414de3e36eff85126038e8ff74145b35076e0a43) )
 2257  
 2258      ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
 2259      ROM_LOAD( "u78", 0x000000, 0x200000, CRC(6c1fbc9c) SHA1(067f32cae89fd4d57b90be659d2d648e557c11df) )
 2260  ROM_END
 2261  
 2262  ROM_START( snowbros3 )
 2263      ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
 2264      ROM_LOAD16_BYTE( "ur4",  0x00000, 0x20000, CRC(19c13ffd) SHA1(4f9db70354bd410b7bcafa96be4591de8dc33d90) )
 2265      ROM_LOAD16_BYTE( "ur3",  0x00001, 0x20000, CRC(3f32fa15) SHA1(1402c173c1df142ff9dd7b859689c075813a50e5) )
 2266  
 2267      /* the sound is driven by a PIC? */
 2268      ROM_REGION( 0x10000, "cpu2", 0 )
 2269      ROM_LOAD( "sound.mcu", 0x00000, 0x10000 , NO_DUMP )
 2270  
 2271      ROM_REGION( 0x80000, "gfx1", 0 )
 2272      ROM_LOAD( "ua5",        0x000000, 0x80000, CRC(0604e385) SHA1(96acbc65a8db89a7be100f852dc07ba9a0313167) )   /* 16x16 tiles */
 2273  
 2274      ROM_REGION( 0x400000, "gfx2", 0 ) /* 16x16 BG Tiles */
 2275      ROM_LOAD( "un7",        0x000000, 0x200000, CRC(4a79da4c) SHA1(59207d116d39b9ee25c51affe520f5fdff34e536) )
 2276      ROM_LOAD( "un8",        0x200000, 0x200000, CRC(7a4561a4) SHA1(1dd823369c09368d1f0ec8e1cb85d700f10ff448) )
 2277  
 2278      ROM_REGION( 0x100000, "oki", 0 )    /* OKIM6295 samples */
 2279      ROM_LOAD( "us5",     0x00000, 0x20000, CRC(7c6368ef) SHA1(53393c570c605f7582b61c630980041e2ed32e2d) )
 2280      ROM_CONTINUE(0x80000,0x60000)
 2281  ROM_END
 2282  
 2283  /*
 2284  
 2285  Information from Korean arcade gaming magazine
 2286  
 2287  name : Final Tetris
 2288  author : Jeil computer system
 2289  year : 1993.08.24
 2290  
 2291  */
 2292  
 2293  ROM_START( finalttr )
 2294      ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
 2295      ROM_LOAD16_BYTE( "10.7o",    0x00000, 0x20000, CRC(eecc83e5) SHA1(48088a2fae8852a73a325a9659c24b241515eac3) )
 2296      ROM_LOAD16_BYTE( "9.5o",     0x00001, 0x20000, CRC(58d3640e) SHA1(361bc64174a6c7b15a13e0d1f048c7ea270182ca) )
 2297  
 2298      ROM_REGION( 0x10000, "soundcpu", 0 ) /* Z80 Code */
 2299      ROM_LOAD( "12.5r",    0x00000, 0x10000, CRC(4bc21361) SHA1(dab9bea665c0f2fd7cee8ab7f3762e427911bcca) )
 2300  
 2301      ROM_REGION( 0x10000, "cpu2", 0 ) /* Intel 87C52 MCU Code */
 2302      ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */
 2303  
 2304      ROM_REGION( 0x200, "user1", 0 ) /* Data from Shared RAM */
 2305      /* this is not a real rom but instead the data extracted from
 2306         shared ram, the MCU puts it there */
 2307      ROM_LOAD16_WORD_SWAP( "protdata.bin", 0x00000, 0x200 , CRC(d5bbb006) SHA1(2f9ce6c4f4f5a304a807134da9c85c68a7b49200) )
 2308      /* after 0xc7 the data read seems meaningless garbage, it doesn't appear to
 2309         stop at 0x102200, might be worth going back and checking if its simply random
 2310         values due to ram not being cleared, or actual data */
 2311  
 2312      ROM_REGION( 0x040000, "oki", 0 ) /* Samples */
 2313      ROM_LOAD( "11.7p",    0x00000, 0x20000, CRC(2e331022) SHA1(1e74c66d16eb9c8ae04acecbb4040dea037492cc) )
 2314  
 2315      ROM_REGION( 0x100000, "gfx1", 0 ) /* Sprites */
 2316      ROM_LOAD( "5.1d",     0x00000, 0x40000, CRC(64a450f3) SHA1(d0560f68fe1527fda7852269ec39237ace66ab32) )
 2317      ROM_LOAD( "6.1f",     0x40000, 0x40000, CRC(7281a3cc) SHA1(3f2ed7893bd7c5ff25ecb6eabce78ab66fe532a7) )
 2318      ROM_LOAD( "7.1g",     0x80000, 0x40000, CRC(ec80f442) SHA1(870e44d28490a324f74af554604b9daa8422b86f) )
 2319      ROM_LOAD( "9.1h",     0xc0000, 0x40000, CRC(2ebd316d) SHA1(2f1249ebd2a0bb0cc15259f7187201576a365fa6) )
 2320  ROM_END
 2321  
 2322  READ16_MEMBER(snowbros_state::moremorp_0a_read)
 2323  {
 2324      return 0x000a;
 2325  }
 2326  
 2327  DRIVER_INIT_MEMBER(snowbros_state,moremorp)
 2328  {
 2329  //  UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
 2330  //  int i;
 2331  
 2332  //  for (i = 0;i < 0x200/2;i++)
 2333  //      m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
 2334  
 2335      /* explicit check in the code */
 2336      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::moremorp_0a_read),this));
 2337  }
 2338  
 2339  
 2340  DRIVER_INIT_MEMBER(snowbros_state,cookbib2)
 2341  {
 2342  //  UINT16 *HCROM = (UINT16*)memregion("maincpu")->base();
 2343  //  UINT16 *PROTDATA = (UINT16*)memregion("user1")->base();
 2344  //  int i;
 2345  //  m_hyperpac_ram[0xf000/2] = 0x46fc;
 2346  //  m_hyperpac_ram[0xf002/2] = 0x2700;
 2347  
 2348  // verified on real hardware, need to move this to a file really
 2349  
 2350  //  static UINT16 cookbib2_mcu68k[] =
 2351  //  {
 2352  //      // moved to protdata.bin
 2353  //  };
 2354  
 2355  
 2356  
 2357  
 2358  //for (i = 0;i < sizeof(cookbib2_mcu68k)/sizeof(cookbib2_mcu68k[0]);i++)
 2359  //      m_hyperpac_ram[0xf000/2 + i] = cookbib2_mcu68k[i];
 2360  
 2361  //  for (i = 0;i < 0x200/2;i++)
 2362  //      m_hyperpac_ram[0xf000/2 + i] = PROTDATA[i];
 2363  
 2364  
 2365      // trojan is actually buggy and gfx flicker like crazy
 2366      // but we can pause the system after bootup with HALT line of 68k to get the table before
 2367      // it goes nuts
 2368  
 2369      //  m_hyperpac_ram[0xf07a/2] = 0x4e73;
 2370      //  m_hyperpac_ram[0xf000/2] = 0x4e73;
 2371  
 2372  #if 0
 2373  
 2374      /* interrupt wait loop? */
 2375      HCROM[0x014942/2] = 0x4eb9;
 2376      HCROM[0x014944/2] = 0x0004;
 2377      HCROM[0x014946/2] = 0x8000;
 2378      HCROM[0x014948/2] = 0x4e71;
 2379  
 2380      /* interrupt wait loop? */
 2381      HCROM[0x014968/2] = 0x4eb9;
 2382      HCROM[0x01496a/2] = 0x0004;
 2383      HCROM[0x01496c/2] = 0x8100;
 2384      HCROM[0x01496e/2] = 0x4e71;
 2385  
 2386      /* interrupt wait loop? */
 2387      HCROM[0x014560/2] = 0x4eb9;
 2388      HCROM[0x014562/2] = 0x0004;
 2389      HCROM[0x014564/2] = 0x8200;
 2390      HCROM[0x014566/2] = 0x4e71;
 2391  
 2392      /* new code for interrupt wait */
 2393      HCROM[0x048000/2] = 0x4a79;
 2394      HCROM[0x048002/2] = 0x0010;
 2395      HCROM[0x048004/2] = 0x2462;
 2396      HCROM[0x048006/2] = 0x66f8;
 2397      HCROM[0x048008/2] = 0x4eb9;
 2398      HCROM[0x04800a/2] = 0x0004;
 2399      HCROM[0x04800c/2] = 0x8300;
 2400      HCROM[0x04800e/2] = 0x4e75;
 2401  
 2402      /* new code for interrupt wait */
 2403      HCROM[0x048100/2] = 0x4a79;
 2404      HCROM[0x048102/2] = 0x0010;
 2405      HCROM[0x048104/2] = 0x2460;
 2406      HCROM[0x048106/2] = 0x66f8;
 2407      HCROM[0x048108/2] = 0x4eb9;
 2408      HCROM[0x04810a/2] = 0x0004;
 2409      HCROM[0x04810c/2] = 0x8300;
 2410      HCROM[0x04810e/2] = 0x4e75;
 2411  
 2412      /* new code for interrupt wait */
 2413      HCROM[0x048200/2] = 0x4a79;
 2414      HCROM[0x048202/2] = 0x0010;
 2415      HCROM[0x048204/2] = 0x2490;
 2416      HCROM[0x048206/2] = 0x66f8;
 2417      HCROM[0x048208/2] = 0x4eb9;
 2418      HCROM[0x04820a/2] = 0x0004;
 2419      HCROM[0x04820c/2] = 0x8300;
 2420      HCROM[0x04820e/2] = 0x4e75;
 2421  
 2422  
 2423  
 2424      /* put registers on stack */
 2425      HCROM[0x048300/2] = 0x48e7;
 2426      HCROM[0x048302/2] = 0xfffe;
 2427  
 2428      /* wipe sprite ram (fill with 0x0002) */
 2429  
 2430      /* put the address we want to write TO in A2 */
 2431      HCROM[0x048304/2] = 0x45f9;
 2432      HCROM[0x048306/2] = 0x0070;
 2433      HCROM[0x048308/2] = 0x0000;
 2434  
 2435      /* put the number of words we want to clear into D0 */
 2436      HCROM[0x04830a/2] = 0x203c;
 2437      HCROM[0x04830c/2] = 0x0000;
 2438      HCROM[0x04830e/2] = 0x1000;
 2439  
 2440      /* write 0x0002 to A2 */
 2441      HCROM[0x048310/2] = 0x34bc;
 2442      HCROM[0x048312/2] = 0x0002;
 2443  
 2444  
 2445      /* add 1 to write address a2 */
 2446      HCROM[0x048314/2] = 0xd5fc;
 2447      HCROM[0x048316/2] = 0x0000;
 2448      HCROM[0x048318/2] = 0x0002;
 2449  
 2450      /* decrease counter d0 */
 2451      HCROM[0x04831a/2] = 0x5380;
 2452  
 2453      /* compare d0 to 0 */
 2454      HCROM[0x04831c/2] = 0x0c80;
 2455      HCROM[0x04831e/2] = 0x0000;
 2456      HCROM[0x048320/2] = 0x0000;
 2457  
 2458      /* if its not 0 then branch back */
 2459      HCROM[0x048322/2] = 0x66ec;
 2460  
 2461      /* ram has been wiped */
 2462  
 2463      /* put the address we want to read protection data  in A2 */
 2464      HCROM[0x048324/2] = 0x45f9;
 2465      HCROM[0x048326/2] = 0x0010;
 2466  //  HCROM[0x048328/2] = 0xf000;
 2467  //  HCROM[0x048328/2] = 0xf000+0xb4;
 2468      HCROM[0x048328/2] = 0xf000+0xb4+0xb4;
 2469  
 2470      /* put the address of spriteram  in A0 */
 2471      HCROM[0x04832a/2] = 0x41f9;
 2472      HCROM[0x04832c/2] = 0x0070;
 2473      HCROM[0x04832e/2] = 0x0000;
 2474  
 2475      /* put the number of rows into D3 */
 2476      HCROM[0x048330/2] = 0x263c;
 2477      HCROM[0x048332/2] = 0x0000;
 2478      HCROM[0x048334/2] = 0x0012;
 2479  
 2480      /* put the y co-ordinate of rows into D6 */
 2481      HCROM[0x048336/2] = 0x2c3c;
 2482      HCROM[0x048338/2] = 0x0000;
 2483      HCROM[0x04833a/2] = 0x0014;
 2484  
 2485      /* put the number of bytes per row into D2 */
 2486      HCROM[0x04833c/2] = 0x243c;
 2487      HCROM[0x04833e/2] = 0x0000;
 2488      HCROM[0x048340/2] = 0x000a;
 2489  
 2490      /* put the x co-ordinate of rows into D5 */
 2491      HCROM[0x048342/2] = 0x2a3c;
 2492      HCROM[0x048344/2] = 0x0000;
 2493      HCROM[0x048346/2] = 0x0010;
 2494  
 2495      // move content of a2 to d4 (byte)
 2496      HCROM[0x048348/2] = 0x1812;
 2497  
 2498      HCROM[0x04834a/2] = 0xe84c; // shift d4 right by 4
 2499  
 2500      HCROM[0x04834c/2] = 0x0244; // mask with 0x000f
 2501      HCROM[0x04834e/2] = 0x000f; //
 2502  
 2503      /* jump to character draw to draw first bit */
 2504      HCROM[0x048350/2] = 0x4eb9;
 2505      HCROM[0x048352/2] = 0x0004;
 2506      HCROM[0x048354/2] = 0x8600;
 2507  
 2508      // increase x-cord
 2509      HCROM[0x048356/2] = 0x0645;
 2510      HCROM[0x048358/2] = 0x000a;
 2511  
 2512  
 2513      /* add 0x10 to draw address a0 */
 2514      HCROM[0x04835a/2] = 0xd1fc;
 2515      HCROM[0x04835c/2] = 0x0000;
 2516      HCROM[0x04835e/2] = 0x0010;
 2517  
 2518  
 2519      // move content of a2 to d4 (byte)
 2520      HCROM[0x048360/2] = 0x1812;
 2521  
 2522      HCROM[0x048362/2] = 0x0244; // mask with 0x000f
 2523      HCROM[0x048364/2] = 0x000f; //
 2524  
 2525      /* jump to character draw to draw second bit */
 2526      HCROM[0x048366/2] = 0x4eb9;
 2527      HCROM[0x048368/2] = 0x0004;
 2528      HCROM[0x04836a/2] = 0x8600;
 2529  
 2530      // increase x-cord
 2531      HCROM[0x04836c/2] = 0x0645;
 2532      HCROM[0x04836e/2] = 0x000c;
 2533  
 2534      /* add 0x10 to draw address a0 */
 2535      HCROM[0x048370/2] = 0xd1fc;
 2536      HCROM[0x048372/2] = 0x0000;
 2537      HCROM[0x048374/2] = 0x0010;
 2538  
 2539  // newcode
 2540      /* add 1 to read address a2 */
 2541      HCROM[0x048376/2] = 0xd5fc;
 2542      HCROM[0x048378/2] = 0x0000;
 2543      HCROM[0x04837a/2] = 0x0001;
 2544  
 2545      /* decrease counter d2 (row count)*/
 2546      HCROM[0x04837c/2] = 0x5382;
 2547  
 2548      /* compare d2 to 0 */
 2549      HCROM[0x04837e/2] = 0x0c82;
 2550      HCROM[0x048380/2] = 0x0000;
 2551      HCROM[0x048382/2] = 0x0000;
 2552  
 2553      /* if its not 0 then branch back */
 2554      HCROM[0x048384/2] = 0x66c2;
 2555  
 2556      // increase y-cord d6
 2557      HCROM[0x048386/2] = 0x0646;
 2558      HCROM[0x048388/2] = 0x000c;
 2559  
 2560      /* decrease counter d3 */
 2561      HCROM[0x04838a/2] = 0x5383;
 2562  
 2563      /* compare d3 to 0 */
 2564      HCROM[0x04838c/2] = 0x0c83;
 2565      HCROM[0x04838e/2] = 0x0000;
 2566      HCROM[0x048390/2] = 0x0000;
 2567  
 2568      /* if its not 0 then branch back */
 2569      HCROM[0x048392/2] = 0x66a8;
 2570  
 2571      /* get back registers from stack*/
 2572      HCROM[0x048394/2] = 0x4cdf;
 2573      HCROM[0x048396/2] = 0x7fff;
 2574  
 2575      /* rts */
 2576      HCROM[0x048398/2] = 0x4e75;
 2577  
 2578      /* Draw a character! */
 2579      /* D6 = y-coordinate
 2580         D5 = x-coordinate
 2581         D4 = value to draw
 2582  
 2583         A0 = spriteram base */
 2584  
 2585      // 0002 0002 0002 0010 00xx 00yy 00nn 000n
 2586  
 2587      // 357c 0020 000c
 2588      // 337c = a1
 2589      // move.w #$20, (#$c, A2)
 2590  
 2591      HCROM[0x048600/2] = 0x317c;
 2592      HCROM[0x048602/2] = 0x0010;
 2593      HCROM[0x048604/2] = 0x0006;
 2594  
 2595      HCROM[0x048606/2] = 0x3145;
 2596      HCROM[0x048608/2] = 0x0008;
 2597  
 2598      HCROM[0x04860a/2] = 0x3146;
 2599      HCROM[0x04860c/2] = 0x000a;
 2600  
 2601  /* get true value */
 2602  
 2603      /* put lookuptable address in  A3 */
 2604      HCROM[0x04860e/2] = 0x47f9;
 2605      HCROM[0x048610/2] = 0x0004;
 2606      HCROM[0x048612/2] = 0x8800;
 2607  
 2608      HCROM[0x048614/2] = 0x3004; // d4 -> d0
 2609      HCROM[0x048616/2] = 0xe348;
 2610  
 2611      HCROM[0x048618/2] = 0x3173;
 2612      HCROM[0x04861a/2] = 0x0000;
 2613      HCROM[0x04861c/2] = 0x000c;
 2614  
 2615  /* not value */
 2616  
 2617      HCROM[0x04861e/2] = 0x317c;
 2618      HCROM[0x048620/2] = 0x0000;
 2619      HCROM[0x048622/2] = 0x000e;
 2620  
 2621      /* rts */
 2622      HCROM[0x048624/2] = 0x4e75;
 2623  
 2624  
 2625      /* table used for lookup by the draw routine to get real tile numbers */
 2626  
 2627      HCROM[0x048800/2] = 0x0010;
 2628      HCROM[0x048802/2] = 0x0011;
 2629      HCROM[0x048804/2] = 0x0012;
 2630      HCROM[0x048806/2] = 0x0013;
 2631      HCROM[0x048808/2] = 0x0014;
 2632      HCROM[0x04880a/2] = 0x0015;
 2633      HCROM[0x04880c/2] = 0x0016;
 2634      HCROM[0x04880e/2] = 0x0017;
 2635      HCROM[0x048810/2] = 0x0018;
 2636      HCROM[0x048812/2] = 0x0019;
 2637      HCROM[0x048814/2] = 0x0021;
 2638      HCROM[0x048816/2] = 0x0022;
 2639      HCROM[0x048818/2] = 0x0023;
 2640      HCROM[0x04881a/2] = 0x0024;
 2641      HCROM[0x04881c/2] = 0x0025;
 2642      HCROM[0x04881e/2] = 0x0026;
 2643  
 2644  
 2645  
 2646  /*
 2647  10 0
 2648  11 1
 2649  12 2
 2650  13 3
 2651  14 4
 2652  15 5
 2653  16 6
 2654  17 7
 2655  18 8
 2656  19 9
 2657  21 a
 2658  22 b
 2659  23 c
 2660  24 d
 2661  25 e
 2662  26 f
 2663  */
 2664  
 2665  
 2666  
 2667  
 2668  
 2669      {
 2670          FILE *fp;
 2671  
 2672          fp=fopen("cookie", "w+b");
 2673          if (fp)
 2674          {
 2675              fwrite(HCROM, 0x80000, 1, fp);
 2676              fclose(fp);
 2677          }
 2678      }
 2679  #endif
 2680  }
 2681  
 2682  // protection simulation no longer used
 2683  #if 0
 2684  DRIVER_INIT_MEMBER(snowbros_state,hyperpac)
 2685  {
 2686      UINT16 *hyperpac_ram = m_hyperpac_ram;
 2687      /* simulate RAM initialization done by the protection MCU */
 2688      /* not verified on real hardware */
 2689      hyperpac_ram[0xe000/2] = 0x4ef9;
 2690      hyperpac_ram[0xe002/2] = 0x0000;
 2691      hyperpac_ram[0xe004/2] = 0x062c;
 2692  
 2693      hyperpac_ram[0xe080/2] = 0xfedc;
 2694      hyperpac_ram[0xe082/2] = 0xba98;
 2695      hyperpac_ram[0xe084/2] = 0x7654;
 2696      hyperpac_ram[0xe086/2] = 0x3210;
 2697  }
 2698  #endif
 2699  
 2700  READ16_MEMBER(snowbros_state::_4in1_02_read)
 2701  {
 2702      return 0x0202;
 2703  }
 2704  
 2705  DRIVER_INIT_MEMBER(snowbros_state,4in1boot)
 2706  {
 2707      UINT8 *buffer;
 2708      UINT8 *src = machine().root_device().memregion("maincpu")->base();
 2709      int len = machine().root_device().memregion("maincpu")->bytes();
 2710  
 2711      /* strange order */
 2712      buffer = auto_alloc_array(machine(), UINT8, len);
 2713      {
 2714          int i;
 2715          for (i = 0;i < len; i++)
 2716              if (i&1) buffer[i] = BITSWAP8(src[i],6,7,5,4,3,2,1,0);
 2717              else buffer[i] = src[i];
 2718  
 2719          memcpy(src,buffer,len);
 2720          auto_free(machine(), buffer);
 2721      }
 2722  
 2723      src = machine().root_device().memregion("soundcpu")->base();
 2724      len = machine().root_device().memregion("soundcpu")->bytes();
 2725  
 2726      /* strange order */
 2727      buffer = auto_alloc_array(machine(), UINT8, len);
 2728      {
 2729          int i;
 2730          for (i = 0;i < len; i++)
 2731              buffer[i] = src[i^0x4000];
 2732          memcpy(src,buffer,len);
 2733          auto_free(machine(), buffer);
 2734      }
 2735      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_4in1_02_read),this));
 2736  }
 2737  
 2738  DRIVER_INIT_MEMBER(snowbros_state,snowbro3)
 2739  {
 2740      UINT8 *buffer;
 2741      UINT8 *src = machine().root_device().memregion("maincpu")->base();
 2742      int len = machine().root_device().memregion("maincpu")->bytes();
 2743  
 2744      /* strange order */
 2745      buffer = auto_alloc_array(machine(), UINT8, len);
 2746      {
 2747          int i;
 2748          for (i = 0;i < len; i++)
 2749              buffer[i] = src[BITSWAP24(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)];
 2750          memcpy(src,buffer,len);
 2751          auto_free(machine(), buffer);
 2752      }
 2753  }
 2754  
 2755  READ16_MEMBER(snowbros_state::_3in1_read)
 2756  {
 2757      return 0x0a0a;
 2758  }
 2759  
 2760  DRIVER_INIT_MEMBER(snowbros_state,3in1semi)
 2761  {
 2762      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_3in1_read),this));
 2763  }
 2764  
 2765  READ16_MEMBER(snowbros_state::cookbib3_read)
 2766  {
 2767      return 0x2a2a;
 2768  }
 2769  
 2770  DRIVER_INIT_MEMBER(snowbros_state,cookbib3)
 2771  {
 2772      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::cookbib3_read),this));
 2773  }
 2774  
 2775  DRIVER_INIT_MEMBER(snowbros_state,pzlbreak)
 2776  {
 2777      pandora_set_bg_pen(machine().device("pandora"), 0xc0);
 2778  }
 2779  
 2780  GAME( 1990, snowbros,  0,        snowbros, snowbros, driver_device, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 1)", 0 )
 2781  GAME( 1990, snowbrosa, snowbros, snowbros, snowbros, driver_device, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 2)", 0 )
 2782  GAME( 1990, snowbrosb, snowbros, snowbros, snowbros, driver_device, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 3)", 0 )
 2783  GAME( 1990, snowbrosc, snowbros, snowbros, snowbros, driver_device, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (set 4)", 0 )
 2784  GAME( 1990, snowbrosj, snowbros, snowbros, snowbroj, driver_device, 0, ROT0, "Toaplan", "Snow Bros. - Nick & Tom (Japan)", 0 )
 2785  GAME( 1990, snowbrosd, snowbros, snowbros, snowbroj, driver_device, 0, ROT0, "Toaplan (Dooyong license)", "Snow Bros. - Nick & Tom (Dooyong license)", 0 )
 2786  GAME( 1990, wintbob,   snowbros, wintbob,  snowbros, driver_device, 0, ROT0, "bootleg (Sakowa Project Korea)", "The Winter Bobble (bootleg of Snow Bros.)", 0 )
 2787  
 2788  // none of the games below are on genuine SnowBros hardware, but they clone the functionality of it.
 2789  GAME( 1993, finalttr, 0,        finalttr, finalttr, driver_device, 0,        ROT0, "Jeil Computer System", "Final Tetris", 0 )
 2790  GAME( 1995, honeydol, 0,        honeydol, honeydol, driver_device, 0, ROT0, "Barko Corp.", "Honey Dolls", 0 ) // based on snowbros code..
 2791  GAME( 1995, twinadv,  0,        twinadv,  twinadv, driver_device,  0, ROT0, "Barko Corp.", "Twin Adventure (World)", 0 )
 2792  GAME( 1995, twinadvk, twinadv,  twinadv,  twinadv, driver_device,  0, ROT0, "Barko Corp.", "Twin Adventure (Korea)", 0 )
 2793  GAME( 1995, hyperpac, 0,        semicom_mcu,  hyperpac, driver_device, 0, ROT0, "SemiCom", "Hyper Pacman", 0 )
 2794  GAME( 1995, hyperpacb,hyperpac, semicom,  hyperpac, driver_device, 0,        ROT0, "bootleg", "Hyper Pacman (bootleg)", 0 )
 2795  GAME( 1996, cookbib2, 0,        semiprot, cookbib2, snowbros_state, cookbib2, ROT0, "SemiCom", "Cookie & Bibi 2", 0 )
 2796  GAME( 1996, toppyrap, 0,        semiprot, toppyrap, driver_device, 0,        ROT0, "SemiCom", "Toppy & Rappy", 0 )
 2797  GAME( 1997, cookbib3, 0,        semiprot, cookbib3, snowbros_state, cookbib3, ROT0, "SemiCom", "Cookie & Bibi 3", 0 )
 2798  GAME( 1997, 3in1semi, 0,        semiprot, moremore, snowbros_state, 3in1semi, ROT0, "SemiCom", "XESS - The New Revolution (SemiCom 3-in-1)", 0 )
 2799  GAME( 1997, twinkle,  0,        semiprot, twinkle, driver_device,  0,        ROT0, "SemiCom", "Twinkle", 0 )
 2800  GAME( 1997, pzlbreak, 0,        semiprot, pzlbreak, snowbros_state, pzlbreak, ROT0, "SemiCom", "Puzzle Break", 0 )
 2801  GAME( 1999, moremore, 0,        semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More", 0 )
 2802  GAME( 1999, moremorp, 0,        semiprot, moremore, snowbros_state, moremorp, ROT0, "SemiCom / Exit", "More More Plus", 0 )
 2803  GAME( 2002, 4in1boot, 0,        _4in1,    4in1boot, snowbros_state, 4in1boot, ROT0, "K1 Soft", "Puzzle King (includes bootleg of Snow Bros.)" , 0)
 2804  GAME( 2002, snowbros3,snowbros, snowbro3, snowbroj, snowbros_state, snowbro3, ROT0, "Syrmex", "Snow Brothers 3 - Magical Adventure", GAME_IMPERFECT_SOUND ) // its basically snowbros code?...