summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2024-09-21 03:13:04 +1000
committer Vas Crabb <vas@vastheman.com>2024-09-21 03:13:04 +1000
commitfa683e7ac966d18e2a263f059d99fffd1700e7f0 (patch)
tree9165f1bde5fa9fd3007a2be1c4d860f11e608280 /src
parent5aef10517342317053afeac0d07ae8194ef00355 (diff)
igs/igs_m027.cpp: Hooked up I/O and clickable layout for Triple Slot.
Systems promoted to working --------------------------- Triple Slot (V200VE)
Diffstat (limited to 'src')
-rw-r--r--src/mame/igs/igs_m027.cpp183
-rw-r--r--src/mame/igs/igs_m027xa.cpp5
-rw-r--r--src/mame/layout/tripslot.lay280
3 files changed, 442 insertions, 26 deletions
diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp
index 88302d44b74..3f5cbf8fb77 100644
--- a/src/mame/igs/igs_m027.cpp
+++ b/src/mame/igs/igs_m027.cpp
@@ -47,6 +47,7 @@
#include "jking02.lh"
#include "oceanpar.lh"
+#include "tripslot.lh"
namespace {
@@ -68,6 +69,7 @@ public:
m_ticket(*this, "ticket"),
m_io_kbd(*this, "KEY%u", 0U),
m_io_dsw(*this, "DSW%u", 1U),
+ m_io_misc(*this, "MISC"),
m_out_lamps(*this, "lamp%u", 1U)
{ }
@@ -87,6 +89,7 @@ public:
void zhongguo_xor(machine_config &config) ATTR_COLD;
void mgzz_xor(machine_config &config) ATTR_COLD;
void oceanpar_xor(machine_config &config) ATTR_COLD;
+ void tripslot_xor(machine_config &config) ATTR_COLD;
void chessc2_xor(machine_config &config) ATTR_COLD;
void init_sdwx() ATTR_COLD;
@@ -131,6 +134,7 @@ private:
optional_ioport_array<5> m_io_kbd;
optional_ioport_array<3> m_io_dsw;
+ optional_ioport m_io_misc;
output_finder<16> m_out_lamps;
@@ -150,6 +154,8 @@ private:
void mahjong_output_w(u8 data);
void jking02_output_w(u8 data);
void oceanpar_output_w(u8 data);
+ void tripslot_misc_w(u8 data);
+ void tripslot_okibank_low_w(u8 data);
void oki_128k_bank_w(u8 data);
u32 slqz3_gpio_r();
@@ -163,6 +169,7 @@ private:
void igs_mahjong_map(address_map &map) ATTR_COLD;
void igs_mahjong_xor_map(address_map &map) ATTR_COLD;
void cjddz_xor_map(address_map &map) ATTR_COLD;
+ void tripslot_xor_map(address_map &map) ATTR_COLD;
void oki_128k_map(address_map &map) ATTR_COLD;
};
@@ -225,6 +232,13 @@ void igs_m027_state::cjddz_xor_map(address_map &map)
map(0x3800'b000, 0x3800'b003).umask32(0x0000'00ff).w(FUNC(igs_m027_state::oki_128k_bank_w));
}
+void igs_m027_state::tripslot_xor_map(address_map &map)
+{
+ igs_mahjong_xor_map(map);
+
+ map(0x3800'c000, 0x3800'c003).umask32(0x0000'00ff).w(FUNC(igs_m027_state::tripslot_misc_w));
+}
+
void igs_m027_state::oki_128k_map(address_map &map)
{
map(0x00000, 0x1ffff).bankr(m_okibank[0]);
@@ -1208,6 +1222,101 @@ INPUT_PORTS_START( fruitpara )
PORT_DIPSETTING( 0x00, DEF_STR(Yes) )
INPUT_PORTS_END
+INPUT_PORTS_START( tripslot )
+ PORT_START("PORTB")
+ PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) // shows DIP switch settings
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) // also provides access to game setup (coinage, etc.)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_READ_LINE_DEVICE_MEMBER("hopper", hopper_device, line_r)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SLOT_STOP4 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Stop Reel 4 / Take Score")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) // also provides access to game setup (coinage, etc.)
+ PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) // shows DIP switch settings
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Stop Reel 3 / Small")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Stop Reel 2 / Double Up")
+
+ PORT_START("PORTC")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x1e, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_READ_LINE_DEVICE_MEMBER("hopper", hopper_device, line_r)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP5 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Stop Reel 5 / Bet")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Start / Stop All Reels")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x70, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_NAME("Stop Reel 1 / Big")
+
+ PORT_START("PLAYER")
+ PORT_BIT( 0x00001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x00002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x00004, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Start / Stop All Reels")
+ PORT_BIT( 0x00008, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Stop Reel 1 / Big")
+ PORT_BIT( 0x00010, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Stop Reel 2 / Double Up")
+ PORT_BIT( 0x00020, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Stop Reel 3 / Small")
+ PORT_BIT( 0x00040, IP_ACTIVE_LOW, IPT_SLOT_STOP4 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Stop Reel 4 / Take Score")
+ PORT_BIT( 0x00080, IP_ACTIVE_LOW, IPT_SLOT_STOP5 ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_NAME("Stop Reel 5 / Bet")
+ PORT_BIT( 0x000ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0x0ff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02)
+ PORT_BIT( 0x10000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00)
+ PORT_BIT( 0xe0000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("PPIB")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<0>) // coin 1
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<2>) // key-in
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<1>) // coin 2
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<3>) // coin 2
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<4>) // hopper
+
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<0>) // coin 1
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_WRITE_LINE_MEMBER(igs_m027_state, counter_w<4>) // key-out
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x00) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", hopper_device, motor_w)
+
+ PORT_START("MISC")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW1", 0x02, EQUALS, 0x02) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", hopper_device, motor_w)
+ // bit 5 does something as well
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR(Language) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x01, DEF_STR(English) )
+ PORT_DIPSETTING( 0x00, DEF_STR(Spanish) )
+ PORT_DIPNAME( 0x02, 0x02, "Wiring Diagram" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x02, "36+10" )
+ PORT_DIPSETTING( 0x00, "28-pin" )
+ 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")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW2:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW2:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW2:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW2:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW2:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW2:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW2:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" )
+
+ PORT_START("DSW3")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW3:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW3:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW3:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW3:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW3:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW3:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW3:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW3:8" )
+INPUT_PORTS_END
+
INPUT_PORTS_START( chessc2 )
// preliminary - game seems to lack an input test and settings are locked out with password
@@ -1398,28 +1507,28 @@ template <unsigned Start>
void igs_m027_state::lamps_w(u8 data)
{
// active high outputs
- // +------+-------------------------------+---------------+
- // | lamp | jking02 | oceanpar |
- // | +---------------+---------------+ |
- // | | 36+10 | 28-Pin | |
- // +------+---------------+---------------+---------------+
- // | 1 | stop 4/start | | start |
- // | 2 | stop 3/small | | stop 2/small |
- // | 3 | bet | | bet |
- // | 4 | stop 1/take | | stop 3/take |
- // | 5 | stop 2/double | | stop 1/double |
- // | 6 | stop all/big | | stop all/big |
- // | 7 | | | |
- // | 8 | | | |
- // | 9 | | bet | |
- // | 10 | | start | |
- // | 11 | | | |
- // | 12 | | stop 1/take | |
- // | 13 | | stop 2/big | |
- // | 14 | | stop 4/double | |
- // | 15 | | stop 3/small | |
- // | 16 | | | |
- // +------+---------------+---------------+---------------+
+ // +------+-------------------------------+-------------------------------+---------------+
+ // | lamp | jking02 | tripslot | oceanpar |
+ // | +---------------+---------------+---------------+---------------+ |
+ // | | 36+10 | 28-Pin | 36+10 | 28-Pin | |
+ // +------+---------------+---------------+---------------+---------------+---------------+
+ // | 1 | stop 4/start | | start | | start |
+ // | 2 | stop 3/small | | stop 3/small | | stop 2/small |
+ // | 3 | bet | | stop 5/bet | | bet |
+ // | 4 | stop 1/take | | stop 4/take | | stop 3/take |
+ // | 5 | stop 2/double | | stop 2/double | | stop 1/double |
+ // | 6 | stop all/big | | stop 1/big | | stop all/big |
+ // | 7 | | | | | |
+ // | 8 | | | | | |
+ // | 9 | | bet | | stop 5/bet | |
+ // | 10 | | start | | start | |
+ // | 11 | | | | | |
+ // | 12 | | stop 1/take | | stop 1/big | |
+ // | 13 | | stop 2/big | | stop 2/double | |
+ // | 14 | | stop 4/double | | stop 4/take | |
+ // | 15 | | stop 3/small | | stop 3/small | |
+ // | 16 | | | | | |
+ // +------+---------------+---------------+---------------+---------------+---------------+
for (unsigned i = 0; 8 > i; ++i)
m_out_lamps[Start + i] = BIT(data, i);
}
@@ -1453,6 +1562,19 @@ void igs_m027_state::oceanpar_output_w(u8 data)
m_hopper->motor_w(BIT(data, 7));
}
+void igs_m027_state::tripslot_misc_w(u8 data)
+{
+ m_io_misc->write(data);
+ m_io_select[0] = (BIT(data, 5) << 2) | (m_io_select[0] & 0x03);
+ m_oki->set_rom_bank(m_io_select[0]);
+}
+
+void igs_m027_state::tripslot_okibank_low_w(u8 data)
+{
+ m_io_select[0] = (m_io_select[0] & 0x04) | (data & 0x03);
+ m_oki->set_rom_bank(m_io_select[0]);
+}
+
void igs_m027_state::oki_128k_bank_w(u8 data)
{
for (int i = 0; i < m_okibank.size(); i++)
@@ -1672,6 +1794,21 @@ void igs_m027_state::oceanpar_xor(machine_config &config)
TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200));
}
+void igs_m027_state::tripslot_xor(machine_config &config)
+{
+ m027_xor(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::tripslot_xor_map);
+ m_maincpu->in_port().set_ioport("PLAYER");
+ m_maincpu->out_port().append(FUNC(igs_m027_state::tripslot_okibank_low_w)).rshift(3);
+
+ m_ppi->out_pa_callback().set(FUNC(igs_m027_state::lamps_w<8>));
+ m_ppi->out_pb_callback().set_ioport("PPIB");
+ m_ppi->out_pc_callback().set(FUNC(igs_m027_state::lamps_w<0>));
+
+ HOPPER(config, m_hopper, attotime::from_msec(50));
+}
+
void igs_m027_state::chessc2_xor(machine_config &config)
{
m027_xor(config);
@@ -2814,7 +2951,7 @@ GAMEL( 1999, oceanpara, oceanpar, oceanpar_xor, oceanpara,igs_m027_state, init_o
GAMEL( 1999, fruitpar, 0, oceanpar_xor, oceanpar, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", 0, layout_oceanpar )
GAMEL( 1999, fruitpara, fruitpar, oceanpar_xor, fruitpara,igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V206US)", 0, layout_oceanpar )
GAME( 200?, cjddz, 0, cjddz_xor, cjddz, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu", 0 )
-GAME( 2007, tripslot, 0, oceanpar_xor, oceanpar, igs_m027_state, init_tripslot, ROT0, "IGS", "Triple Slot (V200VE)", MACHINE_NOT_WORKING ) // 2007 date in internal ROM at least, could be later, default settings password is all 'start 1'
+GAMEL( 2007, tripslot, 0, tripslot_xor, tripslot, igs_m027_state, init_tripslot, ROT0, "IGS", "Triple Slot (V200VE)", 0, layout_tripslot ) // 2007 date in internal ROM at least, could be later, default settings password is all 'start 1'
// this has a 2nd 8255
GAME( 2001, extradrw, 0, m027, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Extra Draw (V100VE)", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255
diff --git a/src/mame/igs/igs_m027xa.cpp b/src/mame/igs/igs_m027xa.cpp
index 25f253ec596..aad61fb20af 100644
--- a/src/mame/igs/igs_m027xa.cpp
+++ b/src/mame/igs/igs_m027xa.cpp
@@ -163,7 +163,7 @@ void igs_m027xa_state::main_map(address_map &map)
map(0x38000000, 0x38007fff).rw(m_igs017_igs031, FUNC(igs017_igs031_device::read), FUNC(igs017_igs031_device::write));
map(0x38008000, 0x38008003).umask32(0x000000ff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x38009000, 0x38009003).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
- map(0x3800c000, 0x3800c003).w(FUNC(igs_m027xa_state::oki_bank_w));
+ map(0x3800c000, 0x3800c003).umask32(0x000000ff).w(FUNC(igs_m027xa_state::oki_bank_w));
map(0x40000014, 0x40000017).w(FUNC(igs_m027xa_state::igs_40000014_w));
map(0x50000000, 0x500003ff).umask32(0x000000ff).w(FUNC(igs_m027xa_state::xor_table_w));
@@ -394,8 +394,7 @@ u32 igs_m027xa_state::gpio_r()
void igs_m027xa_state::oki_bank_w(offs_t offset, u8 data)
{
- if (offset == 0)
- m_oki->set_rom_bank(data & 7);
+ m_oki->set_rom_bank(data & 7);
}
template <unsigned Select, unsigned First>
diff --git a/src/mame/layout/tripslot.lay b/src/mame/layout/tripslot.lay
new file mode 100644
index 00000000000..95f5933ca14
--- /dev/null
+++ b/src/mame/layout/tripslot.lay
@@ -0,0 +1,280 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+copyright-holders:Vas Crabb
+
+Triple Slot control panel
+May or may not match arrangement/colour of real control panel
+-->
+<mamelayout version="2">
+
+ <element name="blank">
+ <rect />
+ </element>
+
+ <element name="warning">
+ <rect>
+ <color red="0" green="0" blue="0" />
+ </rect>
+ <text string="Please set the view to match the Wiring Diagram DIP switch setting">
+ <bounds x="0.01" y="0.05" width="0.98" height="0.9" />
+ </text>
+ </element>
+
+ <element name="start" defstate="0">
+ <rect state="1">
+ <color red="0.0" green="1.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.0" green="0.15" blue="0.0" />
+ </rect>
+ <text string="START">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="STOP ALL">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="stop1" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="BIG">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="stop2" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 2">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="DOUBLE">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="stop3" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 3">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="SMALL">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="stop4" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 4">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="stop5" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 5">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="BET">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="start_b" defstate="0">
+ <rect state="1">
+ <color red="0.0" green="0.7" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.0" green="0.1" blue="0.0" />
+ </rect>
+ </element>
+
+ <element name="stop_b" defstate="0">
+ <rect state="1">
+ <color red="0.7" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.1" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+
+ <group name="cpanel">
+ <screen index="0">
+ <bounds left="0" top="0" right="4" bottom="3" />
+ </screen>
+
+ <element ref="blank">
+ <bounds left="0" right="4" top="3" bottom="3.40" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </element>
+ <element ref="blank">
+ <bounds left="0" right="4" top="3.01" bottom="3.39" />
+ <color red="0.20" green="0.20" blue="0.20" />
+ </element>
+ <element ref="blank">
+ <bounds left="0" right="4" top="3.02" bottom="3.38" />
+ <color red="0.15" green="0.15" blue="0.15" />
+ </element>
+ <element ref="blank">
+ <bounds left="0" right="4" top="3.03" bottom="3.37" />
+ <color red="0.10" green="0.10" blue="0.10" />
+ </element>
+ <element ref="blank">
+ <bounds left="0" right="4" top="3.04" bottom="3.36" />
+ <color red="0.05" green="0.05" blue="0.05" />
+ </element>
+ <element ref="blank">
+ <bounds left="0" right="4" top="3.05" bottom="3.35" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </element>
+ </group>
+
+ <view name="36+10">
+ <group ref="cpanel" />
+
+ <element ref="stop_b" name="lamp6" inputtag="PLAYER" inputmask="0x00008">
+ <bounds x="0.10" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop1" name="lamp6" inputtag="PLAYER" inputmask="0x00008">
+ <bounds x="0.12" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp5" inputtag="PLAYER" inputmask="0x00010">
+ <bounds x="0.70" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop2" name="lamp5" inputtag="PLAYER" inputmask="0x00010">
+ <bounds x="0.72" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp2" inputtag="PLAYER" inputmask="0x00020">
+ <bounds x="1.30" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop3" name="lamp2" inputtag="PLAYER" inputmask="0x00020">
+ <bounds x="1.32" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp4" inputtag="PLAYER" inputmask="0x00040">
+ <bounds x="1.90" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop4" name="lamp4" inputtag="PLAYER" inputmask="0x00040">
+ <bounds x="1.92" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp3" inputtag="PLAYER" inputmask="0x00080">
+ <bounds x="2.50" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop5" name="lamp3" inputtag="PLAYER" inputmask="0x00080">
+ <bounds x="2.52" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="start_b" name="lamp1" inputtag="PLAYER" inputmask="0x00004">
+ <bounds x="3.40" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="start" name="lamp1" inputtag="PLAYER" inputmask="0x00004">
+ <bounds x="3.42" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="warning">
+ <bounds left="0" right="4" top="3.05" bottom="3.35" />
+ <animate inputtag="DSW1" mask="0x02" />
+ <color state="0" alpha="1" />
+ <color state="1" alpha="0" />
+ </element>
+ </view>
+
+ <view name="28-pin">
+ <group ref="cpanel" />
+
+ <element ref="stop_b" name="lamp12" inputtag="PORTC" inputmask="0x80">
+ <bounds x="0.10" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop1" name="lamp12" inputtag="PORTC" inputmask="0x80">
+ <bounds x="0.12" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp13" inputtag="PORTB" inputmask="0x80">
+ <bounds x="0.70" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop2" name="lamp13" inputtag="PORTB" inputmask="0x80">
+ <bounds x="0.72" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp15" inputtag="PORTB" inputmask="0x40">
+ <bounds x="1.30" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop3" name="lamp15" inputtag="PORTB" inputmask="0x40">
+ <bounds x="1.32" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp14" inputtag="PORTB" inputmask="0x02">
+ <bounds x="1.90" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop4" name="lamp14" inputtag="PORTB" inputmask="0x02">
+ <bounds x="1.92" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="stop_b" name="lamp9" inputtag="PORTC" inputmask="0x01">
+ <bounds x="2.50" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="stop5" name="lamp9" inputtag="PORTC" inputmask="0x01">
+ <bounds x="2.52" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="start_b" name="lamp10" inputtag="PORTC" inputmask="0x04">
+ <bounds x="3.40" y="3.08" width="0.50" height="0.24" />
+ </element>
+ <element ref="start" name="lamp10" inputtag="PORTC" inputmask="0x04">
+ <bounds x="3.42" y="3.10" width="0.46" height="0.20" />
+ </element>
+
+ <element ref="warning">
+ <bounds left="0" right="4" top="3.05" bottom="3.35" />
+ <animate inputtag="DSW1" mask="0x02" />
+ <color state="0" alpha="0" />
+ <color state="1" alpha="1" />
+ </element>
+ </view>
+</mamelayout>