diff options
Diffstat (limited to 'src/mame/drivers/subsino.cpp')
-rw-r--r-- | src/mame/drivers/subsino.cpp | 3918 |
1 files changed, 3918 insertions, 0 deletions
diff --git a/src/mame/drivers/subsino.cpp b/src/mame/drivers/subsino.cpp new file mode 100644 index 00000000000..e84595b1302 --- /dev/null +++ b/src/mame/drivers/subsino.cpp @@ -0,0 +1,3918 @@ +// license:BSD-3-Clause +// copyright-holders:Luca Elia, David Haywood, Angelo Salese, Roberto Fresca +/*************************************************************************** + + -= Subsino's Gambling Games =- + + Driver by Luca Elia (l.elia@tin.it) + Additional work by David Haywood, Angelo Salese and Roberto Fresca. + + + CPU: Black epoxy box containing: + 1x CXK58257M (32768 x 8-Bit) High Speed CMOS SRAM. + 1x HD647180X0P6, HD643180X0P6 or HD641180X0P6 Z180-CPU. + 1x X-TAL (unknown frequency). + 1x Battery. + + GFX: 1 Tilemap (8x8 tiles, no scrolling) + CUSTOM: 2 x SUBSINO SS9100, SUBSINO SS9101 + SOUND: M6295, YM2413 or YM3812 + OTHER: Battery + +To Do: + +- Remove ROM patches from smoto, stisub and tesorone, emulate the protection instead. +- Hopper emulation currently hooked up in stisub, tesorone and smoto. Add to others. + +**************************************************************************** + + Game Notes: + ---------- + + + * Victor5, Victor 21, Shark Party. + + To enter the bookkeeping mode press STATS (key 9). + Press START/DEAL (key 2) to exit. + + + * Treasure Island. + + To enter test mode, keep STATS/TEST (key 9) pressed during boot. + HOLD3 (key C) to increase the tune/sound number, START (key 2) to decrease it. + + To enter the bookkeeping mode press STATS/TEST (key 9). + Press START/TAKE (key 2) to exit. + + + * Poker Carnival (crsbingo) + + To adjust the game rate, press SETTINGS (key 0) and then use HOLD4 (key V) + to choose the individual game to set. Press HOLD5 (key B) to change value. + Press START/DEAL (key 2) to exit. + + To enter the bookkeeping mode press STATS (key 9). + Press START/DEAL (key 2) to exit. + + + * Super Rider, Super Moto + + To enter test mode, keep STATS/TEST (key 9) pressed during boot. + HOLD5 (key B) to select between VOICE <-> MUSIC. + HOLD4 (key V) to increase the tune/sound number, START (key 2) to decrease it. + + To enter the bookkeeping mode press STATS/TEST (key 9). + Press START/DEAL (key 2) to exit. + + +**************************************************************************** + + Updates: + + 2010-01-01 / 2010-01-16 + ----------------------- + + (general): + + - Lowered CPU clock to 1.5 MHz. + - Reworked former inputs. + - Added specific game and technical notes. + - Added lamps support. + - Cleaned-up a bit the driver. + + Victor 5: + + - Mapped the M6295 but commented out due to missing sample roms. + - Added keyin, keyout, payout, stats and settings inputs. + - Added coin/keyin/keyout counters. + - Limited the bet and coin pulses to avoid repeats and coin jams. + - Added complete coinage and keyin DIP switches. + - Added main game and double-up rates DIP switches. + - Added minimum bet DIP switches. + - Added maximum bet DIP switches. + - Added attract music DIP switch. + - Added button-lamps layout. + + Victor 21: + + - Mapped the M6295 but commented out due to missing sample roms. + - Added bet x10, keyin, keyout, stats and settings inputs. + - Added coin/keyin/keyout/payout counters. + - Limited the bet and coin pulses to avoid repeats and coin jams. + - Added complete coinage and keyin DIP switches. + - Added main game rate DIP switches. + - Added minimum bet DIP switches. + - Added attract music DIP switch. + - Added button-lamps layout. + + Poker Carnival (crsbingo): + + - Added change card, keyin, keyout, stats and settings inputs. + - Added coin/keyin/keyout/payout counters. + - Limited the bet and coin pulses to avoid repeats and coin jams. + - Added complete coinage and keyin DIP switches. + - Added double-up rate DIP switches. + - Added minimum bet DIP switches. + - Added maximum bet DIP switches. + - Added cards graphics DIP switches. + - Added double-up type DIP switches. + - Added button-lamps layout. + + Super Rider, Super Moto: + + - Added stats and settings inputs. + - Added coin counters. + - Added main game and double-up rates DIP switches. + - Added double-up and control type DIP switches. + - Added coinage and demo sounds DIP switches. + - Added button-lamps layout. + + Shark Party: + + - Added stats and settings inputs. + - Added coin counters. + - Added main game and double-up rates DIP switches. + - Added double-up, coinage and demo sounds DIP switches. + - Added button-lamps layout. + + + 2010-02-03 + ---------- + + Treasure Island: + + - Added proper inputs. + - Added coin/keyin/keyout/payout counters. + - Limited the bet and coin pulses to avoid repeats and coin jams. + - Added complete coinage and keyin DIP switches. + - Added main game and double-up rates DIP switches. + - Added minimum bet DIP switches. + - Added maximum bet DIP switches. + - Added main game and double-up limit DIP switches. + - Added payout mode and auto take DIP switches. + - Added DIP locations as seen in the settings mode. + - Added demo sounds DIP switch. + - Created proper button-lamps layout. + - Added technical notes. + - Some clean-ups... + + + 2010-04-20 + ---------- + + Shark Party (English, Alpha license): + + - Created complete inputs from the scratch. + - Added coin/keyin/keyout counters. + - Added main game and double-up rates DIP switches. + - Added minimum bet DIP switches. + - Added maximum bet DIP switches. + - Added complete coinage and remote credits DIP switches. + - Added jokers and demo sounds DIP switches. + - Figured out and documented all the game outputs. + - Created proper button-lamps layout. + + Now the game is in full-working state. + + + 2010-04-22 + ---------- + + Treasure Bonus (Subsino) + + - Reworked and cleaned-up the inputs. + Most buttons have more than one single function. + - Added DIP locations. + - Figured out the following DIP Switches: + Complete Coinage (1/2/5/10/20/25/50/100). + Remote Credits (1/2/5/10/20/25/50/100). + Minimum Bet (1/8/16/32). + Max Bet (16/32/64/80). + Demo Sounds (Off/On). + Game Limit (10000/20000/30000/60000). + Double-Up (No/Yes). + Win Rate (84/86/88/90/92/94/96%). + Double-Up Level (0/1/2/3/4/5/6/7). + Double-Up Game (Dancers / Panties Colors / Cards / Seven-Bingo). + + - Fixed inverted functions and buggy inputs. + - Added lamps support. + - Created button-lamps layout. + - Remapped inputs to reflect the controls layout. This way is more + user-friendly since controls are straight with button-lamps. + - Added coin/keyin/keyout/payout counters. + - Removed the pulse limitation in the BET input. This allow it to work + as BET and STOP2 properly. + - Added technical notes. + + + 2010-10-12 + ---------- + + - Added Victor 6 (3 sets). + - Created proper inputs for all sets. + + + +***************************************************************************/ + +#include "emu.h" +#include "cpu/z180/z180.h" +#include "machine/i8255.h" +#include "machine/subsino.h" +#include "machine/ticket.h" +#include "sound/okim6295.h" +#include "sound/2413intf.h" +#include "sound/3812intf.h" + +#include "victor5.lh" +#include "victor21.lh" +#include "crsbingo.lh" +#include "sharkpy.lh" +#include "sharkpye.lh" +#include "smoto.lh" +#include "tisub.lh" +#include "stisub.lh" + +class subsino_state : public driver_device +{ +public: + subsino_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_colorram(*this, "colorram"), + m_videoram(*this, "videoram"), + m_reel3_scroll(*this, "reel3_scroll"), + m_reel2_scroll(*this, "reel2_scroll"), + m_reel1_scroll(*this, "reel1_scroll"), + m_reel1_ram(*this, "reel1_ram"), + m_reel2_ram(*this, "reel2_ram"), + m_reel3_ram(*this, "reel3_ram"), + m_stisub_out_c(*this, "stisub_out_c"), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette") { + } + + required_shared_ptr<UINT8> m_colorram; + required_shared_ptr<UINT8> m_videoram; + optional_shared_ptr<UINT8> m_reel3_scroll; + optional_shared_ptr<UINT8> m_reel2_scroll; + optional_shared_ptr<UINT8> m_reel1_scroll; + optional_shared_ptr<UINT8> m_reel1_ram; + optional_shared_ptr<UINT8> m_reel2_ram; + optional_shared_ptr<UINT8> m_reel3_ram; + optional_shared_ptr<UINT8> m_stisub_out_c; + + tilemap_t *m_tmap; + tilemap_t *m_reel1_tilemap; + tilemap_t *m_reel2_tilemap; + tilemap_t *m_reel3_tilemap; + int m_tiles_offset; + UINT8 m_out_c; + UINT8 *m_reel1_attr; + UINT8 *m_reel2_attr; + UINT8 *m_reel3_attr; + UINT8 m_flash_val; + UINT8 m_flash_packet; + UINT8 m_flash_packet_start; + int m_colordac_offs; + UINT8 *m_stisub_colorram; + + ticket_dispenser_device *m_hopper; + + DECLARE_WRITE8_MEMBER(subsino_tiles_offset_w); + DECLARE_WRITE8_MEMBER(subsino_videoram_w); + DECLARE_WRITE8_MEMBER(subsino_colorram_w); + DECLARE_WRITE8_MEMBER(subsino_reel1_ram_w); + DECLARE_WRITE8_MEMBER(subsino_reel2_ram_w); + DECLARE_WRITE8_MEMBER(subsino_reel3_ram_w); + DECLARE_WRITE8_MEMBER(subsino_out_a_w); + DECLARE_WRITE8_MEMBER(subsino_out_b_w); + DECLARE_READ8_MEMBER(flash_r); + DECLARE_WRITE8_MEMBER(flash_w); + DECLARE_READ8_MEMBER(hwcheck_r); + DECLARE_WRITE8_MEMBER(subsino_out_c_w); + DECLARE_WRITE8_MEMBER(colordac_w); + DECLARE_WRITE8_MEMBER(reel_scrollattr_w); + DECLARE_READ8_MEMBER(reel_scrollattr_r); + DECLARE_DRIVER_INIT(stisub); + DECLARE_DRIVER_INIT(tesorone); + DECLARE_DRIVER_INIT(tesorone230); + DECLARE_DRIVER_INIT(smoto20); + DECLARE_DRIVER_INIT(sharkpy); + DECLARE_DRIVER_INIT(smoto16); + DECLARE_DRIVER_INIT(crsbingo); + DECLARE_DRIVER_INIT(victor21); + DECLARE_DRIVER_INIT(victor5); + DECLARE_DRIVER_INIT(tisuba); + DECLARE_DRIVER_INIT(sharkpye); + DECLARE_DRIVER_INIT(tisub); + DECLARE_DRIVER_INIT(mtrainnv); + TILE_GET_INFO_MEMBER(get_tile_info); + TILE_GET_INFO_MEMBER(get_stisub_tile_info); + TILE_GET_INFO_MEMBER(get_subsino_reel1_tile_info); + TILE_GET_INFO_MEMBER(get_stisub_reel1_tile_info); + TILE_GET_INFO_MEMBER(get_subsino_reel2_tile_info); + TILE_GET_INFO_MEMBER(get_stisub_reel2_tile_info); + TILE_GET_INFO_MEMBER(get_subsino_reel3_tile_info); + TILE_GET_INFO_MEMBER(get_stisub_reel3_tile_info); + DECLARE_VIDEO_START(subsino); + DECLARE_PALETTE_INIT(subsino_2proms); + DECLARE_PALETTE_INIT(subsino_3proms); + DECLARE_VIDEO_START(subsino_reels); + DECLARE_VIDEO_START(stisub); + UINT32 screen_update_subsino(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_subsino_reels(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_stisub_reels(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + virtual void machine_start(); + required_device<cpu_device> m_maincpu; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; +}; + +void subsino_state::machine_start() +{ + m_hopper = machine().device<ticket_dispenser_device>("hopper"); +} + +/*************************************************************************** +* Video Hardware * +***************************************************************************/ + + +WRITE8_MEMBER(subsino_state::subsino_tiles_offset_w) +{ + m_tiles_offset = (data & 1) ? 0x1000: 0; + m_tmap->mark_tile_dirty(offset); +// popmessage("gfx %02x",data); +} + +WRITE8_MEMBER(subsino_state::subsino_videoram_w) +{ + m_videoram[offset] = data; + m_tmap->mark_tile_dirty(offset); +} + +WRITE8_MEMBER(subsino_state::subsino_colorram_w) +{ + m_colorram[offset] = data; + m_tmap->mark_tile_dirty(offset); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_tile_info) +{ + UINT16 code = m_videoram[ tile_index ] + (m_colorram[ tile_index ] << 8); + UINT16 color = (code >> 8) & 0x0f; + code = ((code & 0xf000) >> 4) + ((code & 0xff) >> 0); + code += m_tiles_offset; + SET_TILE_INFO_MEMBER(0, code, color, 0); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_stisub_tile_info) +{ + UINT16 code = m_videoram[ tile_index ] + (m_colorram[ tile_index ] << 8); + code&= 0x3fff; + SET_TILE_INFO_MEMBER(0, code, 0, 0); +} + + +VIDEO_START_MEMBER(subsino_state,subsino) +{ + m_tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8,8, 0x40,0x20 ); + m_tmap->set_transparent_pen(0 ); + m_tiles_offset = 0; +} + + + +WRITE8_MEMBER(subsino_state::subsino_reel1_ram_w) +{ + m_reel1_ram[offset] = data; + m_reel1_tilemap->mark_tile_dirty(offset); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_subsino_reel1_tile_info) +{ + int code = m_reel1_ram[tile_index]; + int colour = (m_out_c&0x7) + 8; + + SET_TILE_INFO_MEMBER(1, + code, + colour, + 0); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_stisub_reel1_tile_info) +{ + int code = m_reel1_ram[tile_index]; + int attr = m_reel1_attr[tile_index]; + + SET_TILE_INFO_MEMBER(1, + code | (attr << 8), + 0, + 0); +} + + +WRITE8_MEMBER(subsino_state::subsino_reel2_ram_w) +{ + m_reel2_ram[offset] = data; + m_reel2_tilemap->mark_tile_dirty(offset); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_subsino_reel2_tile_info) +{ + int code = m_reel2_ram[tile_index]; + int colour = (m_out_c&0x7) + 8; + + SET_TILE_INFO_MEMBER(1, + code, + colour, + 0); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_stisub_reel2_tile_info) +{ + int code = m_reel2_ram[tile_index]; + int attr = m_reel2_attr[tile_index]; + + SET_TILE_INFO_MEMBER(1, + code | (attr << 8), + 0, + 0); +} + +WRITE8_MEMBER(subsino_state::subsino_reel3_ram_w) +{ + m_reel3_ram[offset] = data; + m_reel3_tilemap->mark_tile_dirty(offset); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_subsino_reel3_tile_info) +{ + int code = m_reel3_ram[tile_index]; + int colour = (m_out_c&0x7) + 8; + + SET_TILE_INFO_MEMBER(1, + code, + colour, + 0); +} + +TILE_GET_INFO_MEMBER(subsino_state::get_stisub_reel3_tile_info) +{ + int code = m_reel3_ram[tile_index]; + int attr = m_reel3_attr[tile_index]; + + SET_TILE_INFO_MEMBER(1, + code | (attr << 8), + 0, + 0); +} + + +VIDEO_START_MEMBER(subsino_state,subsino_reels) +{ + VIDEO_START_CALL_MEMBER( subsino ); + + m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_subsino_reel1_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_subsino_reel2_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_subsino_reel3_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + + m_reel1_tilemap->set_scroll_cols(64); + m_reel2_tilemap->set_scroll_cols(64); + m_reel3_tilemap->set_scroll_cols(64); + +} + +VIDEO_START_MEMBER(subsino_state,stisub) +{ + m_tmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_stisub_tile_info),this), TILEMAP_SCAN_ROWS, 8,8, 0x40,0x20 ); + m_tmap->set_transparent_pen(0 ); + + m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_stisub_reel1_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_stisub_reel2_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(subsino_state::get_stisub_reel3_tile_info),this),TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + + m_reel1_tilemap->set_scroll_cols(64); + m_reel2_tilemap->set_scroll_cols(64); + m_reel3_tilemap->set_scroll_cols(64); + + m_out_c = 0x08; +} + + +UINT32 subsino_state::screen_update_subsino(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(0, cliprect); + m_tmap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + +UINT32 subsino_state::screen_update_subsino_reels(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int i; + bitmap.fill(0, cliprect); + + for (i= 0;i < 64;i++) + { + m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i]); + m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i]); + m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i]); + } + + if (m_out_c&0x08) + { + // are these hardcoded, or registers? + const rectangle visible1(0*8, (14+48)*8-1, 4*8, (4+7)*8-1); + const rectangle visible2(0*8, (14+48)*8-1, 10*8, (10+7)*8-1); + const rectangle visible3(0*8, (14+48)*8-1, 18*8, (18+7)*8-1); + + m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); + m_reel2_tilemap->draw(screen, bitmap, visible2, 0, 0); + m_reel3_tilemap->draw(screen, bitmap, visible3, 0, 0); + } + + m_tmap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + + +UINT32 subsino_state::screen_update_stisub_reels(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int i; + bitmap.fill(0, cliprect); + + if (m_reel1_attr) + { + m_reel1_tilemap->mark_all_dirty(); + m_reel2_tilemap->mark_all_dirty(); + m_reel3_tilemap->mark_all_dirty(); + } + + for (i= 0;i < 64;i++) + { + m_reel1_tilemap->set_scrolly(i, m_reel1_scroll[i]); + m_reel2_tilemap->set_scrolly(i, m_reel2_scroll[i]); + m_reel3_tilemap->set_scrolly(i, m_reel3_scroll[i]); + } + + if (m_out_c&0x08) + { + // areas based on d-up game in attract mode + const rectangle visible1(0, 511, 0, 87); + const rectangle visible2(0, 511, 88, 143); + const rectangle visible3(0, 511, 144, 223); + + m_reel1_tilemap->draw(screen, bitmap, visible1, 0, 0); + m_reel2_tilemap->draw(screen, bitmap, visible2, 0, 0); + m_reel3_tilemap->draw(screen, bitmap, visible3, 0, 0); + } + + m_tmap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + + + +PALETTE_INIT_MEMBER(subsino_state,subsino_2proms) +{ + const UINT8 *color_prom = memregion("proms")->base(); + int i,r,g,b,val; + int bit0,bit1,bit2; + + for (i = 0; i < 256; i++) + { + val = (color_prom[i+0x100]) | (color_prom[i+0x000]<<4); + + bit0 = 0; + bit1 = (val >> 6) & 0x01; + bit2 = (val >> 7) & 0x01; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + bit0 = (val >> 3) & 0x01; + bit1 = (val >> 4) & 0x01; + bit2 = (val >> 5) & 0x01; + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + bit0 = (val >> 0) & 0x01; + bit1 = (val >> 1) & 0x01; + bit2 = (val >> 2) & 0x01; + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + palette.set_pen_color(i, rgb_t(r, g, b)); + } +} + +PALETTE_INIT_MEMBER(subsino_state,subsino_3proms) +{ + const UINT8 *color_prom = memregion("proms")->base(); + int i,r,g,b,val; + int bit0,bit1,bit2; + + for (i = 0; i < 256; i++) + { + val = (color_prom[i+0x000]) | (color_prom[i+0x100]<<3) | (color_prom[i+0x200]<<6); + + bit0 = 0; + bit1 = (val >> 7) & 0x01; + bit2 = (val >> 6) & 0x01; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + bit0 = (val >> 5) & 0x01; + bit1 = (val >> 4) & 0x01; + bit2 = (val >> 3) & 0x01; + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + bit0 = (val >> 2) & 0x01; + bit1 = (val >> 1) & 0x01; + bit2 = (val >> 0) & 0x01; + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + palette.set_pen_color(i, rgb_t(r, g, b)); + } +} + + +/*************************************************************************** +* Lamps & other outputs. * +***************************************************************************/ + +WRITE8_MEMBER(subsino_state::subsino_out_a_w) +{ +/***** COIN PULSE: ***** + + + * Victor 5, Victor 21, Poker Carnival (crsbingo), + Shark Party (English, Alpha license), Treasure Bonus (Subsino). + + 7654 3210 + ---- ---x Coin pulse. + ---- --x- Key In pulse. + ---x ---- Key Out pulse. + --x- ---- Payout pulse. + + + * Treasure Island. + + 7654 3210 + ---- ---x Key In pulse. + ---- --x- Coin pulse. + ---x ---- Key Out pulse. + --x- ---- Payout pulse. + + + * Super Rider, Super Moto, Shark Party. + + 7654 3210 + ---- --x- Coin pulse. + +*/ + + output_set_lamp_value(8, (data) & 1); /* Lamp 8 */ + output_set_lamp_value(9, (data >> 1) & 1); /* Lamp 9 */ + output_set_lamp_value(10, (data >> 2) & 1); /* Lamp 10 */ + output_set_lamp_value(11, (data >> 3) & 1); /* Lamp 11 */ + output_set_lamp_value(12, (data >> 4) & 1); /* Lamp 12 */ + output_set_lamp_value(13, (data >> 5) & 1); /* Lamp 13 */ + output_set_lamp_value(14, (data >> 6) & 1); /* Lamp 14 */ + output_set_lamp_value(15, (data >> 7) & 1); /* Lamp 15 */ + + coin_counter_w( machine(), 0, data & 0x01 ); /* coin / keyin */ + coin_counter_w( machine(), 1, data & 0x02 ); /* keyin / coin */ + coin_counter_w( machine(), 2, data & 0x10 ); /* keyout */ + coin_counter_w( machine(), 3, data & 0x20 ); /* payout */ + + m_hopper->write(space, 0, (data & 0x0020) ? 0x80 : 0); // hopper motor + +// popmessage("Out A %02x",data); +} + +WRITE8_MEMBER(subsino_state::subsino_out_b_w) +{ +/***** LAMPS: ***** + + * Victor 5. + + 7654 3210 + ---- ---x HOLD2. + ---- --x- BET. + ---- -x-- ???. + ---- x--- START / TAKE. + ---x ---- HOLD1. + --x- ---- HOLD5 / SMALL. + -x-- ---- HOLD3 / HALF TAKE. + x--- ---- HOLD4 / BIG. + + + * Victor 21. + + 7654 3210 + ---- ---x DOUBLE (or SPLIT?). + ---- --x- BET. + ---- -x-- SPLIT (or DOUBLE?). + ---- x--- STAND. + ---x ---- ???. + --x- ---- DEAL / HIT. + -x-- ---- ???. + x--- ---- GAME OVER?. + + + * Treasure Island. + + 7654 3210 + ---- ---x HOLD1. + ---- --x- HOLD2 / BIG. + ---- -x-- ???. + ---- x--- BET. + ---x ---- DOUBLE / INFO. + --x- ---- START / TAKE. + -x-- ---- HOLD3 / SMALL. + x--- ---- ???. + + + * Poker Carnival (crsbingo). + + 7654 3210 + ---- ---x HOLD2 / DOUBLE. + ---- --x- BET. + ---- -x-- ???. + ---- x--- START / TAKE. + ---x ---- HOLD1. + --x- ---- HOLD5 / SMALL. + -x-- ---- HOLD3 / CHANGE. + x--- ---- HOLD4 / BIG. + + + * Super Rider, Super Moto. + + 7654 3210 + ---- ---x HOLD1 / SELECT. + ---- --x- HOLD2. + ---- -x-- ???. + ---- x--- BET. + ---x ---- HOLD3. + --x- ---- START / TAKE. + -x-- ---- HOLD4. + x--- ---- HOLD5. Also TEST button (bookkeeping) lamp is routed here. + + + * Shark Party. + + 7654 3210 + ---- ---x HOLD3. + ---- --x- HOLD4 / BIG. + ---- -x-- ???. + ---- x--- BET. + ---x ---- HOLD1 / DOUBLE. + --x- ---- START / TAKE. + -x-- ---- HOLD2. + x--- ---- HOLD5 / SMALL. + + + * Shark Party (English, Alpha license). + + 7654 3210 + ---- ---x ???. + ---- --x- HOLD3 / D-UP. + ---- -x-- START. + ---- x--- HOLD1 / BET. + ---x ---- ???. + --x- ---- HOLD2 / TAKE. + -x-- ---- ???. + x--- ---- HOLD4 & HOLD5. + + + * Treasure Bonus (Subsino). + + 7654 3210 + ---- ---x SMALL / RED / STOP3. + ---- --x- D-UP / INFO. + ---- -x-- START / STOP ALL. + ---- x--- BET / STOP2. + ---x ---- ???. + --x- ---- TAKE / STOP1. + -x-- ---- ???. + x--- ---- BIG / BLACK. + + + After seeing the button/lamps functions, I think that controls layout should be + arranged the following way: + + ________ ________ ________ ________ ________ __________ + | | | | | | | | | | | | + | D-UP | | TAKE | | BET | | SMALL | | BIG | | START | + | INFO | | STOP 1 | | STOP 2 | | STOP 3 | | | | STOP ALL | + |________| |________| |________| |________| |________| |__________| + + Key 'Z' Key 'X' Key 'C' Key 'V' Key 'B' Key 'N' + + Mapped to the above keys to be more user-friendly. + +*/ + + output_set_lamp_value(0, (data) & 1); /* Lamp 0 */ + output_set_lamp_value(1, (data >> 1) & 1); /* Lamp 1 */ + output_set_lamp_value(2, (data >> 2) & 1); /* Lamp 2 */ + output_set_lamp_value(3, (data >> 3) & 1); /* Lamp 3 */ + output_set_lamp_value(4, (data >> 4) & 1); /* Lamp 4 */ + output_set_lamp_value(5, (data >> 5) & 1); /* Lamp 5 */ + output_set_lamp_value(6, (data >> 6) & 1); /* Lamp 6 */ + output_set_lamp_value(7, (data >> 7) & 1); /* Lamp 7 */ + +// popmessage("Out B %02x",data); +} + + +/*************************************************************************** +* Memory Maps * +***************************************************************************/ + +static ADDRESS_MAP_START( srider_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x00000, 0x0bfff ) AM_ROM + + AM_RANGE( 0x0c000, 0x0cfff ) AM_RAM + + AM_RANGE( 0x0d000, 0x0d000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x0d001, 0x0d001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x0d002, 0x0d002 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x0d004, 0x0d004 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INB" ) + + AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE(subsino_out_b_w ) + AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE(subsino_out_a_w ) + + AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) + + AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) + + AM_RANGE( 0x0d018, 0x0d018 ) AM_DEVWRITE("oki", okim6295_device, write) + + AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( sharkpy_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x09800, 0x09fff ) AM_RAM + + AM_RANGE( 0x09000, 0x09000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x09001, 0x09001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x09005, 0x09005 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "INB" ) + + AM_RANGE( 0x09009, 0x09009 ) AM_WRITE(subsino_out_b_w ) + AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE(subsino_out_a_w ) + + AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" ) + + AM_RANGE( 0x09016, 0x09017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) + + AM_RANGE( 0x09018, 0x09018 ) AM_DEVWRITE("oki", okim6295_device, write) + + AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x07800, 0x07fff ) AM_RAM + AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + + AM_RANGE( 0x00000, 0x13fff ) AM_ROM //overlap unmapped regions +ADDRESS_MAP_END + +/* +Victor 21 protection is absolutely trivial. At every number of presetted hands, there's an animation +that announces to the player that the card deck changes. If the protection check fails (at start-up), +this event makes the game to reset without any money in the bank. +*/ + +static ADDRESS_MAP_START( victor21_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x09800, 0x09fff ) AM_RAM + + AM_RANGE( 0x09000, 0x09000 ) AM_WRITE(subsino_out_a_w ) + AM_RANGE( 0x09001, 0x09001 ) AM_WRITE(subsino_out_b_w ) + AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "INC" ) + AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x09005, 0x09005 ) AM_READ_PORT( "INB" ) + + AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x09007, 0x09007 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x09008, 0x09008 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x0900b, 0x0900b ) AM_RAM //protection + +// AM_RANGE( 0x0900c, 0x0900c ) AM_DEVWRITE("oki", okim6295_device, write) + + AM_RANGE( 0x0900e, 0x0900f ) AM_DEVWRITE("ymsnd", ym2413_device, write) + + AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x07800, 0x07fff ) AM_RAM + AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + + AM_RANGE( 0x00000, 0x08fff ) AM_ROM //overlap unmapped regions + AM_RANGE( 0x10000, 0x13fff ) AM_ROM +ADDRESS_MAP_END + + +/* +Victor 5 has a protection device that calculates the combinations of the screen. +0x00 = you lose +0x01 = royal flush +0x02 = 5 of a kind + ... +0x0a = jacks of better + +0xd9 is asked at the POST, game refuses to run otherwise. + +The fun thing is that the main CPU actually calculates the combinations then it routes to this port +thru packet writes, 0xd* starts the packet, 0xe* ends the packet. +I'm fairly sure that this thing can do a lot more, the POST check makes me think that 0xd9 is actually a result of a RNG. +For now we'll emulate the bare minimum to let this game to work, obviously we need tests/tracing on the real board to understand +what it is exactly and what it can possibly do. +*/ + + +READ8_MEMBER(subsino_state::flash_r) +{ +// printf("R %02x\n",m_flash_val); + + if(m_flash_val == 0xff) + return 0xd9; + else if(m_flash_val <= 0xa) + return m_flash_val; + else if(m_flash_val == 0x92) + return 0xeb; //protected GFXs in Cross Bingo + else + return 0xd9; +} + +WRITE8_MEMBER(subsino_state::flash_w) +{ + switch(m_flash_packet_start) + { + case 0: + m_flash_packet = data; + if((m_flash_packet & 0xf8) == 0xd0) + m_flash_packet_start = 1; //start of packet + break; + case 1: + m_flash_packet = data; + if((m_flash_packet & 0xf8) == 0xe0) + m_flash_packet_start = 0; //end of packet + else + m_flash_val = data; + break; + } +} + +static ADDRESS_MAP_START( victor5_map, AS_PROGRAM, 8, subsino_state ) + AM_IMPORT_FROM( victor21_map ) + AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE(flash_r, flash_w ) + AM_RANGE( 0x0900b, 0x0900b ) AM_READNOP //"flash" status, bit 0 +ADDRESS_MAP_END + + +READ8_MEMBER(subsino_state::hwcheck_r) +{ + /* Wants this at POST otherwise an "Hardware Error" occurs. */ + return 0x55; +} + +static ADDRESS_MAP_START( crsbingo_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x09800, 0x09fff ) AM_RAM + + AM_RANGE( 0x09000, 0x09000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x09001, 0x09001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x09003, 0x09003 ) AM_READ_PORT( "INB" ) + AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "INC" ) + AM_RANGE( 0x09005, 0x09005 ) AM_WRITE(subsino_out_a_w ) + + AM_RANGE( 0x09008, 0x09008 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x09009, 0x09009 ) AM_READ_PORT( "SW3" ) // AM_WRITE(subsino_out_a_w ) + AM_RANGE( 0x0900a, 0x0900a ) AM_READWRITE(hwcheck_r, subsino_out_b_w ) + + AM_RANGE( 0x09010, 0x09010 ) AM_READWRITE(flash_r, flash_w ) +// AM_RANGE( 0x09011, 0x09011 ) //"flash" status, bit 0 +// AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" ) + AM_RANGE( 0x0900c, 0x0900d ) AM_DEVWRITE("ymsnd", ym2413_device, write) + +// AM_RANGE( 0x09018, 0x09018 ) AM_DEVWRITE("oki", okim6295_device, write) + +// AM_RANGE( 0x0900d, 0x0900d ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x07800, 0x07fff ) AM_RAM + AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + + AM_RANGE( 0x00000, 0x8fff ) AM_ROM //overlap unmapped regions + + AM_RANGE( 0x10000, 0x13fff ) AM_ROM //overlap unmapped regions + +ADDRESS_MAP_END + +WRITE8_MEMBER(subsino_state::subsino_out_c_w) +{ + // not 100% sure on this + + // ???? eccc + // e = enable reels? + // c = reel colour bank? + m_out_c = data; + + m_reel1_tilemap->mark_all_dirty(); + m_reel2_tilemap->mark_all_dirty(); + m_reel3_tilemap->mark_all_dirty(); +// popmessage("data %02x\n",data); +} + +static ADDRESS_MAP_START( tisub_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x09800, 0x09fff ) AM_RAM + + AM_RANGE( 0x09000, 0x09000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x09001, 0x09001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x09002, 0x09002 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x09004, 0x09004 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x09005, 0x09005 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x09006, 0x09006 ) AM_READ_PORT( "INB" ) + + /* 0x09008: is marked as OUTPUT C in the test mode. */ + AM_RANGE( 0x09008, 0x09008 ) AM_WRITE(subsino_out_c_w ) + AM_RANGE( 0x09009, 0x09009 ) AM_WRITE(subsino_out_b_w ) + AM_RANGE( 0x0900a, 0x0900a ) AM_WRITE(subsino_out_a_w ) + + AM_RANGE( 0x0900c, 0x0900c ) AM_READ_PORT( "INC" ) + + AM_RANGE( 0x09016, 0x09017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) + +// AM_RANGE( 0x0900c, 0x0900c ) AM_DEVWRITE("oki", okim6295_device, write) + + AM_RANGE( 0x0901b, 0x0901b ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x07800, 0x07fff ) AM_RAM + AM_RANGE( 0x08800, 0x08fff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + AM_RANGE( 0x08000, 0x087ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + + AM_RANGE( 0x00000, 0x0bfff ) AM_ROM // overlap unmapped regions + AM_RANGE( 0x10000, 0x13fff ) AM_ROM + AM_RANGE( 0x14000, 0x14fff ) AM_ROM // reads the card face data here (see rom copy in rom loading) + + AM_RANGE( 0x150c0, 0x150ff ) AM_RAM AM_SHARE("reel3_scroll") + AM_RANGE( 0x15140, 0x1517f ) AM_RAM AM_SHARE("reel2_scroll") + AM_RANGE( 0x15180, 0x151bf ) AM_RAM AM_SHARE("reel1_scroll") + + AM_RANGE( 0x15800, 0x159ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_SHARE("reel1_ram") + AM_RANGE( 0x15a00, 0x15bff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_SHARE("reel2_ram") + AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_SHARE("reel3_ram") +ADDRESS_MAP_END + + +WRITE8_MEMBER(subsino_state::colordac_w) +{ + switch ( offset ) + { + case 0: + m_colordac_offs = data * 3; + break; + + case 1: + m_stisub_colorram[m_colordac_offs] = data; + m_palette->set_pen_color(m_colordac_offs/3, + pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+0]), + pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+1]), + pal6bit(m_stisub_colorram[(m_colordac_offs/3)*3+2]) + ); + m_colordac_offs = (m_colordac_offs+1) % (256*3); + break; + + case 2: + // ff? + break; + + case 3: + break; + } +} + + +// this stuff is banked.. +// not 100% sure on the bank bits.. other bits are also set +WRITE8_MEMBER(subsino_state::reel_scrollattr_w) +{ + if (*m_stisub_out_c & 0x20) + { + if (offset<0x200) + { + m_reel1_attr[offset&0x1ff] = data; + } + else if (offset<0x400) + { + m_reel2_attr[offset&0x1ff] = data; + } + else if (offset<0x600) + { + m_reel3_attr[offset&0x1ff] = data; + } + else + { + // ?? + } + } + else + { + offset &=0xff; + + if (offset<0x40) + { + // ?? + } + else if (offset<0x80) + { + m_reel2_scroll[offset&0x3f] = data; + } + else if (offset<0xc0) + { + m_reel1_scroll[offset&0x3f] = data; + } + else + { + m_reel3_scroll[offset&0x3f] = data; + } + } +} + +READ8_MEMBER(subsino_state::reel_scrollattr_r) +{ + return m_reel1_attr[offset]; +} + +static ADDRESS_MAP_START( stisub_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x00000, 0x0bfff ) AM_ROM + + AM_RANGE( 0x0c000, 0x0cfff ) AM_RAM + + AM_RANGE( 0x0d000, 0x0d000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x0d001, 0x0d001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x0d002, 0x0d002 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x0d004, 0x0d004 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INB" ) + AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INA" ) + + AM_RANGE( 0x0d008, 0x0d008 ) AM_RAM AM_SHARE("stisub_out_c") + + AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE(subsino_out_b_w ) + AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE(subsino_out_a_w ) + + AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) + + AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w) + + AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) + +// AM_RANGE( 0x0d01b, 0x0d01b ) AM_WRITE(subsino_tiles_offset_w ) + + AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + + AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(reel_scrollattr_r, reel_scrollattr_w) + + AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_SHARE("reel1_ram") + AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_SHARE("reel2_ram") + AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_SHARE("reel3_ram") +ADDRESS_MAP_END + + +/*************************************************************************** + Magic Train (Clear NVRAM ROM?) +***************************************************************************/ + +static ADDRESS_MAP_START( mtrainnv_map, AS_PROGRAM, 8, subsino_state ) + AM_RANGE( 0x00000, 0x0bfff ) AM_ROM + + AM_RANGE( 0x0c000, 0x0cfff ) AM_RAM + + AM_RANGE( 0x0d000, 0x0d000 ) AM_READ_PORT( "SW1" ) + AM_RANGE( 0x0d001, 0x0d001 ) AM_READ_PORT( "SW2" ) + AM_RANGE( 0x0d002, 0x0d002 ) AM_READ_PORT( "SW3" ) + + AM_RANGE( 0x0d004, 0x0d004 ) AM_READ_PORT( "SW4" ) + AM_RANGE( 0x0d005, 0x0d005 ) AM_READ_PORT( "INB" ) + AM_RANGE( 0x0d006, 0x0d006 ) AM_READ_PORT( "INA" ) + AM_RANGE( 0x0d008, 0x0d008 ) AM_RAM AM_SHARE("stisub_out_c") +// AM_RANGE( 0x0d009, 0x0d009 ) AM_WRITE +// AM_RANGE( 0x0d00a, 0x0d00a ) AM_WRITE +// AM_RANGE( 0x0d00b, 0x0d00b ) AM_WRITE + AM_RANGE( 0x0d00c, 0x0d00c ) AM_READ_PORT( "INC" ) + + AM_RANGE( 0x0d010, 0x0d013 ) AM_WRITE(colordac_w) + +// AM_RANGE( 0x0d012, 0x0d012 ) AM_WRITE + + AM_RANGE( 0x0d016, 0x0d017 ) AM_DEVWRITE("ymsnd", ym3812_device, write) + +// AM_RANGE( 0x0d018, 0x0d018 ) AM_DEVREADWRITE("oki", okim6295_device, read, write) + + AM_RANGE( 0x0e000, 0x0e7ff ) AM_RAM_WRITE(subsino_colorram_w ) AM_SHARE("colorram") + AM_RANGE( 0x0e800, 0x0efff ) AM_RAM_WRITE(subsino_videoram_w ) AM_SHARE("videoram") + + AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(reel_scrollattr_r, reel_scrollattr_w) + + AM_RANGE( 0xf800, 0xf9ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_SHARE("reel1_ram") + AM_RANGE( 0xfa00, 0xfbff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_SHARE("reel2_ram") + AM_RANGE( 0xfc00, 0xfdff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_SHARE("reel3_ram") +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( subsino_iomap, AS_IO, 8, subsino_state ) + AM_RANGE( 0x0000, 0x003f ) AM_RAM // internal regs +ADDRESS_MAP_END + + +/*************************************************************************** +* Input Ports * +***************************************************************************/ + +static INPUT_PORTS_START( victor21 ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x08, 0x08, "Key In" ) + PORT_DIPSETTING( 0x08, "100 Points/Pulse" ) + PORT_DIPSETTING( 0x00, "200 Points/Pulse" ) + 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( 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( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "75%" ) + PORT_DIPSETTING( 0x01, "80%" ) + PORT_DIPSETTING( 0x03, "85%" ) + PORT_DIPSETTING( 0x02, "90%" ) + PORT_DIPNAME( 0x04, 0x04, "Max Rate" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x18, 0x18, "Minimum Bet" ) + PORT_DIPSETTING( 0x10, "1" ) + PORT_DIPSETTING( 0x08, "5" ) + PORT_DIPSETTING( 0x18, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x20, 0x20, "Attract Music" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "SW2 - 40" ) + 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( "SW3" ) + PORT_DIPNAME( 0x01, 0x01, "SW3" ) + 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, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + 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( 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( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_V) PORT_NAME("Split") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_CODE(KEYCODE_Z) PORT_NAME("Deal / Hit") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_STAND ) PORT_CODE(KEYCODE_X) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) PORT_NAME("Bet x10") // multibet + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_CODE(KEYCODE_C) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin 1 + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3) // coin 2 + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(3) // coin 3 + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // no payout? + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( victor5 ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x08, 0x08, "Key In" ) + PORT_DIPSETTING( 0x08, "100 Points/Pulse" ) + PORT_DIPSETTING( 0x00, "500 Points/Pulse" ) + 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, "Max Bet" ) + PORT_DIPSETTING( 0x80, "20" ) + PORT_DIPSETTING( 0x40, "40" ) + PORT_DIPSETTING( 0xc0, "50" ) + PORT_DIPSETTING( 0x00, "80" ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "68%" ) + PORT_DIPSETTING( 0x01, "76%" ) + PORT_DIPSETTING( 0x03, "84%" ) + PORT_DIPSETTING( 0x02, "92%" ) + PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "74%" ) + PORT_DIPSETTING( 0x04, "80%" ) + PORT_DIPSETTING( 0x0c, "86%" ) + PORT_DIPSETTING( 0x08, "92%" ) + 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, "Minimum Bet" ) + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x40, "5" ) + PORT_DIPSETTING( 0xc0, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x01, 0x01, "SW3" ) + 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, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + 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( 0x40, 0x00, "Attract Music" ) + 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( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Half Take") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Small") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( tisub ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") // SW1-123 + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Key In" ) PORT_DIPLOCATION("SW1:4,5,6") // SW1-456 + PORT_DIPSETTING( 0x30, "4 Points/Pulse" ) + PORT_DIPSETTING( 0x28, "8 Points/Pulse" ) + PORT_DIPSETTING( 0x20, "20 Points/Pulse" ) + PORT_DIPSETTING( 0x38, "40 Points/Pulse" ) + PORT_DIPSETTING( 0x18, "80 Points/Pulse" ) + PORT_DIPSETTING( 0x10, "100 Points/Pulse" ) + PORT_DIPSETTING( 0x08, "200 Points/Pulse" ) + PORT_DIPSETTING( 0x00, "400 Points/Pulse" ) + PORT_DIPNAME( 0x40, 0x40, "Payout Mode" ) PORT_DIPLOCATION("SW1:7") // SW1-7 + PORT_DIPSETTING( 0x40, "Coin Value" ) + PORT_DIPSETTING( 0x00, "Key In Value" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) PORT_DIPLOCATION("SW2:1,2") // SW2-12 + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "8" ) + PORT_DIPSETTING( 0x01, "16" ) + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPNAME( 0x0c, 0x08, "Max Bet" ) PORT_DIPLOCATION("SW2:3,4") // SW2-34 + PORT_DIPSETTING( 0x0c, "2" ) + PORT_DIPSETTING( 0x00, "8" ) + PORT_DIPSETTING( 0x04, "16" ) + PORT_DIPSETTING( 0x08, "32" ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") // Not in test mode. + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Game Limit" ) PORT_DIPLOCATION("SW2:6") // SW2-6 + PORT_DIPSETTING( 0x20, "20000" ) + PORT_DIPSETTING( 0x00, "30000" ) + PORT_DIPNAME( 0x40, 0x40, "Auto Take" ) PORT_DIPLOCATION("SW2:7") // SW2-7 + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) PORT_DIPLOCATION("SW3:1,2,3") // SW3-123 + PORT_DIPSETTING( 0x00, "77%" ) + PORT_DIPSETTING( 0x01, "80%" ) + PORT_DIPSETTING( 0x02, "83%" ) + PORT_DIPSETTING( 0x03, "86%" ) + PORT_DIPSETTING( 0x04, "89%" ) + PORT_DIPSETTING( 0x07, "92%" ) + PORT_DIPSETTING( 0x05, "95%" ) + PORT_DIPSETTING( 0x06, "98%" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START( "SW4" ) + PORT_DIPNAME( 0x07, 0x07, "Double-Up Rate" ) PORT_DIPLOCATION("SW4:1,2,3") // SW4-123 + PORT_DIPSETTING( 0x00, "70%" ) + PORT_DIPSETTING( 0x01, "74%" ) + PORT_DIPSETTING( 0x02, "78%" ) + PORT_DIPSETTING( 0x03, "82%" ) + PORT_DIPSETTING( 0x04, "86%" ) + PORT_DIPSETTING( 0x07, "90%" ) + PORT_DIPSETTING( 0x05, "94%" ) + PORT_DIPSETTING( 0x06, "98%" ) + PORT_DIPNAME( 0x08, 0x08, "Double-Up Limit" ) PORT_DIPLOCATION("SW4:4") // SW4-4 + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double / Info") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Big") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Small") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Current settings. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( stisub ) + PORT_START("SW1") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x00, "Remote Credits" ) PORT_DIPLOCATION("SW1:4,5,6") + PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x38, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 20 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 25 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPNAME( 0x40, 0x40, "Pay-out" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x40, "Coin" ) + PORT_DIPSETTING( 0x00, "Key" ) + PORT_DIPNAME( 0x80, 0x80, "Hold Function" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + + PORT_START("SW2") + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x02, "1" ) + PORT_DIPSETTING( 0x03, "8" ) + PORT_DIPSETTING( 0x01, "16" ) + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) PORT_DIPLOCATION("SW2:3,4") + PORT_DIPSETTING( 0x04, "16" ) + PORT_DIPSETTING( 0x08, "32" ) + PORT_DIPSETTING( 0x0c, "64" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x60, 0x60, "Game Limit" ) PORT_DIPLOCATION("SW2:6,7") + PORT_DIPSETTING( 0x40, "10000" ) + PORT_DIPSETTING( 0x60, "20000" ) + PORT_DIPSETTING( 0x20, "30000" ) + PORT_DIPSETTING( 0x00, "60000" ) + PORT_DIPNAME( 0x80, 0x80, "Double Up" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Win Rate" ) PORT_DIPLOCATION("SW3:1,2,3") + PORT_DIPSETTING( 0x00, "84%" ) + PORT_DIPSETTING( 0x01, "84%" ) // yes, again! + PORT_DIPSETTING( 0x02, "86%" ) + PORT_DIPSETTING( 0x03, "88%" ) + PORT_DIPSETTING( 0x04, "90%" ) + PORT_DIPSETTING( 0x07, "92%" ) + PORT_DIPSETTING( 0x05, "94%" ) + PORT_DIPSETTING( 0x06, "96%" ) + PORT_DIPNAME( 0x08, 0x08, "Control Panel" ) PORT_DIPLOCATION("SW3:4") + PORT_DIPSETTING( 0x08, "Type A (No Hold)" ) + PORT_DIPSETTING( 0x00, "Type B" ) + PORT_DIPNAME( 0x30, 0x30, "Max Bonus" ) PORT_DIPLOCATION("SW3:5,6") + PORT_DIPSETTING( 0x30, "1000" ) + PORT_DIPSETTING( 0x20, "2000" ) + PORT_DIPSETTING( 0x10, "3000" ) + PORT_DIPSETTING( 0x00, "5000" ) + PORT_DIPNAME( 0x40, 0x40, "Gather Rate of Bonus" ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x40, "1.0%" ) + PORT_DIPSETTING( 0x00, "0.5%" ) + PORT_DIPNAME( 0x80, 0x80, "Reel Speed" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + + PORT_START( "SW4" ) + PORT_DIPNAME( 0x07, 0x07, "Double-Up Level" ) PORT_DIPLOCATION("SW4:1,2,3") + PORT_DIPSETTING( 0x07, "7 (Easy)" ) + PORT_DIPSETTING( 0x06, "6" ) + PORT_DIPSETTING( 0x05, "5" ) + PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "1" ) + PORT_DIPSETTING( 0x00, "0 (Hard)" ) + PORT_DIPNAME( 0x08, 0x08, "Double-Up Limit" ) PORT_DIPLOCATION("SW4:4") + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPNAME( 0x10, 0x10, "Double-Up Game" ) PORT_DIPLOCATION("SW4:5") + PORT_DIPSETTING( 0x10, "Dancers / Panties Colors" ) + PORT_DIPSETTING( 0x00, "Cards / Seven-Bingo" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("INA") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START ) PORT_CODE(KEYCODE_N) PORT_NAME("Start / Stop All") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_CODE(KEYCODE_C) PORT_NAME("Bet / Stop 2") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_CODE(KEYCODE_Z) PORT_NAME("Double / Info") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Current settings. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START("INC") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_CODE(KEYCODE_V) PORT_NAME("Small / Black / Stop 3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_CODE(KEYCODE_B) PORT_NAME("Big / Red") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_CODE(KEYCODE_X) PORT_NAME("Take / Stop 1") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( tesorone ) + PORT_START("SW1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) // 5 + PORT_DIPSETTING( 0x01, "1 Coin / 10 Credits" ) // 16 + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2") // ? + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") // ? + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7") // ? + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8") // ? + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("SW2") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1") // ? + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2") // ? + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3") // ? + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x60, 0x60, "Game Limit" ) PORT_DIPLOCATION("SW2:6,7") + PORT_DIPSETTING( 0x40, "5000" ) + PORT_DIPSETTING( 0x60, "10000" ) + PORT_DIPSETTING( 0x20, "20000" ) + PORT_DIPSETTING( 0x00, "30000" ) + PORT_DIPNAME( 0x80, 0x80, "Double Up" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Win Rate" ) PORT_DIPLOCATION("SW3:1,2,3") + PORT_DIPSETTING( 0x00, "59%" ) + PORT_DIPSETTING( 0x01, "64%" ) + PORT_DIPSETTING( 0x02, "69%" ) + PORT_DIPSETTING( 0x03, "74%" ) + PORT_DIPSETTING( 0x04, "79%" ) + PORT_DIPSETTING( 0x07, "84%" ) + PORT_DIPSETTING( 0x05, "89%" ) + PORT_DIPSETTING( 0x06, "94%" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:4") // ? + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Reel Speed" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + + PORT_START( "SW4" ) + PORT_DIPNAME( 0x07, 0x07, "Double-Up Level" ) PORT_DIPLOCATION("SW4:1,2,3") + PORT_DIPSETTING( 0x07, "7 (Easy)" ) + PORT_DIPSETTING( 0x06, "6" ) + PORT_DIPSETTING( 0x05, "5" ) + PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "1" ) + PORT_DIPSETTING( 0x00, "0 (Hard)" ) + PORT_DIPNAME( 0x08, 0x08, "Double-Up Limit" ) PORT_DIPLOCATION("SW4:4") + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPNAME( 0x70, 0x70, "Remote Credits" ) PORT_DIPLOCATION("SW4:5,6,7") +// PORT_DIPSETTING( 0x00, "50" ) +// PORT_DIPSETTING( 0x10, "50" ) +// PORT_DIPSETTING( 0x20, "50" ) + PORT_DIPSETTING( 0x30, "50" ) + PORT_DIPSETTING( 0x70, "100" ) + PORT_DIPSETTING( 0x60, "200" ) + PORT_DIPSETTING( 0x50, "400" ) + PORT_DIPSETTING( 0x40, "800" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:8") // ? + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("INA") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START ) PORT_CODE(KEYCODE_N) PORT_NAME("Start / Stop All") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_CODE(KEYCODE_C) PORT_NAME("Bet / Stop 2") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_CODE(KEYCODE_Z) PORT_NAME("Double / Info") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Current settings. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START("INC") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_CODE(KEYCODE_V) PORT_NAME("Small / Black / Stop 3") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_CODE(KEYCODE_B) PORT_NAME("Big / Red") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_CODE(KEYCODE_X) PORT_NAME("Take / Stop 1") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( crsbingo ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Key In" ) + PORT_DIPSETTING( 0x30, "4 Points/Pulse" ) + PORT_DIPSETTING( 0x28, "8 Points/Pulse" ) + PORT_DIPSETTING( 0x20, "20 Points/Pulse" ) + PORT_DIPSETTING( 0x10, "40 Points/Pulse" ) + PORT_DIPSETTING( 0x18, "80 Points/Pulse" ) + PORT_DIPSETTING( 0x38, "100 Points/Pulse" ) + PORT_DIPSETTING( 0x08, "200 Points/Pulse" ) + PORT_DIPSETTING( 0x00, "400 Points/Pulse" ) + 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( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) + PORT_DIPSETTING( 0x02, "1" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x03, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPSETTING( 0x08, "20" ) + PORT_DIPSETTING( 0x0c, "50" ) + PORT_DIPNAME( 0x30, 0x30, "Cards Graphics" ) + PORT_DIPSETTING( 0x00, "Classic Cards" ) + PORT_DIPSETTING( 0x10, "Alternate Set" ) + PORT_DIPSETTING( 0x20, "Fruits" ) + PORT_DIPSETTING( 0x30, "Classic Cards" ) + 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( "SW3" ) + PORT_DIPNAME( 0x01, 0x01, "SW3" ) + 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, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + 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( 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( "SW4" ) + PORT_DIPNAME( 0x07, 0x07, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "70%" ) + PORT_DIPSETTING( 0x01, "74%" ) + PORT_DIPSETTING( 0x02, "78%" ) + PORT_DIPSETTING( 0x03, "82%" ) + PORT_DIPSETTING( 0x04, "86%" ) + PORT_DIPSETTING( 0x07, "90%" ) + PORT_DIPSETTING( 0x05, "94%" ) + PORT_DIPSETTING( 0x06, "98%" ) + PORT_DIPNAME( 0x08, 0x08, "Double-Up Type" ) + PORT_DIPSETTING( 0x08, "Type 1 (no change card)" ) + PORT_DIPSETTING( 0x00, "Type 2 (with change card)" ) + 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( 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( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Double") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Change") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Small") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( sharkpy ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x01, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "55%" ) + PORT_DIPSETTING( 0x01, "60%" ) + PORT_DIPSETTING( 0x02, "65%" ) + PORT_DIPSETTING( 0x03, "70%" ) + PORT_DIPSETTING( 0x04, "75%" ) + PORT_DIPSETTING( 0x07, "80%" ) + PORT_DIPSETTING( 0x05, "85%" ) + PORT_DIPSETTING( 0x06, "90%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x30, "0" ) + PORT_DIPSETTING( 0x28, "1" ) + PORT_DIPSETTING( 0x38, "2" ) + PORT_DIPSETTING( 0x20, "3" ) + PORT_DIPSETTING( 0x18, "4" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x08, "6" ) + PORT_DIPSETTING( 0x00, "7" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Double (Select)") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Small") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_NAME("Bet") PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout? + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out? + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( sharkpye ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Remote Credits" ) + PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x38, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 500 Credits" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) + PORT_DIPSETTING( 0x08, "10" ) + PORT_DIPSETTING( 0x04, "40" ) + PORT_DIPSETTING( 0x0c, "50" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0x10, 0x10, "Jokers" ) + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "92%" ) + PORT_DIPSETTING( 0x01, "93%" ) + PORT_DIPSETTING( 0x02, "94%" ) + PORT_DIPSETTING( 0x03, "95%" ) + PORT_DIPSETTING( 0x04, "96%" ) + PORT_DIPSETTING( 0x07, "97%" ) + PORT_DIPSETTING( 0x05, "98%" ) + PORT_DIPSETTING( 0x06, "99%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "82" ) + PORT_DIPSETTING( 0x08, "84" ) + PORT_DIPSETTING( 0x10, "86" ) + PORT_DIPSETTING( 0x18, "88" ) + PORT_DIPSETTING( 0x20, "90" ) + PORT_DIPSETTING( 0x38, "92" ) + PORT_DIPSETTING( 0x28, "94" ) + PORT_DIPSETTING( 0x30, "96" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double-Up") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset Switch") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( smoto16 ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x01, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPNAME( 0x04, 0x04, "Hopper" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "55%" ) + PORT_DIPSETTING( 0x01, "60%" ) + PORT_DIPSETTING( 0x02, "65%" ) + PORT_DIPSETTING( 0x03, "70%" ) + PORT_DIPSETTING( 0x04, "75%" ) + PORT_DIPSETTING( 0x07, "80%" ) + PORT_DIPSETTING( 0x05, "85%" ) + PORT_DIPSETTING( 0x06, "90%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x08, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x18, "3" ) + PORT_DIPSETTING( 0x20, "4" ) + PORT_DIPSETTING( 0x28, "5" ) + PORT_DIPSETTING( 0x30, "6" ) + PORT_DIPSETTING( 0x38, "7" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x40, "Game Control" ) + PORT_DIPSETTING( 0x40, "Normal Holds" ) + PORT_DIPSETTING( 0x00, "Left-Right Marker" ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) // d005 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Double (Select)") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Right") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Left") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Select") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_NAME("Bet / Speed") PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) // d006 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out? + + PORT_START( "INC" ) // d00c + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( smoto20 ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x01, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_5C ) ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPNAME( 0x04, 0x04, "Hopper" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "25%" ) + PORT_DIPSETTING( 0x01, "30%" ) + PORT_DIPSETTING( 0x02, "35%" ) + PORT_DIPSETTING( 0x03, "40%" ) + PORT_DIPSETTING( 0x04, "45%" ) + PORT_DIPSETTING( 0x07, "50%" ) + PORT_DIPSETTING( 0x05, "55%" ) + PORT_DIPSETTING( 0x06, "60%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x08, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x18, "3" ) + PORT_DIPSETTING( 0x20, "4" ) + PORT_DIPSETTING( 0x28, "5" ) + PORT_DIPSETTING( 0x30, "6" ) + PORT_DIPSETTING( 0x38, "7" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x40, "Game Control" ) + PORT_DIPSETTING( 0x40, "Normal Holds" ) + PORT_DIPSETTING( 0x00, "Left-Right Marker" ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) // d005 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Double (Select)") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Right") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Left") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Select") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Take") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_BET ) PORT_NAME("Bet / Speed") PORT_IMPULSE(3) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) // d006 + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out? + + PORT_START( "INC" ) // d00c + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + 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_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( victor6 ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Remote Credits" ) + PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x38, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 500 Credits" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) + PORT_DIPSETTING( 0x00, "8" ) + PORT_DIPSETTING( 0x08, "10" ) + PORT_DIPSETTING( 0x04, "40" ) + PORT_DIPSETTING( 0x0c, "50" ) + PORT_DIPNAME( 0x10, 0x10, "Jokers" ) + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "87%" ) + PORT_DIPSETTING( 0x01, "89%" ) + PORT_DIPSETTING( 0x02, "91%" ) + PORT_DIPSETTING( 0x03, "93%" ) + PORT_DIPSETTING( 0x04, "95%" ) + PORT_DIPSETTING( 0x07, "97%" ) + PORT_DIPSETTING( 0x05, "99%" ) + PORT_DIPSETTING( 0x06, "101%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "82" ) + PORT_DIPSETTING( 0x08, "84" ) + PORT_DIPSETTING( 0x10, "86" ) + PORT_DIPSETTING( 0x18, "88" ) + PORT_DIPSETTING( 0x20, "90" ) + PORT_DIPSETTING( 0x38, "92" ) + PORT_DIPSETTING( 0x28, "94" ) + PORT_DIPSETTING( 0x30, "96" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double-Up") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset Switch") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( victor6a ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Remote Credits" ) + PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x38, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 500 Credits" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) + PORT_DIPSETTING( 0x08, "10" ) + PORT_DIPSETTING( 0x04, "40" ) + PORT_DIPSETTING( 0x0c, "50" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0x10, 0x10, "Jokers" ) + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "94%" ) + PORT_DIPSETTING( 0x01, "95%" ) + PORT_DIPSETTING( 0x02, "96%" ) + PORT_DIPSETTING( 0x03, "97%" ) + PORT_DIPSETTING( 0x04, "98%" ) + PORT_DIPSETTING( 0x07, "99%" ) + PORT_DIPSETTING( 0x05, "100%" ) + PORT_DIPSETTING( 0x06, "101%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "82" ) + PORT_DIPSETTING( 0x08, "84" ) + PORT_DIPSETTING( 0x10, "86" ) + PORT_DIPSETTING( 0x18, "88" ) + PORT_DIPSETTING( 0x20, "90" ) + PORT_DIPSETTING( 0x38, "92" ) + PORT_DIPSETTING( 0x28, "94" ) + PORT_DIPSETTING( 0x30, "96" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double-Up") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset Switch") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( victor6b ) + + PORT_START( "SW1" ) + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x07, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 25 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 100 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Remote Credits" ) + PORT_DIPSETTING( 0x30, "1 Pulse / 1 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 2 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x38, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 500 Credits" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW2" ) + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) + PORT_DIPSETTING( 0x08, "Invalid" ) + PORT_DIPSETTING( 0x04, "40" ) + PORT_DIPSETTING( 0x0c, "50" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0x10, 0x10, "Jokers" ) + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW3" ) + PORT_DIPNAME( 0x07, 0x07, "Main Game Rate" ) + PORT_DIPSETTING( 0x00, "94%" ) + PORT_DIPSETTING( 0x01, "95%" ) + PORT_DIPSETTING( 0x02, "96%" ) + PORT_DIPSETTING( 0x03, "97%" ) + PORT_DIPSETTING( 0x04, "98%" ) + PORT_DIPSETTING( 0x07, "99%" ) + PORT_DIPSETTING( 0x05, "100%" ) + PORT_DIPSETTING( 0x06, "101%" ) + PORT_DIPNAME( 0x38, 0x38, "Double-Up Rate" ) + PORT_DIPSETTING( 0x00, "82" ) + PORT_DIPSETTING( 0x08, "84" ) + PORT_DIPSETTING( 0x10, "86" ) + PORT_DIPSETTING( 0x18, "88" ) + PORT_DIPSETTING( 0x20, "90" ) + PORT_DIPSETTING( 0x38, "92" ) + PORT_DIPSETTING( 0x28, "94" ) + PORT_DIPSETTING( 0x30, "96" ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "SW4" ) + PORT_DIPUNKNOWN( 0x01, 0x01 ) + PORT_DIPUNKNOWN( 0x02, 0x02 ) + PORT_DIPUNKNOWN( 0x04, 0x04 ) + PORT_DIPUNKNOWN( 0x08, 0x08 ) + PORT_DIPUNKNOWN( 0x10, 0x10 ) + PORT_DIPUNKNOWN( 0x20, 0x20 ) + PORT_DIPUNKNOWN( 0x40, 0x40 ) + PORT_DIPUNKNOWN( 0x80, 0x80 ) + + PORT_START( "INA" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Start") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double-Up") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START( "INB" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3) // coin + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Stats / Test") // Bookkeeping. + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Settings") // Game Rate & others. + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START( "INC" ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset Switch") // hard reset + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + +/*************************************************************************** +* Graphics Layout * +***************************************************************************/ + +static const gfx_layout layout_8x8x3 = +{ + 8, 8, + RGN_FRAC(1, 3), + 3, + { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout layout_8x8x4 = +{ + 8, 8, + RGN_FRAC(1, 4), + 4, + { RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4), RGN_FRAC(1,4) }, + { STEP8(0,1) }, + { STEP8(0,8) }, + 8*8 +}; + +static const gfx_layout layout_8x32x4 = +{ + 8, 32, + RGN_FRAC(1, 4), + 4, + { RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4), RGN_FRAC(1,4) }, + { STEP8(0,1) }, + { STEP32(0,8) }, + 8*8*4 +}; + +static const gfx_layout layout_8x8x8 = +{ + 8, 8, + RGN_FRAC(1,4), + 8, + { 0,1,2,3,4,5,6,7 }, + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4)+8, RGN_FRAC(1,4)+8, RGN_FRAC(2,4)+8, RGN_FRAC(3,4)+8 }, + { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16 }, + 8*16 +}; + +static const gfx_layout layout_8x32x8 = +{ + 8, 32, + RGN_FRAC(1,4), + 8, + { 0,1,2,3,4,5,6,7 }, + { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4), RGN_FRAC(0,4)+8, RGN_FRAC(1,4)+8, RGN_FRAC(2,4)+8, RGN_FRAC(3,4)+8 }, + { 0*16,1*16,2*16,3*16,4*16,5*16,6*16,7*16, 8*16,9*16,10*16,11*16,12*16,13*16,14*16,15*16, + 16*16,17*16,18*16,19*16,20*16,21*16,22*16,23*16,24*16,25*16,26*16,27*16,28*16,29*16,30*16,31*16}, + 32*16 +}; + + +static GFXDECODE_START( subsino_depth3 ) + GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x3, 0, 16 ) +GFXDECODE_END + +static GFXDECODE_START( subsino_depth4 ) + GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x4, 0, 16 ) +GFXDECODE_END + +static GFXDECODE_START( subsino_depth4_reels ) + GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x4, 0, 16 ) + GFXDECODE_ENTRY( "reels", 0, layout_8x32x4, 0, 16 ) +GFXDECODE_END + +static GFXDECODE_START( subsino_stisub ) + GFXDECODE_ENTRY( "tilemap", 0, layout_8x8x8, 0, 1 ) + GFXDECODE_ENTRY( "reels", 0, layout_8x32x8, 0, 1 ) +GFXDECODE_END + +/*************************************************************************** +* Machine Drivers * +***************************************************************************/ + +static MACHINE_CONFIG_START( victor21, subsino_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown clock */ + MCFG_CPU_PROGRAM_MAP(victor21_map) + MCFG_CPU_IO_MAP(subsino_iomap) + + MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) + + /* 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+16, 256-16-1) + MCFG_SCREEN_UPDATE_DRIVER(subsino_state, screen_update_subsino) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", subsino_depth3) + + MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_2proms) + + MCFG_VIDEO_START_OVERRIDE(subsino_state,subsino) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_4_433619MHz / 4, OKIM6295_PIN7_HIGH) /* Clock frequency & pin 7 not verified */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +/* same but with an additional protection. */ +static MACHINE_CONFIG_DERIVED( victor5, victor21 ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(victor5_map) +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_START( crsbingo, subsino_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown CPU and clock */ + MCFG_CPU_PROGRAM_MAP(crsbingo_map) + MCFG_CPU_IO_MAP(subsino_iomap) + + MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) + + /* 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+16, 256-16-1) + MCFG_SCREEN_UPDATE_DRIVER(subsino_state, screen_update_subsino) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", subsino_depth4) + + MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_2proms) + + MCFG_VIDEO_START_OVERRIDE(subsino_state,subsino) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) /* Unknown clock */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_START( srider, subsino_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown clock */ + MCFG_CPU_PROGRAM_MAP(srider_map) + MCFG_CPU_IO_MAP(subsino_iomap) + + MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) + + /* 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+16, 256-16-1) + MCFG_SCREEN_UPDATE_DRIVER(subsino_state, screen_update_subsino) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", subsino_depth4) + + MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_3proms) + + MCFG_VIDEO_START_OVERRIDE(subsino_state,subsino) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_3_579545MHz) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_4_433619MHz / 4, OKIM6295_PIN7_HIGH) /* Clock frequency & pin 7 not verified */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( sharkpy, srider ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(sharkpy_map) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( tisub, subsino_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown CPU and clock */ + MCFG_CPU_PROGRAM_MAP(tisub_map) + MCFG_CPU_IO_MAP(subsino_iomap) + + MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) + + /* 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+16, 256-16-1) + MCFG_SCREEN_UPDATE_DRIVER(subsino_state, screen_update_subsino_reels) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", subsino_depth4_reels) + + MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_3proms) + + MCFG_VIDEO_START_OVERRIDE(subsino_state,subsino_reels) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_3_579545MHz) /* Unknown clock */ + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_START( stisub, subsino_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 8) /* Unknown clock */ + MCFG_CPU_PROGRAM_MAP(stisub_map) + MCFG_CPU_IO_MAP(subsino_iomap) + + MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) + + /* 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+16, 256-16-1) + MCFG_SCREEN_UPDATE_DRIVER(subsino_state, screen_update_stisub_reels) + MCFG_SCREEN_PALETTE("palette") + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", subsino_stisub) + + MCFG_PALETTE_ADD("palette", 0x100) + //MCFG_PALETTE_INIT_OWNER(subsino_state,subsino_3proms) + + MCFG_VIDEO_START_OVERRIDE(subsino_state,stisub) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_3_579545MHz) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( mtrainnv, stisub ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(mtrainnv_map) +MACHINE_CONFIG_END + + +/*************************************************************************** +* ROMs Loading * +***************************************************************************/ + +/*************************************************************************** + +Victor 5 +(C)1991 Subsino + +Chips: + +1x unknown big black box +1x M5L8255AP +1x UM3567 +1x M6295 +1x oscillator 12.000 +1x oscillator 4.433619 +1x oscillator 3.579545 + +ROMs: + +1x M27C512 (1) +3x 27C256 (2,3,4) + +Notes: + +1x 36x2 edge connector (con3) +1x 10x2 edge connector (con4) +1x RS232 9pins connector (con5) +2x batteries +3x 8x2 switches dip +1x pushbutton + +Sticker on PCB reads V552520 + +Info by f205v (26/03/2008) + +***************************************************************************/ + +ROM_START( victor5 ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "1.u1", 0x10000, 0x4000, CRC(e3ada2fc) SHA1(eddb460dcb80a29fbbe3ed6c4733c75b892baf52) ) + ROM_CONTINUE(0x0000,0xc000) + + ROM_REGION( 0x18000, "tilemap", 0 ) + ROM_LOAD( "2.u24", 0x10000, 0x8000, CRC(1229e951) SHA1(1e548625bb60e2d6f52a376a0dea9e5709f94135) ) + ROM_LOAD( "3.u23", 0x08000, 0x8000, CRC(2d89bbf1) SHA1(d7fda0174a835e88b330dfd09bdb604bfe4c2e44) ) + ROM_LOAD( "4.u22", 0x00000, 0x8000, CRC(ecf840a1) SHA1(9ecf522afb23e3557d37effc3c8568e8a14dad1a) ) + + ROM_REGION( 0x40000, "oki", ROMREGION_ERASE ) + // rom socket is empty + + ROM_REGION( 0x200, "proms", 0 ) //missing proms in this set, we'll use the same as Victor 21 for now. + ROM_LOAD( "74s287.u35", 0x000, 0x100, BAD_DUMP CRC(40094bed) SHA1(b25d96126b3f7bd06bf76dc9958f8669f83abdb7) ) + ROM_LOAD( "74s287.u36", 0x100, 0x100, BAD_DUMP CRC(9ca021c5) SHA1(6a1d8d4f958d36e4a676dc4f4aee83d637933bc3) ) +ROM_END + +/*************************************************************************** + +Victor 21 +(C)1990 Subsino + +Chips: + +1x unknown big black box +1x M5L8255AP +1x UM3567 +1x M6295 +1x oscillator 12.000 +1x oscillator 4.433619 +1x oscillator 3.579545 + +ROMs: + +1x M27C512 (1) +3x 27C256 (2,3,4) + +Other: + +1x 36x2 edge connector (con3) +1x 10x2 edge connector (con4) +1x RS232 9pins connector (con5) +2x batteries +3x 8 switches dips +1x pushbutton + +PCB layout is identical to "Victor 5" +Sticker on PCB reads V12040 + +Info by f205v, Corrado Tomaselli (20/04/2008) + +***************************************************************************/ + +ROM_START( victor21 ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "1.u1", 0x10000, 0x4000, CRC(43999b2d) SHA1(7ce26fd332ffe35fd826a1a6166b228d4bc370b8) ) + ROM_CONTINUE(0x0000,0xc000) + + ROM_REGION( 0x18000, "tilemap", 0 ) + ROM_LOAD( "2.u24", 0x10000, 0x8000, CRC(f1181b93) SHA1(53cd4d2ce13973495b51d911a4745a69a9784983) ) + ROM_LOAD( "3.u25", 0x08000, 0x8000, CRC(437abb27) SHA1(bd3790807d60a41d58e07f60fb990553076d6e96) ) + ROM_LOAD( "4.u26", 0x00000, 0x8000, CRC(e2f66eee) SHA1(ece924fe626f21fd7d31faabf19225d80e2bcfd3) ) + + ROM_REGION( 0x40000, "oki", ROMREGION_ERASE ) + // rom socket is empty + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "74s287.u35", 0x000, 0x100, CRC(40094bed) SHA1(b25d96126b3f7bd06bf76dc9958f8669f83abdb7) ) + ROM_LOAD( "74s287.u36", 0x100, 0x100, CRC(9ca021c5) SHA1(6a1d8d4f958d36e4a676dc4f4aee83d637933bc3) ) +ROM_END + +/*************************************************************************** + + Treasure Island + -- this has an extra layer for the reels, exactly the same as goldstar.c + +***************************************************************************/ + +ROM_START( tisub ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD( "rom_1.bin", 0x10000, 0x4000, CRC(ed3b4a69) SHA1(c57985e8d19b2b495fc768e52b83cbbd75f027ad) ) + ROM_CONTINUE(0x0000,0xc000) + ROM_COPY( "maincpu", 0x09000, 0x14000, 0x1000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "rom_6.bin", 0x00000, 0x10000, CRC(c2c226df) SHA1(39762b390d6b271c3252342e843a181dd152a0cc) ) + ROM_LOAD( "rom_4.bin", 0x10000, 0x10000, CRC(37724fda) SHA1(084653662c9f77afef2a77c607e1fb093aaf3adf) ) + ROM_LOAD( "rom_5.bin", 0x20000, 0x10000, CRC(3d18acd8) SHA1(179545c18ad880097366c07c8e2fa821701a2758) ) + ROM_LOAD( "rom_7.bin", 0x30000, 0x10000, CRC(9d7d99d8) SHA1(a3df5e023c2102028a5186101dc0b19d91e8965e) ) + + ROM_REGION( 0x8000, "reels", 0 ) + ROM_LOAD( "rom_2.bin", 0x0000, 0x4000, CRC(836c756d) SHA1(fca1d5b600861eea30ed73ee13be735e7d167097) ) + ROM_IGNORE(0x4000) + ROM_LOAD( "rom_3.bin", 0x4000, 0x4000, CRC(2ad82222) SHA1(68780b9528393b28eaa2f90501efb5a8c39bed63) ) + ROM_IGNORE(0x4000) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129n.u39", 0x000, 0x100, CRC(971843e5) SHA1(4cb5fc1085503dae2f2f02eb49cca051ac84b890) ) + ROM_LOAD( "n82s129n.u40", 0x100, 0x100, CRC(b4bd872c) SHA1(c0f9fe68186636d6d6bc6f81415459631cf38edd) ) + ROM_LOAD( "n82s129n.u41", 0x200, 0x100, CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) ) +ROM_END + +/* + + Treasure Island (Alt version)... + + ROMs 4 & 5 are missing. ROMs 6 & 7 are identical to parent set. + So... Assuming that 4 & 5 should have the same bitplanes. + + ROM 3 is bad, but ROM 2 only has the first byte different, + getting different values in each dump. The rest remains identical. + + Program ROM is different. + + Color PROMs are from this set. + +*/ + +ROM_START( tisuba ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD( "01.bin", 0x10000, 0x4000, CRC(9967dd38) SHA1(63b74bc0c0952114b7321e8f399bd64dc293aade) ) + ROM_CONTINUE(0x0000,0xc000) + ROM_COPY( "maincpu", 0x09000, 0x14000, 0x1000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "rom_6.bin", 0x00000, 0x10000, CRC(c2c226df) SHA1(39762b390d6b271c3252342e843a181dd152a0cc) ) + ROM_LOAD( "rom_4.bin", 0x10000, 0x10000, CRC(37724fda) SHA1(084653662c9f77afef2a77c607e1fb093aaf3adf) ) + ROM_LOAD( "rom_5.bin", 0x20000, 0x10000, CRC(3d18acd8) SHA1(179545c18ad880097366c07c8e2fa821701a2758) ) + ROM_LOAD( "rom_7.bin", 0x30000, 0x10000, CRC(9d7d99d8) SHA1(a3df5e023c2102028a5186101dc0b19d91e8965e) ) + + ROM_REGION( 0x8000, "reels", 0 ) + ROM_LOAD( "rom_2.bin", 0x0000, 0x4000, CRC(836c756d) SHA1(fca1d5b600861eea30ed73ee13be735e7d167097) ) + ROM_IGNORE(0x4000) + ROM_LOAD( "rom_3.bin", 0x4000, 0x4000, CRC(2ad82222) SHA1(68780b9528393b28eaa2f90501efb5a8c39bed63) ) + ROM_IGNORE(0x4000) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129n.u39", 0x000, 0x100, CRC(971843e5) SHA1(4cb5fc1085503dae2f2f02eb49cca051ac84b890) ) + ROM_LOAD( "n82s129n.u40", 0x100, 0x100, CRC(b4bd872c) SHA1(c0f9fe68186636d6d6bc6f81415459631cf38edd) ) + ROM_LOAD( "n82s129n.u41", 0x200, 0x100, CRC(db99f6da) SHA1(d281a2fa06f1890ef0b1c4d099e6828827db14fd) ) +ROM_END + +/*************************************************************************** + +Cross Bingo +(C)1991 Subsino + +Chips: + +1x big unknown epoxy block (main) +1x unknown Subsino SS9101-173001 (DIP42) +1x unknown blank quad chip (QFP68) +1x UM3567 (sound) +3x ULN2003AN (sound) +1x LM324N (sound) +1x oscillator 12.000 +1x oscillator 3.579545 + +ROMs: + +3x M27512 +2x PROM N82S129N +2x PLD 18CV8PC (read protected) + +Other: + +1x 22x2 edge connector +1x 11x2 edge connector +1x 10x2 edge connector (payout system) +1x RS232 connector +1x trimmer (volume) +1x pushbutton +4x 8x2 switches dip +1x battery + +Info by f205v (14/12/2008) + +***************************************************************************/ + +ROM_START( crsbingo ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "1.u36", 0x10000, 0x4000, CRC(c5aff4eb) SHA1(74f06d7735975657fca9be5fff9e7d53f38fcd02) ) + ROM_CONTINUE(0x0000,0xc000) + + ROM_REGION( 0x20000, "tilemap", 0 ) + ROM_LOAD( "2.u4", 0x00000, 0x10000, CRC(ce527722) SHA1(f3759cefab902259eb25f8d4be2fcafc1afd90b9) ) + ROM_LOAD( "3.u15", 0x10000, 0x10000, CRC(23785451) SHA1(8574e59aa816a644ff4b102bd5754ef1284deea0) ) + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s129.u13", 0x000, 0x100, CRC(89c06859) SHA1(b98d5335f36ea3842086677aca47b605030d442f) ) + ROM_LOAD( "82s129.u14", 0x100, 0x100, CRC(eaddb54f) SHA1(51fbf31e910a93315204a892d10bcf982a6ed099) ) + + ROM_REGION( 0x40000, "oki", ROMREGION_ERASE00 ) + + ROM_REGION( 0x155 * 2, "plds", 0 ) + ROM_LOAD( "18cv8.u22", 0x000, 0x155, BAD_DUMP CRC(996e8f59) SHA1(630d9b91f6e8eda781061e2a8ff6fb0fecaf034c) ) + ROM_LOAD( "18cv8.u29", 0x155, 0x155, BAD_DUMP CRC(996e8f59) SHA1(630d9b91f6e8eda781061e2a8ff6fb0fecaf034c) ) +ROM_END + +/*************************************************************************** + +Shark Party +(C)1993 Subsino + +Chips: + +1x unknown big black box +1x custom SUBSINO_SS9101_409235I (DIL42)(u48) +2x KD89C55 (u49,u50) +1x K-665 (u55)(equivalent to M6295) +1x K-664 (u57)(equivalent to YM3014) +1x K-666 (u52)(equivalent to YM3812) +3x 45580D (amplifier)(u58,u59,u60) +2x custom SUBSINO_SS9100_3512204V (SMT 44pins)(u10,u19) +1x oscillator 4.433619MHz +1x oscillator 12.000MHz + +ROMs: + +1x 27C1001 (u54) +1x 27C512 (u18) +2x 27C010 (u16,u17) +3x N82S129AN (u11,u12,u13) +4x GAL16V8B (u2,u37,u45,u46)(not dumped) +2x TIBPAL16L8 (u43,u44)(not dumped) + +Other: + +1x 36x2 edge connector (con5) +1x 10x2 edge connector (con4) +1x battery +1x trimmer (volume) +1x pushbutton (sw5) +4x 8x2 switches dip (sw1,sw2,sw3,sw4) + +Info by f205v (25/03/2008) + +***************************************************************************/ + +ROM_START( sharkpy ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "shark_n.1.u18", 0x0a000, 0x6000, CRC(25aeac2f) SHA1(d94e3e5cfffd150ac48e1463493a8323f42e7a89) ) // is this mapped correctly? - used during gameplay? + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "shark_n.3.u16", 0x00000, 0x08000, CRC(a7a715ce) SHA1(38b93e05377d9cb816688f5070e847480f195c6b) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "shark_n.2.u17", 0x20000, 0x08000, CRC(c27f3d0a) SHA1(77c8eb0322c5b9c89777cb080d26ecf9abe01ae7) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "shark(ii)-italy_4_ver1.0.u54", 0x00000, 0x20000, CRC(9f384c59) SHA1(d2b087b8370b40b6f0944de661ea6aebaebea06f) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129an.u11", 0x000, 0x100, CRC(daf3657a) SHA1(93005938e2d60d54e7bbf1e234bba3802ee1af21) ) + ROM_LOAD( "n82s129an.u12", 0x100, 0x100, CRC(5a7a25ed) SHA1(eebd679195e6ea50f64f3c46cd06ee21a1550491) ) + ROM_LOAD( "n82s129an.u13", 0x200, 0x100, CRC(0ef5f218) SHA1(a02cf266661385aa078563bd83240d36549c1cf0) ) +ROM_END + +/*************************************************************************** + +Shark Party (alt) +(C)1993 Subsino + +Chips: + +1x unknown big black box +1x custom SUBSINO_SS9101_409235I (DIL42)(u48) +2x KD89C55 (u49,u50) +1x K-665 (u55)(equivalent to M6295) +1x K-664 (u57)(equivalent to YM3014) +1x SM64JBCK (u52)(equivalent to YM3812) +3x 45580D (amplifier)(u58,u59,u60) +2x custom SUBSINO_SS9100_3512201V (SMT 44pins)(u10,u19) +1x oscillator 4.433619MHz +1x oscillator 12.000MHz + +ROMs: + +2x 27C1001 (u54,u17) +1x 27C512 (u18) +1x 27C010 (u16) +3x N82S129AN (u11,u12,u13) +4x GAL16V8B (u2,u37,u45,u46)(not dumped) +2x TIBPAL16L8 (u43,u44)(not dumped) + +Other: + +1x 36x2 edge connector (con5) +1x 10x2 edge connector (con4) +1x battery +1x trimmer (volume) +1x pushbutton (sw5) +4x 8x2 switches dip (sw1,sw2,sw3,sw4) + +Info by f205v (25/03/2008) + +***************************************************************************/ + +ROM_START( sharkpya ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "shark1.6.u18", 0x0a000, 0x6000, CRC(365312a0) SHA1(de8370b1f35e8d071185d2e5f2fbd2fdf74c55ac) ) + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "shark_n.3.u16", 0x00000, 0x08000, CRC(a7a715ce) SHA1(38b93e05377d9cb816688f5070e847480f195c6b) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "shark_n.2.u17", 0x20000, 0x08000, CRC(c27f3d0a) SHA1(77c8eb0322c5b9c89777cb080d26ecf9abe01ae7) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "shark(ii)-italy_4_ver1.0.u54", 0x00000, 0x20000, CRC(9f384c59) SHA1(d2b087b8370b40b6f0944de661ea6aebaebea06f) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "sn82s129an.u11", 0x000, 0x100, CRC(daf3657a) SHA1(93005938e2d60d54e7bbf1e234bba3802ee1af21) ) + ROM_LOAD( "sn82s129an.u12", 0x100, 0x100, CRC(5a7a25ed) SHA1(eebd679195e6ea50f64f3c46cd06ee21a1550491) ) + ROM_LOAD( "sn82s129an.u13", 0x200, 0x100, CRC(0ef5f218) SHA1(a02cf266661385aa078563bd83240d36549c1cf0) ) +ROM_END + + +/*************************************************************************** + + Shark Party (English, Alpha license) + + - Different inputs system. + - Different DIP Switches. + - Different Button-Lamps outputs. + +***************************************************************************/ + +ROM_START( sharkpye ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "sharkpye.u18", 0x0a000, 0x6000, CRC(12473814) SHA1(9c24ed41781aefee0161add912e730ba0d4f4d3e) ) + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "sharkpye.u16", 0x00000, 0x08000, CRC(90862185) SHA1(9d632bfa707d3449a87d7f370eb2b5c36e61aadd) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "sharkpye.u17", 0x20000, 0x08000, CRC(b7b6119a) SHA1(b61c77d2170d96fcb39ea31c4136387441b9037f) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "sharkpye.u54", 0x00000, 0x20000, CRC(9f384c59) SHA1(d2b087b8370b40b6f0944de661ea6aebaebea06f) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129an.u11", 0x000, 0x100, CRC(daf3657a) SHA1(93005938e2d60d54e7bbf1e234bba3802ee1af21) ) + ROM_LOAD( "n82s129an.u12", 0x100, 0x100, CRC(5a7a25ed) SHA1(eebd679195e6ea50f64f3c46cd06ee21a1550491) ) + ROM_LOAD( "n82s129an.u13", 0x200, 0x100, CRC(0ef5f218) SHA1(a02cf266661385aa078563bd83240d36549c1cf0) ) +ROM_END + + +/**************************************************************************** + + Victor 6 (Subsino/Alpha) + + SET MAINRATE MAXBET + ---------------------------- + victor6 87-101% 50 + victor6a 94-101% 80 + victor6b 94-101% 80 (no 10 option) + + +****************************************************************************/ + +ROM_START( victor6 ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "victor_6ii-rom_1.ver2.3n.u18", 0x0a000, 0x6000, CRC(d496ecbd) SHA1(1f982b42bc46c09298916a6cb2db0b38c6451ec3) ) + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "victor_6ii-rom_3_ver1.0.u16", 0x00000, 0x08000, CRC(4e96c30a) SHA1(4989b10a52ba61459864aa44be9ebafe68b4d231) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "victor_6ii-rom_2_ver1.0.u17", 0x20000, 0x08000, CRC(4630a1da) SHA1(a14df7d7047350a7b1ae485570869d9fa50a2f6d) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "victor_6ii-rom_4_ver1.0.u54", 0x00000, 0x20000, CRC(ed2a6ff8) SHA1(b776b85a350cd0176ffa04248084475d07ac5bfa) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129.u11", 0x000, 0x100, CRC(e8d7c8c3) SHA1(26ea907e45e70269956f842817b2d827cbc647ec) ) + ROM_LOAD( "n82s129.u12", 0x100, 0x100, CRC(4cee9225) SHA1(bb784ff636f90de3965272021f610abb41e0d40d) ) + ROM_LOAD( "n82s129.u13", 0x200, 0x100, CRC(b135c3eb) SHA1(54b04c5c4eb3a769123f2630740f0575e2ea6ff2) ) +ROM_END + +ROM_START( victor6a ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "victor_6ii_alpha_1_ver2.3.u18", 0x0a000, 0x6000, CRC(2a3eaecd) SHA1(18bf2dfec8cd5690d6465f750093942afda66475) ) + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "victor_6ii-rom_3_ver1.0.u16", 0x00000, 0x08000, CRC(4e96c30a) SHA1(4989b10a52ba61459864aa44be9ebafe68b4d231) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "victor_6ii-rom_2_ver1.0.u17", 0x20000, 0x08000, CRC(4630a1da) SHA1(a14df7d7047350a7b1ae485570869d9fa50a2f6d) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "victor_6ii-rom_4_ver1.0.u54", 0x00000, 0x20000, CRC(ed2a6ff8) SHA1(b776b85a350cd0176ffa04248084475d07ac5bfa) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129.u11", 0x000, 0x100, CRC(e8d7c8c3) SHA1(26ea907e45e70269956f842817b2d827cbc647ec) ) + ROM_LOAD( "n82s129.u12", 0x100, 0x100, CRC(4cee9225) SHA1(bb784ff636f90de3965272021f610abb41e0d40d) ) + ROM_LOAD( "n82s129.u13", 0x200, 0x100, CRC(b135c3eb) SHA1(54b04c5c4eb3a769123f2630740f0575e2ea6ff2) ) +ROM_END + +ROM_START( victor6b ) + ROM_REGION( 0x14000, "maincpu", 0 ) + ROM_LOAD( "victor_6ii_rom_1_ver1.2.u18", 0x0a000, 0x6000, CRC(309876fc) SHA1(305c4cf347b512607e2c58a580075a34b48bedd5) ) + ROM_CONTINUE(0x0000, 0xa000) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "victor_6ii-rom_3_ver1.0.u16", 0x00000, 0x08000, CRC(4e96c30a) SHA1(4989b10a52ba61459864aa44be9ebafe68b4d231) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "victor_6ii-rom_2_ver1.0.u17", 0x20000, 0x08000, CRC(4630a1da) SHA1(a14df7d7047350a7b1ae485570869d9fa50a2f6d) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "victor_6ii-rom_4_ver1.0.u54", 0x00000, 0x20000, CRC(ed2a6ff8) SHA1(b776b85a350cd0176ffa04248084475d07ac5bfa) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "n82s129.u11", 0x000, 0x100, CRC(e8d7c8c3) SHA1(26ea907e45e70269956f842817b2d827cbc647ec) ) + ROM_LOAD( "n82s129.u12", 0x100, 0x100, CRC(4cee9225) SHA1(bb784ff636f90de3965272021f610abb41e0d40d) ) + ROM_LOAD( "n82s129.u13", 0x200, 0x100, CRC(b135c3eb) SHA1(54b04c5c4eb3a769123f2630740f0575e2ea6ff2) ) +ROM_END + + + +/*************************************************************************** + +Super Rider (Italy Ver 1.6) +(C)1996 Subsino + +Chips: + +2x custom QFP44 label SUBSINOSS9100 +1x custom DIP42 label SUBSINOSS9101 +2x FILE KD89C55A (equivalent to 8255) +1x custom QFP44 label M28 (sound)(equivalent to M6295) +1x custom DIP24 label K-666 (sound)(equivalent to YM3812) +1x custom DIP8 label K-664 (sound)(equivalent to YM3014) +1x oscillator 12.000MHz (main) +1x oscillator 4.43361MHz (sound) + +ROMs: + +1x TMS27C512 (1) +2x TMS27C010A (2,3)(main) +1x TMS27C010A (4) (sound) +3x PROM N82S129AN + +Other: + +1x 10x2 edge connector (looks like a coin payout) +1x 36x2 edge connector +1x battery 3.6V NiCd +1x pushbutton (sw5) +4x 8 switches dips (sw1-4) +1x trimmer (volume) +1x BIG BLACK BOX (on top of the box there is a small door closing a button-battery; for sure there is more in it, but I do not know how to open it / tore it apart) + +This game is the official Italian version of "Super Rider" by Subsino + +Info by f205v (29/12/2005) + +***************************************************************************/ + +ROM_START( smoto16 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "rideritaly_1ver1.6.u18", 0x0000, 0x10000, CRC(c7c0c3e8) SHA1(5dc80bc775f370653135a7b3ea9c8d3c92263804) ) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "rideritaly_3ver1.6.u16", 0x00000, 0x08000, CRC(998a8feb) SHA1(27f08b23f2dd3736f4f12f489d9a3aa096c99e8a) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "rideritaly_2ver1.6.u17", 0x20000, 0x08000, CRC(bdf9bf26) SHA1(49e7c0b99fec06dca5816eb7e38aed025efcaaa7) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "rideritaly_4ver1.6.u54", 0x00000, 0x20000, CRC(df828563) SHA1(f39324c5c37486ed9512e0ff934394556dd182ae) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "prom-n82s129an.u11", 0x000, 0x100, CRC(e17730a6) SHA1(50c730b24e1d3d205c70f9381e4136e2ba6e499a) ) + ROM_LOAD( "prom-n82s129an.u12", 0x100, 0x100, CRC(df848861) SHA1(f7e382f8b56d6b9f2af6c7a48a19e3631a64bb6d) ) + ROM_LOAD( "prom-n82s129an.u13", 0x200, 0x100, CRC(9cb4a5c0) SHA1(0e0a368329c6d1cb685ed655d699a4894988fdb1) ) +ROM_END + +DRIVER_INIT_MEMBER(subsino_state,smoto16) +{ + UINT8 *rom = memregion( "maincpu" )->base(); + rom[0x12d0] = 0x20; // "ERROR 951010" +} + +/*************************************************************************** + +Super Rider (Italy Ver 2.0) +(C)1997 Subsino + +Chips: + +2x custom QFP44 label SUBSINOSS9100 +1x custom DIP42 label SUBSINOSS9101 +2x D8255AC-2 (are they 8255 equivalent?) +1x custom QFP44 label K-665 (sound)(equivalent to OKI M6295) +1x custom DIP24 label SM64 (sound)(equivalent to YM3812) +1x custom DIP8 label K-664 (sound)(equivalent to YM3014) +1x oscillator 12.000MHz (main) +1x oscillator 4.433619MHz (sound) + +ROMs: + +1x 27C512 (1) +2x M27C1001 (2,3)(main) +1x M27C1001 (4) (sound) +3x PROM N82S129AN +3x PALCE16V8H (not dumped) +2x TIBPAL16L8B (not dumped) +1x GAL16V8B (not dumped) + +Other: + +1x 10x2 edge connector (looks like a coin payout) +1x 36x2 edge connector +1x battery 3.6V NiCd +4x 8 switches dips (sw1-4) +1x trimmer (volume) +1x BIG BLACK BOX (on top of the box there is a small door closing a button-battery; for sure there is more in it, but I do not know how to open it / tore it apart) + +This game is the official Italian version of "Super Rider" by Subsino + +Info by f205v, Corrado Tomaselli (20/04/2008) + +***************************************************************************/ + +ROM_START( smoto20 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "italyv2.0-25.u18", 0x00000, 0x10000, CRC(91abc76e) SHA1(b0eb3afda1d94111056559017802b16b2e72a9a5) ) + + ROM_REGION( 0x40000, "tilemap", 0 ) + ROM_LOAD( "3.u16", 0x00000, 0x08000, CRC(44b44385) SHA1(27c2865e52ab67aa8e077e8e1202cbf2addc0dfc) ) + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + ROM_LOAD( "2.u17", 0x20000, 0x08000, CRC(380fc964) SHA1(4a5076d90cb94e2ffeec7534ce64d4cdb320f374) ) + ROM_CONTINUE( 0x30000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x38000, 0x08000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "rom4ver1.0.u54", 0x00000, 0x20000, CRC(df828563) SHA1(f39324c5c37486ed9512e0ff934394556dd182ae) ) + + ROM_REGION( 0x300, "proms", 0 ) + ROM_LOAD( "82s129.u11", 0x000, 0x100, CRC(e17730a6) SHA1(50c730b24e1d3d205c70f9381e4136e2ba6e499a) ) + ROM_LOAD( "82s129.u12", 0x100, 0x100, CRC(df848861) SHA1(f7e382f8b56d6b9f2af6c7a48a19e3631a64bb6d) ) + ROM_LOAD( "82s129.u13", 0x200, 0x100, CRC(9cb4a5c0) SHA1(0e0a368329c6d1cb685ed655d699a4894988fdb1) ) +ROM_END + +/*************************************************************************** + + Treasure Bonus + (C) American Alpha + + CPU module marked 'Super Treasure Island' + +***************************************************************************/ + +ROM_START( stisub ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "trbon-rlu16.u12", 0x00000, 0x10000, CRC(07771290) SHA1(c485943045396d8580271504a1fec7c88579f4a2) ) + + ROM_REGION( 0x100000, "tilemap", 0 ) + ROM_LOAD( "sti-alpha_2-ver1.1.u30", 0x00000, 0x40000, CRC(3bc4c8c5) SHA1(12e868f4b4d4df6b59befcd785ab1fe5c1def58d) ) + ROM_LOAD( "sti-alpha_3-ver1.1.u29", 0x40000, 0x40000, CRC(5473c41a) SHA1(94294887af8ffc4f2edbcbde1c51797f20c44efe) ) + ROM_LOAD( "sti-alpha_4-ver1.1.u28", 0x80000, 0x40000, CRC(ccf895e1) SHA1(c12ecf0577b5b856d8202474f084003cc95da51c) ) + ROM_LOAD( "sti-alpha_5-ver1.1.u27", 0xc0000, 0x40000, CRC(98eed855) SHA1(89291b1b143924caa79a6d694f10c14d93c57eac) ) + + ROM_REGION( 0x80000, "reels", 0 ) + ROM_LOAD( "sti-alpha_6-ver1.1.u25", 0x00000, 0x20000, CRC(83471a70) SHA1(c63e4c1a8cfb6e7feae4fd97f7d77feaf63c949b) ) + ROM_LOAD( "sti-alpha_7-ver1.1.u24", 0x20000, 0x20000, CRC(05bc7ed2) SHA1(23ae716cd149ee940ac4bdc114fbfeb290e91b11) ) + ROM_LOAD( "sti-alpha_8-ver1.1.u23", 0x40000, 0x20000, CRC(d3c11545) SHA1(0383358d223c9bfe67c3b5de7a9cc3e43a9769b2) ) + ROM_LOAD( "sti-alpha_9-ver1.1.u22", 0x60000, 0x20000, CRC(9710a223) SHA1(76ef6bd77ae33d91a9b6a9a615d07caee3356dfb) ) +ROM_END + +/*************************************************************************** + +Tesorone Dell'Isola (2 sets) +(C) Subsino + +Italian version of "Treasure Bonus" + +PCB: SN01256-3 CS186P006-1 (same as "Treasure Bonus") + +Chips: + +1x pLSI 1032-60 +2x FILE KD89C55A (equivalent to 8255) +1x K-664 (equivalent to YM3014) +1x K-665 (equivalent to M6295) +1x K-666 (equivalent to YM3812) +1x custom DIP42 SUBSINO SS9101 +1x HMC HM86171-80 (RAMDAC) + +2x oscillator 12.000MHz ? +1x oscillator 4.43361MHz ? + +Other: + +1x empty ROM socket for upgrades +1x battery (unpopulated) +1x 6x2 edge connector (con2) +1x 36x2 edge connector +1x pushbutton (sw5) +4x 8 switches dips (sw1-4) +1x trimmer (volume) +1x BIG BLACK BOX + +***************************************************************************/ + +ROM_START( tesorone ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_1ver2.41.u12", 0x00000, 0x10000, CRC(b019b689) SHA1(ba7acd15842b29e6ac37795a4d6e0f93d99393a4) ) + + ROM_REGION( 0x100000, "tilemap", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_2ver1.7.u30", 0x00000, 0x40000, CRC(295887c5) SHA1(b36914977b276ac5e5e31902dff28796f3a28ea1) ) + ROM_LOAD( "tesorone.d.isol.italy_3ver1.7.u29", 0x40000, 0x40000, CRC(89469522) SHA1(ba373900e0310aad3d04ff58909f6144d9b689a7) ) + ROM_LOAD( "tesorone.d.isol.italy_4ver1.7.u28", 0x80000, 0x40000, CRC(2092a368) SHA1(05e1af15761e0186ea7ddb8b82c177e35fcdd382) ) + ROM_LOAD( "tesorone.d.isol.italy_5ver1.7.u27", 0xc0000, 0x40000, CRC(57870bad) SHA1(7a3342c5cc3ed5f48d2dda224913eb357aeb401b) ) + + ROM_REGION( 0x80000, "reels", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_6ver1.7.u25", 0x00000, 0x20000, CRC(e5578d00) SHA1(28882131d13f052bc31c3fc1b6dc5d9e45d30e82) ) + ROM_LOAD( "tesorone.d.isol.italy_7ver1.7.u24", 0x20000, 0x20000, CRC(c29a7841) SHA1(7bec4a4db0b545b9b9d9a4c14efa9442e7738d8a) ) + ROM_LOAD( "tesorone.d.isol.italy_8ver1.7.u23", 0x40000, 0x20000, CRC(2b4b195a) SHA1(cb165f6737231ae52dbf9775fff13b778835fcac) ) + ROM_LOAD( "tesorone.d.isol.italy_9ver1.7.u22", 0x60000, 0x20000, CRC(1c9f754e) SHA1(7b2feeeaaa4845d2fcfebb2c1bc4d6b69d937400) ) +ROM_END + +ROM_START( tesorone230 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_1ver2.3.u12", 0x00000, 0x10000, CRC(46cd019b) SHA1(40412ac1234ae0f31b13c4d3b48681da34f1ded9) ) + + ROM_REGION( 0x100000, "tilemap", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_2ver1.7.u30", 0x00000, 0x40000, CRC(295887c5) SHA1(b36914977b276ac5e5e31902dff28796f3a28ea1) ) + ROM_LOAD( "tesorone.d.isol.italy_3ver1.7.u29", 0x40000, 0x40000, CRC(89469522) SHA1(ba373900e0310aad3d04ff58909f6144d9b689a7) ) + ROM_LOAD( "tesorone.d.isol.italy_4ver1.7.u28", 0x80000, 0x40000, CRC(2092a368) SHA1(05e1af15761e0186ea7ddb8b82c177e35fcdd382) ) + ROM_LOAD( "tesorone.d.isol.italy_5ver1.7.u27", 0xc0000, 0x40000, CRC(57870bad) SHA1(7a3342c5cc3ed5f48d2dda224913eb357aeb401b) ) + + ROM_REGION( 0x80000, "reels", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_6ver1.7.u25", 0x00000, 0x20000, CRC(e5578d00) SHA1(28882131d13f052bc31c3fc1b6dc5d9e45d30e82) ) + ROM_LOAD( "tesorone.d.isol.italy_7ver1.7.u24", 0x20000, 0x20000, CRC(c29a7841) SHA1(7bec4a4db0b545b9b9d9a4c14efa9442e7738d8a) ) + ROM_LOAD( "tesorone.d.isol.italy_8ver1.7.u23", 0x40000, 0x20000, CRC(2b4b195a) SHA1(cb165f6737231ae52dbf9775fff13b778835fcac) ) + ROM_LOAD( "tesorone.d.isol.italy_9ver1.7.u22", 0x60000, 0x20000, CRC(1c9f754e) SHA1(7b2feeeaaa4845d2fcfebb2c1bc4d6b69d937400) ) +ROM_END + +ROM_START( tesorone240 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_1ver2.4.u12", 0x00000, 0x10000, CRC(6a7d5395) SHA1(448184b78b6a3e28f891731c83a4e2d1e283c205) ) + + ROM_REGION( 0x100000, "tilemap", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_2ver1.7.u30", 0x00000, 0x40000, CRC(295887c5) SHA1(b36914977b276ac5e5e31902dff28796f3a28ea1) ) + ROM_LOAD( "tesorone.d.isol.italy_3ver1.7.u29", 0x40000, 0x40000, CRC(89469522) SHA1(ba373900e0310aad3d04ff58909f6144d9b689a7) ) + ROM_LOAD( "tesorone.d.isol.italy_4ver1.7.u28", 0x80000, 0x40000, CRC(2092a368) SHA1(05e1af15761e0186ea7ddb8b82c177e35fcdd382) ) + ROM_LOAD( "tesorone.d.isol.italy_5ver1.7.u27", 0xc0000, 0x40000, CRC(57870bad) SHA1(7a3342c5cc3ed5f48d2dda224913eb357aeb401b) ) + + ROM_REGION( 0x80000, "reels", 0 ) + ROM_LOAD( "tesorone.d.isol.italy_6ver1.7.u25", 0x00000, 0x20000, CRC(e5578d00) SHA1(28882131d13f052bc31c3fc1b6dc5d9e45d30e82) ) + ROM_LOAD( "tesorone.d.isol.italy_7ver1.7.u24", 0x20000, 0x20000, CRC(c29a7841) SHA1(7bec4a4db0b545b9b9d9a4c14efa9442e7738d8a) ) + ROM_LOAD( "tesorone.d.isol.italy_8ver1.7.u23", 0x40000, 0x20000, CRC(2b4b195a) SHA1(cb165f6737231ae52dbf9775fff13b778835fcac) ) + ROM_LOAD( "tesorone.d.isol.italy_9ver1.7.u22", 0x60000, 0x20000, CRC(1c9f754e) SHA1(7b2feeeaaa4845d2fcfebb2c1bc4d6b69d937400) ) +ROM_END + + +/*************************************************************************** + + This is allegedly Magic Train - Clear NVRAM ROM: + + Subsino sold a "Settings/Clear ROM" for some released titles. + These devices are *extremely* expensive (and ultra rare, only sold + to big casino corporations), and should be placed in the empty socket + to fix a dead board due to NVRAM corruption. + + A version of Magic Train running on subsino.c (unlike mtrain, which is + subsino2.c) is needed to match this program ROM. + +***************************************************************************/ + +ROM_START( mtrainnv ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "mtrain_settings.bin", 0x00000, 0x10000, CRC(584af1b5) SHA1(91d966d282823dddfdc455bb03728fcdf3713dd7) ) + + ROM_REGION( 0x10000, "tilemap", 0 ) + ROM_LOAD( "mtrain_tilemap.bin", 0x00000, 0x10000, NO_DUMP ) + ROM_COPY( "maincpu", 0x0000, 0x00000, 0x10000 ) // just to show something + + ROM_REGION( 0x10000, "reels", 0 ) + ROM_LOAD( "mtrain_reels.bin", 0x00000, 0x10000, NO_DUMP ) + ROM_COPY( "maincpu", 0x0000, 0x00000, 0x10000 ) // just to show something +ROM_END + + +/*************************************************************************** +* Driver Init / Decryption * +***************************************************************************/ + +DRIVER_INIT_MEMBER(subsino_state,victor5) +{ + subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0xc000); +} + +DRIVER_INIT_MEMBER(subsino_state,victor21) +{ + subsino_decrypt(machine(), victor21_bitswaps, victor21_xors, 0xc000); +} + +DRIVER_INIT_MEMBER(subsino_state,crsbingo) +{ + subsino_decrypt(machine(), crsbingo_bitswaps, crsbingo_xors, 0xc000); +} + +DRIVER_INIT_MEMBER(subsino_state,sharkpy) +{ + subsino_decrypt(machine(), sharkpy_bitswaps, sharkpy_xors, 0xa000); +} + +DRIVER_INIT_MEMBER(subsino_state,sharkpye) +{ + subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0xa000); +} + +DRIVER_INIT_MEMBER(subsino_state,smoto20) +{ + UINT8 *rom = memregion( "maincpu" )->base(); + rom[0x12e1] = 0x20; // "ERROR 951010" +} + +DRIVER_INIT_MEMBER(subsino_state,tisub) +{ + UINT8 *rom = memregion( "maincpu" )->base(); + + DRIVER_INIT_CALL(victor5); + + /* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */ + rom[0x64c8] = 0x00; + rom[0x64c9] = 0x00; + rom[0x64ca] = 0x00; + rom[0x64cd] = 0x00; + rom[0x64ce] = 0x00; + rom[0x64cf] = 0x00; +} + +DRIVER_INIT_MEMBER(subsino_state,tisuba) +{ + UINT8 *rom = memregion( "maincpu" )->base(); + + DRIVER_INIT_CALL(victor5); + + /* this trips a z180 MMU core bug? It unmaps a region then the program code jumps to that region... */ + rom[0x6491] = 0x00; + rom[0x6492] = 0x00; + rom[0x6493] = 0x00; + rom[0x6496] = 0x00; + rom[0x6497] = 0x00; + rom[0x6498] = 0x00; +} + +DRIVER_INIT_MEMBER(subsino_state,stisub) +{ +#if 1 + UINT8 *rom = memregion( "maincpu" )->base(); + rom[0x1005] = 0x1d; //patch protection check + rom[0x7ab] = 0x18; //patch "winning protection" check + rom[0x957] = 0x18; //patch "losing protection" check +#endif + + m_stisub_colorram = auto_alloc_array(machine(), UINT8, 256*3); + + m_reel1_scroll.allocate(0x40); + m_reel2_scroll.allocate(0x40); + m_reel3_scroll.allocate(0x40); + + m_reel1_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel2_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel3_attr = auto_alloc_array(machine(), UINT8, 0x200); +} +DRIVER_INIT_MEMBER(subsino_state,tesorone) +{ +#if 1 + UINT8 *rom = memregion( "maincpu" )->base(); + rom[0x10a4] = 0x18; //patch protection check ("ERROR 08073"): + rom[0x10a5] = 0x11; + rom[0x8b6] = 0x18; //patch "winning protection" check + rom[0xa84] = 0x18; //patch "losing protection" check +#endif + + m_stisub_colorram = auto_alloc_array(machine(), UINT8, 256*3); + + m_reel1_scroll.allocate(0x40); + m_reel2_scroll.allocate(0x40); + m_reel3_scroll.allocate(0x40); + + m_reel1_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel2_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel3_attr = auto_alloc_array(machine(), UINT8, 0x200); +} + +DRIVER_INIT_MEMBER(subsino_state,tesorone230) +{ +#if 1 + UINT8 *rom = memregion( "maincpu" )->base(); //check this patch!!!! + rom[0x10a8] = 0x18; //patch protection check ("ERROR 08073"): + rom[0x10a9] = 0x11; + rom[0x8ba] = 0x18; //patch "winning protection" check + rom[0xa88] = 0x18; //patch "losing protection" check +#endif + + m_stisub_colorram = auto_alloc_array(machine(), UINT8, 256*3); + + m_reel1_scroll.allocate(0x40); + m_reel2_scroll.allocate(0x40); + m_reel3_scroll.allocate(0x40); + + m_reel1_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel2_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel3_attr = auto_alloc_array(machine(), UINT8, 0x200); +} + + +DRIVER_INIT_MEMBER(subsino_state,mtrainnv) +{ + m_stisub_colorram = auto_alloc_array(machine(), UINT8, 256*3); + + m_reel1_scroll.allocate(0x40); + m_reel2_scroll.allocate(0x40); + m_reel3_scroll.allocate(0x40); + + m_reel1_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel2_attr = auto_alloc_array(machine(), UINT8, 0x200); + m_reel3_attr = auto_alloc_array(machine(), UINT8, 0x200); +} + +/*************************************************************************** +* Game Drivers * +***************************************************************************/ + +// YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAMEL( 1990, victor21, 0, victor21, victor21, subsino_state, victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 ) + +GAMEL( 1991, victor5, 0, victor5, victor5, subsino_state, victor5, ROT0, "Subsino", "G.E.A.", 0, layout_victor5 ) // PCB black-box was marked 'victor 5' - in-game says G.E.A with no manufacturer info? + +GAMEL( 1992, tisub, 0, tisub, tisub, subsino_state, tisub, ROT0, "Subsino", "Treasure Island (Subsino, set 1)", 0, layout_tisub ) +GAMEL( 1992, tisuba, tisub, tisub, tisub, subsino_state, tisuba, ROT0, "Subsino", "Treasure Island (Subsino, set 2)", 0, layout_tisub ) + +GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, subsino_state, crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo ) + +GAMEL( 1995, stisub, 0, stisub, stisub, subsino_state, stisub, ROT0, "American Alpha", "Treasure Bonus (Subsino, v1.6)", 0, layout_stisub ) // board CPU module marked 'Super Treasure Island' (alt title?) +GAMEL( 1995, tesorone, stisub, stisub, tesorone, subsino_state, tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.41)", 0, layout_stisub ) +GAMEL( 1995, tesorone240, stisub, stisub, tesorone, subsino_state, tesorone, ROT0, "Subsino", "Tesorone Dell'Isola (Italy, v2.40)", 0, layout_stisub ) +GAMEL( 1995, tesorone230, stisub, stisub, tesorone, subsino_state, tesorone230,ROT0,"Subsino", "Tesorone Dell'Isola (Italy, v2.30)", 0, layout_stisub ) + +GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, subsino_state, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages? +GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, subsino_state, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages? +GAMEL( 1995, sharkpye, sharkpy, sharkpy, sharkpye, subsino_state, sharkpye, ROT0, "American Alpha", "Shark Party (English, Alpha license)", 0, layout_sharkpye ) // PCB black-box was marked 'victor 6' + +GAMEL( 1995, victor6, 0, sharkpy, victor6, subsino_state, sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3N)", 0, layout_sharkpye ) // ^^ +GAMEL( 1995, victor6a, victor6, sharkpy, victor6a, subsino_state, sharkpye, ROT0, "American Alpha", "Victor 6 (v2.3)", 0, layout_sharkpye ) // ^^ +GAMEL( 1995, victor6b, victor6, sharkpy, victor6b, subsino_state, sharkpye, ROT0, "American Alpha", "Victor 6 (v1.2)", 0, layout_sharkpye ) // ^^ Version # according to label, not displayed + +GAMEL( 1996, smoto20, 0, srider, smoto20, subsino_state, smoto20, ROT0, "Subsino", "Super Rider (Italy, v2.0)", 0, layout_smoto ) +GAMEL( 1996, smoto16, smoto20, srider, smoto16, subsino_state, smoto16, ROT0, "Subsino", "Super Moto (Italy, v1.6)", 0, layout_smoto ) + +GAME ( 1996, mtrainnv, mtrain, mtrainnv, stisub, subsino_state, mtrainnv, ROT0, "Subsino", "Magic Train (Clear NVRAM ROM?)", MACHINE_NOT_WORKING ) |