shared/mahjong.cpp: Moved "standard" mahjong matrix to shared project.

The "standard" mahjong matrix can easily be shared by Dynax, Jaleco,
Seta and IGS with minor adjustments.

dynax/ddenlovr.cpp: Hooked up hopper device for Hanafuda Hana Tengoku.
This commit is contained in:
Vas Crabb 2024-12-03 05:42:51 +11:00
parent 577599f365
commit a50e1f8792
15 changed files with 336 additions and 303 deletions

View File

@ -124,6 +124,8 @@ Notes:
#include "emu.h"
#include "dynax.h"
#include "mahjong.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/kl5c80a12.h"
#include "cpu/z80/tmpz84c015.h"
@ -417,7 +419,7 @@ protected:
// input/output
uint8_t m_coins = 0U;
uint8_t m_hopper = 0U;
uint8_t m_hopper_hack = 0U;
// blitter (TODO: merge with the dynax.h, where possible)
int m_extra_layers;
@ -3529,7 +3531,7 @@ void ddenlovr_state::hgokou_input_w(uint8_t data)
// bit 7 = ?
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
m_hopper = data & 0x04;
m_hopper_hack = data & 0x04;
#ifdef MAME_DEBUG
// popmessage("COINS %02x",data);
#endif
@ -4087,7 +4089,7 @@ void ddenlovr_state::sryudens_coincounter_w(uint8_t data)
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
m_hopper = data & 0x04;
m_hopper_hack = data & 0x04;
if (data & 0x68)
logerror("%04x: warning, coin counter = %02x\n", m_maincpu->pc(), data);
@ -4338,40 +4340,48 @@ void htengoku_state::htengoku_coin_w(uint8_t data)
{
switch (m_input_sel)
{
case 0x0c:
// bit 0 = coin counter
// bit 1 = out counter
// bit 2 = hopper
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
m_hopper = data & 0x04;
case 0x0c:
// bit 0 = coin counter
// bit 1 = out counter
// bit 2 = hopper
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
m_hopper->motor_w(BIT(data, 2));
#ifdef MAME_DEBUG
// popmessage("COINS %02x",data);
#endif
m_coins = data;
break;
m_coins = data;
break;
case 0x0d: break; // ff resets input port sequence?
case 0x0d: break; // ff resets input port sequence?
case 0xff: break; // CRT controller?
default:
logerror("%04x: coins_w with select = %02x, data = %02x\n", m_maincpu->pc(), m_input_sel, data);
case 0xff: break; // CRT controller?
default:
logerror("%04x: coins_w with select = %02x, data = %02x\n", m_maincpu->pc(), m_input_sel, data);
}
}
uint8_t htengoku_state::htengoku_input_r()
{
static const char *const keynames0[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4" };
static const char *const keynames1[] = { "KEY5", "KEY6", "KEY7", "KEY8", "KEY9" };
uint8_t result = 0xff;
switch (m_input_sel)
{
case 0x81: return ioport(keynames1[m_keyb++])->read();
case 0x82: return ioport(keynames0[m_keyb++])->read();
case 0x0d: return 0xff; // unused
case 0x81:
case 0x82:
if (m_keyb < 5)
{
result = m_io_key[BIT(m_input_sel, 0)][m_keyb]->read();
if (!machine().side_effects_disabled())
++m_keyb;
}
break;
case 0x0d:
result = 0xff; // unused
break;
default:
logerror("%04x: input_r with select = %02x\n", m_maincpu->pc(), m_input_sel);
}
logerror("%04x: input_r with select = %02x\n", m_maincpu->pc(), m_input_sel);
return 0xff;
return result;
}
uint8_t htengoku_state::htengoku_coin_r()
@ -4380,7 +4390,7 @@ uint8_t htengoku_state::htengoku_coin_r()
{
case 0x00: return ioport("COINS")->read();
case 0x01: return 0xff; //?
case 0x02: return 0xbf | ((m_hopper && !(m_screen->frame_number() % 10)) ? 0 : (1 << 6)); // bit 7 = blitter busy, bit 6 = hopper
case 0x02: return 0xbf | (m_hopper->line_r() ? 0 : (1 << 6)); // bit 7 = blitter busy, bit 6 = hopper
case 0x03: return m_coins;
}
logerror("%04x: coin_r with select = %02x\n", m_maincpu->pc(), m_input_sel);
@ -4468,6 +4478,8 @@ void htengoku_state::htengoku(machine_config &config)
m_mainlatch->q_out_cb<2>().set(FUNC(dynax_state::layer_half2_w)); //
m_mainlatch->q_out_cb<5>().set(FUNC(dynax_state::blitter_ack_w)); // Blitter IRQ Ack
HOPPER(config, m_hopper, attotime::from_msec(50));
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
@ -4510,7 +4522,7 @@ void htengoku_state::htengoku(machine_config &config)
uint8_t ddenlovr_state::daimyojn_keyb1_r()
{
uint8_t hopper_bit = ((m_hopper && !(m_screen->frame_number() % 10)) ? 0 : (1 << 6));
uint8_t hopper_bit = ((m_hopper_hack && !(m_screen->frame_number() % 10)) ? 0 : (1 << 6));
uint8_t val = hanamai_keyboard_r<1>() | hopper_bit;
// val |= ioport("BET")->read();
@ -4975,7 +4987,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( htengoku )
PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) // pay
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x00) // pay
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW4", 0x10, EQUALS, 0x10)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test )) PORT_TOGGLE
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer
@ -5046,10 +5059,10 @@ static INPUT_PORTS_START( htengoku )
PORT_DIPNAME( 0x04, 0x04, "Credits Per Note" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x04, "10" )
PORT_DIPNAME( 0x08, 0x08, "Max Rate" )
PORT_DIPNAME( 0x08, 0x08, "Maximum Bet" )
PORT_DIPSETTING( 0x08, "5" )
PORT_DIPSETTING( 0x00, "10" )
PORT_DIPNAME( 0x30, 0x30, "Min Rate To Play" )
PORT_DIPNAME( 0x30, 0x30, "Minimum Bet" )
PORT_DIPSETTING( 0x30, "1" )
PORT_DIPSETTING( 0x20, "2" )
PORT_DIPSETTING( 0x10, "3" )
@ -5094,8 +5107,8 @@ static INPUT_PORTS_START( htengoku )
PORT_DIPNAME( 0x08, 0x08, "Unknown 2-9" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, "Pay Out Type" )
PORT_DIPSETTING( 0x10, "Credit" )
PORT_DIPNAME( 0x10, 0x10, "Payout Mode" )
PORT_DIPSETTING( 0x10, "Key-out" )
PORT_DIPSETTING( 0x00, "Hopper" )
PORT_DIPNAME( 0x20, 0x20, "Hopper Switch" )
PORT_DIPSETTING( 0x20, "Active Low" )
@ -6264,7 +6277,7 @@ static INPUT_PORTS_START( mjreach1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -6419,7 +6432,7 @@ static INPUT_PORTS_START( jongtei )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -6630,7 +6643,7 @@ static INPUT_PORTS_START( mjchuuka )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -6785,7 +6798,7 @@ static INPUT_PORTS_START( mjschuka )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -7041,7 +7054,7 @@ static INPUT_PORTS_START( mjmyster )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -7399,7 +7412,7 @@ static INPUT_PORTS_START( hgokou )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(DEF_STR( Test ))
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // analyzer
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // data clear
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BILL1 ) PORT_CODE(KEYCODE_6) // note
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -7429,9 +7442,15 @@ static INPUT_PORTS_START( hgokou )
PORT_DIPSETTING( 0x40, "75%" )
PORT_DIPSETTING( 0x20, "70%" )
PORT_DIPSETTING( 0x00, "65%" ) // Hard
PORT_DIPNAME( 0x80, 0x80, "Key-in Rate ?" ) PORT_DIPLOCATION("SW1:8") // What is this? Manual says キ一インレ一ト
PORT_DIPSETTING( 0x80, "x10" )
PORT_DIPSETTING( 0x00, "x5" )
PORT_DIPNAME( 0x80, 0x80, "Key-in Rate" ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x00, "5" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x03)
PORT_DIPSETTING( 0x00, "10" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x02)
PORT_DIPSETTING( 0x00, "25" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x01)
PORT_DIPSETTING( 0x00, "50" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x00)
PORT_DIPSETTING( 0x80, "10" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x03)
PORT_DIPSETTING( 0x80, "20" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x02)
PORT_DIPSETTING( 0x80, "50" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x01)
PORT_DIPSETTING( 0x80, "100" ) PORT_CONDITION("DSW2", 0x03, EQUALS, 0x00)
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2")
@ -7439,7 +7458,7 @@ static INPUT_PORTS_START( hgokou )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x00, "1 Coin 10 Credits" )
PORT_DIPNAME( 0x0c, 0x0c, "Start Level" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW2:3,4")
PORT_DIPSETTING( 0x0c, "1" )
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x04, "3" )
@ -7520,9 +7539,9 @@ static INPUT_PORTS_START( hgokou )
PORT_DIPSETTING( 0x20, "30" )
PORT_DIPSETTING( 0x10, "40" )
PORT_DIPSETTING( 0x00, "50" )
PORT_DIPNAME( 0x40, 0x40, "Max Bet" ) PORT_DIPLOCATION("SW1:9")
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPNAME( 0x40, 0x40, "Maximum Bet" ) PORT_DIPLOCATION("SW1:9")
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:10")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@ -7539,7 +7558,7 @@ static INPUT_PORTS_START( mjmyornt )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" ) PORT_DIPLOCATION("SW1:1,2,3,4")
@ -7782,7 +7801,7 @@ static INPUT_PORTS_START( mjflove )
PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(FUNC(ddenlovr_state::mjflove_blitter_r)) // RTC (bit 5) & blitter irq flag (bit 6)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) // blitter busy flag
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW2") // IN12 - DSW2
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2")
@ -8023,7 +8042,7 @@ static INPUT_PORTS_START( sryudens )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // note2
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -8178,7 +8197,7 @@ static INPUT_PORTS_START( seljan2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // note2
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -8333,7 +8352,7 @@ static INPUT_PORTS_START( janshinp )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // service coin (test mode)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -8487,7 +8506,7 @@ static INPUT_PORTS_START( dtoyoken )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // service coin (test mode)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -8641,7 +8660,7 @@ static INPUT_PORTS_START( daimyojn )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // note2
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW1")
PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" )
@ -8800,7 +8819,7 @@ MACHINE_START_MEMBER(ddenlovr_state,ddenlovr)
save_item(NAME(m_dsw_sel));
save_item(NAME(m_keyb));
save_item(NAME(m_coins));
save_item(NAME(m_hopper));
save_item(NAME(m_hopper_hack));
save_item(NAME(m_okibank));
@ -8819,7 +8838,7 @@ MACHINE_RESET_MEMBER(ddenlovr_state,ddenlovr)
m_dsw_sel = 0;
m_keyb = 0;
m_coins = 0;
m_hopper = 0;
m_hopper_hack = 0;
m_okibank = 0;
m_prot_val = 0;

View File

@ -82,6 +82,8 @@ TODO:
#include "emu.h"
#include "dynax.h"
#include "mahjong.h"
#include "cpu/tlcs90/tlcs90.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/tmpz84c015.h"
@ -1399,107 +1401,13 @@ void cdracula_state::cdracula_io_map(address_map &map)
***************************************************************************/
INPUT_PORTS_START( dynax_mahjong_keys )
PORT_START("KEY0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("KEY1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(1) // "l"
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(1) // "f"
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("KEY6")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY7")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY8")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY9")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2) // "l"
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2) // "f"
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
INPUT_PORTS_START( dynax_mahjong_keys_bet )
PORT_INCLUDE( dynax_mahjong_keys )
PORT_MODIFY("KEY1")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(1)
PORT_INCLUDE( mahjong_matrix_2p_ff )
PORT_MODIFY("KEY4")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(1) // "t"
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(1) // "w"
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(1) // "b"
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(1) // "s"
PORT_MODIFY("KEY6")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2)
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )
PORT_MODIFY("KEY9")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(2) // "t"
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(2) // "w"
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(2) // "b"
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(2) // "s"
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2)
INPUT_PORTS_END
static INPUT_PORTS_START( dynax_hanafuda_keys )
@ -3119,7 +3027,7 @@ static INPUT_PORTS_START( mjembase )
MAHJONG_COIN_TEST("DSW1", 0x40)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
INPUT_PORTS_END
@ -3127,7 +3035,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( mjelct3 )
MAHJONG_COIN_TEST("DSW1", 0x40)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("SW1") // port 85
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
@ -3226,7 +3134,7 @@ static INPUT_PORTS_START( mjelctrn )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("SW1") // port 85
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
@ -3406,7 +3314,7 @@ static INPUT_PORTS_START( majxtal7 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
PORT_START("DSW2") /* select = 80 */
PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" )
@ -3668,7 +3576,7 @@ static INPUT_PORTS_START( tenkai )
MAHJONG_COIN_TEST("DSW2", 0x01)
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
INPUT_PORTS_END
@ -3872,7 +3780,7 @@ static INPUT_PORTS_START( mjreach )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Service
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
INPUT_PORTS_END
static INPUT_PORTS_START( gekisha )
@ -3964,7 +3872,7 @@ static INPUT_PORTS_START( gekisha )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_INCLUDE( dynax_mahjong_keys_bet )
PORT_INCLUDE( mahjong_matrix_2p_bet )
INPUT_PORTS_END

View File

@ -460,7 +460,6 @@ private:
INPUT_PORTS_EXTERN(dynax_mahjong_keys);
INPUT_PORTS_EXTERN(dynax_mahjong_keys_bet);
INPUT_PORTS_EXTERN(dynax_hanafuda_keys_bet);
#endif // MAME_DYNAX_DYNAX_H

View File

@ -82,7 +82,7 @@ Notes:
#include "igs017_igs031.h"
#include "igs022.h"
#include "mahjong.h"
#include "igsmahjong.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z180/z180.h"

View File

@ -87,7 +87,7 @@
#include "igs017_igs031.h"
#include "igs027a.h"
#include "mahjong.h"
#include "igsmahjong.h"
#include "pgmcrypt.h"
#include "machine/i8255.h"

View File

@ -31,7 +31,7 @@ Notes:
#include "igs023_video.h"
#include "igs027a.h"
#include "mahjong.h"
#include "igsmahjong.h"
#include "pgmcrypt.h"
#include "machine/i8255.h"

View File

@ -0,0 +1,27 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, Vas Crabb
#include "emu.h"
#include "igsmahjong.h"
#include "mahjong.h"
INPUT_PORTS_START( igs_mahjong_matrix )
PORT_INCLUDE(mahjong_matrix_1p_bet)
PORT_MODIFY("KEY0")
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_MODIFY("KEY1")
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_MODIFY("KEY2")
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_MODIFY("KEY3")
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_MODIFY("KEY4")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) // no Flip Flop key
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
INPUT_PORTS_END

View File

@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, Vas Crabb
#ifndef MAME_IGS_MAHJONG_H
#define MAME_IGS_MAHJONG_H
#ifndef MAME_IGS_IGSMAHJONG_H
#define MAME_IGS_IGSMAHJONG_H
#define IGS_MAHJONG_MATRIX_CONDITIONAL(port, mask, on) \
PORT_START("KEY0") \
@ -50,4 +50,4 @@
INPUT_PORTS_EXTERN(igs_mahjong_matrix);
#endif // MAME_IGS_MAHJONG_H
#endif // MAME_IGS_IGSMAHJONG_H

View File

@ -1,51 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, Vas Crabb
#include "emu.h"
#include "mahjong.h"
INPUT_PORTS_START( igs_mahjong_matrix )
// // Traditional Simplified English
PORT_START("KEY0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN) // 槓 杠 GUN
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1) // 開始 开始 START
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("KEY1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH) // 聽 听 LISTEN
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET) // 押注/押 押注/押 BET
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("KEY2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI) // 吃 吃 EAT
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON) // 胡 胡 WHO
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("KEY3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON) // 碰 碰 PON
PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_START("KEY4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE) // 海底 海底
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE) // 得分 續玩 TAKE
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP) // 比倍/續玩 比倍/续玩 DUP
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG) // 大/左 大/左 BIG
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL) // 小/右 小/右 SMALL
PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN)
INPUT_PORTS_END

View File

@ -473,6 +473,8 @@ Notes from Charles MacDonald
#include "ms32.h"
#include "jalcrpt.h"
#include "mahjong.h"
#include "cpu/z80/z80.h"
#include "cpu/v60/v60.h"
#include "speaker.h"
@ -492,7 +494,7 @@ ioport_value ms32_state::mahjong_ctrl_r()
mj_input &= m_io_mj[i]->read();
}
return mj_input;
return bitswap<8>(mj_input, 6, 5, 4, 2, 3, 1, 0, 7);
}
void ms32_base_state::sound_command_w(u32 data)
@ -960,55 +962,23 @@ static INPUT_PORTS_START( ms32_mahjong )
PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("MJ0")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_INCLUDE(mahjong_matrix_1p)
PORT_START("MJ1")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY0")
PORT_BIT( 0x00000060, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_START1 ) // rotated into LSB
PORT_START("MJ2")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY1")
PORT_BIT( 0x000000c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("MJ3")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY2")
PORT_BIT( 0x000000c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("MJ4")
PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_MODIFY("KEY3")
PORT_BIT( 0x000000c0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_MODIFY("KEY4")
PORT_BIT( 0x000000c0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
/*************************************

View File

@ -80,7 +80,7 @@ public:
, m_sprram(*this, "sprram", 0x10000, ENDIANNESS_LITTLE)
, m_txram(*this, "txram", 0x4000, ENDIANNESS_LITTLE)
, m_bgram(*this, "bgram", 0x4000, ENDIANNESS_LITTLE)
, m_io_mj(*this, "MJ%u", 0U)
, m_io_mj(*this, "KEY%u", 0U)
{ }
void ms32(machine_config &config);

View File

@ -635,7 +635,8 @@ void nb1413m3_device::vcrctrl_w(uint8_t data)
}
}
/* Nichibutsu Mahjong games share a common control panel */
// Nichibutsu Mahjong games share a common control panel
// The bit order is the opposite of Dynax/IGS
INPUT_PORTS_START( nbmjcontrols )
PORT_START("KEY0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )

View File

@ -165,6 +165,8 @@ Notes:
#include "emu.h"
#include "ssv.h"
#include "mahjong.h"
#include "cpu/v810/v810.h"
#include "cpu/v60/v60.h"
#include "machine/nvram.h"
@ -511,12 +513,12 @@ uint16_t ssv_state::hypreact_input_r()
{
const uint16_t input_sel = *m_input_sel;
uint16_t result = 0xffff;
uint16_t result = 0x3f;
if (BIT(input_sel, 0)) result &= m_io_key[0]->read();
if (BIT(input_sel, 1)) result &= m_io_key[1]->read();
if (BIT(input_sel, 2)) result &= m_io_key[2]->read();
if (BIT(input_sel, 3)) result &= m_io_key[3]->read();
return result;
return result | 0x00c0;
}
void ssv_state::hypreact_map(address_map &map)
@ -1019,45 +1021,9 @@ INPUT_PORTS_END
static INPUT_PORTS_START( ssv_mahjong )
PORT_INCLUDE(ssv_joystick)
PORT_START("KEY0") // IN5 - $800002(0)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_D )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY1") // IN6 - $800002(1)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_G )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_C )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY2") // IN7 - $800002(2)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_N )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_F )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_B )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("KEY3") // IN8 - $800002(3)
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_M )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_E )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_A )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_INCLUDE(mahjong_matrix_1p) // IN5-IN8 - $800002
PORT_MODIFY("KEY2")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // uses bet button, but not the rest of the gambling controls
INPUT_PORTS_END

177
src/mame/shared/mahjong.cpp Normal file
View File

@ -0,0 +1,177 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
/*
"Standard" 5*6 mahjong keyboard matrix used for numerous arcade games.
Key names
MAME Japanese (alt) Dynax IGS TW (alt) IGS CN (alt) IGS EN
--------------------------------------------------------------------------------------------
Flip Flop F.F F
Start S START
Bet B BET
Take Score T TAKE
Double Up W DUP
Big B BIG
Small S SMALL
Last Chance L
Kan K GUN
Pon P PON
Chi T EAT
Reach R LISTEN
Ron N WHO
Keys present
Name Jaleco Sega Dynax IGS
-----------------------------------------
Flip Flop * * *
Start * * * *
Bet * * *
Take Score * *
Double Up * *
Big * *
Small * *
Last Chance * * *
Kan * * * *
Pon * * * *
Chi * * * *
Reach * * * *
Ron * * * *
*/
#include "emu.h"
#include "mahjong.h"
INPUT_PORTS_START(mahjong_matrix_1p)
PORT_START("KEY0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1)
PORT_START("KEY1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY3")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON)
PORT_BIT(0x30, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY4")
PORT_BIT(0x3f, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
INPUT_PORTS_START(mahjong_matrix_1p_ff)
PORT_INCLUDE(mahjong_matrix_1p)
PORT_MODIFY("KEY4")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP)
INPUT_PORTS_END
INPUT_PORTS_START(mahjong_matrix_1p_bet)
PORT_INCLUDE(mahjong_matrix_1p_ff)
PORT_MODIFY("KEY1")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET)
PORT_MODIFY("KEY4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL)
INPUT_PORTS_END
INPUT_PORTS_START(mahjong_matrix_2p)
PORT_INCLUDE(mahjong_matrix_1p)
PORT_START("KEY5")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A) PORT_PLAYER(2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E) PORT_PLAYER(2)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN) PORT_PLAYER(2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START2)
PORT_START("KEY6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B) PORT_PLAYER(2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F) PORT_PLAYER(2)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH) PORT_PLAYER(2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY7")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C) PORT_PLAYER(2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G) PORT_PLAYER(2)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON) PORT_PLAYER(2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY8")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D) PORT_PLAYER(2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H) PORT_PLAYER(2)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L) PORT_PLAYER(2)
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON) PORT_PLAYER(2)
PORT_BIT(0x30, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("KEY9")
PORT_BIT(0x3f, IP_ACTIVE_LOW, IPT_UNUSED)
INPUT_PORTS_END
INPUT_PORTS_START(mahjong_matrix_2p_ff)
PORT_INCLUDE(mahjong_matrix_2p)
PORT_MODIFY("KEY4")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP)
PORT_MODIFY("KEY9")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP) PORT_PLAYER(2)
INPUT_PORTS_END
INPUT_PORTS_START(mahjong_matrix_2p_bet)
PORT_INCLUDE(mahjong_matrix_2p_ff)
PORT_MODIFY("KEY1")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET)
PORT_MODIFY("KEY4")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL)
PORT_MODIFY("KEY6")
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET) PORT_PLAYER(2)
PORT_MODIFY("KEY9")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE) PORT_PLAYER(2)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE) PORT_PLAYER(2)
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP) PORT_PLAYER(2)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG) PORT_PLAYER(2)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL) PORT_PLAYER(2)
INPUT_PORTS_END

17
src/mame/shared/mahjong.h Normal file
View File

@ -0,0 +1,17 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
#ifndef MAME_SHARED_MAHJONG_H
#define MAME_SHARED_MAHJONG_H
#pragma once
INPUT_PORTS_EXTERN(mahjong_matrix_1p); // letters, start, kan/pon/chi/reach/ron
INPUT_PORTS_EXTERN(mahjong_matrix_1p_ff); // adds flip flop
INPUT_PORTS_EXTERN(mahjong_matrix_1p_bet); // adds bet/take/double/big/small/last chance
INPUT_PORTS_EXTERN(mahjong_matrix_2p); // letters, start, kan/pon/chi/reach/ron
INPUT_PORTS_EXTERN(mahjong_matrix_2p_ff); // adds flip flop
INPUT_PORTS_EXTERN(mahjong_matrix_2p_bet); // adds bet/take/double/big/small/last chance
#endif // MAME_SHARED_MAHJONG_H