summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/igs/igs_m027.cpp115
1 files changed, 112 insertions, 3 deletions
diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp
index ef1e018c4e7..6dc3cf0554b 100644
--- a/src/mame/igs/igs_m027.cpp
+++ b/src/mame/igs/igs_m027.cpp
@@ -76,11 +76,15 @@
small 猜小
cancel 放弃
+ Known issues:
+ * ccly shows a black screen when it should show its bookeeping and input test modes
+ * klxyj102cn/klxyj104cn occasionally think the hopper is empty in "Joystick" mode - why?
+
TODO:
* Communication for games that support linked mode
* IGS025 protection for Chess Challenge II
* Emulate necessary peripherals for Extra Draw (might not belong here)
- * I/O for remaining games (klxyj102cn, klxyj104cn)
+ * I/O for remaining games
*/
#include "emu.h"
@@ -752,6 +756,109 @@ INPUT_PORTS_START( jking02 )
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW3:8" )
INPUT_PORTS_END
+INPUT_PORTS_START( klxyj )
+ // Mahjong panel controls:
+ // Start Start Stop All Take Score
+ // Mahjong Bet Bet
+ // Mahjong A Stop 1 Double Up (twice winnings)
+ // Mahjong B Stop 2
+ // Mahjong C Stop 3 Double Up (winnings)
+ // Mahjong D Stop 4
+ // Mahjong E Double Up (half winnings)
+ // Mahjong K Show Odds Big
+ // Mahjong M Small
+ IGS_MAHJONG_MATRIX_CONDITIONAL("DSW2", 0x01, 0x00)
+
+ PORT_START("PORTB")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SLOT_STOP2 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SLOT_STOP1 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SLOT_STOP3 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+
+ PORT_START("PORTC")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_NAME("Small / Half Gamble")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_NAME("Bet / Double Up")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_NAME("Big / Show Odds")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_NAME("Start / Take Score")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r))
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SLOT_STOP4 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+
+ PORT_START("PLAYER")
+ PORT_BIT( 0x000ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x00100, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x1fe00, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x20000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0xc0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01)
+ PORT_BIT( 0x0003f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00) PORT_CUSTOM_MEMBER(FUNC(igs_m027_state::kbd_ioport_r))
+ PORT_BIT( 0x00040, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::line_r))
+ PORT_BIT( 0x00f80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x01000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x02000, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x1c000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0x20000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+ PORT_BIT( 0xc0000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00)
+
+ PORT_START("PPIB")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x00) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w))
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_WRITE_LINE_MEMBER(FUNC(igs_m027_state::counter_w<0>)) // payout/keyout
+
+ PORT_START("PPIC")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_CONDITION("DSW2", 0x01, EQUALS, 0x01) PORT_WRITE_LINE_DEVICE_MEMBER("hopper", FUNC(hopper_device::motor_w))
+
+ PORT_START("CLEARMEM")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_TOGGLE
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x1f, 0x1f, "Satellite Machine No.") PORT_DIPLOCATION("SW1:1,2,3,4,5") // 副机编号
+ SATELLITE_NO_SETTINGS
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
+ PORT_DIPNAME( 0x80, 0x80, "Link Mode" ) PORT_DIPLOCATION("SW1:8") // 连线模式
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 无
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR(Controls) ) PORT_DIPLOCATION("SW2:1") // 操作界面
+ PORT_DIPSETTING( 0x01, DEF_STR(Joystick) ) // 揺杆
+ PORT_DIPSETTING( 0x00, "Mahjong" ) // 麻雀键盘
+ PORT_DIPNAME( 0x02, 0x02, "Hide Credits") PORT_DIPLOCATION("SW2:2") // 隐分功能 (hides credits/bets/wins, game plays normally)
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 无
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x04, 0x04, "Number Type" ) PORT_DIPLOCATION("SW2:3") // 数字型态
+ PORT_DIPSETTING( 0x04, "Numbers" ) // 数字
+ PORT_DIPSETTING( 0x00, "Circle Tiles" ) // 筒子
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW2:4") // 示范音乐
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 无
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x10, 0x10, "Background Color Mode" ) PORT_DIPLOCATION("SW2:5") // 底色模式
+ PORT_DIPSETTING( 0x10, "Monochrome" ) // 黑白
+ PORT_DIPSETTING( 0x00, "Color" ) // 彩色
+ 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( tct2p )
// uses the kan/pon/chi/reach/ron buttons as the main controls in mahjong panel mode
IGS_MAHJONG_MATRIX_CONDITIONAL("DSW2", 0x01, 0x00)
@@ -2530,6 +2637,7 @@ ROM_START( sdwx )
ROM_LOAD( "sp.u2", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) )
ROM_END
+// 快乐西游记 (Kuàilè Xīyóu Jì)
ROM_START( klxyj104cn )
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU. Not dumped for this set, but it works.
@@ -2548,6 +2656,7 @@ ROM_START( klxyj104cn )
ROM_LOAD( "w4201.u2", 0x00000, 0x100000, CRC(464f11ab) SHA1(56e45bd31f667fc30387fcd4c940a94819b7ef0f) )
ROM_END
+// 快乐西游记 (Kuàilè Xīyóu Jì)
ROM_START( klxyj102cn ) // IGS PCB-0351-05-FM. 1 82C55, 3 banks of 8 DIP switches
ROM_REGION( 0x04000, "maincpu", 0 )
// Internal ROM of IGS027A ARM based MCU
@@ -3821,8 +3930,8 @@ GAME( 2004, lhzb4dhb, 0, lhzb4, lhzb4, igs_m027_stat
GAME( 1999, lthyp, 0, lthyp, lthyp, igs_m027_state, init_slqz3, ROT0, "IGS", "Long Teng Hu Yao Duizhan Jiaqiang Ban (S104CN)", MACHINE_NODEVICE_LAN )
GAME( 2000, zhongguo, 0, zhongguo, zhongguo, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhongguo Chu Da D (V102C)", 0 )
GAMEL( 2001, jking02, 0, jking02, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NODEVICE_LAN, layout_jking02 ) // shows V212US in bookkeeping menu
-GAME( 2001, klxyj104cn, jking02, m027_1ppi<true>, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji (V104CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
-GAME( 2001, klxyj102cn, jking02, m027_1ppi<true>, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji (V102CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
+GAME( 2001, klxyj104cn, jking02, tct2p, klxyj, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuaile Xiyou Ji (V104CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
+GAME( 2001, klxyj102cn, jking02, tct2p, klxyj, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuaile Xiyou Ji (V102CN)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
GAME( 2003, tct2p, 0, tct2p, tct2p, igs_m027_state, init_tct2p, ROT0, "IGS", "Tarzan Chuang Tianguan 2 Jiaqiang Ban (V306CN)", 0 )
GAME( 2003, mgzz, 0, mgzz, mgzz101cn, igs_m027_state, init_mgzz, ROT0, "IGS", "Manguan Zhizun (V101CN)", 0 )
GAME( 2003, mgzz100cn, mgzz, mgzz, mgzz100cn, igs_m027_state, init_mgzz, ROT0, "IGS", "Manguan Zhizun (V100CN)", 0 )