summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author 0kmg <9137159+0kmg@users.noreply.github.com>2021-12-21 10:21:40 -0900
committer GitHub <noreply@github.com>2021-12-21 14:21:40 -0500
commitc76d2b2cb13e7776bf31e8527018177e2d33bed1 (patch)
tree80d68d58cc20e41ca217c8590aa13ab2d03c6c50
parent860292661ba3f4627c9978e27a78c65904ad1628 (diff)
bus/nes_ctrl: Updated mahjong controller based on hardware info. (#9024)
* bus/nes_ctrl: Updated mahjong controller base on hardware info. - Fixed reversed Start and Select buttons. - Added more labels to the multi-use buttons. * emu/inpttype.ipp: Added player 3 and player 4 mahjong input types.
-rw-r--r--hash/nes.xml7
-rw-r--r--src/devices/bus/nes_ctrl/ctrl.cpp2
-rw-r--r--src/devices/bus/nes_ctrl/mjpanel.cpp71
-rw-r--r--src/devices/bus/nes_ctrl/mjpanel.h15
-rw-r--r--src/emu/inpttype.ipp72
5 files changed, 122 insertions, 45 deletions
diff --git a/hash/nes.xml b/hash/nes.xml
index 741287093a4..f9d278f6301 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -17728,7 +17728,7 @@ license:CC0
</part>
</software>
- <software name="ideyumj1" cloneof="ideyumj">
+ <software name="ideyomj1" cloneof="ideyomj">
<description>Ide Yousuke Meijin no Jissen Mahjong (Jpn)</description>
<year>1987</year>
<publisher>Capcom</publisher>
@@ -17750,7 +17750,7 @@ license:CC0
</part>
</software>
- <software name="ideyumj">
+ <software name="ideyomj">
<description>Ide Yousuke Meijin no Jissen Mahjong (Jpn, Rev. A)</description>
<year>1987</year>
<publisher>Capcom</publisher>
@@ -17772,7 +17772,7 @@ license:CC0
</part>
</software>
- <software name="ideyumj2">
+ <software name="ideyomj2">
<description>Ide Yousuke Meijin no Jissen Mahjong II (Jpn)</description>
<year>1991</year>
<publisher>Capcom</publisher>
@@ -17784,6 +17784,7 @@ license:CC0
<feature name="slot" value="sxrom" />
<feature name="pcb" value="HVC-SNROM" />
<feature name="mmc1_type" value="MMC1B2" />
+ <feature name="peripheral" value="mjcontroller" />
<dataarea name="prg" size="262144">
<rom name="cap-2q-0 prg" size="262144" crc="7b44fb2a" sha1="5f04d72eb14a0014e44c2875f705c62913538e42" offset="00000" />
</dataarea>
diff --git a/src/devices/bus/nes_ctrl/ctrl.cpp b/src/devices/bus/nes_ctrl/ctrl.cpp
index 8ce51061ce2..5fe4d386b1a 100644
--- a/src/devices/bus/nes_ctrl/ctrl.cpp
+++ b/src/devices/bus/nes_ctrl/ctrl.cpp
@@ -218,7 +218,7 @@ void fc_expansion_devices(device_slot_interface &device)
device.option_add("konamibag", NES_KONAMIBAG);
device.option_add("konamihs", NES_KONAMIHS);
device.option_add("konami_piano", NES_DOREPIANO);
- device.option_add("mj_panel", NES_MJPANEL);
+ device.option_add("mahjong", NES_MJPANEL);
device.option_add("pachinko", NES_PACHINKO);
device.option_add("partytap", NES_PARTYTAP);
device.option_add("hori_twin", NES_HORITWIN);
diff --git a/src/devices/bus/nes_ctrl/mjpanel.cpp b/src/devices/bus/nes_ctrl/mjpanel.cpp
index e667487dac5..08e7b6ce757 100644
--- a/src/devices/bus/nes_ctrl/mjpanel.cpp
+++ b/src/devices/bus/nes_ctrl/mjpanel.cpp
@@ -2,7 +2,14 @@
// copyright-holders:Fabio Priuli
/**********************************************************************
- Nintendo Family Computer Mahjong Panel
+ Nintendo Family Computer Capcom Mahjong Controller
+
+ There are two versions of this controller, one packed with the 1st
+ and 2nd Ide Yousoku Meijin no Jissen Mahjong, respectively. Both
+ have the original game's serial "CAP-IM" on back. Controller serials
+ HC-01 or HC-02 appear on revisions of the 1st game's controller.
+ HC-01 also appears on the 2nd game's controller. At least one
+ version of the original controller has a PCB marked 0827-06 HORI.
**********************************************************************/
@@ -13,7 +20,7 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(NES_MJPANEL, nes_mjpanel_device, "nes_mjpanel", "Famicom Mahjong Panel")
+DEFINE_DEVICE_TYPE(NES_MJPANEL, nes_mjpanel_device, "nes_mjpanel", "Capcom Mahjong Controller")
static INPUT_PORTS_START( nes_mjpanel )
@@ -22,17 +29,17 @@ static INPUT_PORTS_START( nes_mjpanel )
PORT_START("MJPANEL.1")
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_N )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_NAME("%p Mahjong N / Circle")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_NAME("%p Mahjong M / Square")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_L )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_K )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_MAHJONG_J )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
PORT_START("MJPANEL.2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_H )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_F )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_H ) PORT_NAME("%p Mahjong H / Right")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G ) PORT_NAME("%p Mahjong G / Up")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_F ) PORT_NAME("%p Mahjong F / Left")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_E )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_D )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_C )
@@ -45,9 +52,9 @@ static INPUT_PORTS_START( nes_mjpanel )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_PON )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("Mahjong Select")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Mahjong Start")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_NAME("%p Mahjong Kan / Right")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("%p Start / Down")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("%p Select / Left")
INPUT_PORTS_END
@@ -70,11 +77,12 @@ ioport_constructor nes_mjpanel_device::device_input_ports() const
// nes_mjpanel_device - constructor
//-------------------------------------------------
-nes_mjpanel_device::nes_mjpanel_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+nes_mjpanel_device::nes_mjpanel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, NES_MJPANEL, tag, owner, clock)
, device_nes_control_port_interface(mconfig, *this)
, m_panel(*this, "MJPANEL.%u", 0)
, m_latch(0)
+ , m_row(0)
{
}
@@ -86,16 +94,8 @@ nes_mjpanel_device::nes_mjpanel_device(const machine_config &mconfig, const char
void nes_mjpanel_device::device_start()
{
save_item(NAME(m_latch));
-}
-
-
-//-------------------------------------------------
-// device_reset
-//-------------------------------------------------
-
-void nes_mjpanel_device::device_reset()
-{
- m_latch = 0;
+ save_item(NAME(m_row));
+ save_item(NAME(m_strobe));
}
@@ -103,17 +103,16 @@ void nes_mjpanel_device::device_reset()
// read
//-------------------------------------------------
-uint8_t nes_mjpanel_device::read_exp(offs_t offset)
+u8 nes_mjpanel_device::read_exp(offs_t offset)
{
- uint8_t ret = 0;
- if (offset)
+ u8 ret = 0;
+ if (offset) // $4017
{
+ if (m_strobe)
+ set_latch();
ret = (m_latch & 1) << 1;
m_latch >>= 1;
}
- else
- logerror("Error: Mahjong panel read from $4016\n");
-
return ret;
}
@@ -121,13 +120,17 @@ uint8_t nes_mjpanel_device::read_exp(offs_t offset)
// write
//-------------------------------------------------
-void nes_mjpanel_device::write(uint8_t data)
+void nes_mjpanel_device::write(u8 data)
{
- if (data & 0x01)
- return;
+ m_row = (data >> 1) & 0x03;
+ if (write_strobe(data))
+ set_latch();
+}
- if (data & 0xf8)
- logerror("Error: Mahjong panel read with mux data %02x\n", (data & 0xfe));
- else
- m_latch = m_panel[(data & 0xfe) >> 1]->read();
+void nes_mjpanel_device::set_latch()
+{
+ if (m_row)
+ m_latch = m_panel[m_row]->read();
+ else // hardware behavior of the apparently unused input row
+ m_latch = m_panel[1]->read() | m_panel[2]->read();
}
diff --git a/src/devices/bus/nes_ctrl/mjpanel.h b/src/devices/bus/nes_ctrl/mjpanel.h
index 1a18bf0b19c..9a2c53d5bc7 100644
--- a/src/devices/bus/nes_ctrl/mjpanel.h
+++ b/src/devices/bus/nes_ctrl/mjpanel.h
@@ -2,7 +2,7 @@
// copyright-holders:Fabio Priuli
/**********************************************************************
- Nintendo Family Computer Mahjong Panel
+ Nintendo Family Computer Capcom Mahjong Controller
**********************************************************************/
@@ -25,26 +25,27 @@ class nes_mjpanel_device : public device_t,
{
public:
// construction/destruction
- nes_mjpanel_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ nes_mjpanel_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual ioport_constructor device_input_ports() const override;
protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_reset() override;
- virtual uint8_t read_exp(offs_t offset) override;
- virtual void write(uint8_t data) override;
+ virtual u8 read_exp(offs_t offset) override;
+ virtual void write(u8 data) override;
private:
+ void set_latch();
+
required_ioport_array<4> m_panel;
- uint32_t m_latch;
+ u8 m_latch;
+ u8 m_row;
};
// device type definition
DECLARE_DEVICE_TYPE(NES_MJPANEL, nes_mjpanel_device)
-
#endif // MAME_BUS_NES_CTRL_MJPANEL_H
diff --git a/src/emu/inpttype.ipp b/src/emu/inpttype.ipp
index 59c6a458779..427360c707e 100644
--- a/src/emu/inpttype.ipp
+++ b/src/emu/inpttype.ipp
@@ -250,6 +250,39 @@ namespace {
INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, SELECT, N_p("input-name", "%p Select"), input_seq(KEYCODE_7, input_seq::or_code, JOYCODE_SELECT_INDEXED(2)) ) \
CORE_INPUT_TYPES_END()
+#define CORE_INPUT_TYPES_P3_MAHJONG \
+ CORE_INPUT_TYPES_BEGIN(p3_mahjong) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_A, N_p("input-name", "%p Mahjong A"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_B, N_p("input-name", "%p Mahjong B"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_C, N_p("input-name", "%p Mahjong C"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_D, N_p("input-name", "%p Mahjong D"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_E, N_p("input-name", "%p Mahjong E"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_F, N_p("input-name", "%p Mahjong F"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_G, N_p("input-name", "%p Mahjong G"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_H, N_p("input-name", "%p Mahjong H"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_I, N_p("input-name", "%p Mahjong I"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_J, N_p("input-name", "%p Mahjong J"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_K, N_p("input-name", "%p Mahjong K"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_L, N_p("input-name", "%p Mahjong L"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_M, N_p("input-name", "%p Mahjong M"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_N, N_p("input-name", "%p Mahjong N"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_O, N_p("input-name", "%p Mahjong O"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_P, N_p("input-name", "%p Mahjong P"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_Q, N_p("input-name", "%p Mahjong Q"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_KAN, N_p("input-name", "%p Mahjong Kan"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_PON, N_p("input-name", "%p Mahjong Pon"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_CHI, N_p("input-name", "%p Mahjong Chi"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_REACH, N_p("input-name", "%p Mahjong Reach"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_RON, N_p("input-name", "%p Mahjong Ron"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_FLIP_FLOP, N_p("input-name", "%p Mahjong Flip Flop"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_BET, N_p("input-name", "%p Mahjong Bet"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_SCORE, N_p("input-name", "%p Mahjong Take Score"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_DOUBLE_UP, N_p("input-name", "%p Mahjong Double Up"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_BIG, N_p("input-name", "%p Mahjong Big"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_SMALL, N_p("input-name", "%p Mahjong Small"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, MAHJONG_LAST_CHANCE, N_p("input-name", "%p Mahjong Last Chance"), input_seq() ) \
+ CORE_INPUT_TYPES_END()
+
#define CORE_INPUT_TYPES_P4 \
CORE_INPUT_TYPES_BEGIN(p4) \
INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_UP, N_p("input-name", "%p Up"), input_seq(KEYCODE_8_PAD, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(3)) ) \
@@ -284,6 +317,39 @@ namespace {
INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, SELECT, N_p("input-name", "%p Select"), input_seq(KEYCODE_8, input_seq::or_code, JOYCODE_SELECT_INDEXED(3)) ) \
CORE_INPUT_TYPES_END()
+#define CORE_INPUT_TYPES_P4_MAHJONG \
+ CORE_INPUT_TYPES_BEGIN(p4_mahjong) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_A, N_p("input-name", "%p Mahjong A"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_B, N_p("input-name", "%p Mahjong B"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_C, N_p("input-name", "%p Mahjong C"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_D, N_p("input-name", "%p Mahjong D"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_E, N_p("input-name", "%p Mahjong E"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_F, N_p("input-name", "%p Mahjong F"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_G, N_p("input-name", "%p Mahjong G"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_H, N_p("input-name", "%p Mahjong H"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_I, N_p("input-name", "%p Mahjong I"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_J, N_p("input-name", "%p Mahjong J"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_K, N_p("input-name", "%p Mahjong K"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_L, N_p("input-name", "%p Mahjong L"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_M, N_p("input-name", "%p Mahjong M"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_N, N_p("input-name", "%p Mahjong N"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_O, N_p("input-name", "%p Mahjong O"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_P, N_p("input-name", "%p Mahjong P"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_Q, N_p("input-name", "%p Mahjong Q"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_KAN, N_p("input-name", "%p Mahjong Kan"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_PON, N_p("input-name", "%p Mahjong Pon"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_CHI, N_p("input-name", "%p Mahjong Chi"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_REACH, N_p("input-name", "%p Mahjong Reach"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_RON, N_p("input-name", "%p Mahjong Ron"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_FLIP_FLOP, N_p("input-name", "%p Mahjong Flip Flop"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_BET, N_p("input-name", "%p Mahjong Bet"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_SCORE, N_p("input-name", "%p Mahjong Take Score"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_DOUBLE_UP, N_p("input-name", "%p Mahjong Double Up"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_BIG, N_p("input-name", "%p Mahjong Big"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_SMALL, N_p("input-name", "%p Mahjong Small"), input_seq() ) \
+ INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, MAHJONG_LAST_CHANCE, N_p("input-name", "%p Mahjong Last Chance"), input_seq() ) \
+ CORE_INPUT_TYPES_END()
+
#define CORE_INPUT_TYPES_P5 \
CORE_INPUT_TYPES_BEGIN(p5) \
INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_UP, N_p("input-name", "%p Up"), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)) ) \
@@ -920,7 +986,9 @@ CORE_INPUT_TYPES_P2
CORE_INPUT_TYPES_P2_MAHJONG
CORE_INPUT_TYPES_P2_HANAFUDA
CORE_INPUT_TYPES_P3
+CORE_INPUT_TYPES_P3_MAHJONG
CORE_INPUT_TYPES_P4
+CORE_INPUT_TYPES_P4_MAHJONG
CORE_INPUT_TYPES_P5
CORE_INPUT_TYPES_P6
CORE_INPUT_TYPES_P7
@@ -978,7 +1046,9 @@ constexpr size_t core_input_types_count()
CORE_INPUT_TYPES_P2_MAHJONG
CORE_INPUT_TYPES_P2_HANAFUDA
CORE_INPUT_TYPES_P3
+ CORE_INPUT_TYPES_P3_MAHJONG
CORE_INPUT_TYPES_P4
+ CORE_INPUT_TYPES_P4_MAHJONG
CORE_INPUT_TYPES_P5
CORE_INPUT_TYPES_P6
CORE_INPUT_TYPES_P7
@@ -1034,7 +1104,9 @@ ATTR_COLD inline void emplace_core_types(std::vector<input_type_entry> &typelist
emplace_core_types_p2_mahjong(typelist);
emplace_core_types_p2_hanafuda(typelist);
emplace_core_types_p3(typelist);
+ emplace_core_types_p3_mahjong(typelist);
emplace_core_types_p4(typelist);
+ emplace_core_types_p4_mahjong(typelist);
emplace_core_types_p5(typelist);
emplace_core_types_p6(typelist);
emplace_core_types_p7(typelist);