// license:BSD-3-Clause
// copyright-holders:Roberto Fresca, David Haywood
/***************************************************************************************************
Sky Lancer / Butterfly / Mad Zoo / Super Star 97
Bordun International.
Original preliminary driver by Luca Elia.
Additional Work: Roberto Fresca & David Haywood.
****************************************************************************************************
Notes:
- There are at least 3 different PCBs: Rolla, Sky and Cleco.
- Some of the tiles look badly scaled down, and others appear to have columns swapped.
This might actually be correct due to different gfx encoding for different PCBs.
- Skylncr and madzoo can run with the same program roms, they're basically graphics swaps.
- To enter the Service Mode, press F2. All the game settings are there.
Change regular values using DIP switches, and jackpot value using STOP2 and STOP3.
To exit the mode, press START. You must reset the machine (F3) to update the changes.
- Press key 0 to navigate between statistics pages. Press START to exit the mode.
****************************************************************************************************
Settings:
Pressing F2, you can enter the DIP switches settings.
Here the translated items:
.---------------------------------------.
| DIP Switches Settings |
| |
| Main Game % Double-Up % |
| Clown % Reels Speed |
| Coin Scores Key In Scores |
| Payout Limit Key Out Score |
| Max Bet Min Bet |
| Special Bonus % Super Star % |
| Bonus Base Max Win Bonus |
| Double-Up Y/N Bonus Scores |
| |
'---------------------------------------'
'Special Bonus' and 'Super Star' appearance, are per 1000.
You also can find the MAME DIP switches menu already translated.
The <unknown> items still need translation.
Press START (key 1) to exit the mode.
Bookkeeping:
Pressing BOOKKEEPING (key 0), you enter the Record Mode.
Here the translated items:
.---------------------------------------.
| Record Menu |
| |
| Play Scores Key In Total |
| Win Scores Key Out Total |
| Play Times Coin In Total |
| Win Times Coin Out Total |
| Bonus Scores Short Total |
| Double Play Special Times |
| Double Win Super Show Up |
| Win Times Power On Times |
| Loss Times Working Time H M |
| |
| Version XXXXX |
'---------------------------------------'
Pressing BOOKKEEPING key again, you can find 2 screens showing
all statistics and the whole historial by winning hand.
Press START (key 1) to exit the mode.
****************************************************************************************************
Game specific notes...
* Sonik Fighter
The game is encrypted, and runs with an obfuscated daughterboard in place of the CPU.
Even when I have the attract working, accepting coins, getting sounds and accurate inputs,
the game is still not working. Once coined, there's no way to start a game.
The PPI0 port B, D5 input line behaves like a reset, when the Attract/Girls DSW is set OFF.
Need more investigation about...
Colors are wrong due to can't find a way to set the palette.
****************************************************************************************************
TODO:
- Proper M5M82C255 device emulation.
- Colors: Find the palette in Sonik Fighter.
***************************************************************************************************/
#define MASTER_CLOCK XTAL_12MHz /* confirmed */
#include "emu.h"
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
#include "machine/i8255.h"
#include "machine/nvram.h"
#include <algorithm>
class skylncr_state : public driver_device
{
public:
skylncr_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_reeltiles_1_ram(*this, "reeltiles_1_ram"),
m_reeltiles_2_ram(*this, "reeltiles_2_ram"),
m_reeltiles_3_ram(*this, "reeltiles_3_ram"),
m_reeltiles_4_ram(*this, "reeltiles_4_ram"),
m_reeltileshigh_1_ram(*this, "rthigh_1_ram"),
m_reeltileshigh_2_ram(*this, "rthigh_2_ram"),
m_reeltileshigh_3_ram(*this, "rthigh_3_ram"),
m_reeltileshigh_4_ram(*this, "rthigh_4_ram"),
m_reelscroll1(*this, "reelscroll1"),
m_reelscroll2(*this, "reelscroll2"),
m_reelscroll3(*this, "reelscroll3"),
m_reelscroll4(*this, "reelscroll4"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_generic_paletteram_8(*this, "paletteram"),
m_generic_paletteram2_8(*this, "paletteram2") { }
tilemap_t *m_tmap;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_colorram;
required_shared_ptr<UINT8> m_reeltiles_1_ram;
required_shared_ptr<UINT8> m_reeltiles_2_ram;
required_shared_ptr<UINT8> m_reeltiles_3_ram;
required_shared_ptr<UINT8> m_reeltiles_4_ram;
required_shared_ptr<UINT8> m_reeltileshigh_1_ram;
required_shared_ptr<UINT8> m_reeltileshigh_2_ram;
required_shared_ptr<UINT8> m_reeltileshigh_3_ram;
required_shared_ptr<UINT8> m_reeltileshigh_4_ram;
tilemap_t *m_reel_1_tilemap;
tilemap_t *m_reel_2_tilemap;
tilemap_t *m_reel_3_tilemap;
tilemap_t *m_reel_4_tilemap;
required_shared_ptr<UINT8> m_reelscroll1;
required_shared_ptr<UINT8> m_reelscroll2;
required_shared_ptr<UINT8> m_reelscroll3;
required_shared_ptr<UINT8> m_reelscroll4;
UINT8 m_nmi_enable;
int m_color;
int m_color2;
DECLARE_WRITE8_MEMBER(skylncr_videoram_w);
DECLARE_WRITE8_MEMBER(skylncr_colorram_w);
DECLARE_WRITE8_MEMBER(reeltiles_1_w);
DECLARE_WRITE8_MEMBER(reeltiles_2_w);
DECLARE_WRITE8_MEMBER(reeltiles_3_w);
DECLARE_WRITE8_MEMBER(reeltiles_4_w);
DECLARE_WRITE8_MEMBER(reeltileshigh_1_w);
DECLARE_WRITE8_MEMBER(reeltileshigh_2_w);
DECLARE_WRITE8_MEMBER(reeltileshigh_3_w);
DECLARE_WRITE8_MEMBER(reeltileshigh_4_w);
DECLARE_WRITE8_MEMBER(skylncr_paletteram_w);
DECLARE_WRITE8_MEMBER(skylncr_paletteram2_w);
DECLARE_WRITE8_MEMBER(reelscroll1_w);
DECLARE_WRITE8_MEMBER(reelscroll2_w);
DECLARE_WRITE8_MEMBER(reelscroll3_w);
DECLARE_WRITE8_MEMBER(reelscroll4_w);
DECLARE_WRITE8_MEMBER(skylncr_coin_w);
DECLARE_READ8_MEMBER(ret_ff);
DECLARE_WRITE8_MEMBER(skylncr_nmi_enable_w);
DECLARE_DRIVER_INIT(skylncr);
DECLARE_DRIVER_INIT(sonikfig);
TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_reel_1_tile_info);
TILE_GET_INFO_MEMBER(get_reel_2_tile_info);
TILE_GET_INFO_MEMBER(get_reel_3_tile_info);
TILE_GET_INFO_MEMBER(get_reel_4_tile_info);
virtual void video_start() override;
UINT32 screen_update_skylncr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(skylncr_vblank_interrupt);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_shared_ptr<UINT8> m_generic_paletteram_8;
optional_shared_ptr<UINT8> m_generic_paletteram2_8;
};
/**************************************
* Video Hardware *
**************************************/
WRITE8_MEMBER(skylncr_state::skylncr_videoram_w)
{
m_videoram[offset] = data;
m_tmap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::skylncr_colorram_w)
{
m_colorram[offset] = data;
m_tmap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(skylncr_state::get_tile_info)
{
UINT16 code = m_videoram[ tile_index ] + (m_colorram[ tile_index ] << 8);
int pal = (code & 0x8000) >> 15;
SET_TILE_INFO_MEMBER(0, code, pal^1, TILE_FLIPYX( 0 ));
}
TILE_GET_INFO_MEMBER(skylncr_state::get_reel_1_tile_info)
{
UINT16 code = m_reeltiles_1_ram[ tile_index ] + (m_reeltileshigh_1_ram[ tile_index ] << 8);
int pal = (code & 0x8000) >> 15;
SET_TILE_INFO_MEMBER(1, code&0x7fff, pal^1, TILE_FLIPYX( 0 ));
}
TILE_GET_INFO_MEMBER(skylncr_state::get_reel_2_tile_info)
{
UINT16 code = m_reeltiles_2_ram[ tile_index ] + (m_reeltileshigh_2_ram[ tile_index ] << 8);
int pal = (code & 0x8000) >> 15;
SET_TILE_INFO_MEMBER(1, code, pal^1, TILE_FLIPYX( 0 ));
}
TILE_GET_INFO_MEMBER(skylncr_state::get_reel_3_tile_info)
{
UINT16 code = m_reeltiles_3_ram[ tile_index ] + (m_reeltileshigh_3_ram[ tile_index ] << 8);
int pal = (code & 0x8000) >> 15;
SET_TILE_INFO_MEMBER(1, code, pal^1, TILE_FLIPYX( 0 ));
}
TILE_GET_INFO_MEMBER(skylncr_state::get_reel_4_tile_info)
{
UINT16 code = m_reeltiles_4_ram[ tile_index ] + (m_reeltileshigh_4_ram[ tile_index ] << 8);
int pal = (code & 0x8000) >> 15;
SET_TILE_INFO_MEMBER(1, code, pal^1, TILE_FLIPYX( 0 ));
}
void skylncr_state::video_start()
{
m_tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skylncr_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 0x40, 0x20 );
m_reel_1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skylncr_state::get_reel_1_tile_info),this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 );
m_reel_2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skylncr_state::get_reel_2_tile_info),this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 );
m_reel_3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skylncr_state::get_reel_3_tile_info),this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 );
m_reel_4_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(skylncr_state::get_reel_4_tile_info),this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 );
m_reel_2_tilemap->set_scroll_cols(0x40);
m_reel_3_tilemap->set_scroll_cols(0x40);
m_reel_4_tilemap->set_scroll_cols(0x40);
m_reel_2_tilemap->set_transparent_pen(0);
m_reel_3_tilemap->set_transparent_pen(0);
m_reel_4_tilemap->set_transparent_pen(0);
m_tmap->set_transparent_pen(0);
}
UINT32 skylncr_state::screen_update_skylncr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int i;
bitmap.fill(0, cliprect);
m_reel_1_tilemap->draw(screen, bitmap, cliprect, 0, 0);
// are these hardcoded, or registers?
const rectangle visible1(0*8, (20+48)*8-1, 4*8, (4+7)*8-1);
const rectangle visible2(0*8, (20+48)*8-1, 12*8, (12+7)*8-1);
const rectangle visible3(0*8, (20+48)*8-1, 20*8, (20+7)*8-1);
for (i= 0;i < 64;i++)
{
m_reel_2_tilemap->set_scrolly(i, m_reelscroll2[i]);
m_reel_3_tilemap->set_scrolly(i, m_reelscroll3[i]);
m_reel_4_tilemap->set_scrolly(i, m_reelscroll4[i]);
}
m_reel_2_tilemap->draw(screen, bitmap, visible1, 0, 0);
m_reel_3_tilemap->draw(screen, bitmap, visible2, 0, 0);
m_reel_4_tilemap->draw(screen, bitmap, visible3, 0, 0);
m_tmap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
WRITE8_MEMBER(skylncr_state::reeltiles_1_w)
{
m_reeltiles_1_ram[offset] = data;
m_reel_1_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltiles_2_w)
{
m_reeltiles_2_ram[offset] = data;
m_reel_2_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltiles_3_w)
{
m_reeltiles_3_ram[offset] = data;
m_reel_3_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltiles_4_w)
{
m_reeltiles_4_ram[offset] = data;
m_reel_4_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltileshigh_1_w)
{
m_reeltileshigh_1_ram[offset] = data;
m_reel_1_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltileshigh_2_w)
{
m_reeltileshigh_2_ram[offset] = data;
m_reel_2_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltileshigh_3_w)
{
m_reeltileshigh_3_ram[offset] = data;
m_reel_3_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(skylncr_state::reeltileshigh_4_w)
{
m_reeltileshigh_4_ram[offset] = data;
m_reel_4_tilemap->mark_tile_dirty(offset);
}
// FIXME: this is a VGA-style RAMDAC, so use one
// instead of this custom implementation
WRITE8_MEMBER(skylncr_state::skylncr_paletteram_w)
{
if (offset == 0)
{
m_color = data;
}
else
{
int r,g,b;
m_generic_paletteram_8[m_color] = data;
r = m_generic_paletteram_8[(m_color/3 * 3) + 0];
g = m_generic_paletteram_8[(m_color/3 * 3) + 1];
b = m_generic_paletteram_8[(m_color/3 * 3) + 2];
r = (r << 2) | (r >> 4);
g = (g << 2) | (g >> 4);
b = (b << 2) | (b >> 4);
m_palette->set_pen_color(m_color / 3, rgb_t(r, g, b));
m_color = (m_color + 1) % (0x100 * 3);
}
}
WRITE8_MEMBER(skylncr_state::skylncr_paletteram2_w)
{
if (offset == 0)
{
m_color2 = data;
}
else
{
int r,g,b;
m_generic_paletteram2_8[m_color2] = data;
r = m_generic_paletteram2_8[(m_color2/3 * 3) + 0];
g = m_generic_paletteram2_8[(m_color2/3 * 3) + 1];
b = m_generic_paletteram2_8[(m_color2/3 * 3) + 2];
r = (r << 2) | (r >> 4);
g = (g << 2) | (g >> 4);
b = (b << 2) | (b >> 4);
m_palette->set_pen_color(0x100 + m_color2 / 3, rgb_t(r, g, b));
m_color2 = (m_color2 + 1) % (0x100 * 3);
}
}
WRITE8_MEMBER(skylncr_state::reelscroll1_w)
{
m_reelscroll1[offset] = data;
}
WRITE8_MEMBER(skylncr_state::reelscroll2_w)
{
m_reelscroll2[offset] = data;
}
WRITE8_MEMBER(skylncr_state::reelscroll3_w)
{
m_reelscroll3[offset] = data;
}
WRITE8_MEMBER(skylncr_state::reelscroll4_w)
{
m_reelscroll4[offset] = data;
}
/************************************
* Other Handlers *
************************************/
WRITE8_MEMBER(skylncr_state::skylncr_coin_w)
{
machine().bookkeeping().coin_counter_w(0, data & 0x04);
}
READ8_MEMBER(skylncr_state::ret_ff)
{
return 0xff;
}
#ifdef UNUSED_FUNCTION
READ8_MEMBER(skylncr_state::ret_00)
{
return 0x00;
}
#endif
WRITE8_MEMBER(skylncr_state::skylncr_nmi_enable_w)
{
m_nmi_enable = data & 0x10;
}
/**************************************
* Memory Map *
**************************************/
static ADDRESS_MAP_START( mem_map_skylncr, AS_PROGRAM, 8, skylncr_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(skylncr_videoram_w ) AM_SHARE("videoram")
AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(skylncr_colorram_w ) AM_SHARE("colorram")
AM_RANGE(0x9800, 0x99ff) AM_RAM_WRITE(reeltiles_1_w ) AM_SHARE("reeltiles_1_ram")
AM_RANGE(0x9a00, 0x9bff) AM_RAM_WRITE(reeltiles_2_w ) AM_SHARE("reeltiles_2_ram")
AM_RANGE(0x9c00, 0x9dff) AM_RAM_WRITE(reeltiles_3_w ) AM_SHARE("reeltiles_3_ram")
AM_RANGE(0x9e00, 0x9fff) AM_RAM_WRITE(reeltiles_4_w ) AM_SHARE("reeltiles_4_ram")
AM_RANGE(0xa000, 0xa1ff) AM_RAM_WRITE(reeltileshigh_1_w ) AM_SHARE("rthigh_1_ram")
AM_RANGE(0xa200, 0xa3ff) AM_RAM_WRITE(reeltileshigh_2_w ) AM_SHARE("rthigh_2_ram")
AM_RANGE(0xa400, 0xa5ff) AM_RAM_WRITE(reeltileshigh_3_w ) AM_SHARE("rthigh_3_ram")
AM_RANGE(0xa600, 0xa7ff) AM_RAM_WRITE(reeltileshigh_4_w ) AM_SHARE("rthigh_4_ram")
AM_RANGE(0xaa55, 0xaa55) AM_READ(ret_ff )
AM_RANGE(0xb000, 0xb03f) AM_RAM_WRITE(reelscroll1_w) AM_SHARE("reelscroll1")
AM_RANGE(0xb040, 0xb07f) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb080, 0xb0bf) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb0c0, 0xb0ff) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb100, 0xb13f) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb140, 0xb17f) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb180, 0xb1bf) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb1c0, 0xb1ff) AM_RAM_WRITE(reelscroll1_w)
AM_RANGE(0xb200, 0xb23f) AM_RAM_WRITE(reelscroll2_w) AM_SHARE("reelscroll2")
AM_RANGE(0xb240, 0xb27f) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb280, 0xb2bf) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb2c0, 0xb2ff) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb300, 0xb33f) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb340, 0xb37f) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb380, 0xb3bf) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb3c0, 0xb3ff) AM_RAM_WRITE(reelscroll2_w)
AM_RANGE(0xb400, 0xb43f) AM_RAM_WRITE(reelscroll3_w) AM_SHARE("reelscroll3")
AM_RANGE(0xb440, 0xb47f) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb480, 0xb4bf) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb4c0, 0xb4ff) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb500, 0xb53f) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb540, 0xb57f) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb580, 0xb5bf) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb5c0, 0xb5ff) AM_RAM_WRITE(reelscroll3_w)
AM_RANGE(0xb600, 0xb63f) AM_RAM_WRITE(reelscroll4_w) AM_SHARE("reelscroll4")
AM_RANGE(0xb640, 0xb67f) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb680, 0xb6bf) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb6c0, 0xb6ff) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb700, 0xb73f) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb740, 0xb77f) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb780, 0xb7bf) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xb7c0, 0xb7ff) AM_RAM_WRITE(reelscroll4_w)
AM_RANGE(0xc000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map_skylncr, AS_IO, 8, skylncr_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* Input Ports */
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* Input Ports */
AM_RANGE(0x20, 0x20) AM_WRITE(skylncr_coin_w )
AM_RANGE(0x30, 0x31) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
AM_RANGE(0x31, 0x31) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x40, 0x41) AM_WRITE(skylncr_paletteram_w )
AM_RANGE(0x50, 0x51) AM_WRITE(skylncr_paletteram2_w )
AM_RANGE(0x70, 0x70) AM_WRITE(skylncr_nmi_enable_w )
ADDRESS_MAP_END
/***************************************
* Graphics Layouts *
***************************************/
static const gfx_layout layout8x8x8 =
{
8,8,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*0,8*1,
RGN_FRAC(1,2)+8*0,RGN_FRAC(1,2)+8*1,
8*2,8*3,
RGN_FRAC(1,2)+8*2,RGN_FRAC(1,2)+8*3
},
{ STEP8(0,8*4) },
8*8*4
};
static const gfx_layout layout8x8x8_alt = /* for sstar97 */
{
8,8,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*0,RGN_FRAC(1,2)+8*0,
8*1,RGN_FRAC(1,2)+8*1,
8*2,RGN_FRAC(1,2)+8*2,
8*3,RGN_FRAC(1,2)+8*3
},
{ STEP8(0,8*4) },
8*8*4
};
static const gfx_layout layout8x8x8_bdream97 = /* for bdream97 */
{
8,8,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*0,RGN_FRAC(1,2)+8*0,
RGN_FRAC(1,2)+8*1,8*1,
8*2,RGN_FRAC(1,2)+8*2,
RGN_FRAC(1,2)+8*3,8*3
},
{ STEP8(0,8*4) },
8*8*4
};
static const gfx_layout layout8x32x8 =
{
8,32,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*0, 8*1,
RGN_FRAC(1,2)+8*0, RGN_FRAC(1,2)+8*1,
8*2, 8*3,
RGN_FRAC(1,2)+8*2, RGN_FRAC(1,2)+8*3
},
{
STEP16(0,8*4),
STEP16(16*8*4,8*4)
},
8*32*8/2
};
/* this will decode the big x2 x3 'correctly' however, maybe they're
simply not meant to appear correct? */
static const gfx_layout layout8x32x8_rot =
{
8,32,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*0, 8*1,
RGN_FRAC(1,2)+8*1, RGN_FRAC(1,2)+8*0,
8*2, 8*3,
RGN_FRAC(1,2)+8*3, RGN_FRAC(1,2)+8*2
},
{
STEP16(0,8*4),
STEP16(16*8*4,8*4)
},
8*32*8/2
};
static const gfx_layout layout8x32x8_alt = /* for sstar97 */
{
8,32,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
RGN_FRAC(1,2)+8*1, 8*1,
8*0, RGN_FRAC(1,2)+8*0,
RGN_FRAC(1,2)+8*3, 8*3,
8*2, RGN_FRAC(1,2)+8*2
},
{
STEP16(0,8*4),
STEP16(16*8*4,8*4)
},
8*32*8/2
};
static const gfx_layout layout8x32x8_alt2 = /* for neraidov */
{
8,32,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
RGN_FRAC(1,2)+8*1, 8*1,
RGN_FRAC(1,2)+8*0, 8*0,
RGN_FRAC(1,2)+8*3, 8*3,
RGN_FRAC(1,2)+8*2, 8*2
},
{
STEP16(0,8*4),
STEP16(16*8*4,8*4)
},
8*32*8/2
};
static const gfx_layout layout8x32x8_bdream97 = /* for bdream97 */
{
8,32,
RGN_FRAC(1,2),
8,
{ STEP8(0,1) },
{
8*1, RGN_FRAC(1,2)+8*1,
8*0, RGN_FRAC(1,2)+8*0,
8*3, RGN_FRAC(1,2)+8*3,
8*2, RGN_FRAC(1,2)+8*2
},
{
STEP16(0,8*4),
STEP16(16*8*4,8*4)
},
8*32*8/2
};
/**************************************
* Graphics Decode *
**************************************/
static GFXDECODE_START( skylncr )
GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_rot, 0, 2 )
GFXDECODE_END
static GFXDECODE_START( neraidou )
GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt2, 0, 2 )
// GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 )
GFXDECODE_END
static GFXDECODE_START( sstar97 )
GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 )
GFXDECODE_END
static GFXDECODE_START( bdream97 )
GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_bdream97, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0, 2 )
GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0x100, 1 )
GFXDECODE_END
/***********************************
* Input Ports *
***********************************/
static INPUT_PORTS_START( skylncr )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* Settings */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" )
PORT_DIPSETTING( 0x11, "60%" )
PORT_DIPSETTING( 0x01, "70%" )
PORT_DIPSETTING( 0x10, "80%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" )
PORT_DIPSETTING( 0x0e, "75%" )
PORT_DIPSETTING( 0x0c, "78%" )
PORT_DIPSETTING( 0x0a, "81%" )
PORT_DIPSETTING( 0x08, "84%" )
PORT_DIPSETTING( 0x06, "87%" )
PORT_DIPSETTING( 0x04, "90%" )
PORT_DIPSETTING( 0x02, "93%" )
PORT_DIPSETTING( 0x00, "96%" )
PORT_DIPNAME( 0x20, 0x20, "Reels Speed" )
PORT_DIPSETTING( 0x20, "Slow" )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x40, 0x40, "Bonus Score" )
PORT_DIPSETTING( 0x40, "32" )
PORT_DIPSETTING( 0x00, "24" )
PORT_DIPNAME( 0x80, 0x00, "Key Out" )
PORT_DIPSETTING( 0x00, "x1" )
PORT_DIPSETTING( 0x80, "x100" )
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
PORT_DIPNAME( 0x18, 0x08, "Payout Limit" )
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x18, "1000" )
PORT_DIPSETTING( 0x10, "2000" )
PORT_DIPSETTING( 0x08, "5000" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" )
PORT_DIPSETTING( 0xc0, "60%" )
PORT_DIPSETTING( 0x80, "70%" )
PORT_DIPSETTING( 0x40, "80%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" )
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" )
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" )
PORT_DIPSETTING( 0xc0, "0" )
PORT_DIPSETTING( 0x80, "8" )
PORT_DIPSETTING( 0x40, "16" )
PORT_DIPSETTING( 0x00, "32" )
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x07, "Remote Credits" )
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" )
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" )
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" )
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" )
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" )
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" )
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" )
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" )
PORT_DIPNAME( 0x18, 0x00, "Max Bet" )
PORT_DIPSETTING( 0x18, "32" )
PORT_DIPSETTING( 0x10, "64" )
PORT_DIPSETTING( 0x08, "72" )
PORT_DIPSETTING( 0x00, "80" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( leader )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* Settings */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x11, 0x11, "Butterfly Max Mul" ) PORT_DIPLOCATION("DSW-A:!4,!5")
PORT_DIPSETTING( 0x11, "5" )
PORT_DIPSETTING( 0x01, "7" )
PORT_DIPSETTING( 0x10, "8" )
PORT_DIPSETTING( 0x00, "12" )
PORT_DIPNAME( 0x0e, 0x00, "Main Win Rate" ) PORT_DIPLOCATION("DSW-A:!6,!7,!8")
PORT_DIPSETTING( 0x0e, "55%" )
PORT_DIPSETTING( 0x0c, "60%" )
PORT_DIPSETTING( 0x0a, "65%" )
PORT_DIPSETTING( 0x08, "70%" )
PORT_DIPSETTING( 0x06, "75%" )
PORT_DIPSETTING( 0x04, "80%" )
PORT_DIPSETTING( 0x02, "85%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) PORT_DIPLOCATION("DSW-A:!3")
PORT_DIPSETTING( 0x20, "Slow" )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) PORT_DIPLOCATION("DSW-A:!2")
PORT_DIPSETTING( 0x40, "24" )
PORT_DIPSETTING( 0x00, "32" )
PORT_DIPNAME( 0x80, 0x00, "Key Out" ) PORT_DIPLOCATION("DSW-A:!1")
PORT_DIPSETTING( 0x00, "x1" )
PORT_DIPSETTING( 0x80, "x100" )
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("DSW-B:3")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
PORT_DIPNAME( 0x18, 0x18, "Refund Coin Limit" ) PORT_DIPLOCATION("DSW-B:4,5")
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x18, "1000" )
PORT_DIPSETTING( 0x10, "2000" )
PORT_DIPSETTING( 0x08, "5000" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) PORT_DIPLOCATION("DSW-B:7,8")
PORT_DIPSETTING( 0xc0, "15%" )
PORT_DIPSETTING( 0x80, "20%" )
PORT_DIPSETTING( 0x40, "25%" )
PORT_DIPSETTING( 0x00, "30%" )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) PORT_DIPLOCATION("DSW-D:1,2,3")
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" )
PORT_DIPNAME( 0x18, 0x00, "Credit Limit" ) PORT_DIPLOCATION("DSW-D:4,5")
PORT_DIPSETTING( 0x00, "120000" )
PORT_DIPSETTING( 0x08, "100000" )
PORT_DIPSETTING( 0x10, "80000" )
PORT_DIPSETTING( 0x18, "50000" )
PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) PORT_DIPLOCATION("DSW-D:6")
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) PORT_DIPLOCATION("DSW-D:7,8")
PORT_DIPSETTING( 0xc0, "8" )
PORT_DIPSETTING( 0x80, "16" )
PORT_DIPSETTING( 0x40, "32" )
PORT_DIPSETTING( 0x00, "64" )
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) PORT_DIPLOCATION("DSW-C:1,2,3")
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" )
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" )
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" )
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" )
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" )
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" )
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" )
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" )
PORT_DIPNAME( 0x18, 0x18, "High Bet Limit" ) PORT_DIPLOCATION("DSW-C:4,5")
PORT_DIPSETTING( 0x18, "32" )
PORT_DIPSETTING( 0x10, "50" )
PORT_DIPSETTING( 0x08, "72" )
PORT_DIPSETTING( 0x00, "96" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, "Coin Lock" ) PORT_DIPLOCATION("DSW-C:8")
PORT_DIPSETTING( 0x80, "Locked" )
PORT_DIPSETTING( 0x00, "Normal" )
INPUT_PORTS_END
static INPUT_PORTS_START( neraidou )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* Settings */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets
PORT_DIPSETTING( 0x01, "Rolla" )
PORT_DIPSETTING( 0x00, "Sky" )
PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" )
PORT_DIPSETTING( 0x0e, "91%" )
PORT_DIPSETTING( 0x0c, "92%" )
PORT_DIPSETTING( 0x0a, "93%" )
PORT_DIPSETTING( 0x08, "94%" )
PORT_DIPSETTING( 0x06, "95%" )
PORT_DIPSETTING( 0x04, "96%" )
PORT_DIPSETTING( 0x02, "97%" )
PORT_DIPSETTING( 0x00, "98%" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Reels Speed" )
PORT_DIPSETTING( 0x20, "Slow" )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" )
PORT_DIPSETTING( 0x40, "20" )
PORT_DIPSETTING( 0x00, "40" )
PORT_DIPNAME( 0x80, 0x00, "Key Out" )
PORT_DIPSETTING( 0x00, "x1" )
PORT_DIPSETTING( 0x80, "x100" )
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" )
PORT_DIPSETTING( 0xc0, "25%" )
PORT_DIPSETTING( 0x80, "30%" )
PORT_DIPSETTING( 0x40, "40%" )
PORT_DIPSETTING( 0x00, "50%" )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" )
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" )
PORT_DIPNAME( 0x18, 0x18, "Credit Limit" )
PORT_DIPSETTING( 0x00, "120000" )
PORT_DIPSETTING( 0x08, "100000" )
PORT_DIPSETTING( 0x10, "80000" )
PORT_DIPSETTING( 0x18, "50000" )
PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" )
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" )
PORT_DIPSETTING( 0xc0, "8" )
PORT_DIPSETTING( 0x80, "16" )
PORT_DIPSETTING( 0x40, "32" )
PORT_DIPSETTING( 0x00, "64" )
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x07, "Remote Credits" )
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" )
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" )
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" )
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" )
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" )
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" )
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" )
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" )
PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" )
PORT_DIPSETTING( 0x18, "104" )
PORT_DIPSETTING( 0x10, "120" )
PORT_DIPSETTING( 0x08, "160" )
PORT_DIPSETTING( 0x00, "240" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Bonus? (Left Side)" )
PORT_DIPSETTING( 0x80, "x3" )
PORT_DIPSETTING( 0x00, "No Bonus" )
INPUT_PORTS_END
static INPUT_PORTS_START( gallag50 )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* Settings */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets
PORT_DIPSETTING( 0x01, "Rolla" )
PORT_DIPSETTING( 0x00, "Sky" )
PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" )
PORT_DIPSETTING( 0x0e, "91%" )
PORT_DIPSETTING( 0x0c, "92%" )
PORT_DIPSETTING( 0x0a, "93%" )
PORT_DIPSETTING( 0x08, "94%" )
PORT_DIPSETTING( 0x06, "95%" )
PORT_DIPSETTING( 0x04, "96%" )
PORT_DIPSETTING( 0x02, "97%" )
PORT_DIPSETTING( 0x00, "98%" )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "Reels Speed" )
PORT_DIPSETTING( 0x20, "Slow" )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" )
PORT_DIPSETTING( 0x40, "24" )
PORT_DIPSETTING( 0x00, "32" )
PORT_DIPNAME( 0x80, 0x00, "Key Out" )
PORT_DIPSETTING( 0x00, "x1" )
PORT_DIPSETTING( 0x80, "x100" )
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
PORT_DIPNAME( 0x08, 0x00, "Rolla GFX" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, "Title" )
PORT_DIPSETTING( 0x10, "Petalouda (Greek for Butterfly)" )
PORT_DIPSETTING( 0x00, "Gallag" )
PORT_DIPNAME( 0x20, 0x20, "Alt GFX Decode (For different HW)" ) // could be a mix with 08 'Rolla GFX'
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" )
PORT_DIPSETTING( 0xc0, "15%" )
PORT_DIPSETTING( 0x80, "20%" )
PORT_DIPSETTING( 0x40, "25%" )
PORT_DIPSETTING( 0x00, "30%" )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" )
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" )
PORT_DIPNAME( 0x18, 0x18, "Credit Limit" )
PORT_DIPSETTING( 0x00, "120000" )
PORT_DIPSETTING( 0x08, "100000" )
PORT_DIPSETTING( 0x10, "80000" )
PORT_DIPSETTING( 0x18, "50000" )
PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" )
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" )
PORT_DIPSETTING( 0xc0, "8" )
PORT_DIPSETTING( 0x80, "16" )
PORT_DIPSETTING( 0x40, "32" )
PORT_DIPSETTING( 0x00, "64" )
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x07, "Remote Credits" )
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" )
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" )
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" )
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" )
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" )
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" )
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" )
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" )
PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" )
PORT_DIPSETTING( 0x18, "32" )
PORT_DIPSETTING( 0x10, "50" )
PORT_DIPSETTING( 0x08, "72" )
PORT_DIPSETTING( 0x00, "99" )
PORT_DIPNAME( 0x20, 0x00, "Rolla HW" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, "Unknown Feature" )
PORT_DIPSETTING( 0x80, "Full Cutted" )
PORT_DIPSETTING( 0x00, "Full Open" )
INPUT_PORTS_END
static INPUT_PORTS_START( sstar97 )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) /* Settings */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" )
PORT_DIPSETTING( 0x11, "60%" )
PORT_DIPSETTING( 0x01, "70%" )
PORT_DIPSETTING( 0x10, "80%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_DIPNAME( 0x0e, 0x0e, "Special Bonus Appearance (per 1000)" )
PORT_DIPSETTING( 0x0e, "5" )
PORT_DIPSETTING( 0x0c, "6" )
PORT_DIPSETTING( 0x0a, "7" )
PORT_DIPSETTING( 0x08, "8" )
PORT_DIPSETTING( 0x06, "9" )
PORT_DIPSETTING( 0x04, "10" )
PORT_DIPSETTING( 0x02, "11" )
PORT_DIPSETTING( 0x00, "12" )
PORT_DIPNAME( 0x20, 0x20, "Reels Speed" )
PORT_DIPSETTING( 0x20, "Slow" )
PORT_DIPSETTING( 0x00, "Fast" )
PORT_DIPNAME( 0x40, 0x40, "Bonus Score" )
PORT_DIPSETTING( 0x00, "24" )
PORT_DIPSETTING( 0x40, "32" )
PORT_DIPNAME( 0x80, 0x00, "Key Out" )
PORT_DIPSETTING( 0x00, "x1" )
PORT_DIPSETTING( 0x80, "x100" )
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x03, 0x03, "Main Game Percentage" )
PORT_DIPSETTING( 0x03, "60%" )
PORT_DIPSETTING( 0x02, "70%" )
PORT_DIPSETTING( 0x01, "80%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
PORT_DIPNAME( 0x18, 0x18, "Payout Limit" )
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x18, "1000" )
PORT_DIPSETTING( 0x10, "2000" )
PORT_DIPSETTING( 0x08, "5000" )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" )
PORT_DIPSETTING( 0xc0, "60%" )
PORT_DIPSETTING( 0x80, "70%" )
PORT_DIPSETTING( 0x40, "80%" )
PORT_DIPSETTING( 0x00, "90%" )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" )
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" )
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" )
PORT_DIPNAME( 0x18, 0x18, "Base Bonus (Bonus Bottom)" )
PORT_DIPSETTING( 0x18, "200" )
PORT_DIPSETTING( 0x10, "400" )
PORT_DIPSETTING( 0x08, "600" )
PORT_DIPSETTING( 0x00, "800" )
PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" )
PORT_DIPSETTING( 0x20, "10000" )
PORT_DIPSETTING( 0x00, "20000" )
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" )
PORT_DIPSETTING( 0xc0, "0" )
PORT_DIPSETTING( 0x80, "8" )
PORT_DIPSETTING( 0x40, "16" )
PORT_DIPSETTING( 0x00, "32" )
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x07, "Remote Credits" )
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" )
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" )
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" )
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" )
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" )
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" )
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" )
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" )
PORT_DIPNAME( 0x18, 0x18, "Max Bet" )
PORT_DIPSETTING( 0x18, "32" )
PORT_DIPSETTING( 0x10, "64" )
PORT_DIPSETTING( 0x08, "72" )
PORT_DIPSETTING( 0x00, "80" )
PORT_DIPNAME( 0xe0, 0xe0, "Super Star Appearance (per 1000)" )
PORT_DIPSETTING( 0xe0, "6" )
PORT_DIPSETTING( 0xc0, "8" )
PORT_DIPSETTING( 0xa0, "10" )
PORT_DIPSETTING( 0x80, "12" )
PORT_DIPSETTING( 0x60, "14" )
PORT_DIPSETTING( 0x40, "16" )
PORT_DIPSETTING( 0x20, "18" )
PORT_DIPSETTING( 0x00, "20" )
INPUT_PORTS_END
static INPUT_PORTS_START( sonikfig )
PORT_START("IN1") /* $00 (PPI0 port A) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN1-02")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN1-08")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN1-20")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN1-40")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN1-80")
PORT_START("IN2") /* $01 (PPI0 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-02")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-08")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") // OK
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Reset #2") // Behaves like a reset, only when attract DSW is off...
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN2-40")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("IN2-80")
PORT_START("IN3") /* $11 (PPI1 port B) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // OK
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // OK
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // OK
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // OK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) PORT_NAME("IN3-40")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score")
PORT_START("IN4") /* $12 (PPI1 port C) */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-01")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset #1") // OK
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats")
PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings OK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-10")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-20")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-40")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
PORT_START("DSW1") /* $02 (PPI0 port C) */
PORT_DIPNAME( 0x11, 0x00, "D-UP Percentage" ) // OK
PORT_DIPSETTING( 0x11, "40%" ) // OK
PORT_DIPSETTING( 0x01, "50%" ) // OK
PORT_DIPSETTING( 0x10, "60%" ) // OK
PORT_DIPSETTING( 0x00, "70%" ) // OK
PORT_DIPNAME( 0x0e, 0x00, "Main Game Percentage" ) // OK
PORT_DIPSETTING( 0x0e, "55%" ) // OK
PORT_DIPSETTING( 0x0c, "60%" ) // OK
PORT_DIPSETTING( 0x0a, "65%" ) // OK
PORT_DIPSETTING( 0x08, "70%" ) // OK
PORT_DIPSETTING( 0x06, "75%" ) // OK
PORT_DIPSETTING( 0x04, "80%" ) // OK
PORT_DIPSETTING( 0x02, "85%" ) // OK
PORT_DIPSETTING( 0x00, "90%" ) // OK
PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) // OK
PORT_DIPSETTING( 0x20, "Low" ) // OK
PORT_DIPSETTING( 0x00, "Hi" ) // OK
PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) // OK
PORT_DIPSETTING( 0x40, "32" ) // OK
PORT_DIPSETTING( 0x00, "24" ) // OK
PORT_DIPNAME( 0x80, 0x00, "Payout" ) // OK
PORT_DIPSETTING( 0x00, "x1" ) // OK
PORT_DIPSETTING( 0x80, "x100" ) // OK
PORT_START("DSW2") /* $10 (PPI1 port A) */
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) // OK
PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK
PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) // OK
PORT_DIPNAME( 0x18, 0x18, "Payout Limit" ) // OK
PORT_DIPSETTING( 0x00, "0" ) // OK
PORT_DIPSETTING( 0x18, "1000" ) // OK
PORT_DIPSETTING( 0x10, "2000" ) // OK
PORT_DIPSETTING( 0x08, "5000" ) // OK
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3") /* AY8910 port A */
PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) // OK on test
PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) // OK on test, always 1c-1c in game...
PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) // OK on test, always 1c-1c in game...
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // This input should be turned ON, otherwise you can't enter the setup (F2)
PORT_DIPNAME( 0x10, 0x00, "Attract / Girls" ) // OK... Could be either or both. Need the game working to check it.
PORT_DIPSETTING( 0x10, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPNAME( 0x20, 0x20, "Max Bonus" ) // OK
PORT_DIPSETTING( 0x20, "10000" ) // OK
PORT_DIPSETTING( 0x00, "20000" ) // OK
PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) // OK
PORT_DIPSETTING( 0xc0, "0" ) // OK
PORT_DIPSETTING( 0x80, "8" ) // OK
PORT_DIPSETTING( 0x40, "16" ) // OK
PORT_DIPSETTING( 0x00, "32" ) // OK
PORT_START("DSW4") /* AY8910 port B */
PORT_DIPNAME( 0x07, 0x00, "Key In" ) // OK on test
PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) // OK on test, always 1 credit in game...
PORT_DIPNAME( 0x18, 0x00, "Max Bet" ) // OK
PORT_DIPSETTING( 0x18, "64" ) // OK
PORT_DIPSETTING( 0x10, "72" ) // OK
PORT_DIPSETTING( 0x08, "80" ) // OK
PORT_DIPSETTING( 0x00, "96" ) // OK
PORT_DIPNAME( 0x20, 0x00, "Lit" ) // OK
PORT_DIPSETTING( 0x20, DEF_STR( No ) ) // OK
PORT_DIPSETTING( 0x00, "Yes (50.000)" ) // OK, 50.000
PORT_DIPNAME( 0x40, 0x00, "Control" ) // OK
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) // OK
PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK
PORT_DIPNAME( 0x80, 0x00, "Reel Cover" ) // OK
PORT_DIPSETTING( 0x80, DEF_STR( No ) ) // OK
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // OK
INPUT_PORTS_END
// It runs in IM 0, thus needs an opcode on the data bus
INTERRUPT_GEN_MEMBER(skylncr_state::skylncr_vblank_interrupt)
{
if (m_nmi_enable) device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
/*************************************
* Machine Driver *
*************************************/
static MACHINE_CONFIG_START( skylncr, skylncr_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(mem_map_skylncr)
MCFG_CPU_IO_MAP(io_map_skylncr)
MCFG_CPU_VBLANK_INT_DRIVER("screen", skylncr_state, skylncr_vblank_interrupt)
MCFG_NVRAM_ADD_0FILL("nvram")
/* 1x M5M82C255, or 2x PPI8255 */
MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(IOPORT("IN1"))
MCFG_I8255_IN_PORTB_CB(IOPORT("IN2"))
MCFG_I8255_IN_PORTC_CB(IOPORT("DSW1"))
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2"))
MCFG_I8255_IN_PORTB_CB(IOPORT("IN3"))
MCFG_I8255_IN_PORTC_CB(IOPORT("IN4"))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
MCFG_SCREEN_UPDATE_DRIVER(skylncr_state, screen_update_skylncr)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", skylncr)
MCFG_PALETTE_ADD("palette", 0x200)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/8)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW3"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW4"))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( neraidou, skylncr )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_GFXDECODE_MODIFY("gfxdecode", neraidou)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( sstar97, skylncr )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_GFXDECODE_MODIFY("gfxdecode", sstar97)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bdream97, skylncr )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_GFXDECODE_MODIFY("gfxdecode", bdream97)
MACHINE_CONFIG_END
/**********************************
* ROM Load *
**********************************/
/*
Sky Lancer PCB Layout
---------------------
|--------------------------------------------|
_| ROM.U33 |
| |
| ROM.U32 |
| WF19054 |
| |
|_ |
| 6264 |
| |------| 6116 |
_| DSW4(8) |ACTEL | |
| DSW3(8) |A1010B| |
| DSW2(8) | | 6264 |
| DSW1(8) |------| |
| 6264 |
| M5M82C255 |
| |
| ROM.U35 |
|3.6V_BATT |
|_ 6116 Z80 12MHz |
|--------------------------------------------|
Notes:
Z80 @ 3.0MHz [12/4]
WF19054 = AY-3-8910 @ 1.5MHz [12/8]
*/
ROM_START( skylncr )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "27512.u35", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD( "574200.u32", 0x00000, 0x80000, CRC(b36f11fe) SHA1(1d8660ac1ca44e33976ac14210e4a3a201f8f3c4) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD( "574200.u33", 0x00000, 0x80000, CRC(19b25221) SHA1(2f32d337125a9fd0bc7f50713b05e564fd4f81b2) )
ROM_END
ROM_START( butrfly )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "butterfly.prg", 0x00000, 0x10000, CRC(b35b289c) SHA1(5a02bfb6e1fb608099b9f491c10795ef888a3b36) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) )
ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) )
ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) )
ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) )
ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) )
ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(a53daaef) SHA1(7b88bb986bd5e47576163d6999f8770c720c5bfc) )
ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) )
ROM_END
ROM_START( mbutrfly )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "magical_butterfy_x4_cleco.bin", 0x00000, 0x10000, CRC(2391778f) SHA1(f82ee9fb571547fda70867e091317779e2fe6e80) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "mb.u29", 0x00000, 0x20000, CRC(294b1cc5) SHA1(56f143d7d96b9ace0973d7001a13e7e55967e70a) )
ROM_LOAD16_BYTE( "mb.u31", 0x00001, 0x20000, CRC(c6f4e629) SHA1(97334c7dcfea9a405996c06a79cf3c34a360f807) )
ROM_LOAD16_BYTE( "mb.u33", 0x40000, 0x20000, CRC(72d22790) SHA1(d7a995e95f17bd4324f02aa16d23bfd78f95b5c5) )
ROM_LOAD16_BYTE( "mb.u35", 0x40001, 0x20000, CRC(fdaa2288) SHA1(199323c2bd2af0d9b1d254a330670e2845f21dd9) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "mb.u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) // identical to butterfly.
ROM_LOAD16_BYTE( "mb.u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) // identical to butterfly.
ROM_LOAD16_BYTE( "mb.u56", 0x40000, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // this one is straight fixed for reel tiles 6C-DF.
ROM_LOAD16_BYTE( "mb.u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // identical to butterfly.
ROM_END
ROM_START( gallag50 )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(355f8c3b) SHA1(d419fcb96bf936eaf7afb1a4b38a9e1d2a191686) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(adf3208a) SHA1(251e94efe90b8250cb8d75255bd5b58a6b7825a7) )
ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(24f20819) SHA1(a6fd1febe061f84e2bf3609bbf7c95912a04db70) )
ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(7ec63f5a) SHA1(47e91f21a674a949b0085cf2d8463da245328db3) )
ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(68c186d6) SHA1(6e8b5d489c4ba2a65dadf3a8cb3c07c2fedc1cb1) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(f3de59f4) SHA1(3b70a8677647a54333049a59cf01ba2c63c33d87) )
ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(f399751b) SHA1(2b7f3ed4181d654b67154b9587ee971ee881f35c) )
ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(7eec4edf) SHA1(897fbbcda8d1c42b3a59f0f2f68e295e054d062d) )
ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(afd0d391) SHA1(cc024d37cc23f94ef09a8a543cb1604e3f82c306) )
ROM_END
/*
Mad Zoo PCB Layout
------------------
|-----| |------| |---------------------------|
| |--| |--|ROM.U29 ROM.U52 |
| |
| DSW3(8) ROM.U31 ROM.U54 |
| KC89C72 |
| DSW4(8) ROM.U33 ROM.U56 |
|_ |
| PAL ROM.U35 ROM.U58 |
| |-------| |
_| |LATTICE| 6116 |
| 12MHz |1016 | |
| | | 6116 |
| 8255 |-------| |
| 6116 |
| DSW1(8) DSW2(8) |
| 8255 PAL ROM.U9 6116 |
| |
| 6264 Z80 6116 6116 |
|_ 6264 PAL BATTERY|
|--------------------------------------------|
Notes:
Z80 @ 3.0MHz [12/4]
KC89C72 = AY-3-8910 @ 1.5MHz [12/8]
*/
ROM_START( madzoo )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(44645bb8) SHA1(efaf88d63e09029aa023ddaf72dbd9ee1df10315) )
ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(58267dbc) SHA1(dd64e4b44d10e2d93ded255622891f058b2b8bb9) )
ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(6adb1c2c) SHA1(d782a778a34e6240a3ae09cd11124790864a9149) )
ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(a8d3a174) SHA1(b668bb1db1d27aff52e808aa9b972f24693161b3) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(dd1997ed) SHA1(9197a0b4a0b6284ae7eeb6364c87589f6f8a614d) )
ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(a654a6df) SHA1(54292953df1103ad830e1f40fdf96c48e0e13be7) )
ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(f2e3c394) SHA1(8e09516fe822d7c125be57b154c896ab3e024f98) )
ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(65d2015b) SHA1(121494a2684276276e2504d6f853718e93f4d458) )
ROM_END
ROM_START( leader )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "leader.prg", 0x00000, 0x10000, CRC(1a6e1129) SHA1(639f687e7720bab89628b377dca0475f17a35041) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "leadergfx1.dmp11", 0x00000, 0x20000, CRC(08acae31) SHA1(8b93066a2159e56607499fe1b1748a70a73a326c) )
ROM_LOAD16_BYTE( "leadergfx1.dmp21", 0x00001, 0x20000, CRC(88cd7a49) SHA1(f7187c7e3e584180de03998f376001f8d5966882) )
ROM_LOAD16_BYTE( "leadergfx1.dmp12", 0x40000, 0x20000, CRC(e57e145e) SHA1(3f6169ed1d907de3438787c02dc53c73ca6bdb73) )
ROM_LOAD16_BYTE( "leadergfx1.dmp22", 0x40001, 0x20000, CRC(e8368d29) SHA1(19e7d7d6e320f5f06e91013cb4c92b3987dbe24e) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "leadergfx2.dmp11", 0x00000, 0x20000, CRC(1d62edf4) SHA1(7ba43bf0d0d0cadd5c7fcbe940ecf3fab5c9127b) )
ROM_LOAD16_BYTE( "leadergfx2.dmp21", 0x00001, 0x20000, CRC(57b9d159) SHA1(ee98aea160653d55017bd893cc253d23c7b1faf4) )
ROM_LOAD16_BYTE( "leadergfx2.dmp12", 0x40000, 0x20000, CRC(91e73bf9) SHA1(90a9c1119ae05bbd66a4d3c2266ec02cc53969bd) )
ROM_LOAD16_BYTE( "leadergfx2.dmp22", 0x40001, 0x20000, CRC(04cc0118) SHA1(016ccbe7daf8c4676830aadcc906a64e2826d11a) )
ROM_END
ROM_START( neraidou )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "aepi.prg", 0x00000, 0x10000, CRC(7ac74830) SHA1(1e3322341711e329b40d94ac6ec25fbafb1d4d62) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "ldrbfl4.bin", 0x00000, 0x20000, CRC(9424c24d) SHA1(4fcf66b641db14b5096d0de75a134d2d35c6eb9b) )
ROM_LOAD16_BYTE( "ldrbfl2.bin", 0x00001, 0x20000, CRC(467dd56b) SHA1(5c64ee7ff2f4cc127b57342daf63c392c5155344) )
ROM_LOAD16_BYTE( "ldrbfl3.bin", 0x40000, 0x20000, CRC(810ac7f5) SHA1(f0e680a1813d01e4ca4da97c3c45e9373361620b) )
ROM_LOAD16_BYTE( "ldrbfl1.bin", 0x40001, 0x20000, CRC(c3bd4dc0) SHA1(2696321846e09359122447e6b60db29c5742a36a) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "ldrbfl8.bin", 0x00000, 0x20000, CRC(74992877) SHA1(f10f90f844198bba49fc3c74b1e8f40821cd1b56) )
ROM_LOAD16_BYTE( "ldrbfl6.bin", 0x00001, 0x20000, CRC(4b9fb756) SHA1(21d5abbc19a7e3277316d0ac616bdf0819e563b7) )
ROM_LOAD16_BYTE( "ldrbfl7.bin", 0x40000, 0x20000, CRC(a1842082) SHA1(0790c1c1c268fe13f2613e594fdf09daae19bbd0) )
ROM_LOAD16_BYTE( "ldrbfl5.bin", 0x40001, 0x20000, CRC(aa0a9b4e) SHA1(e09e6d3c5283ace1f1c6999cdc97e7dde9105338) )
ROM_END
/*
Super Star 97
Bordun International.
For amusement only (as seen in the title).
PCB looks similar to Sky Lancer.
1x M5M82C255ASP for I/O,
1x daughterboard with Z80 CPU,
1x AY-3-8910A
1x Xilinx XC2064-33 CPLD...
1x 12.000 Mhz crystal
2x UM70C171-66
1x HM6116LP-4
5x HM6116L-120
Unfortunately, one extra ROM (u48) is blank.
Seems to be the one that store the palette at offset $C000.
BP 170 to see the palette registers...
*/
ROM_START( sstar97 )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "27256.u15", 0x0000, 0x8000, CRC(a5da4f92) SHA1(82ac70bd379649f130db017aa226d0247db0f3cd) )
ROM_LOAD( "unknown.u48", 0x8000, 0x8000, BAD_DUMP CRC(9f4c02e3) SHA1(05975184130ea7dd3bb5d32eff77b585bd53e6b5) ) // palette borrowed from other game
ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM).
ROM_LOAD16_BYTE( "bor_dun_4.u23", 0x00000, 0x20000, CRC(d0d0ead1) SHA1(00bfe691cb9020c5d7e21d80a1e059ea2155aad8) )
ROM_LOAD16_BYTE( "bor_dun_2.u25", 0x00001, 0x20000, CRC(2b0f07b5) SHA1(9bcde623e53697c4b68d2f083f6254596aee64eb) )
ROM_LOAD16_BYTE( "bor_dun_3.u24", 0x40000, 0x20000, CRC(3c7da3f1) SHA1(8098b33a779fb697984b97f2d7edb9874e6e19d9) )
ROM_LOAD16_BYTE( "bor_dun_1.u26", 0x40001, 0x20000, CRC(36efdca6) SHA1(e614fbba77e5c7a1e7a1d2970b4f945ee0468196) )
ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM).
ROM_LOAD16_BYTE( "bor_dun_8.u19", 0x00000, 0x20000, CRC(adf0b7ce) SHA1(41d9fb16eb20e1fd2960117b7e4ea23a97b88961) )
ROM_LOAD16_BYTE( "bor_dun_6.u21", 0x00001, 0x20000, CRC(37be2cbe) SHA1(78acda58aab605cb992c3b9fbaf18d38f768ed1a) )
ROM_LOAD16_BYTE( "bor_dun_7.u20", 0x40000, 0x20000, CRC(43908665) SHA1(41b9cee0723d9da6934ab7934012fb1625a8f080) )
ROM_LOAD16_BYTE( "bor_dun_5.u22", 0x40001, 0x20000, CRC(ca17a632) SHA1(d491310ccdbe9b59a1e607f9254646f20700d79d) )
ROM_END
/*
Butterfly Dream 97 / Hudie Meng 97
Game is encrypted and needs better decoded graphics.
*/
ROM_START( bdream97 )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "27c512_subboard.bin", 0x0000, 0x10000, CRC(b0056324) SHA1(8299198d5e7ed50967f380ba0fddff5a39eee857) )
ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 27010.
ROM_LOAD16_BYTE( "27c010.u20", 0x00000, 0x20000, CRC(df1fd438) SHA1(8da4d116e768a3c269a2031db6bf38a5b7707029) )
ROM_LOAD16_BYTE( "27c010.u22", 0x00001, 0x20000, CRC(e66910eb) SHA1(454dc47caf4ae9408c3d0b759f4a32d346f86ffe) )
ROM_LOAD16_BYTE( "27c010.u21", 0x40000, 0x20000, CRC(b984f5bd) SHA1(9a21b46d6d497271cd589e01af3f3143946980b1) )
ROM_LOAD16_BYTE( "27c010.u23", 0x40001, 0x20000, CRC(2b6e6fd7) SHA1(cf0c66c90c6ab3ebc69ebe1e4f29b69b72edfdc2) )
ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 27010.
ROM_LOAD16_BYTE( "27c010.u24", 0x00000, 0x20000, CRC(b77f3fc5) SHA1(63f7b46ed19f256a6d84624e191dc1719a57cbed) )
ROM_LOAD16_BYTE( "27c010.u26", 0x00001, 0x20000, CRC(27cd64ef) SHA1(6b39b2919aca967f72fa16cd61b1641d0fb98d88) )
ROM_LOAD16_BYTE( "27c010.u25", 0x40000, 0x20000, CRC(bdebdf35) SHA1(245247b23ddeded32519608f4696205bb5541ccc) )
ROM_LOAD16_BYTE( "27c010.u27", 0x40001, 0x20000, CRC(0a266de4) SHA1(0ff9ad793e77d5419bd446cb73d4968e42305353) )
ROM_END
/*
Sonik Fighter.
Greek Version By ZBOUNOS (Z GAMES).
Year 2000.
Multiple Butterfly type with naked girls.
+ new features and hold a pair.
+ jackpot.
+ tetris game?.
Program ROM is encrypted.
*/
ROM_START( sonikfig )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "subboard_27c512.bin", 0x00000, 0x10000, CRC(f9b5b03e) SHA1(3832a7d70b41052f9dca46faa6f311ccc5a817b7) )
ROM_REGION( 0x80000, "gfx1", 0 )
ROM_LOAD16_BYTE( "1__am27c100.u29", 0x00000, 0x20000, CRC(69824294) SHA1(a221ab3e5d50435c10e3cd4601cfda1c87038a74) )
ROM_LOAD16_BYTE( "2__am27c100.u31", 0x00001, 0x20000, CRC(5224ed08) SHA1(3ba9af7557f13bf31c529bff7b2b8cfd6e71552c) )
ROM_LOAD16_BYTE( "3__am27c100.u33", 0x40000, 0x20000, CRC(38fef15c) SHA1(00f7578bac395421fa3289748f85cf3b9d80e04b) )
ROM_LOAD16_BYTE( "4__am27c100.u35", 0x40001, 0x20000, CRC(6193d30d) SHA1(390b3f451224eb4236c6c921d34b25b702d366e0) )
ROM_REGION( 0x80000, "gfx2", 0 )
ROM_LOAD16_BYTE( "5__am27c100.u52", 0x00000, 0x20000, CRC(56921033) SHA1(25086b0f5978df04b28b60a30e271f4364112c96) )
ROM_LOAD16_BYTE( "6__am27c100.u54", 0x00001, 0x20000, CRC(72802c6c) SHA1(c552d438399fb8c983e995d5e78e591982ef96e5) )
ROM_LOAD16_BYTE( "7__am27c100.u56", 0x40000, 0x20000, CRC(90a09327) SHA1(3bb1150ec397627cc04b46d2bf07538c55e7f116) )
ROM_LOAD16_BYTE( "8__am27c100.u58", 0x40001, 0x20000, CRC(b02ed0ce) SHA1(ec8ab64210a1b10cdba5ee179e46fc8d6a1a67b6) )
ROM_END
/**********************************
* Driver Init *
**********************************/
DRIVER_INIT_MEMBER(skylncr_state, skylncr)
{
m_generic_paletteram_8.allocate(0x100 * 3);
m_generic_paletteram2_8.allocate(0x100 * 3);
}
DRIVER_INIT_MEMBER(skylncr_state, sonikfig)
/*
Encryption: For each 8 bytes group,
swap byte #1 with #4 and #3 with #6.
SWAPPED
/ \
00 01 02 03 04 05 06 07
\ /
SWAPPED
00 01 02 03 04 05 06 07
\ \ / /
\ X /
\ / \ /
\ / \ /
X X
/ \ / \
/ \ / \
/ X \
/ / \ \
00 04 02 06 01 05 03 07
*/
{
UINT8 *const ROM = memregion("maincpu")->base();
for (unsigned x = 0; x < 0x10000; x += 8)
{
std::swap(ROM[x + 1], ROM[x + 4]);
std::swap(ROM[x + 3], ROM[x + 6]);
}
m_generic_paletteram_8.allocate(0x100 * 3);
m_generic_paletteram2_8.allocate(0x100 * 3);
}
/****************************************************
* Game Drivers *
****************************************************/
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
GAME( 1995, skylncr, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Sky Lancer (Bordun, version U450C)", 0 )
GAME( 1995, butrfly, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Butterfly Video Game (version U350C)", 0 )
GAME( 1999, mbutrfly, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Magical Butterfly (version U350C, encrypted)", MACHINE_NOT_WORKING )
GAME( 1995, madzoo, 0, skylncr, skylncr, skylncr_state, skylncr, ROT0, "Bordun International", "Mad Zoo (version U450C)", 0 )
GAME( 1995, leader, 0, skylncr, leader, skylncr_state, skylncr, ROT0, "bootleg", "Leader (version Z 2E, Greece)", 0 )
GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, skylncr, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", 0 )
GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, skylncr, ROT0, "bootleg", "Neraidoula (Fairy Butterfly)", 0 )
GAME( 199?, sstar97, 0, sstar97, sstar97, skylncr_state, skylncr, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", 0 )
GAME( 199?, bdream97, 0, bdream97, skylncr, skylncr_state, skylncr, ROT0, "bootleg", "Butterfly Dream 97 / Hudie Meng 97", MACHINE_NOT_WORKING )
GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING )