summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/subsino2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/subsino2.cpp')
-rw-r--r--src/mame/drivers/subsino2.cpp4018
1 files changed, 0 insertions, 4018 deletions
diff --git a/src/mame/drivers/subsino2.cpp b/src/mame/drivers/subsino2.cpp
deleted file mode 100644
index a9f78c69020..00000000000
--- a/src/mame/drivers/subsino2.cpp
+++ /dev/null
@@ -1,4018 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Luca Elia
-/************************************************************************************************************
-
- -= Subsino (Newer) Tilemaps Hardware =-
-
- driver by Luca Elia (l.elia@tin.it)
-
-
-Two 1024x512 tilemaps. 256 color tiles. Tiles are 8x8 or a multiple (dynamic tile size).
-There is RAM for 512 scroll values (line scroll). Video RAM is mirrored on multiple ranges.
-One peculiarity is that video RAM access is split into high and low byte. The former is mapped
-in program space, the latter in I/O space.
-
-----------------------------------------------------------------------------------------------------------------
-Year Game CPU Sound Custom Other
-----------------------------------------------------------------------------------------------------------------
-1996 Magic Train HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
-1996 Water-Nymph HD647180* U6295 SS9601, SS9602 HM86171 RAMDAC, Battery
-1998 Express Card AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-1998 Ying Hua Lian AM188-EM M6295 + YM3812? SS9601, SS9602 HM86171 RAMDAC, Battery
-1999 Bishou Jan H8/3044** SS9904 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-1999 X-Train/P-Train AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-2000 New 2001 H8/3044** SS9904 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-2001 Queen Bee H8/3044** SS9804 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-2001 Humlan's Lyckohjul H8/3044** SS9804 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-2002 Super Queen Bee H8/3044** ? ? ?
-2006 X-Plan AM188-EM M6295 SS9601, SS9802, SS9803 HM86171 RAMDAC, Battery
-----------------------------------------------------------------------------------------------------------------
-*SS9600 **SS9689
-
-To do:
-
-- Implement serial communication, remove patches (used for protection).
-- Add sound to SS9804/SS9904 games.
-- ptrain: missing scroll in race screens.
-- humlan: empty reels when bonus image should scroll in via L0 scroll. The image (crown/fruits) is at y > 0x100 in the tilemap.
-- bishjan, new2001, humlan, saklove, squeenb: game is sometimes too fast (can bishjan read the VBLANK state? saklove and xplan can).
-- xtrain: it runs faster than a video from the real thing. It doesn't use vblank irqs (but reads the vblank bit).
-- mtrain: implement hopper. Double up does not work?
-
-************************************************************************************************************/
-
-#include "emu.h"
-#include "cpu/h8/h83048.h"
-#include "cpu/i86/i186.h"
-#include "cpu/z180/z180.h"
-#include "machine/nvram.h"
-#include "machine/subsino.h"
-#include "machine/ticket.h"
-#include "sound/3812intf.h"
-#include "sound/okim6295.h"
-#include "video/ramdac.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-#include "tilemap.h"
-
-
-enum tilesize_t : uint8_t
-{
- TILE_8x8,
- TILE_8x32,
- TILE_64x32
-};
-
-ALLOW_SAVE_TYPE(tilesize_t);
-
-enum vram_t
-{
- VRAM_LO,
- VRAM_HI
-};
-
-
-// Layers
-struct layer_t
-{
- std::unique_ptr<uint16_t[]> videoram;
-
- std::unique_ptr<uint16_t[]> scrollram;
- int scroll_x;
- int scroll_y;
-
- tilemap_t *tmap;
- tilesize_t tilesize;
-
-};
-
-class subsino2_state : public driver_device
-{
-public:
- subsino2_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_outputs16(*this, "outputs16")
- , m_outputs(*this, "outputs")
- , m_maincpu(*this, "maincpu")
- , m_oki(*this, "oki")
- , m_gfxdecode(*this, "gfxdecode")
- , m_screen(*this, "screen")
- , m_palette(*this, "palette")
- , m_hopper(*this, "hopper")
- , m_ticket(*this, "ticket")
- , m_keyb(*this, "KEYB_%u", 0U)
- , m_dsw(*this, "DSW%u", 1U)
- , m_system(*this, "SYSTEM")
- , m_leds(*this, "led%u", 0U)
- { }
-
- void bishjan(machine_config &config);
- void saklove(machine_config &config);
- void mtrain(machine_config &config);
- void humlan(machine_config &config);
- void new2001(machine_config &config);
- void expcard(machine_config &config);
- void xplan(machine_config &config);
- void xtrain(machine_config &config);
- void ptrain(machine_config &config);
-
- void init_bishjan();
- void init_new2001();
- void init_queenbee();
- void init_queenbeeb();
- void init_humlan();
- void init_squeenb();
- void init_qbeebing();
- void init_treamary();
- void init_xtrain();
- void init_expcard();
- void init_wtrnymph();
- void init_mtrain();
- void init_strain();
- void init_tbonusal();
- void init_saklove();
- void init_xplan();
- void init_ptrain();
- void init_treacity();
- void init_treacity202();
-
-protected:
- virtual void video_start() override;
-
-private:
- DECLARE_WRITE8_MEMBER(ss9601_byte_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_byte_lo2_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_0_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_0_hi_lo2_w);
- DECLARE_READ8_MEMBER(ss9601_videoram_0_hi_r);
- DECLARE_READ8_MEMBER(ss9601_videoram_0_lo_r);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_1_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_videoram_1_hi_lo2_w);
- DECLARE_READ8_MEMBER(ss9601_videoram_1_hi_r);
- DECLARE_READ8_MEMBER(ss9601_videoram_1_lo_r);
- DECLARE_WRITE8_MEMBER(ss9601_reelram_hi_lo_w);
- DECLARE_READ8_MEMBER(ss9601_reelram_hi_r);
- DECLARE_READ8_MEMBER(ss9601_reelram_lo_r);
- DECLARE_WRITE8_MEMBER(ss9601_scrollctrl_w);
- DECLARE_WRITE8_MEMBER(ss9601_tilesize_w);
- DECLARE_WRITE8_MEMBER(ss9601_scroll_w);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_hi_w);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_0_hi_lo_w);
- DECLARE_READ8_MEMBER(ss9601_scrollram_0_hi_r);
- DECLARE_READ8_MEMBER(ss9601_scrollram_0_lo_r);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_hi_w);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_lo_w);
- DECLARE_WRITE8_MEMBER(ss9601_scrollram_1_hi_lo_w);
- DECLARE_READ8_MEMBER(ss9601_scrollram_1_hi_r);
- DECLARE_READ8_MEMBER(ss9601_scrollram_1_lo_r);
- DECLARE_WRITE8_MEMBER(ss9601_disable_w);
- DECLARE_WRITE8_MEMBER(dsw_mask_w);
- DECLARE_READ8_MEMBER(dsw_r);
- DECLARE_READ8_MEMBER(vblank_bit2_r);
- DECLARE_READ8_MEMBER(vblank_bit6_r);
- DECLARE_WRITE16_MEMBER(bishjan_sound_w);
- DECLARE_READ16_MEMBER(bishjan_serial_r);
- DECLARE_WRITE16_MEMBER(bishjan_input_w);
- DECLARE_READ16_MEMBER(bishjan_input_r);
- DECLARE_WRITE16_MEMBER(bishjan_outputs_w);
- DECLARE_WRITE16_MEMBER(new2001_outputs_w);
- DECLARE_WRITE16_MEMBER(humlan_outputs_w);
- DECLARE_WRITE8_MEMBER(expcard_outputs_w);
- DECLARE_WRITE8_MEMBER(mtrain_outputs_w);
- DECLARE_WRITE8_MEMBER(mtrain_videoram_w);
- DECLARE_WRITE8_MEMBER(mtrain_tilesize_w);
- DECLARE_READ8_MEMBER(mtrain_prot_r);
- DECLARE_WRITE8_MEMBER(saklove_outputs_w);
- DECLARE_WRITE8_MEMBER(xplan_outputs_w);
- DECLARE_WRITE8_MEMBER(xtrain_outputs_w);
- DECLARE_READ8_MEMBER(xtrain_subsino_r);
- DECLARE_WRITE8_MEMBER(oki_bank_bit0_w);
- DECLARE_WRITE8_MEMBER(oki_bank_bit4_w);
-
- TILE_GET_INFO_MEMBER(ss9601_get_tile_info_0);
- TILE_GET_INFO_MEMBER(ss9601_get_tile_info_1);
- uint32_t screen_update_subsino2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
-
- void bishjan_map(address_map &map);
- void expcard_io(address_map &map);
- void humlan_map(address_map &map);
- void mtrain_io(address_map &map);
- void mtrain_map(address_map &map);
- void new2001_base_map(address_map &map);
- void new2001_map(address_map &map);
- void ramdac_map(address_map &map);
- void saklove_io(address_map &map);
- void saklove_map(address_map &map);
- void xplan_common_io(address_map &map);
- void xplan_io(address_map &map);
- void xplan_map(address_map &map);
- void xtrain_io(address_map &map);
-
- virtual void machine_start() override { m_leds.resolve(); }
-
- layer_t m_layers[2];
- uint8_t m_ss9601_byte_lo;
- uint8_t m_ss9601_byte_lo2;
- std::unique_ptr<uint16_t[]> m_ss9601_reelram;
- bitmap_ind16 m_reelbitmap;
- uint8_t m_ss9601_scrollctrl;
- uint8_t m_ss9601_tilesize;
- uint8_t m_ss9601_disable;
- uint8_t m_dsw_mask;
- optional_shared_ptr<uint16_t> m_outputs16;
- optional_shared_ptr<uint8_t> m_outputs;
- uint16_t m_bishjan_sound;
- uint16_t m_bishjan_input;
-
- required_device<cpu_device> m_maincpu;
- optional_device<okim6295_device> m_oki;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
- optional_device<ticket_dispenser_device> m_hopper;
- optional_device<ticket_dispenser_device> m_ticket;
- optional_ioport_array<5> m_keyb;
- optional_ioport_array<4> m_dsw;
- optional_ioport m_system;
- output_finder<9> m_leds;
-
- inline void ss9601_get_tile_info(layer_t *l, tile_data &tileinfo, tilemap_memory_index tile_index);
-};
-
-
-
-/***************************************************************************
- Tilemaps Access
-***************************************************************************/
-
-inline void subsino2_state::ss9601_get_tile_info(layer_t *l, tile_data &tileinfo, tilemap_memory_index tile_index)
-{
- int addr;
- uint16_t offs;
- switch (l->tilesize)
- {
- default:
- case TILE_8x8: addr = tile_index; offs = 0; break;
- case TILE_8x32: addr = tile_index & (~0x180); offs = (tile_index/0x80) & 3; break;
- case TILE_64x32: addr = tile_index & (~0x187); offs = ((tile_index/0x80) & 3) + (tile_index & 7) * 4; break;
- }
- SET_TILE_INFO_MEMBER(0, l->videoram[addr] + offs, 0, 0);
-}
-
-// Layer 0
-TILE_GET_INFO_MEMBER(subsino2_state::ss9601_get_tile_info_0)
-{
- ss9601_get_tile_info(&m_layers[0], tileinfo, tile_index);
-}
-
-// Layer 1
-TILE_GET_INFO_MEMBER(subsino2_state::ss9601_get_tile_info_1)
-{
- ss9601_get_tile_info(&m_layers[1], tileinfo, tile_index);
-}
-
-
-WRITE8_MEMBER(subsino2_state::ss9601_byte_lo_w)
-{
- m_ss9601_byte_lo = data;
-}
-WRITE8_MEMBER(subsino2_state::ss9601_byte_lo2_w)
-{
- m_ss9601_byte_lo2 = data;
-}
-
-
-static inline void ss9601_videoram_w(layer_t *l, vram_t vram, address_space &space, offs_t offset, uint8_t data)
-{
- switch (vram)
- {
- case VRAM_HI:
- l->videoram[offset] = uint8_t(data) << 8 | (l->videoram[offset] & 0xff);
- break;
-
- case VRAM_LO:
- l->videoram[offset] = data | (l->videoram[offset] & 0xff00);
- break;
- }
-
- switch (l->tilesize)
- {
- default:
- case TILE_8x8:
- l->tmap->mark_tile_dirty(offset);
- break;
-
- case TILE_8x32:
- offset &= ~0x180;
- for (int y = 0; y < 0x80*4; y += 0x80)
- l->tmap->mark_tile_dirty(offset + y);
- break;
-
- case TILE_64x32:
- offset &= ~0x187;
- for (int x = 0; x < 8; x++)
- for (int y = 0; y < 0x80*4; y += 0x80)
- l->tmap->mark_tile_dirty(offset + y + x);
- break;
- }
-}
-
-// Layer 0
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_w)
-{
- ss9601_videoram_w(&m_layers[0], VRAM_HI, space, offset, data);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_lo_w)
-{
- ss9601_videoram_w(&m_layers[0], VRAM_LO, space, offset, data);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_lo_w)
-{
- ss9601_videoram_w(&m_layers[0], VRAM_HI, space, offset, data);
- ss9601_videoram_w(&m_layers[0], VRAM_LO, space, offset, m_ss9601_byte_lo);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_0_hi_lo2_w)
-{
- ss9601_videoram_w(&m_layers[0], VRAM_HI, space, offset, data);
- ss9601_videoram_w(&m_layers[0], VRAM_LO, space, offset, m_ss9601_byte_lo2);
-}
-
-READ8_MEMBER(subsino2_state::ss9601_videoram_0_hi_r)
-{
- return m_layers[0].videoram[offset] >> 8;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_videoram_0_lo_r)
-{
- return m_layers[0].videoram[offset] & 0xff;
-}
-
-// Layer 1
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_w)
-{
- ss9601_videoram_w(&m_layers[1], VRAM_HI, space, offset, data);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_lo_w)
-{
- ss9601_videoram_w(&m_layers[1], VRAM_LO, space, offset, data);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_lo_w)
-{
- ss9601_videoram_w(&m_layers[1], VRAM_HI, space, offset, data);
- ss9601_videoram_w(&m_layers[1], VRAM_LO, space, offset, m_ss9601_byte_lo);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_videoram_1_hi_lo2_w)
-{
- ss9601_videoram_w(&m_layers[1], VRAM_HI, space, offset, data);
- ss9601_videoram_w(&m_layers[1], VRAM_LO, space, offset, m_ss9601_byte_lo2);
-}
-
-READ8_MEMBER(subsino2_state::ss9601_videoram_1_hi_r)
-{
- return m_layers[1].videoram[offset] >> 8;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_videoram_1_lo_r)
-{
- return m_layers[1].videoram[offset] & 0xff;
-}
-
-// Layer 0 Reels
-
-WRITE8_MEMBER(subsino2_state::ss9601_reelram_hi_lo_w)
-{
- m_ss9601_reelram[offset] = uint16_t(data) << 8 | m_ss9601_byte_lo;
-}
-READ8_MEMBER(subsino2_state::ss9601_reelram_hi_r)
-{
- return m_ss9601_reelram[offset] >> 8;
-}
-READ8_MEMBER(subsino2_state::ss9601_reelram_lo_r)
-{
- return m_ss9601_reelram[offset] & 0xff;
-}
-
-
-/***************************************************************************
- Tilemaps Tile Size
-
-
-mtrain:
-
-80 = 00 40 = - L0 = 8x8 L1 = 8x8 ; title screen
-80 = 01 40 = - L0 = REEL L1 = 8x8 ; gameplay (center reel)
-80 = 01 40 = - L0 = REEL L1 = 8x8 ; girl slot (top, bottom reels)
-
-xtrain:
-
-80 = 00 40 = FD L0 = - L1 = 8x8 ; ram test (disable = 01 -> L0 disabled)
-80 = 40 40 = FD L0 = REEL L1 = 8x8 ; game play (center reel) as well as "BONUS" screen (top reel)
-80 = 40 40 = FD L0 = REEL L1 = 8x8 ; lose/treasure slot (center reel)
-80 = 00 40 = BF L0 = 8x8 L1 = 8x8 ; car screen [L0 line scroll every 32]
-80 = 00 40 = EF L0 = 8x8 L1 = 8x8 ; title screen, L0 normal scroll (scrollram is 0) [L1 line scroll every 8]
-80 = 40 40 = 00 L0 = 8x16? L1 = 8x8 ; girl dancing
-80 = 00 40 = FF L0 = 8x8 L1 = 8x8 ; soft dsw screen
-
-xplan:
-
-80 = 00 40 = FD L0 = - L1 = 8x8 ; ram test (disable = 01 -> L0 disabled)
-80 = 40 40 = BF L0 = 8x32 L1 = 8x8 ; title screen [L0 line scroll every 32, L1 line scroll disabled?] / 3 planes with scrolling clouds (before title screen)
-80 = 00 40 = EF L0 = 8x8 L1 = 8x8 ; parachutist and cars demo [L1 line scroll every 8]
-80 = 70 40 = FF L0 = 64x32 L1 = 8x8 ; shoot'em up demo / gambling demo
-80 = 00 40 = FF L0 = 8x8 L1 = 8x8 ; test mode and stat screens
-
-bishjan:
-
-80 = 00 40 = FD L0 = - L1 = 8x8 ; ram test (disable = 01 -> L0 disabled)
-80 = 00 40 = 0F L0 = 8x8 L1 = 8x8 ; soft dsw screen
-80 = 00 40 = 0x L0 = 8x8 L1 = 8x8 ; stat screens and gameplay (40 = 07/0d, seems a don't care)
-
-saklove:
-
-80 = 00 40 = 0D L0 = - L1 = 8x8 ; ram test (disable = 01 -> L0 disabled)
-80 = 00 40 = 0D L0 = 8x8 L1 = 8x8 ; gameplay / square of tiles screen
-80 = 00 40 = 0F L0 = 8x8 L1 = 8x8 ; title screen / instructions / double up screen
-80 = 00 40 = 07 L0 = 8x8 L1 = 8x8 ; pool [L0 line scroll]
-
------
-
-More registers, at boot (never changed AFAICT):
-
-mtrain, saklove xtrain, expcard
-wtrnymph xplan
-
- C0 = 0A C0 = 0A
- E0 = 18 E0 = 18
-
-9100 = 13 200 = 13 200 = 13 200 = 13
-9101 = 20 201 = 20 201 = 20 201 = 20
-9102 = 20 202 = 20 202 = 20 202 = 20
-9103 = 33 203 = 33 203 = 33 203 = 33
-9104 = DC 204 = DC 204 = DC 204 = DC
-9105 = A0 205 = A0 205 = A0 205 = A0
-9106 = FA 206 = FA 206 = FA 206 = FA
-9107 = 00 207 = 00 207 = 00 207 = 00
-9108 = 33 208 = 33 208 = 33 208 = 33
-9109 = 16 209 = 0E 209 = 0E 209 = 0E
-910A = F6 20A = FD 20A = FD 20A = FD *F5 in wtrnymph
-910B = 22 20B = 22 20B = 22 20B = 22
-910C = FE 20C = FE 20C = FE 20C = FE
-910D = FB 20D = FB 20D = FB 20D = FB
-910E = F8 20E = F8 20E = F8 20E = F8
-910F = 02 20F = 02 20F = 02 20F = 02
-9110 = 13 210 = 13 210 = 13 210 = 13
-9111 = 10 211 = 00 211 = 00 211 = 00
-9112 = 62 212 = 82 212 = 82 212 = 82
-9113 = 13 213 = 33 213 = 33 213 = 33
-9114 = 80 214 = 0E 214 = 0E 214 = 0E
-9115 = 80 215 = FD 215 = FD 215 = FD
-9116 = 13 216 = 13 216 = 13 216 = 13
-9117 = 42 217 = 42 217 = 42 217 = 42
-9118 = 42 218 = 42 218 = 42 218 = 42
-9119 = 13 219 = 13 219 = 13 219 = 13
-911A = 20 21A = 20 21A = 20 21A = 20
-911B = 42 21B = 62 21B = 62 21B = 62
-9126 = 0C 226 = 08 226 = 08 226 = 08
-9127 = 0C 227 = 0C 227 = 0C 227 = 0C
-9130 = 00 230 = 00 230 = 00 230 = 00
-9131 = 00 231 = 00 231 = 00 231 = 00
-9132 = 00 232 = FB 232 = FB 232 = FB
-9133 = 00 233 = FF 233 = FF 233 = FF
-9134 = 00 234 = 22 234 = 20 234 = 20
-9135 = 00 235 = 02
-9136 = 00
-9137 = 00 237 = 00 237 = 00 237 = 00
-
-9149 = FF 312 = FF 309 = FF 312 = FF
-914A = FF 311 = FF 30A = FF 311 = FF
-914B = FF 310 = FF 30B = FF 310 = FF
-914C = 47 30F = 47 30C = 47 30F = 47
-914D = 00 30E = 00 30D = 00 30E = 00
-914E = 00 30D = 00 30E = 00 30D = 00
-914F = 00 30C = 00 30F = 00 30C = 00
-9150 = C0 30B = C0 310 = C0 30B = C0
-9151 = FF 30A = FF 311 = FF 30A = FF
-9153 = 00 313 = 00
-
-***************************************************************************/
-
-// These are written in sequence
-
-WRITE8_MEMBER(subsino2_state::ss9601_scrollctrl_w)
-{
- m_ss9601_scrollctrl = data;
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_tilesize_w)
-{
- m_ss9601_tilesize = data;
-
- tilesize_t sizes[2];
- switch ((data&0xf0)>>4)
- {
- case 0x0:
- sizes[0] = TILE_8x8;
- break;
-
- case 0x4:
- sizes[0] = TILE_8x32;
- break;
-
- case 0x7:
- sizes[0] = TILE_64x32;
- break;
-
- default:
- sizes[0] = TILE_8x8;
-
- logerror("%s: warning, layer 0 unknown tilesize = %02x\n", machine().describe_context(), data);
- popmessage("layer 0 UNKNOWN TILESIZE %02X", data);
- break;
- }
-
- switch (data&0x0f)
- {
- case 0x0:
- sizes[1] = TILE_8x8;
- break;
-
- case 0x4:
- sizes[1] = TILE_8x32;
- break;
-
- case 0x7:
- sizes[1] = TILE_64x32;
- break;
-
- default:
- sizes[1] = TILE_8x8;
-
- logerror("%s: warning, layer 1 unknown tilesize = %02x\n", machine().describe_context(), data);
- popmessage("layer 1 UNKNOWN TILESIZE %02X", data);
- break;
- }
-
-
- for (int i = 0; i < 2; i++)
- {
- layer_t *l = &m_layers[i];
-
- if (l->tilesize != sizes[i])
- {
- l->tilesize = sizes[i];
- l->tmap->mark_all_dirty();
- }
- }
-}
-
-/***************************************************************************
- Tilemaps Scroll
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::ss9601_scroll_w)
-{
- layer_t *layers = m_layers;
- switch ( offset )
- {
- // Layer 0
- case 0: layers[0].scroll_x = (layers[0].scroll_x & 0xf00) | data; break; // x low
- case 1: layers[0].scroll_y = (layers[0].scroll_y & 0xf00) | data; break; // y low
- case 2: layers[0].scroll_x = (layers[0].scroll_x & 0x0ff) | ((data & 0x0f) << 8); // y|x high bits
- layers[0].scroll_y = (layers[0].scroll_y & 0x0ff) | ((data & 0xf0) << 4); break;
-
- // Layer 1
- case 3: layers[1].scroll_x = (layers[1].scroll_x & 0xf00) | data; break; // x low
- case 4: layers[1].scroll_y = (layers[1].scroll_y & 0xf00) | data; break; // y low
- case 5: layers[1].scroll_x = (layers[1].scroll_x & 0x0ff) | ((data & 0x0f) << 8); // y|x high bits
- layers[1].scroll_y = (layers[1].scroll_y & 0x0ff) | ((data & 0xf0) << 4); break;
- }
-}
-
-// Layer 0
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_w)
-{
- m_layers[0].scrollram[offset] = uint16_t(data) << 8 | (m_layers[0].scrollram[offset] & 0xff);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_lo_w)
-{
- m_layers[0].scrollram[offset] = data | (m_layers[0].scrollram[offset] & 0xff00);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_lo_w)
-{
- m_layers[0].scrollram[offset] = uint16_t(data) << 8 | m_ss9601_byte_lo;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_scrollram_0_hi_r)
-{
- return m_layers[0].scrollram[offset] >> 8;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_scrollram_0_lo_r)
-{
- return m_layers[0].scrollram[offset] & 0xff;
-}
-
-// Layer 1
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_w)
-{
- m_layers[1].scrollram[offset] = uint16_t(data) << 8 | (m_layers[1].scrollram[offset] & 0xff);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_lo_w)
-{
- m_layers[1].scrollram[offset] = data | (m_layers[1].scrollram[offset] & 0xff00);
-}
-
-WRITE8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_lo_w)
-{
- m_layers[1].scrollram[offset] = uint16_t(data) << 8 | m_ss9601_byte_lo;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_scrollram_1_hi_r)
-{
- return m_layers[1].scrollram[offset] >> 8;
-}
-
-READ8_MEMBER(subsino2_state::ss9601_scrollram_1_lo_r)
-{
- return m_layers[1].scrollram[offset] & 0xff;
-}
-
-
-/***************************************************************************
- Tilemaps Disable
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::ss9601_disable_w)
-{
- m_ss9601_disable = data;
-}
-
-
-/***************************************************************************
- Video Update
-***************************************************************************/
-
-void subsino2_state::video_start()
-{
- // SS9601 Regs:
-
- m_ss9601_tilesize = TILE_8x8;
- m_ss9601_scrollctrl = 0xfd; // not written by mtrain, default to reels on
- m_ss9601_disable = 0x00;
-
- save_item(NAME(m_ss9601_byte_lo));
- save_item(NAME(m_ss9601_byte_lo2));
- save_item(NAME(m_ss9601_tilesize));
- save_item(NAME(m_ss9601_scrollctrl));
- save_item(NAME(m_ss9601_disable));
-
- // SS9601 Layers:
-
- for (int i = 0; i < 2; i++)
- {
- layer_t *l = &m_layers[i];
-
- l->tmap = &machine().tilemap().create(*m_gfxdecode, i ?
- tilemap_get_info_delegate(*this, FUNC(subsino2_state::ss9601_get_tile_info_1)) :
- tilemap_get_info_delegate(*this, FUNC(subsino2_state::ss9601_get_tile_info_0)),
- TILEMAP_SCAN_ROWS, 8,8, 0x80,0x40);
-
- l->tmap->set_transparent_pen(0);
-
- // line scroll
- l->tmap->set_scroll_rows(0x200);
-
- l->videoram = std::make_unique<uint16_t[]>(0x80 * 0x40);
-
- l->scrollram = make_unique_clear<uint16_t[]>(0x200);
-
- save_pointer(NAME(l->videoram), 0x80 * 0x40, i);
- save_pointer(NAME(l->scrollram), 0x200, i);
-
- save_item(NAME(l->scroll_x), i);
- save_item(NAME(l->scroll_y), i);
- save_item(NAME(l->tilesize), i);
- }
-
- // SS9601 Reels:
-
- m_ss9601_reelram = make_unique_clear<uint16_t[]>(0x2000);
-
- m_reelbitmap.allocate(0x80*8, 0x40*8);
-
- save_pointer(NAME(m_ss9601_reelram), 0x2000);
-
- save_item(NAME(m_dsw_mask));
- save_item(NAME(m_bishjan_sound));
- save_item(NAME(m_bishjan_input));
-}
-
-uint32_t subsino2_state::screen_update_subsino2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int layers_ctrl = ~m_ss9601_disable;
- int y;
-
-#ifdef MAME_DEBUG
- if (machine().input().code_pressed(KEYCODE_Z))
- {
- int msk = 0;
- if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1;
- if (machine().input().code_pressed(KEYCODE_W)) msk |= 2;
- if (msk != 0) layers_ctrl &= msk;
- }
-#endif
-
- // Line Scroll / Reel Control
- int mask_y[2] = {0, 0};
- bool l0_reel = false;
- switch ( m_ss9601_scrollctrl )
- {
- case 0xbf:
- mask_y[0] = ~(32-1);
- break;
- case 0xef:
- mask_y[1] = ~(8-1);
- break;
- case 0x07:
- mask_y[0] = ~(8-1);
- break;
-// case 0x7f: // ptrain
-// break;
- case 0xfd:
- l0_reel = true;
- break;
- }
-
- // Scroll
- for (int i = 0; i < 2; i++)
- {
- layer_t *l = &m_layers[i];
-
- l->tmap->set_scroll_cols(1);
- l->tmap->set_scroll_rows(0x200);
- l->tmap->set_scrolly(0, l->scroll_y + 1);
-
- // line scroll
-
- uint16_t scroll_dx = 0;
- for (y = 0; y < 0x200; y++)
- {
- if (mask_y[i])
- scroll_dx = l->scrollram[y & mask_y[i]];
-
- l->tmap->set_scrollx(y, l->scroll_x + scroll_dx);
- }
- }
-
- bitmap.fill(m_palette->black_pen(), cliprect);
-
- if (layers_ctrl & 1)
- {
- layer_t *l = &m_layers[0];
-
- if (l0_reel)
- {
- l->tmap->set_scroll_rows(1);
- l->tmap->set_scroll_cols(1);
-
- for (int y = 0; y < 0x20/4; y++)
- {
- for (int x = 0; x < 0x80; x++)
- {
- rectangle visible;
- visible.min_x = 8 * x;
- visible.max_x = 8 * (x+1) - 1;
- visible.min_y = 4 * 0x10 * y;
- visible.max_y = 4 * 0x10 * (y+1) - 1;
-
- int reeladdr = y * 0x80 * 4 + x;
- uint16_t reelscroll = m_ss9601_reelram[reeladdr];
-
- l->tmap->set_scrollx(0, (reelscroll >> 9) * 8 - visible.min_x);
-
- // wrap around at half tilemap (0x100)
- int reelscroll_y = (reelscroll & 0x100) + ((reelscroll - visible.min_y) & 0xff);
- int reelwrap_y = 0x100 - (reelscroll_y & 0xff);
-
- //visible &= cliprect;
- rectangle tmp = visible;
-
- // draw above the wrap around y
- if ( reelwrap_y-1 >= visible.min_y )
- {
- if ( reelwrap_y-1 <= visible.max_y )
- tmp.max_y = reelwrap_y-1;
- l->tmap->set_scrolly(0, reelscroll_y);
- l->tmap->draw(screen, m_reelbitmap, tmp, TILEMAP_DRAW_OPAQUE);
- tmp.max_y = visible.max_y;
- }
-
- // draw below the wrap around y
- if ( reelwrap_y <= visible.max_y )
- {
- if ( reelwrap_y >= visible.min_y )
- tmp.min_y = reelwrap_y;
- l->tmap->set_scrolly(0, -((reelwrap_y &0xff) | (reelscroll_y & 0x100)));
- l->tmap->draw(screen, m_reelbitmap, tmp, TILEMAP_DRAW_OPAQUE);
- tmp.min_y = visible.min_y;
- }
- }
- }
-
- int32_t sx = -l->scroll_x;
- int32_t sy = -(l->scroll_y + 1);
- copyscrollbitmap(bitmap, m_reelbitmap, 1, &sx, 1, &sy, cliprect);
- }
- else
- {
- l->tmap->draw(screen, bitmap, cliprect, 0, 0);
- }
- }
-
- if (layers_ctrl & 2) m_layers[1].tmap->draw(screen, bitmap, cliprect, 0, 0);
-
-// popmessage("scrl: %03x,%03x - %03x,%03x dis: %02x siz: %02x ctrl: %02x", m_layers[0].scroll_x,m_layers[0].scroll_y, m_layers[1].scroll_x,m_layers[1].scroll_y, m_ss9601_disable, m_ss9601_tilesize, m_ss9601_scrollctrl);
-
- return 0;
-}
-
-/***************************************************************************
- Input / Output
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::dsw_mask_w)
-{
- m_dsw_mask = data;
-}
-
-READ8_MEMBER(subsino2_state::dsw_r)
-{
- return ( (m_dsw[0]->read() & m_dsw_mask) ? 0x01 : 0 ) |
- ( (m_dsw[1]->read() & m_dsw_mask) ? 0x02 : 0 ) |
- ( (m_dsw[2]->read() & m_dsw_mask) ? 0x04 : 0 ) |
- ( (m_dsw[3]->read() & m_dsw_mask) ? 0x08 : 0 ) ;
-}
-
-
-READ8_MEMBER(subsino2_state::vblank_bit2_r)
-{
- return m_screen->vblank() ? 0x04 : 0x00;
-}
-READ8_MEMBER(subsino2_state::vblank_bit6_r)
-{
- return m_screen->vblank() ? 0x40 : 0x00;
-}
-
-WRITE8_MEMBER(subsino2_state::oki_bank_bit0_w)
-{
- // it writes 0x32 or 0x33
- m_oki->set_rom_bank(data & 1);
-}
-
-WRITE8_MEMBER(subsino2_state::oki_bank_bit4_w)
-{
- // it writes 0x23 or 0x33
- m_oki->set_rom_bank((data >> 4) & 1);
-}
-
-
-/***************************************************************************
- Memory Maps
-***************************************************************************/
-
-/***************************************************************************
- Bishou Jan
-***************************************************************************/
-
-WRITE16_MEMBER(subsino2_state::bishjan_sound_w)
-{
- /*
- sound writes in service mode:
- 01 88 04 00 (coin in)
- 02 89 04 0v (v = voice = 0..3)
- */
- if (ACCESSING_BITS_8_15)
- m_bishjan_sound = data >> 8;
-}
-
-READ16_MEMBER(subsino2_state::bishjan_serial_r)
-{
- return
- (machine().rand() & 0x9800) | // bit 7 - serial communication
- (((m_bishjan_sound == 0x12) ? 0x40:0x00) << 8) | // bit 6 - sound communication
-// (machine().rand() & 0xff);
-// (((m_screen->frame_number()%60)==0)?0x18:0x00);
- 0x18;
-}
-
-WRITE16_MEMBER(subsino2_state::bishjan_input_w)
-{
- if (ACCESSING_BITS_8_15)
- m_bishjan_input = data >> 8;
-}
-
-READ16_MEMBER(subsino2_state::bishjan_input_r)
-{
- uint16_t res = 0xff;
-
- for (int i = 0; i < 5; i++)
- if (m_bishjan_input & (1 << i))
- res = m_keyb[i]->read();
-
- return (res << 8) | // high byte
- m_system->read(); // low byte
-}
-
-WRITE16_MEMBER(subsino2_state::bishjan_outputs_w)
-{
- COMBINE_DATA( &m_outputs16[offset] );
-
- switch (offset)
- {
- case 0:
- if (ACCESSING_BITS_0_7)
- {
- // coin out BIT(data, 0)
- m_hopper->motor_w(BIT(data, 1)); // hopper
- machine().bookkeeping().coin_counter_w(0, BIT(data, 4));
- }
- break;
- }
-
-// popmessage("0: %04x", m_outputs16[0]);
-}
-
-
-void subsino2_state::bishjan_map(address_map &map)
-{
- map.global_mask(0xffffff);
-
- map(0x000000, 0x07ffff).rom().region("maincpu", 0);
- map(0x080000, 0x0fffff).rom().region("maincpu", 0);
-
- map(0x200000, 0x207fff).ram().share("nvram"); // battery
-
- // read lo (L1) (only half tilemap?)
- map(0x412000, 0x412fff).r(FUNC(subsino2_state::ss9601_videoram_1_lo_r));
- map(0x413000, 0x4131ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_lo_r), FUNC(subsino2_state::ss9601_scrollram_1_lo_w));
- // read lo (REEL)
- map(0x416000, 0x416fff).r(FUNC(subsino2_state::ss9601_reelram_lo_r));
- map(0x417000, 0x4171ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_lo_r), FUNC(subsino2_state::ss9601_scrollram_0_lo_w));
-
- // read hi (L1)
- map(0x422000, 0x422fff).r(FUNC(subsino2_state::ss9601_videoram_1_hi_r));
- map(0x423000, 0x4231ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_hi_r), FUNC(subsino2_state::ss9601_scrollram_1_hi_w));
- // read hi (REEL)
- map(0x426000, 0x426fff).r(FUNC(subsino2_state::ss9601_reelram_hi_r));
- map(0x427000, 0x4271ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_hi_r), FUNC(subsino2_state::ss9601_scrollram_0_hi_w));
-
- // write both (L1)
- map(0x430000, 0x431fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x432000, 0x432fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x433000, 0x4331ff).w(FUNC(subsino2_state::ss9601_scrollram_1_hi_lo_w));
- // write both (L0 & REEL)
- map(0x434000, 0x435fff).w(FUNC(subsino2_state::ss9601_videoram_0_hi_lo_w));
- map(0x436000, 0x436fff).w(FUNC(subsino2_state::ss9601_reelram_hi_lo_w));
- map(0x437000, 0x4371ff).w(FUNC(subsino2_state::ss9601_scrollram_0_hi_lo_w));
-
- map(0x600000, 0x600001).nopr().w(FUNC(subsino2_state::bishjan_sound_w));
- map(0x600040, 0x600040).w(FUNC(subsino2_state::ss9601_scrollctrl_w));
- map(0x600060, 0x600060).w("ramdac", FUNC(ramdac_device::index_w));
- map(0x600061, 0x600061).w("ramdac", FUNC(ramdac_device::pal_w));
- map(0x600062, 0x600062).w("ramdac", FUNC(ramdac_device::mask_w));
- map(0x600080, 0x600080).w(FUNC(subsino2_state::ss9601_tilesize_w));
- map(0x6000a0, 0x6000a0).w(FUNC(subsino2_state::ss9601_byte_lo_w));
-
- map(0xa0001f, 0xa0001f).w(FUNC(subsino2_state::ss9601_disable_w));
- map(0xa00020, 0xa00025).w(FUNC(subsino2_state::ss9601_scroll_w));
-
- map(0xc00000, 0xc00001).portr("DSW"); // SW1
- map(0xc00002, 0xc00003).portr("JOY").w(FUNC(subsino2_state::bishjan_input_w)); // IN C
- map(0xc00004, 0xc00005).r(FUNC(subsino2_state::bishjan_input_r)); // IN A & B
- map(0xc00006, 0xc00007).r(FUNC(subsino2_state::bishjan_serial_r)); // IN D
- map(0xc00008, 0xc00009).portr("RESET").w(FUNC(subsino2_state::bishjan_outputs_w)).share("outputs16");
-}
-
-void subsino2_state::ramdac_map(address_map &map)
-{
- map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w));
-}
-
-/***************************************************************************
- New 2001
-***************************************************************************/
-
-WRITE16_MEMBER(subsino2_state::new2001_outputs_w)
-{
- COMBINE_DATA( &m_outputs16[offset] );
-
- switch (offset)
- {
- case 0:
- if (ACCESSING_BITS_8_15)
- {
- m_leds[0] = BIT(data, 14); // record?
- m_leds[1] = BIT(data, 13); // shoot now
- m_leds[2] = BIT(data, 12); // double
- m_leds[3] = BIT(data, 11); // black/red
- }
- if (ACCESSING_BITS_0_7)
- {
- m_leds[4] = BIT(data, 7); // start
- m_leds[5] = BIT(data, 6); // take
- m_leds[6] = BIT(data, 5); // black/red
-
- machine().bookkeeping().coin_counter_w(0, data & 0x0010); // coin in / key in
- m_leds[7] = BIT(data, 2); // ?
- m_leds[8] = BIT(data, 1); // ?
- }
- break;
- }
-
-// popmessage("0: %04x", m_outputs16[0]);
-}
-
-// Same as bishjan (except for i/o and lo2 usage like xplan)
-void subsino2_state::new2001_base_map(address_map &map)
-{
- map.global_mask(0xffffff);
-
- map(0x000000, 0x07ffff).rom().region("maincpu", 0);
- map(0x080000, 0x0fffff).rom().region("maincpu", 0);
-
- map(0x200000, 0x207fff).ram().share("nvram"); // battery
-
- // write both (L1, byte_lo2)
- map(0x410000, 0x411fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo2_w));
- // read lo (L1) (only half tilemap?)
- map(0x412000, 0x412fff).r(FUNC(subsino2_state::ss9601_videoram_1_lo_r));
- map(0x413000, 0x4131ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_lo_r), FUNC(subsino2_state::ss9601_scrollram_1_lo_w));
- // write both (L0 & REEL, byte_lo2)
- map(0x414000, 0x415fff).w(FUNC(subsino2_state::ss9601_videoram_0_hi_lo2_w));
- // read lo (REEL)
- map(0x416000, 0x416fff).r(FUNC(subsino2_state::ss9601_reelram_lo_r));
- map(0x417000, 0x4171ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_lo_r), FUNC(subsino2_state::ss9601_scrollram_0_lo_w));
-
- // read hi (L1)
- map(0x422000, 0x422fff).r(FUNC(subsino2_state::ss9601_videoram_1_hi_r));
- map(0x423000, 0x4231ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_hi_r), FUNC(subsino2_state::ss9601_scrollram_1_hi_w));
- // read hi (REEL)
- map(0x426000, 0x426fff).r(FUNC(subsino2_state::ss9601_reelram_hi_r));
- map(0x427000, 0x4271ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_hi_r), FUNC(subsino2_state::ss9601_scrollram_0_hi_w));
-
- // write both (L1, byte_lo)
- map(0x430000, 0x431fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x432000, 0x432fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x433000, 0x4331ff).w(FUNC(subsino2_state::ss9601_scrollram_1_hi_lo_w));
- // write both (L0 & REEL, byte_lo)
- map(0x434000, 0x435fff).w(FUNC(subsino2_state::ss9601_videoram_0_hi_lo_w));
- map(0x436000, 0x436fff).w(FUNC(subsino2_state::ss9601_reelram_hi_lo_w));
- map(0x437000, 0x4371ff).w(FUNC(subsino2_state::ss9601_scrollram_0_hi_lo_w));
-
- map(0x600000, 0x600001).nopr().w(FUNC(subsino2_state::bishjan_sound_w));
- map(0x600020, 0x600020).w(FUNC(subsino2_state::ss9601_byte_lo2_w));
- map(0x600040, 0x600040).w(FUNC(subsino2_state::ss9601_scrollctrl_w));
- map(0x600060, 0x600060).w("ramdac", FUNC(ramdac_device::index_w));
- map(0x600061, 0x600061).w("ramdac", FUNC(ramdac_device::pal_w));
- map(0x600062, 0x600062).w("ramdac", FUNC(ramdac_device::mask_w));
- map(0x600080, 0x600080).w(FUNC(subsino2_state::ss9601_tilesize_w));
- map(0x6000a0, 0x6000a0).w(FUNC(subsino2_state::ss9601_byte_lo_w));
-
- map(0xa0001f, 0xa0001f).w(FUNC(subsino2_state::ss9601_disable_w));
- map(0xa00020, 0xa00025).w(FUNC(subsino2_state::ss9601_scroll_w));
-
- map(0xc00000, 0xc00001).portr("DSW");
- map(0xc00002, 0xc00003).portr("IN C");
- map(0xc00004, 0xc00005).portr("IN AB");
- map(0xc00006, 0xc00007).r(FUNC(subsino2_state::bishjan_serial_r));
-}
-
-void subsino2_state::new2001_map(address_map &map)
-{
- new2001_base_map(map);
- map(0xc00008, 0xc00009).w(FUNC(subsino2_state::new2001_outputs_w)).share("outputs16");
-}
-
-/***************************************************************************
- Humlan's Lyckohjul
-***************************************************************************/
-
-WRITE16_MEMBER(subsino2_state::humlan_outputs_w)
-{
- COMBINE_DATA( &m_outputs16[offset] );
-
- switch (offset)
- {
- case 0:
- if (ACCESSING_BITS_8_15)
- {
- m_leds[5] = BIT(data, 13); // big or small
- m_leds[4] = BIT(data, 10); // double
- m_leds[3] = BIT(data, 9); // big or small
- m_leds[2] = BIT(data, 8); // bet
- }
- if (ACCESSING_BITS_0_7)
- {
- m_leds[1] = BIT(data, 7); // take
- m_leds[0] = BIT(data, 6); // start
- machine().bookkeeping().coin_counter_w(1, data & 0x0004); // key in
- machine().bookkeeping().coin_counter_w(0, data & 0x0002); // coin in
- }
- break;
- }
-
-// popmessage("0: %04x", m_outputs16[0]);
-}
-
-void subsino2_state::humlan_map(address_map &map)
-{
- new2001_base_map(map);
- map(0xc00008, 0xc00009).w(FUNC(subsino2_state::humlan_outputs_w)).share("outputs16");
-}
-
-/***************************************************************************
- Express Card / Top Card
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::expcard_outputs_w)
-{
- m_outputs[offset] = data;
-
- switch (offset)
- {
- case 0: // D
- // 0x40 = serial out ? (at boot)
- break;
-
- case 1: // C
- m_leds[0] = BIT(data, 1); // raise
- break;
-
- case 2: // B
- m_leds[1] = BIT(data, 2); // hold 4 / small & hold 5 / big ?
- m_leds[2] = BIT(data, 3); // hold 1 / bet
- m_leds[3] = BIT(data, 4); // hold 2 / take ?
- m_leds[4] = BIT(data, 5); // hold 3 / double up ?
- break;
-
- case 3: // A
- machine().bookkeeping().coin_counter_w(0, data & 0x01 ); // coin in
- machine().bookkeeping().coin_counter_w(1, data & 0x02 ); // key in
-
- m_leds[5] = BIT(data, 4); // start
- break;
- }
-
-// popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
-}
-
-/***************************************************************************
- Magic Train
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::mtrain_outputs_w)
-{
- m_outputs[offset] = data;
-
- switch (offset)
- {
- case 0:
- machine().bookkeeping().coin_counter_w(0, data & 0x01 ); // key in
- machine().bookkeeping().coin_counter_w(1, data & 0x02 ); // coin in
- machine().bookkeeping().coin_counter_w(2, data & 0x10 ); // pay out
-// machine().bookkeeping().coin_counter_w(3, data & 0x20 ); // hopper motor
- break;
-
- case 1:
- m_leds[0] = BIT(data, 0); // stop reel?
- m_leds[1] = BIT(data, 1); // stop reel? (double or take)
- m_leds[2] = BIT(data, 2); // start all
- m_leds[3] = BIT(data, 3); // bet / stop all
- m_leds[4] = BIT(data, 5); // stop reel? (double or take)
- break;
-
- case 2:
- break;
-
- case 3:
- break;
- }
-
-// popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
-}
-
-WRITE8_MEMBER(subsino2_state::mtrain_videoram_w)
-{
- vram_t vram = (m_ss9601_byte_lo & 0x08) ? VRAM_HI : VRAM_LO;
- switch (m_ss9601_byte_lo & (~0x08))
- {
- case 0x00:
- ss9601_videoram_w(&m_layers[1], vram, space, offset, data);
- ss9601_videoram_w(&m_layers[1], vram, space, offset+0x1000, data);
- break;
-
- case 0x04:
- ss9601_videoram_w(&m_layers[0], vram, space, offset, data);
- ss9601_videoram_w(&m_layers[0], vram, space, offset+0x1000, data);
- break;
-
- case 0x06:
- if (vram == VRAM_HI)
- m_ss9601_reelram[offset] = uint16_t(data) << 8 | (m_ss9601_reelram[offset] & 0xff);
- else
- m_ss9601_reelram[offset] = uint16_t(data) | (m_ss9601_reelram[offset] & 0xff00);
- break;
- }
-}
-
-WRITE8_MEMBER(subsino2_state::mtrain_tilesize_w)
-{
- m_ss9601_tilesize = data;
-
- tilesize_t sizes[2];
- switch (data)
- {
- case 0x00:
- sizes[0] = TILE_8x8;
- sizes[1] = TILE_8x8;
- break;
-
- case 0x01:
- sizes[0] = TILE_8x32;
- sizes[1] = TILE_8x8;
- break;
-
- default:
- sizes[0] = TILE_8x8;
- sizes[1] = TILE_8x8;
-
- logerror("%s: warning, unknown tilesize = %02x\n", machine().describe_context(), data);
- popmessage("UNKNOWN TILESIZE %02X", data);
- break;
- }
-
- for (int i = 0; i < 2; i++)
- {
- layer_t *l = &m_layers[i];
-
- if (l->tilesize != sizes[i])
- {
- l->tilesize = sizes[i];
- l->tmap->mark_all_dirty();
- }
- }
-}
-
-READ8_MEMBER(subsino2_state::mtrain_prot_r)
-{
- return "SUBSION"[offset];
-}
-
-void subsino2_state::mtrain_map(address_map &map)
-{
- map(0x00000, 0x077ff).rom();
-
- map(0x07800, 0x07fff).ram().share("nvram"); // battery
-
- map(0x08000, 0x08fff).w(FUNC(subsino2_state::mtrain_videoram_w));
-
- map(0x0911f, 0x0911f).w(FUNC(subsino2_state::ss9601_disable_w));
- map(0x09120, 0x09125).w(FUNC(subsino2_state::ss9601_scroll_w));
-
- map(0x0912f, 0x0912f).w(FUNC(subsino2_state::ss9601_byte_lo_w));
-
- map(0x09140, 0x09142).w(FUNC(subsino2_state::mtrain_outputs_w)).share("outputs");
- map(0x09143, 0x09143).portr("IN D"); // (not shown in system test) 0x40 serial out, 0x80 serial in
- map(0x09144, 0x09144).portr("IN A"); // A
- map(0x09145, 0x09145).portr("IN B"); // B
- map(0x09146, 0x09146).portr("IN C"); // C
- map(0x09147, 0x09147).r(FUNC(subsino2_state::dsw_r));
- map(0x09148, 0x09148).w(FUNC(subsino2_state::dsw_mask_w));
-
- map(0x09152, 0x09152).r(FUNC(subsino2_state::vblank_bit2_r)).w(FUNC(subsino2_state::oki_bank_bit0_w));
-
- map(0x09158, 0x0915e).r(FUNC(subsino2_state::mtrain_prot_r));
-
- map(0x09160, 0x09160).w("ramdac", FUNC(ramdac_device::index_w));
- map(0x09161, 0x09161).w("ramdac", FUNC(ramdac_device::pal_w));
- map(0x09162, 0x09162).w("ramdac", FUNC(ramdac_device::mask_w));
- map(0x09164, 0x09164).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x09168, 0x09168).w(FUNC(subsino2_state::mtrain_tilesize_w));
-
- map(0x09800, 0x09fff).ram();
-
- map(0x0a000, 0x0ffff).rom();
-}
-
-void subsino2_state::mtrain_io(address_map &map)
-{
- map(0x0000, 0x003f).ram(); // internal regs
-}
-
-/***************************************************************************
- Sakura Love - Ying Hua Lian
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::saklove_outputs_w)
-{
- m_outputs[offset] = data;
-
- switch (offset)
- {
- case 0:
- machine().bookkeeping().coin_counter_w(0, data & 0x01 ); // coin in
- machine().bookkeeping().coin_counter_w(1, data & 0x02 ); // key in
- break;
-
- case 1:
- break;
-
- case 2:
- break;
-
- case 3:
- // 1, 2, 4
- break;
- }
-
-// popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
-}
-
-void subsino2_state::saklove_map(address_map &map)
-{
- map(0x00000, 0x07fff).ram().share("nvram"); // battery
-
- // read lo (L1) (only half tilemap?)
- map(0x12000, 0x12fff).rw(FUNC(subsino2_state::ss9601_videoram_1_lo_r), FUNC(subsino2_state::ss9601_videoram_1_lo_w));
- map(0x13000, 0x131ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_lo_r), FUNC(subsino2_state::ss9601_scrollram_1_lo_w));
- // read lo (L0)
- map(0x16000, 0x16fff).rw(FUNC(subsino2_state::ss9601_videoram_0_lo_r), FUNC(subsino2_state::ss9601_videoram_0_lo_w));
- map(0x17000, 0x171ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_lo_r), FUNC(subsino2_state::ss9601_scrollram_0_lo_w));
-
- // read hi (L1)
- map(0x22000, 0x22fff).rw(FUNC(subsino2_state::ss9601_videoram_1_hi_r), FUNC(subsino2_state::ss9601_videoram_1_hi_w));
- map(0x23000, 0x231ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_hi_r), FUNC(subsino2_state::ss9601_scrollram_1_hi_w));
- // read hi (L0)
- map(0x26000, 0x26fff).rw(FUNC(subsino2_state::ss9601_videoram_0_hi_r), FUNC(subsino2_state::ss9601_videoram_0_hi_w));
- map(0x27000, 0x271ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_hi_r), FUNC(subsino2_state::ss9601_scrollram_0_hi_w));
-
- // write both (L1)
- map(0x30000, 0x31fff).rw(FUNC(subsino2_state::ss9601_videoram_1_hi_r), FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- // write both (L0)
- map(0x34000, 0x35fff).rw(FUNC(subsino2_state::ss9601_videoram_0_hi_r), FUNC(subsino2_state::ss9601_videoram_0_hi_lo_w));
-
- map(0xe0000, 0xfffff).rom().region("maincpu", 0);
-}
-
-void subsino2_state::saklove_io(address_map &map)
-{
- map(0x0000, 0x0000).w(FUNC(subsino2_state::ss9601_scrollctrl_w));
-
- map(0x0020, 0x0020).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x0040, 0x0041).w("ymsnd", FUNC(ym3812_device::write));
-
- map(0x0060, 0x0060).w("ramdac", FUNC(ramdac_device::index_w));
- map(0x0061, 0x0061).w("ramdac", FUNC(ramdac_device::pal_w));
- map(0x0062, 0x0062).w("ramdac", FUNC(ramdac_device::mask_w));
-
- map(0x0080, 0x0080).w(FUNC(subsino2_state::ss9601_tilesize_w));
- map(0x00a0, 0x00a0).w(FUNC(subsino2_state::ss9601_byte_lo_w));
- map(0x021f, 0x021f).w(FUNC(subsino2_state::ss9601_disable_w));
- map(0x0220, 0x0225).w(FUNC(subsino2_state::ss9601_scroll_w));
-
- map(0x0300, 0x0303).w(FUNC(subsino2_state::saklove_outputs_w)).share("outputs");
- map(0x0303, 0x0303).portr("IN D"); // 0x40 serial out, 0x80 serial in
- map(0x0304, 0x0304).portr("IN A");
- map(0x0305, 0x0305).portr("IN B");
- map(0x0306, 0x0306).portr("IN C");
-
- map(0x0307, 0x0307).r(FUNC(subsino2_state::dsw_r));
- map(0x0308, 0x0308).w(FUNC(subsino2_state::dsw_mask_w));
-
- map(0x0312, 0x0312).r(FUNC(subsino2_state::vblank_bit2_r)).w(FUNC(subsino2_state::oki_bank_bit0_w));
-
-}
-
-/***************************************************************************
- X-Plan
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::xplan_outputs_w)
-{
- m_outputs[offset] = data;
-
- switch (offset)
- {
- case 0:
- // 0x40 = serial out ? (at boot)
- break;
-
- case 1:
- m_leds[0] = BIT(data, 1); // raise
- break;
-
- case 2: // B
- m_leds[1] = BIT(data, 2); // hold 1 / big ?
- m_leds[2] = BIT(data, 3); // hold 5 / bet
- m_leds[3] = BIT(data, 4); // hold 4 ?
- m_leds[4] = BIT(data, 5); // hold 2 / double up
- m_leds[5] = BIT(data, 6); // hold 3 / small ?
- break;
-
- case 3: // A
- machine().bookkeeping().coin_counter_w(0, data & 0x01 );
- machine().bookkeeping().coin_counter_w(1, data & 0x02 );
-
- m_leds[6] = BIT(data, 4); // start / take
- break;
- }
-
-// popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
-}
-
-void subsino2_state::xplan_map(address_map &map)
-{
- map(0x00000, 0x07fff).ram().share("nvram"); // battery
-
- // write both (L1, byte_lo2)
- map(0x10000, 0x11fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo2_w));
- // read lo (L1) (only half tilemap?)
- map(0x12000, 0x12fff).r(FUNC(subsino2_state::ss9601_videoram_1_lo_r));
- map(0x13000, 0x131ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_lo_r), FUNC(subsino2_state::ss9601_scrollram_1_lo_w));
-
- // write both (L0, byte_lo2)
- map(0x14000, 0x15fff).w(FUNC(subsino2_state::ss9601_videoram_0_hi_lo2_w));
- // read lo (REEL)
- map(0x16000, 0x16fff).r(FUNC(subsino2_state::ss9601_reelram_lo_r));
- map(0x17000, 0x171ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_lo_r), FUNC(subsino2_state::ss9601_scrollram_0_lo_w));
-
- // read hi (L1)
- map(0x22000, 0x22fff).r(FUNC(subsino2_state::ss9601_videoram_1_hi_r));
- map(0x23000, 0x231ff).rw(FUNC(subsino2_state::ss9601_scrollram_1_hi_r), FUNC(subsino2_state::ss9601_scrollram_1_hi_w));
- // read hi (REEL)
- map(0x26000, 0x26fff).r(FUNC(subsino2_state::ss9601_reelram_hi_r));
- map(0x27000, 0x271ff).rw(FUNC(subsino2_state::ss9601_scrollram_0_hi_r), FUNC(subsino2_state::ss9601_scrollram_0_hi_w));
-
- // write both (L1, byte_lo)
- map(0x30000, 0x31fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x32000, 0x32fff).w(FUNC(subsino2_state::ss9601_videoram_1_hi_lo_w));
- map(0x33000, 0x331ff).w(FUNC(subsino2_state::ss9601_scrollram_1_hi_lo_w));
- // write both (L0 & REEL, byte_lo)
- map(0x34000, 0x35fff).w(FUNC(subsino2_state::ss9601_videoram_0_hi_lo_w));
- map(0x36000, 0x36fff).w(FUNC(subsino2_state::ss9601_reelram_hi_lo_w));
- map(0x37000, 0x371ff).w(FUNC(subsino2_state::ss9601_scrollram_0_hi_lo_w));
-
- map(0xc0000, 0xfffff).rom().region("maincpu", 0);
-}
-
-void subsino2_state::xplan_common_io(address_map &map)
-{
- map(0x0000, 0x0000).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-
- map(0x0020, 0x0020).w(FUNC(subsino2_state::ss9601_byte_lo2_w));
-
- map(0x0040, 0x0040).w(FUNC(subsino2_state::ss9601_scrollctrl_w));
-
- map(0x0060, 0x0060).w("ramdac", FUNC(ramdac_device::index_w));
- map(0x0061, 0x0061).w("ramdac", FUNC(ramdac_device::pal_w));
- map(0x0062, 0x0062).w("ramdac", FUNC(ramdac_device::mask_w));
-
- map(0x0080, 0x0080).w(FUNC(subsino2_state::ss9601_tilesize_w));
- map(0x00a0, 0x00a0).w(FUNC(subsino2_state::ss9601_byte_lo_w));
-
- map(0x021f, 0x021f).w(FUNC(subsino2_state::ss9601_disable_w));
- map(0x0220, 0x0225).w(FUNC(subsino2_state::ss9601_scroll_w));
-
- map(0x0235, 0x0235).noprw(); // INT0 Ack.?
-
- map(0x0300, 0x0300).r(FUNC(subsino2_state::vblank_bit6_r)).w(FUNC(subsino2_state::oki_bank_bit4_w));
- map(0x0301, 0x0301).w(FUNC(subsino2_state::dsw_mask_w));
- map(0x0302, 0x0302).r(FUNC(subsino2_state::dsw_r));
- map(0x0303, 0x0303).portr("IN C");
- map(0x0304, 0x0304).portr("IN B");
- map(0x0305, 0x0305).portr("IN A");
- map(0x0306, 0x0306).portr("IN D"); // 0x40 serial out, 0x80 serial in
-}
-
-void subsino2_state::xplan_io(address_map &map)
-{
- xplan_common_io(map);
-
- // 306 = d, 307 = c, 308 = b, 309 = a
- map(0x0306, 0x0309).w(FUNC(subsino2_state::xplan_outputs_w)).share("outputs");
-}
-
-/***************************************************************************
- X-Train
-***************************************************************************/
-
-WRITE8_MEMBER(subsino2_state::xtrain_outputs_w)
-{
- m_outputs[offset] = data;
-
- switch (offset)
- {
- case 0: // D
- m_hopper->motor_w(BIT(data, 2));
- // 0x40 = serial out ? (at boot)
- break;
-
- case 1: // C
- if (m_ticket.found())
- m_ticket->motor_w(BIT(data, 0));
-
- m_leds[0] = BIT(data, 1); // re-double
- m_leds[1] = BIT(data, 2); // half double
- break;
-
- case 2: // B
- m_leds[2] = BIT(data, 1); // hold 3 / small
- m_leds[3] = BIT(data, 2); // hold 2 / big
- m_leds[4] = BIT(data, 3); // bet
- m_leds[5] = BIT(data, 4); // hold1 / take
- m_leds[6] = BIT(data, 5); // double up
- break;
-
- case 3: // A
- machine().bookkeeping().coin_counter_w(0, BIT(data, 0)); // coin in
- machine().bookkeeping().coin_counter_w(1, BIT(data, 1)); // key in
- machine().bookkeeping().coin_counter_w(2, BIT(data, 2)); // hopper out
- machine().bookkeeping().coin_counter_w(3, BIT(data, 3)); // ticket out
-
- m_leds[7] = BIT(data, 4); // start
- break;
- }
-
-// popmessage("0: %02x - 1: %02x - 2: %02x - 3: %02x", m_outputs[0], m_outputs[1], m_outputs[2], m_outputs[3]);
-}
-
-READ8_MEMBER(subsino2_state::xtrain_subsino_r)
-{
- static const char data[] = { "SUBSINO" };
- return data[offset];
-}
-
-void subsino2_state::expcard_io(address_map &map)
-{
- xplan_common_io(map);
-
- // 306 = d, 307 = c, 308 = b, 309 = a
- map(0x0306, 0x0309).w(FUNC(subsino2_state::expcard_outputs_w)).share("outputs");
-}
-
-void subsino2_state::xtrain_io(address_map &map)
-{
- xplan_common_io(map);
-
- // 306 = d, 307 = c, 308 = b, 309 = a
- map(0x0306, 0x0309).w(FUNC(subsino2_state::xtrain_outputs_w)).share("outputs");
- map(0x0313, 0x0319).r(FUNC(subsino2_state::xtrain_subsino_r));
-}
-
-
-/***************************************************************************
- Graphics Layout
-***************************************************************************/
-
-static const gfx_layout ss9601_8x8_layout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 8,
- { STEP8(0,1) },
- { 0, 16, 8, 24, 32, 48, 40, 56 },
- { STEP8(0,8 * 8) },
- 8 * 8 * 8
-};
-
-static GFXDECODE_START( gfx_ss9601 )
- GFXDECODE_ENTRY( "tilemap", 0, ss9601_8x8_layout, 0, 1 )
-GFXDECODE_END
-
-
-/***************************************************************************
- Input Ports
-***************************************************************************/
-
-/***************************************************************************
- Bishou Jan
-***************************************************************************/
-
-static INPUT_PORTS_START( bishjan )
- PORT_START("RESET")
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
-
- PORT_START("DSW") // SW1
- PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Controls ) ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x0001, "Keyboard" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Joystick ) )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
-
- PORT_START("JOY") // IN C
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("1 Player Start (Joy Mode)") // start (joy)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) // down (joy)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // left (joy)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // right (joy)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) // n (joy)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_NAME("P1 Mahjong Bet (Joy Mode)") // bet (joy)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) // select (joy)
-
- PORT_START("SYSTEM") // IN A
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode (press twice for inputs)
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sensor
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 ) // stats
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SERVICE2 ) // pay out? "hopper empty"
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // coin
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE3 ) // pay out? "hopper empty"
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // coin
-
- PORT_START("KEYB_0") // IN B(0)
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_A ) // a
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_E ) // e
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) // i
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_M ) // m
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) // i2 (kan)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_START1 ) // b2 (start)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("KEYB_1") // IN B(1)
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_B ) // b
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_F ) // f
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) // j
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_N ) // n
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) // l2 (reach)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // c2 (bet)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("KEYB_2") // IN B(2)
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_C ) // c
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_G ) // g
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) // k
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) // k2 (chi)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // m2
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("KEYB_3") // IN B(3)
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_D ) // d
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_H ) // h
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) // l
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) // j2 (pon)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("KEYB_4") // IN B(4)
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // g2
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // e2
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // d2
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) // f2
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
-INPUT_PORTS_END
-
-/***************************************************************************
- New 2001
-***************************************************************************/
-
-static INPUT_PORTS_START( new2001 )
- PORT_START("DSW") // c00000
- PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
- // high byte related to sound communication
-
- // JAMMA inputs:
- PORT_START("IN C") // c00002
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
- // high byte not read
-
- PORT_START("IN AB") // c00004
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode (press twice for inputs)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Black")
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double Up / Help")
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Red")
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Take")
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet (Shoot)")
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
-
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats (keep pressed during boot for service mode)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
-INPUT_PORTS_END
-
-/***************************************************************************
- Humlan's Lyckohjul
-***************************************************************************/
-
-static INPUT_PORTS_START( humlan )
- PORT_START("DSW") // c00000
- PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" ) // used
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
- // high byte related to sound communication
-
- // JAMMA inputs:
- PORT_START("IN C") // c00002
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode (press twice for inputs)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
- // high byte not read
-
- PORT_START("IN AB") // c00004
- // 1st-type panel
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Small")
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
-
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Take")
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double Up / Help")
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Big")
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats (keep pressed during boot for service mode)
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
-INPUT_PORTS_END
-
-/***************************************************************************
- Express Card / Top Card
-***************************************************************************/
-
-static INPUT_PORTS_START( expcard )
- PORT_START("DSW1")
- // unused?
- PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
-
- PORT_START("DSW2")
- // not populated
-
- PORT_START("DSW3")
- // not populated
-
- PORT_START("DSW4")
- // not populated
-
- PORT_START("IN A")
- 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_UNKNOWN ) PORT_NAME("Raise") PORT_CODE(KEYCODE_M) // raise
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start") // start
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Small") // hold 4 / small / decrease sample in test mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Bet") // hold 1 / bet
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Take" ) // hold 2 / take
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Double Up" ) // hold 3 / double up
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Big") // hold 5 / big / increase sample in test mode
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats (keep pressed during boot for service mode)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) // cancel?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // key in
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN D")
- 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_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) // reset
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-/***************************************************************************
- Magic Train
-***************************************************************************/
-
-static INPUT_PORTS_START( mtrain )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3")
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin / 10 Credits" )
- PORT_DIPSETTING( 0x04, "1 Coin / 20 Credits" )
- PORT_DIPSETTING( 0x05, "1 Coin / 25 Credits" )
- PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
- PORT_DIPSETTING( 0x07, "1 Coin / 100 Credits" )
- PORT_DIPNAME( 0x38, 0x00, "Key Coinage" ) PORT_DIPLOCATION("SW1:4,5,6")
- PORT_DIPSETTING( 0x08, "1 Key / 1 Credits" )
- PORT_DIPSETTING( 0x10, "1 Key / 2 Credits" )
- PORT_DIPSETTING( 0x18, "1 Key / 5 Credits" )
- PORT_DIPSETTING( 0x00, "1 Key / 10 Credits" )
- PORT_DIPSETTING( 0x20, "1 Key / 20 Credits" )
- PORT_DIPSETTING( 0x28, "1 Key / 25 Credits" )
- PORT_DIPSETTING( 0x30, "1 Key / 50 Credits" )
- PORT_DIPSETTING( 0x38, "1 Key / 100 Credits" )
- 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("DSW2")
- PORT_DIPNAME( 0x03, 0x00, "Minimum Bet" ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x01, "1" )
- PORT_DIPSETTING( 0x00, "8" )
- PORT_DIPSETTING( 0x02, "20" )
- PORT_DIPSETTING( 0x03, "40" )
- PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) PORT_DIPLOCATION("SW2:3,4")
- PORT_DIPSETTING( 0x08, "20" )
- PORT_DIPSETTING( 0x04, "40" )
- PORT_DIPSETTING( 0x00, "60" )
- PORT_DIPSETTING( 0x0c, "80" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x60, 0x60, "Game Limit" ) PORT_DIPLOCATION("SW2:6,7")
- PORT_DIPSETTING( 0x20, "10k" )
- PORT_DIPSETTING( 0x00, "20k" )
- PORT_DIPSETTING( 0x40, "30k" )
- PORT_DIPSETTING( 0x60, "60k" )
- PORT_DIPNAME( 0x80, 0x80, "Double Up" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
-
- PORT_START("DSW3")
- PORT_DIPNAME( 0x07, 0x07, "Win Rate" ) PORT_DIPLOCATION("SW3:1,2,3")
- PORT_DIPSETTING( 0x07, "55%" )
- PORT_DIPSETTING( 0x06, "60%" )
- PORT_DIPSETTING( 0x05, "65%" )
- PORT_DIPSETTING( 0x04, "70%" )
- PORT_DIPSETTING( 0x03, "75%" )
- PORT_DIPSETTING( 0x00, "80%" )
- PORT_DIPSETTING( 0x02, "85%" )
- PORT_DIPSETTING( 0x01, "90%" )
- 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") // used
- 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("DSW4")
- PORT_DIPNAME( 0x07, 0x07, "Double-Up Rate" ) PORT_DIPLOCATION("SW4:1,2,3")
- PORT_DIPSETTING( 0x00, "82%" )
- PORT_DIPSETTING( 0x01, "84%" )
- PORT_DIPSETTING( 0x02, "86%" )
- PORT_DIPSETTING( 0x03, "88%" )
- PORT_DIPSETTING( 0x04, "90%" )
- PORT_DIPSETTING( 0x05, "92%" )
- PORT_DIPSETTING( 0x06, "94%" )
- PORT_DIPSETTING( 0x07, "96%" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x00, "5k" )
- PORT_DIPSETTING( 0x08, "10k" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:6")
- 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("IN A")
- 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 All")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet / Stop All")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_NAME("Info / Double?")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_IMPULSE(5) // key in
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) // service mode
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout (hopper error)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Stop 3")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Stop 2")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Stop 1 / Take")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN D") // not shown in test mode
- 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_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-/***************************************************************************
- Super Train
-***************************************************************************/
-
-static INPUT_PORTS_START( strain ) // inputs need verifying
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x01, "DSW1" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW2")
- PORT_DIPNAME( 0x01, 0x01, "DSW2" ) 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, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, 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("DSW3")
- PORT_DIPNAME( 0x01, 0x01, "DSW3" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW4")
- PORT_DIPNAME( 0x01, 0x01, "DSW4" ) PORT_DIPLOCATION("SW4:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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, 0x00, "Show Demo" ) 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("IN A")
- 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 All")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet / Stop All")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_NAME("Info / Double?")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_IMPULSE(5) // key in
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) // service mode
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout (hopper error)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Stop 3")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Stop 2")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Stop 1 / Take")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN D") // not shown in test mode
- 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_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-/***************************************************************************
- Treasure Bonus
-***************************************************************************/
-
-static INPUT_PORTS_START( tbonusal ) // inputs need verifying
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x01, "DSW1" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW2")
- PORT_DIPNAME( 0x01, 0x01, "DSW2" ) 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, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("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("DSW3")
- PORT_DIPNAME( 0x01, 0x01, "DSW3" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW4")
- PORT_DIPNAME( 0x01, 0x01, "DSW4" ) PORT_DIPLOCATION("SW4:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("IN A")
- 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 All")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet / Stop All")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_NAME("Info / Double?")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_IMPULSE(5) // key in
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) // service mode
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout (hopper error)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Stop 3")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Stop 2")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Stop 1 / Take")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN D") // not shown in test mode
- 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_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-/***************************************************************************
- Sakura Love - Ying Hua Lian
-***************************************************************************/
-
-static INPUT_PORTS_START( saklove )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x07, 0x00, "Coin" )
- PORT_DIPSETTING( 0x01, "1" )
- PORT_DIPSETTING( 0x02, "5" )
- PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPSETTING( 0x03, "20" )
- PORT_DIPSETTING( 0x04, "25" )
- PORT_DIPSETTING( 0x05, "50" )
- PORT_DIPSETTING( 0x06, "100" )
- PORT_DIPSETTING( 0x07, "300" )
- PORT_DIPNAME( 0x38, 0x00, "Key In" )
- PORT_DIPSETTING( 0x08, "10" )
- PORT_DIPSETTING( 0x10, "20" )
- PORT_DIPSETTING( 0x18, "25" )
- PORT_DIPSETTING( 0x20, "50" )
- PORT_DIPSETTING( 0x00, "100" )
- PORT_DIPSETTING( 0x28, "300" )
- PORT_DIPSETTING( 0x30, "500" )
- PORT_DIPSETTING( 0x38, "1000" )
- PORT_DIPNAME( 0x40, 0x00, "Pay Out" )
- PORT_DIPSETTING( 0x00, "Coin" )
- PORT_DIPSETTING( 0x40, "Key In" )
- PORT_DIPNAME( 0x80, 0x00, "Key Out" )
- PORT_DIPSETTING( 0x80, "Coin" )
- PORT_DIPSETTING( 0x00, "Key In" )
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x03, 0x00, "Min Bet" )
- PORT_DIPSETTING( 0x00, "1" )
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPSETTING( 0x02, "10" )
- PORT_DIPSETTING( 0x03, "20" )
- PORT_DIPNAME( 0x0c, 0x00, "Max Bet" )
- PORT_DIPSETTING( 0x0c, "10" )
- PORT_DIPSETTING( 0x08, "20" )
- PORT_DIPSETTING( 0x04, "40" )
- PORT_DIPSETTING( 0x00, "50" )
- PORT_DIPUNKNOWN( 0x10, 0x00 )
- PORT_DIPUNKNOWN( 0x20, 0x00 )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Double Up" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("DSW3")
- PORT_DIPNAME( 0x07, 0x00, "Win Rate (%)" )
- PORT_DIPSETTING( 0x01, "55" )
- PORT_DIPSETTING( 0x02, "60" )
- PORT_DIPSETTING( 0x03, "65" )
- PORT_DIPSETTING( 0x04, "70" )
- PORT_DIPSETTING( 0x05, "75" )
- PORT_DIPSETTING( 0x00, "80" )
- PORT_DIPSETTING( 0x06, "85" )
- PORT_DIPSETTING( 0x07, "90" )
- PORT_DIPNAME( 0x18, 0x00, "Game Limit" )
- PORT_DIPSETTING( 0x08, "10k" )
- PORT_DIPSETTING( 0x00, "20k" )
- PORT_DIPSETTING( 0x10, "60k" )
- PORT_DIPSETTING( 0x18, "80k" )
- PORT_DIPUNKNOWN( 0x20, 0x00 )
- PORT_DIPUNKNOWN( 0x40, 0x00 )
- PORT_DIPUNKNOWN( 0x80, 0x00 )
-
- PORT_START("DSW4")
- PORT_DIPNAME( 0x03, 0x00, "Double Up Level" )
- PORT_DIPSETTING( 0x03, "0" )
- PORT_DIPSETTING( 0x02, "1" )
- PORT_DIPSETTING( 0x01, "2" )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPNAME( 0x0c, 0x00, "Double Up Limit" )
- PORT_DIPSETTING( 0x00, "5k" )
- PORT_DIPSETTING( 0x04, "10k" )
- PORT_DIPSETTING( 0x08, "20k" )
- PORT_DIPSETTING( 0x0c, "30k" )
- PORT_DIPUNKNOWN( 0x10, 0x10 )
- PORT_DIPNAME( 0x20, 0x00, "Coin Type" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_DIPUNKNOWN( 0x40, 0x40 )
- PORT_DIPNAME( 0x80, 0x00, "JAMMA" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("IN A")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bet 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Play")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Big or Small 1")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Bet Amount") // 1-5-10
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) // selects music in system test / exit
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) // top 10? / double up?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Big or Small 2") // plays sample or advances music in system test / big or small?
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Statistics")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) // key in
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(2) // service mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
-
- PORT_START("IN D") // bits 3 and 4 shown in test mode
- 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_UNKNOWN ) // used?
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- 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
-
-/***************************************************************************
- Treasure City
-***************************************************************************/
-
-static INPUT_PORTS_START( treacity )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x01, "DSW1" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW2")
- PORT_DIPNAME( 0x01, 0x01, "DSW2" ) 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, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("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("DSW3")
- PORT_DIPNAME( 0x01, 0x01, "DSW3" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("DSW4")
- PORT_DIPNAME( 0x01, 0x01, "DSW4" ) PORT_DIPLOCATION("SW4:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- 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("IN A")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Bet 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet 2")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Bet 3")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Play")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Big or Small 1")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Bet Amount") // 1-5-10
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) // selects music in system test / exit
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) // top 10? / double up?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Big or Small 2") // plays sample or advances music in system test / big or small?
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Statistics")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) // key in
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(2) // service mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // used?
-
- PORT_START("IN D") // bits 3 and 4 shown in test mode
- 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_UNKNOWN ) // used?
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- 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
-
-/***************************************************************************
- X-Plan
-***************************************************************************/
-
-static INPUT_PORTS_START( xplan )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x01, "Pinout" ) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING( 0x01, "JAMMA (28 pin)" )
- PORT_DIPSETTING( 0x00, "Lucky 8 Liner (36 pin & 10 pin)" ) // not implemented
- PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" )
-
- PORT_START("DSW2")
- // not populated
-
- PORT_START("DSW3")
- // not populated
-
- PORT_START("DSW4")
- // not populated
-
- // JAMMA inputs:
- PORT_START("IN A")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A / Play Gambling 1") // A \__ play gambling game
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("C / Play Gambling 2") // C /
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("B / Play Shoot'Em Up") // B ___ play shoot'em up game
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take") // start / take
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Hold 3 / Small") // hold 3 / small / decrease sample in test mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Bet") // hold 5 / bet
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Re-Double" ) // hold 4 / re-double?
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Double Up / Right") // hold 2 / double up? / right
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Raise") PORT_CODE(KEYCODE_N) // raise
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Big / Left") // hold 1 / big / increase sample in test mode / left
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats (keep pressed during boot for service mode)
- 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_GAMBLE_KEYIN ) // key in
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) // service mode
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay-out
-
- PORT_START("IN D") // bits 3 and 4 shown in test mode
- 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_UNKNOWN ) // used?
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-/***************************************************************************
- X-Train
-***************************************************************************/
-
-static INPUT_PORTS_START( xtrain )
- PORT_START("DSW1")
- PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" )
- PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
- PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
- PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
- PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
- PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
- PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
- PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
-
- PORT_START("DSW2")
- // not populated
-
- PORT_START("DSW3")
- // not populated
-
- PORT_START("DSW4")
- // not populated
-
- // JAMMA inputs:
- PORT_START("IN A")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Re-Double") PORT_CODE(KEYCODE_N)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_GAMBLE_HALF) PORT_NAME("Half Double")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start")
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD3) PORT_NAME("Hold 3 / Small")
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet")
-
- PORT_START("IN B")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1) PORT_NAME("Hold 1 / Take" )
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP) PORT_NAME("Double Up / Help")
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2) PORT_NAME("Hold 2 / Big")
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_COIN1) PORT_NAME("Coin In")
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
-
- PORT_START("IN C")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK) // keep pressed during boot for service mode
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_SERVICE)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT)
-
- PORT_START("IN D")
- 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_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) // serial in?
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( ptrain )
- PORT_INCLUDE(xtrain)
-
- PORT_MODIFY("IN B")
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("ticket", ticket_dispenser_device, line_r)
-INPUT_PORTS_END
-
-
-/***************************************************************************
- Water-Nymph
-***************************************************************************/
-
-static INPUT_PORTS_START( wtrnymph )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3")
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin / 10 Credits" )
- PORT_DIPSETTING( 0x04, "1 Coin / 20 Credits" )
- PORT_DIPSETTING( 0x05, "1 Coin / 25 Credits" )
- PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" )
- PORT_DIPSETTING( 0x07, "1 Coin / 100 Credits" )
- PORT_DIPNAME( 0x38, 0x00, "Key Coinage" ) PORT_DIPLOCATION("SW1:4,5,6")
- PORT_DIPSETTING( 0x08, "1 Key / 1 Credits" )
- PORT_DIPSETTING( 0x10, "1 Key / 2 Credits" )
- PORT_DIPSETTING( 0x18, "1 Key / 5 Credits" )
- PORT_DIPSETTING( 0x00, "1 Key / 10 Credits" )
- PORT_DIPSETTING( 0x20, "1 Key / 20 Credits" )
- PORT_DIPSETTING( 0x28, "1 Key / 25 Credits" )
- PORT_DIPSETTING( 0x30, "1 Key / 50 Credits" )
- PORT_DIPSETTING( 0x38, "1 Key / 100 Credits" )
- PORT_DIPNAME( 0x40, 0x40, "Pay Out" ) PORT_DIPLOCATION("SW1:7")
- PORT_DIPSETTING( 0x40, "Coin" )
- PORT_DIPSETTING( 0x00, "Key" )
- 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("DSW2")
- PORT_DIPNAME( 0x03, 0x00, "Minimum Bet" ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x01, "1" )
- PORT_DIPSETTING( 0x00, "8" )
- PORT_DIPSETTING( 0x02, "16" )
- PORT_DIPSETTING( 0x03, "20" )
- PORT_DIPNAME( 0x0c, 0x0c, "Max Bet" ) PORT_DIPLOCATION("SW2:3,4")
- PORT_DIPSETTING( 0x08, "10" )
- PORT_DIPSETTING( 0x04, "20" )
- PORT_DIPSETTING( 0x00, "40" )
- PORT_DIPSETTING( 0x0c, "60" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x60, 0x60, "Game Limit" ) PORT_DIPLOCATION("SW2:6,7")
- PORT_DIPSETTING( 0x20, "10k" )
- PORT_DIPSETTING( 0x00, "20k" )
- PORT_DIPSETTING( 0x40, "30k" )
- PORT_DIPSETTING( 0x60, "40k" )
- PORT_DIPNAME( 0x80, 0x80, "Double Up" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
-
- PORT_START("DSW3")
- PORT_DIPNAME( 0x07, 0x07, "Win Rate" ) PORT_DIPLOCATION("SW3:1,2,3")
- PORT_DIPSETTING( 0x07, "55%" )
- PORT_DIPSETTING( 0x06, "60%" )
- PORT_DIPSETTING( 0x05, "65%" )
- PORT_DIPSETTING( 0x04, "70%" )
- PORT_DIPSETTING( 0x03, "75%" )
- PORT_DIPSETTING( 0x00, "80%" )
- PORT_DIPSETTING( 0x02, "85%" )
- PORT_DIPSETTING( 0x01, "90%" )
- 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("DSW4")
- PORT_DIPNAME( 0x07, 0x07, "Double-Up Rate" ) PORT_DIPLOCATION("SW4:1,2,3")
- PORT_DIPSETTING( 0x00, "82%" )
- PORT_DIPSETTING( 0x01, "84%" )
- PORT_DIPSETTING( 0x02, "88%" )
- PORT_DIPSETTING( 0x03, "90%" )
- PORT_DIPSETTING( 0x04, "92%" )
- PORT_DIPSETTING( 0x05, "94%" )
- PORT_DIPSETTING( 0x06, "96%" )
- PORT_DIPSETTING( 0x07, "98%" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x00, "5k" )
- PORT_DIPSETTING( 0x08, "10k" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:6")
- 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("IN A")
- 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 All")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet / Stop All")
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_NAME("Info / Double?") // down
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_IMPULSE(5) // key in
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) // coin in
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // stats
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) // service mode
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // payout (hopper error)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // key out
-
- PORT_START("IN C")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_NAME("Stop 3 / Right")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_NAME("Stop 2 / Left / Play Gambling 1") // C \__ play gambling game
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Play Gambling 2") PORT_CODE(KEYCODE_D) // D /
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_NAME("Stop 1 / Take / Rotate")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Play Tetris") PORT_CODE(KEYCODE_T) // T |__ play Tetris game
-
- PORT_START("IN D") // not shown in test mode
- 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_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) // serial in?
-INPUT_PORTS_END
-
-
-/***************************************************************************
- Machine Drivers
-***************************************************************************/
-
-/***************************************************************************
- Bishou Jan
-***************************************************************************/
-
-void subsino2_state::bishjan(machine_config &config)
-{
- H83044(config, m_maincpu, XTAL(44'100'000) / 3);
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::bishjan_map);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- TICKET_DISPENSER(config, m_hopper, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
-
- // video hardware
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_size(512, 256);
- m_screen->set_visarea(0, 512-1, 0, 256-16-1);
- m_screen->set_refresh_hz(60);
- m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2));
- m_screen->set_palette(m_palette);
- m_screen->screen_vblank().set_inputline(m_maincpu, 0); // edge-triggered interrupt
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601);
- PALETTE(config, m_palette).set_entries(256);
-
- ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC
- ramdac.set_addrmap(0, &subsino2_state::ramdac_map);
-
- // sound hardware
- // SS9904
-}
-
-void subsino2_state::new2001(machine_config &config)
-{
- bishjan(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::new2001_map);
-
- m_screen->set_size(640, 256);
- m_screen->set_visarea(0, 640-1, 0, 256-16-1);
-}
-
-void subsino2_state::humlan(machine_config &config)
-{
- bishjan(config);
- H83044(config.replace(), m_maincpu, XTAL(48'000'000) / 3);
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::humlan_map);
-
- // sound hardware
- // SS9804
-}
-
-/***************************************************************************
- Magic Train
-***************************************************************************/
-
-void subsino2_state::mtrain(machine_config &config)
-{
- Z80180(config, m_maincpu, XTAL(12'000'000)); /* Unknown clock */
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::mtrain_map);
- m_maincpu->set_addrmap(AS_IO, &subsino2_state::mtrain_io);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- // video hardware
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_size(512, 256);
- m_screen->set_visarea(0, 512-1, 0, 256-32-1);
- m_screen->set_refresh_hz(58.7270);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state
- m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2));
- m_screen->set_palette(m_palette);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601);
- PALETTE(config, m_palette).set_entries(256);
-
- ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC
- ramdac.set_addrmap(0, &subsino2_state::ramdac_map);
-
- // sound hardware
- SPEAKER(config, "mono").front_center();
-
- OKIM6295(config, m_oki, XTAL(8'467'200) / 8, okim6295_device::PIN7_HIGH); // probably
- m_oki->add_route(ALL_OUTPUTS, "mono", 1.0);
-}
-
-/***************************************************************************
- Sakura Love - Ying Hua Lian
-***************************************************************************/
-
-void subsino2_state::saklove(machine_config &config)
-{
- I80188(config, m_maincpu, XTAL(20'000'000)*2); // !! AMD AM188-EM !!
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::saklove_map);
- m_maincpu->set_addrmap(AS_IO, &subsino2_state::saklove_io);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- // video hardware
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_size(512, 256);
- m_screen->set_visarea(0, 512-1, 0, 256-16-1);
- m_screen->set_refresh_hz(58.7270);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state
- m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2));
- m_screen->set_palette(m_palette);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601);
- PALETTE(config, m_palette).set_entries(256);
-
- ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC
- ramdac.set_addrmap(0, &subsino2_state::ramdac_map);
-
- // sound hardware
- SPEAKER(config, "mono").front_center();
-
- OKIM6295(config, m_oki, XTAL(8'467'200) / 8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.80);
-
- YM3812(config, "ymsnd", XTAL(12'000'000) / 4).add_route(ALL_OUTPUTS, "mono", 0.80); // ? chip and clock unknown
-}
-
-/***************************************************************************
- X-Plan
-***************************************************************************/
-
-void subsino2_state::xplan(machine_config &config)
-{
- I80188(config, m_maincpu, XTAL(20'000'000)*2); // !! AMD AM188-EM !!
- m_maincpu->set_addrmap(AS_PROGRAM, &subsino2_state::xplan_map);
- m_maincpu->set_addrmap(AS_IO, &subsino2_state::xplan_io);
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
-
- // video hardware
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_size(512, 256);
- m_screen->set_visarea(0, 512-1, 0, 256-16-1);
- m_screen->set_refresh_hz(58.7270);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state
- m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2));
- m_screen->set_palette(m_palette);
- m_screen->screen_vblank().set("maincpu", FUNC(i80188_cpu_device::int0_w));
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601);
- PALETTE(config, m_palette).set_entries(256);
-
- ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // HMC HM86171 VGA 256 colour RAMDAC
- ramdac.set_addrmap(0, &subsino2_state::ramdac_map);
-
- // sound hardware
- SPEAKER(config, "mono").front_center();
-
- OKIM6295(config, m_oki, XTAL(8'467'200) / 8, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // probably
-}
-
-void subsino2_state::xtrain(machine_config &config)
-{
- xplan(config);
- m_maincpu->set_addrmap(AS_IO, &subsino2_state::xtrain_io);
-
- HOPPER(config, m_hopper, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
-}
-
-void subsino2_state::ptrain(machine_config &config)
-{
- xtrain(config);
-
- TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
-}
-
-void subsino2_state::expcard(machine_config &config)
-{
- xplan(config);
- m_maincpu->set_addrmap(AS_IO, &subsino2_state::expcard_io);
-}
-
-
-/***************************************************************************
- ROMs Loading
-***************************************************************************/
-
-/***************************************************************************
-
-Bishou Jan (Laugh World)
-(C)1999 Subsino
-
-PCB Layout
-----------
-
-|------------------------------------------------------|
-|TDA1519A 28-WAY |
-| VOL |
-| HM86171 ULN2003 |
-| LM324 |
-| S-1 ULN2003 |
-| |
-| |-------| DSW1(8) |
-| |-------| |SUBSINO| |
-| 2-V201.U9 |SUBSINO| |SS9802 | |
-| |SS9904 | | | |
-| | | |-------| |
-| |-------| |
-| |
-| 44.1MHz CXK58257 |
-| 3-V201.U25 |
-| 1-V203.U21 |
-| 4-V201.U26 SW1|
-| |-------| |-------| |-----| |
-| 5-V201.U27 |SUBSINO| |SUBSINO| |H8 | |
-| |SS9601 | |SS9803 | |3044 | |
-| 6-V201.U28 | | | | |-----| |
-| |-------| |-------| |
-| 62256 62256 BATTERY |
-|------------------------------------------------------|
-Notes:
- H8/3044 - Subsino re-badged Hitachi H8/3044 HD6433044A22F Microcontroller (QFP100)
- The H8/3044 is a H8/3002 with 24bit address bus and has 32k mask ROM and 2k RAM, clock input is 14.7MHz [44.1/3]
- MD0,MD1 & MD2 are configured to MODE 6 16MByte Expanded Mode with the on-chip 32k mask ROM enabled.
- CXK58257 - Sony CXK58257 32k x8 SRAM (SOP28)
- HM86171 - Hualon Microelectronics HMC HM86171 VGA 256 colour RAMDAC (DIP28)
- S-1 - ?? Probably some kind of audio OP AMP or DAC? (DIP8)
- SW1 - Push Button Test Switch
- HSync - 15.75kHz
- VSync - 60Hz
-
-***************************************************************************/
-
-ROM_START( bishjan )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "1-v203.u21", 0x000000, 0x080000, CRC(1f891d48) SHA1(0b6a5aa8b781ba8fc133289790419aa8ea21c400) )
-
- ROM_REGION( 0x400000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "3-v201.u25", 0x000000, 0x100000, CRC(e013e647) SHA1(a5b0f82f3454393c1ea5e635b0d37735a25e2ea5) )
- ROM_LOAD32_BYTE( "4-v201.u26", 0x000002, 0x100000, CRC(e0d40ef1) SHA1(95f80889103a7b93080b46387274cb1ffe0c8768) )
- ROM_LOAD32_BYTE( "5-v201.u27", 0x000001, 0x100000, CRC(85067d40) SHA1(3ecf7851311a77a0dfca90775fcbf6faabe9c2ab) )
- ROM_LOAD32_BYTE( "6-v201.u28", 0x000003, 0x100000, CRC(430bd9d7) SHA1(dadf5a7eb90cf2dc20f97dbf20a4b6c8e7734fb1) )
-
- ROM_REGION( 0x100000, "samples", 0 ) // SS9904
- ROM_LOAD( "2-v201.u9", 0x000000, 0x100000, CRC(ea42764d) SHA1(13fe1cd30e474f4b092949c440068e9ddca79976) )
-ROM_END
-
-void subsino2_state::init_bishjan()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (it always enters test mode on boot otherwise)
- rom[0x042EA/2] = 0x4008;
-
- // rts -> rte
- rom[0x33386/2] = 0x5670; // IRQ 0
- rom[0x0CC5C/2] = 0x5670; // IRQ 8
-}
-
-/***************************************************************************
-
-New 2001 (Italy, V200N)
-(C)2000 Subsino
-
-CPU:
- Subsino SS9689 (TQFP100, U16, H8/3044)
-
-Video:
- Subsino SS9601 (TQFP12, U23)
- Subsino SS9802 9948 (QFP100, U1)
- Subsino SS9803 (TQFP100, U29)
-
-Sound:
- Subsino SS9904 (QFP100, U8)
- Subsino S-1 (DIP8, U11, audio OP AMP or DAC?)
- ST324 (U12, Quad Operational Amplifier)
- TDA1519 (U14, Audio Amplifier)
- Oscill. 44.100 (OSC48)
-
-ROMs:
- 27C020 (1)
- 27C4001 (2)
- 4x 27C2001 (3,4,5,6)
-
-RAMs:
- 2x HM62H256AK-15 (U30,U31)
- CXK58257AM-10L (U22)
- RAMDAC HM86171-80 (U35)
-
-Others:
- 28x2 JAMMA edge connector
- 36x2 edge connector
- 10x2 edge connector
- 6 legs connector
- pushbutton (SW1)
- trimmer (volume)(VR1)
- 8x2 switches DIP(DS1)
- 3x 3 legs jumper (JP1,JP2,JP4)
- battery 3V
-
-***************************************************************************/
-
-ROM_START( new2001 )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "new_2001_italy_1_v200n.u21", 0x00000, 0x40000, CRC(bacc8c01) SHA1(e820bc53fa297c3f543a1d65d47eb7b5ee85a6e2) )
- ROM_RELOAD( 0x40000, 0x40000 )
-
- ROM_REGION( 0x100000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "new_2001_italy_3_v200.0.u25", 0x00000, 0x40000, CRC(621452d6) SHA1(a9654bb98df16b13e8bbc6dd4dada2e63ee05dc9) )
- ROM_LOAD32_BYTE( "new_2001_italy_4_v200.1.u26", 0x00002, 0x40000, CRC(3073e2d2) SHA1(fb257c625e177d7aa12f1b176a3d1b93d5891cab) )
- ROM_LOAD32_BYTE( "new_2001_italy_5_v200.2.u27", 0x00001, 0x40000, CRC(d028696b) SHA1(ebb047e7cafaefbdeb479c3877aea4fce0c47ad2) )
- ROM_LOAD32_BYTE( "new_2001_italy_6_v200.3.u28", 0x00003, 0x40000, CRC(085599e3) SHA1(afd4bed369a96ba12037e6b8cf3a4cab84d12b21) )
-
- ROM_REGION( 0x80000, "samples", 0 ) // SS9904
- ROM_LOAD( "new_2001_italy_2_v200.u9", 0x00000, 0x80000, CRC(9d522d04) SHA1(68f314b077a62598f3de8ef753bdedc93d6eca71) )
-ROM_END
-
-void subsino2_state::init_new2001()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 041920 otherwise)
- rom[0x19A2/2] = 0x4066;
-
- // rts -> rte
- rom[0x45E8/2] = 0x5670; // IRQ 8
- rom[0x471C/2] = 0x5670; // IRQ 0
-}
-
-/***************************************************************************
-
-Queen Bee
-(c) 2001 Subsino
-
-no ROM labels available
-
-***************************************************************************/
-
-ROM_START( queenbee )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "27c020 u21.bin", 0x00000, 0x40000, CRC(baec0241) SHA1(345cfee7bdb4f4c61caa828372a121f3917bb4eb) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "27c4001 u25.bin", 0x000000, 0x80000, CRC(628ed650) SHA1(dadbc5f73f6a5773303d834a44d2eab836874cfe) )
- ROM_LOAD32_BYTE( "27c4001 u26.bin", 0x000002, 0x80000, CRC(27a169df) SHA1(d36989c300051a0c41752638ab5134a9b04c50a4) )
- ROM_LOAD32_BYTE( "27c4001 u27.bin", 0x000001, 0x80000, CRC(27e8c4b9) SHA1(b010b9dcadb357cf4e79d97ce84b86f792bd8ecf) )
- ROM_LOAD32_BYTE( "27c4001 u28.bin", 0x000003, 0x80000, CRC(7f139a04) SHA1(595a114806756e6f77a6fe20a13515b211ffdf2a) )
-
- ROM_REGION( 0x80000, "samples", 0 )
- ROM_LOAD( "27c4001 u9.bin", 0x000000, 0x80000, CRC(c7cda990) SHA1(193144fe0c31fc8342bd44aa4899bf15f0bc399d) )
-ROM_END
-
-void subsino2_state::init_queenbee()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 093099 otherwise)
- rom[0x1cc6/2] = 0x4066;
-
- // rts -> rte
- rom[0x3e6a/2] = 0x5670; // IRQ 8
- rom[0x3fbe/2] = 0x5670; // IRQ 0
-}
-
-ROM_START( queenbeeb )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "u21", 0x00000, 0x40000, CRC(23e0ad8f) SHA1(d913ebd249c471ab36aabe515a8b36bb3590c1ca) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 ) // this PCB has a single surface mounted ROM, which hasn't been dumped.
- ROM_LOAD( "gfx", 0x000000, 0x200000, NO_DUMP )
- // following ROMs are taken from humlan for testing, it doesn't seem to be a case of just differently split ROMs.
- // ROM_LOAD32_BYTE( "hlj__truemax_3_v402.u25", 0x000000, 0x80000, CRC(dfc8d795) SHA1(93e0fe271c7390596f73092720befe11d8354838) )
- // ROM_LOAD32_BYTE( "hlj__truemax_4_v402.u26", 0x000002, 0x80000, CRC(31c774d6) SHA1(13fcdb42f5fd7d0cadd3fd7030037c21b7585f0f) )
- // ROM_LOAD32_BYTE( "hlj__truemax_5_v402.u27", 0x000001, 0x80000, CRC(28e14be8) SHA1(778906427175ca50ad5b0a7c5978c36ed29ef994) )
- // ROM_LOAD32_BYTE( "hlj__truemax_6_v402.u28", 0x000003, 0x80000, CRC(d1c7ae17) SHA1(3ddb8ad38eeb5ab0a944d7d26cfb890a4327ef2e) )
-
- ROM_REGION( 0x40000, "samples", 0 )
- ROM_LOAD( "u9", 0x000000, 0x40000, NO_DUMP )
-ROM_END
-
-void subsino2_state::init_queenbeeb()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 093099 otherwise)
- rom[0x1826/2] = 0x4066;
-
- // rts -> rte
- rom[0x3902/2] = 0x5670; // IRQ 8
- rom[0x3a56/2] = 0x5670; // IRQ 0
-}
-
-// make sure these are really queenbee
-ROM_START( queenbeei )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "u21 9ac9 v100", 0x00000, 0x40000, CRC(061b406f) SHA1(2a5433817e41610e9ba90302a6b9608f769176a0) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD( "gfx", 0x000000, 0x200000, NO_DUMP )
-
- ROM_REGION( 0x80000, "samples", 0 )
- ROM_LOAD( "u9", 0x000000, 0x80000, NO_DUMP )
-ROM_END
-
-ROM_START( queenbeesa )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "00b0 u21 1v101", 0x00000, 0x40000, CRC(19e31fd7) SHA1(01cf507958b0411d21dd660280f45668d7c5b9d9) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD( "gfx", 0x000000, 0x200000, NO_DUMP )
-
- ROM_REGION( 0x80000, "samples", 0 )
- ROM_LOAD( "u9", 0x000000, 0x80000, NO_DUMP )
-ROM_END
-
-
-
-
-
-/***************************************************************************
-
-Humlan's Lyckohjul (Sweden, V402)
-(c) 2001 Subsino & Truemax
-
-Swedish version of Queen Bee.
-
-The PCB is similar to bishjan and new2001, but with a 48MHz crystal
-and a 9804 (instead of 9904) for sound.
-
-***************************************************************************/
-
-ROM_START( humlan )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "hlj__truemax_1_v402.u21", 0x00000, 0x40000, CRC(5b4a7113) SHA1(9a9511aa79a6e90e8ac1b267e058c8696d13d84f) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "hlj__truemax_3_v402.u25", 0x000000, 0x80000, CRC(dfc8d795) SHA1(93e0fe271c7390596f73092720befe11d8354838) )
- ROM_LOAD32_BYTE( "hlj__truemax_4_v402.u26", 0x000002, 0x80000, CRC(31c774d6) SHA1(13fcdb42f5fd7d0cadd3fd7030037c21b7585f0f) )
- ROM_LOAD32_BYTE( "hlj__truemax_5_v402.u27", 0x000001, 0x80000, CRC(28e14be8) SHA1(778906427175ca50ad5b0a7c5978c36ed29ef994) )
- ROM_LOAD32_BYTE( "hlj__truemax_6_v402.u28", 0x000003, 0x80000, CRC(d1c7ae17) SHA1(3ddb8ad38eeb5ab0a944d7d26cfb890a4327ef2e) )
-
- ROM_REGION( 0x40000, "samples", 0 ) // SS9804
- // clearly samples, might be different from the SS9904 case
- ROM_LOAD( "subsino__qb-v1.u9", 0x000000, 0x40000, CRC(c5dfed44) SHA1(3f5effb85de10c0804efee9bce769d916268bfc9) )
-ROM_END
-
-void subsino2_state::init_humlan()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 093099 otherwise)
- rom[0x170A/2] = 0x4066;
-
- // rts -> rte
- rom[0x38B4/2] = 0x5670; // IRQ 8
- rom[0x3A08/2] = 0x5670; // IRQ 0
-}
-
-/***************************************************************************
-
-Super Queen Bee
-(c) 2002 Subsino
-
-no ROM labels available
-
-***************************************************************************/
-
-ROM_START( squeenb )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "u21", 0x00000, 0x40000, CRC(9edc4062) SHA1(515c8e648f839c99905fd5a861688fc62a45c4ed) )
- ROM_FILL( 0x40000, 0x40000, 0xff )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "u25", 0x000000, 0x80000, CRC(842c0a33) SHA1(defb79c158d5091ca8830e9f03dda382d03d51ef) )
- ROM_LOAD32_BYTE( "u26", 0x000002, 0x80000, CRC(11b67abb) SHA1(e388e3aefbcceda1390c00e6590cbdd686982b2e) )
- ROM_LOAD32_BYTE( "u27", 0x000001, 0x80000, CRC(d713131a) SHA1(74a95e1ef0d30da53a91a5232574687f816df2eb) )
- ROM_LOAD32_BYTE( "u28", 0x000003, 0x80000, CRC(dfa39f39) SHA1(992f74c04cbf4af06a02812052ce701228d4e174) )
-
- ROM_REGION( 0x80000, "samples", 0 )
- ROM_LOAD( "u9", 0x000000, 0x80000, CRC(c7cda990) SHA1(193144fe0c31fc8342bd44aa4899bf15f0bc399d) )
-ROM_END
-
-void subsino2_state::init_squeenb()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 093099 otherwise)
- rom[0x1814/2] = 0x4066;
-
- // rts -> rte
- rom[0x399a/2] = 0x5670; // IRQ 8
- rom[0x3aa8/2] = 0x5670; // IRQ 0
-}
-
-ROM_START( qbeebing )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "rom 2 27c040", 0x00000, 0x80000, CRC(03ea15cd) SHA1(19d3c3dd9e0c57066a6bd854964fd6a9f43c989f) )
-
- ROM_REGION( 0x400000, "tilemap", 0 )
- ROM_LOAD16_BYTE( "rom 4 27c160 3374h", 0x000001, 0x200000, CRC(a01527a0) SHA1(41ea384dd9c15c58246856f104b7dce68be1737c) )
- ROM_LOAD16_BYTE( "rom 3 27c160 08d7h", 0x000000, 0x200000, CRC(1fdf0fcb) SHA1(ed54172521f8d05bad37b670548106e4c4deb8af) )
-
- ROM_REGION( 0x80000, "samples", ROMREGION_ERASE00 ) // no samples, missing?
-ROM_END
-
-void subsino2_state::init_qbeebing()
-{
- uint16_t *rom = (uint16_t*)memregion("maincpu")->base();
-
- // patch serial protection test (ERROR 093099 otherwise)
- rom[0x25b6/2] = 0x4066;
-
- // other patches?
-}
-
-ROM_START( treamary )
- ROM_REGION( 0x80000, "maincpu", 0 ) // H8/3044
- ROM_LOAD( "27c040_u21.bin", 0x00000, 0x80000, CRC(b9163830) SHA1(853ccba636c4ee806602ca92a61d4c53ee3108b7) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "27c040_u25.bin", 0x000000, 0x80000, CRC(d17e5286) SHA1(a538a3b010eb0c7b5c16a4188f32f340fc890850) )
- ROM_LOAD32_BYTE( "27c040_u26.bin", 0x000002, 0x80000, CRC(fdc6c45b) SHA1(bb37badeba975630fb09b98104fbc757bd39538c) )
- ROM_LOAD32_BYTE( "27c040_u27.bin", 0x000001, 0x80000, CRC(dc3a477e) SHA1(6268872257f1b513b80a58a9e29861f3f2e2c177) )
- ROM_LOAD32_BYTE( "27c040_u28.bin", 0x000003, 0x80000, CRC(58d88d8d) SHA1(4551121691e958d280dfd437e47c6e331b66ede6) )
-
- ROM_REGION( 0x80000, "samples", 0 )
- ROM_LOAD( "27c040_u9.bin", 0x000000, 0x80000, CRC(5345ca39) SHA1(2b8f1dfeebb93a1d99c06912d89b268c642163df) )
-ROM_END
-
-
-void subsino2_state::init_treamary()
-{
- // other patches?
-
- // gets stuck on CHIP1 test, enters test mode if bypassed
-}
-
-
-/***************************************************************************
-
-Express Card / Top Card
-(c) 1998 American Alpha
-
-PCB:
- SUBSINO SFWO2
-
-CPU:
- AMD Am188 EM-20KC? (@U10)
- Osc. 20.000000 MHz (@OSC20)
- ????? (@U13) - 32k x 8 Bit High Speed CMOS Static RAM?
-
-Video:
- Subsino SS9601? (@U16)
- Subsino SS9802 (@U1)
- Subsino SS9803? (@U29)
- HM86171-80 (@U26) - RAMDAC
- 2 x HMC HM62H256AK-15 (@U21-U22) - 32k x 8 Low Voltage CMOS Static RAM
-
-Sound:
- U6295 9838 (@U6)
- Osc. 8.4672 MHz (@X1)
- Philips TDA1519A (@U9) - 22 W BTL or 2 x 11 W stereo power amplifier
-
-Other:
- Osc. 12.000 MHz (@OSC12)
- Battery (button cell)
- Reset switch (@SW5)
- Volume trimmer (@VR1)
- 4 x DSW8 (@SW1-SW4, only SW1 is populated)
- 4 x Toshiba TD62003A (@U3-U5) - High Voltage, High Current Darlington Transistor Arrays
- 10 pin edge connector
- 36 pin edge connector
- 28 pin JAMMA connector
-
-***************************************************************************/
-
-ROM_START( expcard )
- ROM_REGION( 0x40000, "maincpu", 0 )
- ROM_LOAD( "top_card_alpha_1_v1.5.u14", 0x00000, 0x40000, CRC(c6de12fb) SHA1(e807880809dd71243caf993216d8d0baf5f678df) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "top_card_alpha_3_v1.4.u20", 0x00000, 0x80000, CRC(6e666d51) SHA1(924ac4fefa30cbe8bebe4f0d8ba6fff42fdd233e) )
- ROM_LOAD32_BYTE( "top_card_alpha_4_v1.4.u19", 0x00002, 0x80000, CRC(1382fd45) SHA1(1d81b7e72e702f5a254e1ec5ec6adb5d8af5d467) )
- ROM_LOAD32_BYTE( "top_card_alpha_5_v1.4.u18", 0x00001, 0x80000, CRC(bbe465ac) SHA1(7a5ee6f7696e5f768ac56ccfaf0914dd56a83339) )
- ROM_LOAD32_BYTE( "top_card_alpha_6_v1.4.u17", 0x00003, 0x80000, CRC(315d7a81) SHA1(8dafa1d422d8fe306765413084e35f16e4c17d27) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "top_card-ve1.u7", 0x00000, 0x80000, CRC(0ca9bd18) SHA1(af791c78ae321104afa738564bc23f520f37e7d5) )
-ROM_END
-
-void subsino2_state::init_expcard()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xed4dc-0xc0000] = 0xeb;
-}
-
-/***************************************************************************
-
- Magic Train
- -----------
-
- Board silkscreened: "SUBSINO" (logo), "CS186P012". Stickered "1056439".
-
- CPU: 1x Hitachi HD647180X0CP6 - 6D1R (Subsino - SS9600) (U23).
- SND: 1x U6295 (OKI compatible) (U25).
- 1x TDA1519A (PHILIPS, 22W BTL or 2x 11W stereo car radio power amplifier (U34).
-
- NVRAM: 1x SANYO LC36256AML (SMD) (U16).
- VRAM: 2x UMC UM62256E-70LL (U7-U8, next to gfx ROMs).
- Other RAM: 1x HMC HM86171-80 (U29, next to sound ROM).
-
- Video: Subsino (SMD-40PX40P) SS9601 - 9732WX011 (U1).
- I/O: Subsino (SMD-30PX20P) SS9602 - 9732LX006 (U11).
-
- PRG ROM: Stickered "M-TRAIN-N OUT_1 V1.31".
-
- GFX ROMs: 1x 27C2000DC-12 Stickered "M-TRAIN-N ROM_1 V1.0" (U5).
- 1x 27C2000DC-12 Stickered "M-TRAIN-N ROM_2 V1.0" (U4).
- 1x 27C2000DC-12 Stickered "M-TRAIN-N ROM_3 V1.0" (U3).
- 1x 27C2000DC-12 Stickered "M-TRAIN-N ROM_4 V1.0" (U2).
-
- SND ROM: 1x 27C2000DC-12 (U27, no sticker).
-
- PLDs: 1x GAL16V8D (U31, next to sound ROM).
- 3x GAL16V8D (U18-U19-U6, next to CPU, program ROM and NVRAM).
- 1x GAL16V8D (U26, near sound amp)
-
- Battery: 1x VARTA 3.6v, 60mAh.
-
- Xtal: 12 MHz.
-
- 4x 8 DIP switches banks (SW1-SW2-SW3-SW4).
- 1x Push button (S1, next to battery).
-
- 1x 2x36 Edge connector.
- 1x 2x10 Edge connector.
-
- U12, U13 & U14 are Darlington arrays.
-
-***************************************************************************/
-
-ROM_START( mtrain )
- ROM_REGION( 0x10000, "maincpu", 0 )
- // code starts at 0x8100!
- ROM_LOAD( "out_1v131.u17", 0x0000, 0x8100, CRC(6761be7f) SHA1(a492f8179d461a454516dde33ff04473d4cfbb27) )
- ROM_CONTINUE( 0x0000, 0x7f00 )
- ROM_RELOAD( 0xa000, 0x6000 )
-
- ROM_REGION( 0x100000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "rom_4.u02", 0x00000, 0x40000, CRC(b7e65d04) SHA1(5eea1b8c1129963b3b83a59410cd0e1de70621e4) )
- ROM_LOAD32_BYTE( "rom_3.u03", 0x00002, 0x40000, CRC(cef2c079) SHA1(9ee54a08ef8db90a80a4b3568bb82ce09ee41e65) )
- ROM_LOAD32_BYTE( "rom_2.u04", 0x00001, 0x40000, CRC(a794f287) SHA1(7b9c0d57224a700f49e55ba5aeb7ed9d35a71e02) )
- ROM_LOAD32_BYTE( "rom_1.u05", 0x00003, 0x40000, CRC(96067e95) SHA1(bec7dffaf6920ff2bd85a43fb001a997583e25ee) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "rom_5.u27", 0x00000, 0x40000, CRC(51cae476) SHA1(d1da4e5c3d53d18d8b69dfb57796d0ae311d99bf) )
- ROM_RELOAD( 0x40000, 0x40000 )
-
- ROM_REGION( 0x117, "plds", 0 )
- ROM_LOAD( "gal16v8d.u6", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u18", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u19", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u26", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u31", 0x000, 0x117, NO_DUMP )
-ROM_END
-
-ROM_START( strain )
- ROM_REGION( 0x10000, "maincpu", 0 )
- // code starts at 0x8100!
- ROM_LOAD( "v1.9_27c512_u17.bin", 0x0000, 0x8100, CRC(36379ab2) SHA1(b48374f80ffa107a7ea3e08eb432259e443dc4a6) )
- ROM_CONTINUE( 0x0000, 0x7f00 )
- ROM_RELOAD( 0xa000, 0x6000 )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "v1.0_mx27c4000_u2.bin", 0x00000, 0x80000, CRC(0b77b3be) SHA1(daf1180cabce3e1bbb9a8f91c02e0fe4f0fd811e) )
- ROM_LOAD32_BYTE( "v1.0_mx27c4000_u3.bin", 0x00002, 0x80000, CRC(c003661d) SHA1(49d76a9273928c35dcd6a6ab114d798f5553d79a) )
- ROM_LOAD32_BYTE( "v1.0_mx27c4000_u4.bin", 0x00001, 0x80000, CRC(6392f562) SHA1(83881ec85a3dff82f32214b2654ee79e5e9a2d2a) )
- ROM_LOAD32_BYTE( "v1.0_mx27c4000_u5.bin", 0x00003, 0x80000, CRC(85abe66c) SHA1(32698faf75bd0c42ab99b0c53b3ffa0891eedaca) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "v1.0_mx27c4000_u27.bin", 0x00000, 0x80000, CRC(d5bbebc7) SHA1(59fa804caa991dc2ad7f735b7c171defd836140a) )
-
- ROM_REGION( 0x117, "plds", ROMREGION_ERASE00 )
- // TODO: list these
-ROM_END
-
-
-/***************************************************************************
-
- Decryption of mtrain (same as crsbingo)
-
- Notes:
-
- 0000-8100? is not encrypted
-
- rom addr
- 8100 -> 0000 ; after decryption (code start)
- 8200 -> 0100 ; after decryption
- 8d97 -> 0c97 ; after decryption
- 1346 -> b346
- ec40 -> 6b40 ; after decryption
-
-***************************************************************************/
-
-void subsino2_state::init_mtrain()
-{
- subsino_decrypt(machine(), crsbingo_bitswaps, crsbingo_xors, 0x8000);
-
- // patch serial protection test (it always enters test mode on boot otherwise)
- uint8_t *rom = memregion("maincpu")->base();
- rom[0x0cec] = 0x18;
- rom[0xb037] = 0x18;
-}
-
-void subsino2_state::init_strain()
-{
- subsino_decrypt(machine(), crsbingo_bitswaps, crsbingo_xors, 0x8000);
-
- // patch 'version error' (not sure this is correct, there's no title logo?)
- uint8_t *rom = memregion("maincpu")->base();
- rom[0x141c] = 0x20;
-}
-
-
-
-ROM_START( tbonusal )
- ROM_REGION( 0x10000, "maincpu", 0 )
- // code starts at 0x8100
- ROM_LOAD( "n-alpha 1.6-u17.bin", 0x0000, 0x8100, CRC(1bdc1c92) SHA1(2cd7ec5a89865b76df2cfe9d18b2ab42923f8def) )
- ROM_CONTINUE( 0x0000, 0x7f00 )
- ROM_RELOAD( 0xa000, 0x6000 )
-
- // there is a clear HD647180X0FS6 on the PCB, but is it operating in external mode? there is a program rom above at least
- // if the internal ROM is unused / irrelevant then this doesn't need to be marked
- //ROM_REGION( 0x10000, "mcu", 0 )
- //ROM_LOAD( "hd647180", 0x00000, 0x08000, NO_DUMP )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "n-alpha 1.6-u2.bin", 0x000000, 0x80000, CRC(392943be) SHA1(776d36a94b8a70ec2eaf88dfd2804517656b53a0) )
- ROM_LOAD32_BYTE( "n-alpha 1.6-u3.bin", 0x000002, 0x80000, CRC(24c8f62e) SHA1(692a96f233d8576a6921bfe23c97502ff26c62db) )
- ROM_LOAD32_BYTE( "n-alpha 1.6-u4.bin", 0x000001, 0x80000, CRC(bed035a9) SHA1(6b141bb8fb7969338faa702bd03970331bbbe6e1) )
- ROM_LOAD32_BYTE( "n-alpha 1.6-u5.bin", 0x000003, 0x80000, CRC(d00d48c6) SHA1(28b505a3f07c5d5bb8e8609c6d6e883260594588) )
-
- ROM_REGION( 0x80000, "oki", ROMREGION_ERASE00 )
- // not populated on 4 different PCBs
-
- ROM_REGION( 0x117, "plds", ROMREGION_ERASEFF )
- // TODO list of GALs
-ROM_END
-
-void subsino2_state::init_tbonusal()
-{
- subsino_decrypt(machine(), sharkpy_bitswaps, sharkpy_xors, 0x8000);
-
- // patch serial protection test (it always enters test mode on boot otherwise)
- uint8_t *rom = memregion("maincpu")->base();
- rom[0x0ea7] = 0x18;
- rom[0xbbbf] = 0x18;
-}
-
-/***************************************************************************
-
-Sakura Love
-Subsino, 1998
-
-PCB Layout
-----------
-
-|------------------------------------|
-| ULN2003 ULN2003 ULN2003 ULN2003|
-|LM358 HM86171 |-----| PAL|
-| M6295 8.4672MHz|SS9602 PAL|
-| LM324 |-----| PAL|
-|J |-------| PAL|
-|A |SUBSINO| PAL|
-|M 2 12MHz |SS9601 | SW5|
-|M 3 20MHz | | |
-|A 4 |-------| |
-| 5 1 LC36256 |
-| 6 AM188-EM 62256 SW3 SW4|
-|BATTERY 62256 SW1 SW2|
-|------------------------------------|
-Notes:
- AM188-EM - AMD AM188 Main CPU (QFP100) Clock 20.0MHz
- M6295 - clock 1.0584MHz [8.4672/8]. Pin 7 HIGH
- SW1-SW4 - Dip switches with 8 positions
- SW5 - Reset switch
- VSync - 58.7270Hz
- HSync - 15.3234kHz
-
-***************************************************************************/
-
-ROM_START( saklove )
- ROM_REGION( 0x20000, "maincpu", 0 ) // AM188-EM
- ROM_LOAD( "1.u23", 0x00000, 0x20000, CRC(02319bfb) SHA1(1a425dcdeecae92d8b7457d1897c700ac7856a9d) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "3.u27", 0x000000, 0x80000, CRC(01aa8fbd) SHA1(d1d19ef52c8077ccf17cc2fde96fd56c626e33db) )
- ROM_LOAD32_BYTE( "4.u28", 0x000002, 0x80000, CRC(f8db7ab6) SHA1(3af4e92ab27edc980eccecdbbbb431e1d2101059) )
- ROM_LOAD32_BYTE( "5.u29", 0x000001, 0x80000, CRC(c6ca1764) SHA1(92bfa19e116d358b03164f2448a28e7524e3cc62) )
- ROM_LOAD32_BYTE( "6.u30", 0x000003, 0x80000, CRC(5823c39e) SHA1(257e862ac736ff403ce9c70bbdeed340dfe168af) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "2.u10", 0x00000, 0x80000, CRC(4f70125c) SHA1(edd5e6bd47b9a4fa3c4057cb4a85544241fe483d) )
-ROM_END
-
-void subsino2_state::init_saklove()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch serial protection test (it always enters test mode on boot otherwise)
- rom[0x0e029] = 0xeb;
-}
-
-/***************************************************************************
-
-X-Plan
-(c) 2006 Subsino
-
-PCB:
- SUBSINO SFWO2
-
-CPU:
- AMD Am188 EM-20KC F 9912F6B (@U10)
- Osc. 20.00000 MHz (@OSC20)
- Sony CXK58257AM-10L (@U13) - 32k x 8 Bit High Speed CMOS Static RAM
-
-Video:
- Subsino SS9601 0035WK007 (@U16)
- Subsino SS9802 0448 (@U1)
- Subsino SS9803 0020 (@U29)
- HM86171-80 (@U26) - RAMDAC
- 2 x Winbond W24M257AK-15 (@U21-U22) - 32k x 8 Low Voltage CMOS Static RAM
-
-Sound:
- U6295 0214 B923826 (@U6)
- Osc. 8.4672 MHz (@X1)
- Philips TDA1519A? (@U9) - 22 W BTL or 2 x 11 W stereo power amplifier
-
-Other:
- Osc. 12.000 MHz (@OSC12)
- Battery (button cell)
- Reset switch (@SW5)
- Volume trimmer (@VR1)
- 4 x DSW8 (@SW1-SW4, only SW1 is populated)
- 4 x ULN2003A (@U3-U5) - High Voltage, High Current Darlington Transistor Arrays
- 10 pin edge connector
- 36 pin edge connector
- 28 pin JAMMA connector
-
-***************************************************************************/
-
-ROM_START( xplan )
- ROM_REGION( 0x40000, "maincpu", 0 )
- ROM_LOAD( "x-plan_v101.u14", 0x00000, 0x40000, CRC(5a05fcb3) SHA1(9dffffd868e777f9436c38df76fa5247f4dd6daf) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "x-plan_rom_3_v102b.u20", 0x00000, 0x80000, CRC(a027cbd1) SHA1(dac4226014794ef5bff84ddafee7da6691c00ece) )
- ROM_LOAD32_BYTE( "x-plan_rom_4_v102b.u19", 0x00002, 0x80000, CRC(744be318) SHA1(1c1f2a9e1da77d9bc1bf897072df44a681a53079) )
- ROM_LOAD32_BYTE( "x-plan_rom_5_v102b.u18", 0x00001, 0x80000, CRC(7e89c9b3) SHA1(9e3fea0d74cac48c068a15595f2342a2b0b3f747) )
- ROM_LOAD32_BYTE( "x-plan_rom_6_v102b.u17", 0x00003, 0x80000, CRC(a86ca3b9) SHA1(46aa86b9c62aa0a4e519eb06c72c2d540489afee) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "x-plan_rom_2_v100.u7", 0x00000, 0x80000, CRC(c742b5c8) SHA1(646960508be738824bfc578c1b21355c17e05010) )
-ROM_END
-
-void subsino2_state::init_xplan()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xeded9-0xc0000] = 0xeb;
-}
-
-/***************************************************************************
-
-X-Train
-(c) 1999 Subsino
-
-PCB:
- SUBSINO
-
-CPU:
- AMD Am188 EM-20KC (@U10)
- Osc. 20.000 MHz (@OSC20)
- Sony CXK58257AM-10L (@U13) - 32k x 8 Bit High Speed CMOS Static RAM
-
-Video:
- Subsino SS9601 9948WK007 (@U16)
- Subsino SS9802 9933 (@U1)
- Subsino SS9803 9933 (@U29)
- HM86171-80 (@U26) - RAMDAC
- 2 x Alliance AS7C256-15PC (@U21-U22) - High Performance 32Kx8 CMOS SRAM
-
-Sound:
- U6295 (@U6)
- Osc. 8.4672 MHz (@X1)
- Philips TDA1519A (@U9) - 22 W BTL or 2 x 11 W stereo power amplifier
-
-Other:
- Osc. 12.000 MHz (@OSC12)
- Battery (button cell)
- Reset switch (@SW5)
- Volume trimmer (@VR1)
- 4 x DSW8 (@SW1-SW4, only SW1 is populated)
- 4 x ULN2003A? (@U3-U5) - High Voltage, High Current Darlington Transistor Arrays
- 10 pin edge connector
- 36 pin edge connector
- 28 pin JAMMA connector
-
-***************************************************************************/
-
-ROM_START( xtrain )
- ROM_REGION( 0x40000, "maincpu", 0 )
- ROM_LOAD( "x-train=top=_out_1_v1.3.u14", 0x00000, 0x40000, CRC(019812b4) SHA1(33c73c53f8cf730c35fa310868f5b8360dfaad9e) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "x-train_rom_3_v1.2.u20", 0x00000, 0x80000, CRC(0e18ca82) SHA1(8fbc62a16ab109994086f58c9b9915a92bda0448) )
- ROM_LOAD32_BYTE( "x-train_rom_4_v1.2.u19", 0x00002, 0x80000, CRC(959fa749) SHA1(d39fcedd1d13d9f86c1915d7dcff7d024739a6fa) )
- ROM_LOAD32_BYTE( "x-train_rom_5_v1.2.u18", 0x00001, 0x80000, CRC(d0e8279f) SHA1(174483871c9e98936b37cc6cede71b64e19cae90) )
- ROM_LOAD32_BYTE( "x-train_rom_6_v1.2.u17", 0x00003, 0x80000, CRC(289ae881) SHA1(b3f8db43d86078688ad56a04d1e7d7a825df60d7) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "x-train_rom_2_v1.2.u7", 0x00000, 0x80000, CRC(aae563ff) SHA1(97db845d7e3d343bd70352371cb27b16faacca7f) )
-ROM_END
-
-void subsino2_state::init_xtrain()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xe190f-0xc0000] = 0xeb;
-}
-
-/***************************************************************************
-
-Panda Train (Novamatic 1.7)
-(c) 1999 Subsino
-
-Note: It's the same hardware as X-Train
-
-PCB:
- SUBSINO
-
-CPU:
- AMD Am188 EM-20KC (@U10)
- Osc. 20.000 MHz (@OSC20)
- MB84256C-10L (@U13)
-
-Video:
- Subsino SS9601 9901WK002 (@U16)
- Subsino SS9802 (@U1)
- Subsino SS9803 (@U29)
- HM86171-80 (@U26) - RAMDAC
- 2 x HM62H256DK-12 (@U21-U22)
-
-Sound:
- U6295 (@U6)
- Osc. 8.4672 MHz (@X1)
- Philips TDA1519 (@U9)
- LM324 (@U8) - Quad Operational Amplifier
-
-Other:
- Osc. 12.000 MHz (@OSC12)
- Battery (3V button cell)
- Reset switch (@SW5)
- Volume trimmer (@VR1)
- 4 x DSW8 (@SW1-SW4, only SW1 is populated)
- 4 x ULN2003A? (@U3-U5) - High Voltage, High Current Darlington Transistor Arrays
- 10 pin edge connector
- 36 pin edge connector
- 28 pin JAMMA connector
-
-***************************************************************************/
-
-ROM_START( ptrain )
- ROM_REGION( 0x40000, "maincpu", 0 )
- ROM_LOAD( "panda=top=-novam_1-v1.4.u14", 0x00000, 0x40000, CRC(75b12734) SHA1(d05d0cba2de9d7021736bbd7c67d9b3c552374ee) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "panda-novam_3-v1.4.0.u20", 0x00000, 0x80000, CRC(2d5ab471) SHA1(3df42b7f762d738a4409498984e90c80625fae1f) )
- ROM_LOAD32_BYTE( "panda-novam_4-v1.4.1.u19", 0x00002, 0x80000, CRC(a4b6985c) SHA1(1d3d23f7c9e775439a2d1a4c68b703bf51b0350f) )
- ROM_LOAD32_BYTE( "panda-novam_5-v1.4.2.u18", 0x00001, 0x80000, CRC(716f7500) SHA1(971589a2530a0d4152bb68dbc7794985525a837d) )
- ROM_LOAD32_BYTE( "panda-novam_6-v1.4.3.u17", 0x00003, 0x80000, CRC(10f0c21a) SHA1(400e53bf3dd6fe6f2dd679ed5151fb4400a6ec9f) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "panda-novam_2-v1.4.u7", 0x00000, 0x80000, CRC(d1debec8) SHA1(9086975e5bef2066a688ab3c1df3b384f59e507d) )
-ROM_END
-
-void subsino2_state::init_ptrain()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xe1b08-0xc0000] = 0xeb;
-}
-
-
-/***************************************************************************
- Treasure City
-
- unknown hardware
-***************************************************************************/
-
-ROM_START( treacity )
- ROM_REGION( 0x20000, "maincpu", 0 )
- ROM_LOAD( "alpha 208_27c1001_u33.bin", 0x00000, 0x20000, CRC(e743aac3) SHA1(762575000463a126df561c959dfa06180e955822) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "alpha 207_27c4001_u7.bin", 0x00000, 0x80000, CRC(88d4d1f2) SHA1(35bc70904ceadeb7b1ccc35bb92585419da50fe1) )
- ROM_LOAD32_BYTE( "alpha 207_27c4001_u8.bin", 0x00002, 0x80000, CRC(7140638f) SHA1(a6072286b453e1290b2fc46060a0d777ad4ae1a8) )
- ROM_LOAD32_BYTE( "alpha 207_27c4001_u9.bin", 0x00001, 0x80000, CRC(57241f44) SHA1(f055488710ae624c1c7e92b2adf6b497c72514ea) )
- ROM_LOAD32_BYTE( "alpha 207_27c4001_u10.bin", 0x00003, 0x80000, CRC(338370f9) SHA1(0e06ed1b71fb44bfd617f4d5112f6d34f0b759bc) )
-
- ROM_REGION( 0x80000, "oki", ROMREGION_ERASE00 ) // samples, missing or not used / other hardware here?
-ROM_END
-
-void subsino2_state::init_treacity()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xaff9] = 0x75;
-}
-
-ROM_START( treacity202 )
- ROM_REGION( 0x20000, "maincpu", 0 )
- ROM_LOAD( "alpha 202_27c1001_u33.bin", 0x00000, 0x20000, CRC(1a698c3d) SHA1(c2107b67d86783b04d1ebdf78d1f358916c51219) )
-
- ROM_REGION( 0x200000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "alpha 142_27c4001_u7.bin", 0x00000, 0x80000, CRC(c8e4e4d3) SHA1(b5dabfe2e8e5a19d218e3d58bbebbe83803feb23) )
- ROM_LOAD32_BYTE( "alpha 142_27c4001_u8.bin", 0x00002, 0x80000, CRC(a8fb65b4) SHA1(047fa2ccd08ce5282c015239f0f22d0ba20ea67b) )
- ROM_LOAD32_BYTE( "alpha 142_27c4001_u9.bin", 0x00001, 0x80000, CRC(b0c50891) SHA1(66ebebc327e00d5e8e9eb0a427d34683c4cca8aa) )
- ROM_LOAD32_BYTE( "alpha 142_27c4001_u10.bin", 0x00003, 0x80000, CRC(8545e8cd) SHA1(0d122a532df81fe2150c1eaf49b5a4e35c8134eb) )
-
- ROM_REGION( 0x80000, "oki", ROMREGION_ERASE00 ) // samples, missing or not used / other hardware here?
-ROM_END
-
-void subsino2_state::init_treacity202()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- // patch protection test (it always enters test mode on boot otherwise)
- rom[0xae30] = 0x75;
-}
-
-
-
-
-/***************************************************************************
-
-Water-Nymph (Ver. 1.4)
-(c) 1996 Subsino
-
-Same PCB as Magic Train
-
-***************************************************************************/
-
-ROM_START( wtrnymph )
- ROM_REGION( 0x10000, "maincpu", 0 )
- // code starts at 0x8100!
- ROM_LOAD( "ocean-n tetris_1 v1.4.u17", 0x0000, 0x8100, CRC(c7499123) SHA1(39a9ea6d927ee839cfb127747e5e3df3535af098) )
- ROM_CONTINUE( 0x0000, 0x7f00 )
- ROM_RELOAD( 0xa000, 0x6000 )
-
- ROM_REGION( 0x100000, "tilemap", 0 )
- ROM_LOAD32_BYTE( "ocean-n tetris_2 v1.21.u2", 0x00000, 0x40000, CRC(813aac90) SHA1(4555adf8dc363359b10f1d5cfae2dcebed411679) )
- ROM_LOAD32_BYTE( "ocean-n tetris_3 v1.21.u3", 0x00002, 0x40000, CRC(83c39379) SHA1(e7f9315d19370c18b664b759e433052a88f8c146) )
- ROM_LOAD32_BYTE( "ocean-n tetris_4 v1.21.u4", 0x00001, 0x40000, CRC(6fc64b42) SHA1(80110d7dae28cca5e39c8a7c2ceebf589116ae23) )
- ROM_LOAD32_BYTE( "ocean-n tetris_5 v1.21.u5", 0x00003, 0x40000, CRC(8c7515ee) SHA1(a67b21c1e8ca8a098fe558c73561bca13962893e) )
-
- ROM_REGION( 0x80000, "oki", 0 )
- ROM_LOAD( "ocean-n tetris_6 v1.21.u27", 0x00000, 0x40000, CRC(1c8a886d) SHA1(faa983801b368a6d04ef80e359c6fb67b240c60d) )
- ROM_RELOAD( 0x40000, 0x40000 )
-
- ROM_REGION( 0x117, "plds", 0 )
- ROM_LOAD( "gal16v8d.u6", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u18", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u19", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u26", 0x000, 0x117, NO_DUMP )
- ROM_LOAD( "gal16v8d.u31", 0x000, 0x117, NO_DUMP )
-ROM_END
-
-void subsino2_state::init_wtrnymph()
-{
- subsino_decrypt(machine(), victor5_bitswaps, victor5_xors, 0x8000);
-
- // patch serial protection test (it always enters test mode on boot otherwise)
- uint8_t *rom = memregion("maincpu")->base();
- rom[0x0d79] = 0x18;
- rom[0xc1cf] = 0x18;
- rom[0xc2a9] = 0x18;
- rom[0xc2d7] = 0x18;
-}
-
-GAME( 1996, mtrain, 0, mtrain, mtrain, subsino2_state, init_mtrain, ROT0, "Subsino", "Magic Train (Ver. 1.31)", 0 )
-
-GAME( 1996, strain, 0, mtrain, strain, subsino2_state, init_strain, ROT0, "Subsino", "Super Train (Ver. 1.9)", MACHINE_NOT_WORKING )
-
-GAME( 1995, tbonusal, 0, mtrain, tbonusal, subsino2_state, init_tbonusal, ROT0, "Subsino (American Alpha license)", "Treasure Bonus (American Alpha, Ver. 1.6)", MACHINE_NOT_WORKING )
-
-GAME( 1996, wtrnymph, 0, mtrain, wtrnymph, subsino2_state, init_wtrnymph, ROT0, "Subsino", "Water-Nymph (Ver. 1.4)", 0 )
-
-GAME( 1998, expcard, 0, expcard, expcard, subsino2_state, init_expcard, ROT0, "Subsino (American Alpha license)", "Express Card / Top Card (Ver. 1.5)", 0 )
-
-GAME( 1998, saklove, 0, saklove, saklove, subsino2_state, init_saklove, ROT0, "Subsino", "Ying Hua Lian 2.0 (China, Ver. 1.02)", 0 )
-
-GAME( 1999, xtrain, 0, xtrain, xtrain, subsino2_state, init_xtrain, ROT0, "Subsino", "X-Train (Ver. 1.3)", 0 )
-
-GAME( 1999, ptrain, 0, ptrain, ptrain, subsino2_state, init_ptrain, ROT0, "Subsino", "Panda Train (Novamatic 1.7)", MACHINE_IMPERFECT_GRAPHICS )
-
-GAME( 1997, treacity, 0, saklove, treacity, subsino2_state, init_treacity, ROT0, "Subsino (American Alpha license)", "Treasure City (Ver. 208)", MACHINE_NOT_WORKING )
-GAME( 1997, treacity202, treacity,saklove, treacity, subsino2_state, init_treacity202, ROT0, "Subsino (American Alpha license)", "Treasure City (Ver. 202)", MACHINE_NOT_WORKING )
-
-GAME( 1999, bishjan, 0, bishjan, bishjan, subsino2_state, init_bishjan, ROT0, "Subsino", "Bishou Jan (Japan, Ver. 203)", MACHINE_NO_SOUND )
-
-GAME( 2000, new2001, 0, new2001, new2001, subsino2_state, init_new2001, ROT0, "Subsino", "New 2001 (Italy, Ver. 200N)", MACHINE_NO_SOUND )
-
-GAME( 2006, xplan, 0, xplan, xplan, subsino2_state, init_xplan, ROT0, "Subsino", "X-Plan (Ver. 101)", 0 )
-
-GAME( 2001, queenbee, 0, humlan, humlan, subsino2_state, init_queenbee, ROT0, "Subsino (American Alpha license)", "Queen Bee (Ver. 114)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues
-GAME( 2001, queenbeeb,queenbee, humlan, humlan, subsino2_state, init_queenbeeb,ROT0, "Subsino", "Queen Bee (Brazil, Ver. 202)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available
-GAME( 2001, queenbeei,queenbee, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (Israel, Ver. 100)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available
-GAME( 2001, queenbeesa,queenbee,humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (SA-101-HARD)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available
-
-GAME( 2001, humlan, queenbee, humlan, humlan, subsino2_state, init_humlan, ROT0, "Subsino (Truemax license)", "Humlan's Lyckohjul (Sweden, Ver. 402)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues
-
-GAME( 2002, squeenb, 0, humlan, humlan, subsino2_state, init_squeenb, ROT0, "Subsino", "Super Queen Bee (Ver. 101)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues
-
-GAME( 2003, qbeebing, 0, humlan, humlan, subsino2_state, init_qbeebing, ROT0, "Subsino", "Queen Bee Bingo", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-
-GAME( 200?, treamary, 0, humlan, humlan, subsino2_state, init_treamary, ROT0, "Subsino", "Treasure Mary", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )