igs/igs_m027.cpp: Added inputs for lhdmgp and zhongguo.

* lhdmgp uses the same inputs and DIP switch settings as lhdmg.
* zhonguo uses the same mahjong keyboard matrix, but reads it
  differently.
* Joystick mode controls for zhongguo are not implemented.
This commit is contained in:
Vas Crabb 2024-09-05 06:38:50 +10:00
parent 5a30f1bc67
commit 7f855e5993

View File

@ -15,6 +15,11 @@
To emulate these games the Internal ROM will need dumping To emulate these games the Internal ROM will need dumping
There are at least 20 other games on this and similar platforms. There are at least 20 other games on this and similar platforms.
TODO:
* Inputs and DIP switches for most games
* Hopper for payout
* Joystick controls for zhongguo
* Coin lockout (zhongguo displays a coin error on unexpected coins)
*/ */
#include "emu.h" #include "emu.h"
@ -60,7 +65,8 @@ public:
void m027(machine_config &config) ATTR_COLD; void m027(machine_config &config) ATTR_COLD;
void m027_xor(machine_config &config) ATTR_COLD; void m027_xor(machine_config &config) ATTR_COLD;
void mahjong_xor(machine_config &config) ATTR_COLD; void lhdmg_xor(machine_config &config) ATTR_COLD;
void zhongguo_xor(machine_config &config) ATTR_COLD;
void extradraw(machine_config &config) ATTR_COLD; void extradraw(machine_config &config) ATTR_COLD;
void init_sdwx() ATTR_COLD; void init_sdwx() ATTR_COLD;
@ -102,15 +108,13 @@ private:
required_ioport m_io_test; required_ioport m_io_test;
u32 m_xor_table[0x100]; u32 m_xor_table[0x100];
u8 m_kbd_io_select; u8 m_io_select[2];
u8 m_dsw_io_select;
u32 m_unk2_write_count; u32 m_unk2_write_count;
u8 ppi_porta_r(); u8 ppi_porta_r();
u8 ppi_portc_mahjong_r(); template <unsigned N, unsigned S, unsigned R> u8 kbd_r();
void kbd_io_select_w(u8 data); template <unsigned N> void io_select_w(u8 data);
void dsw_io_select_w(u8 data);
u32 external_rom_r(offs_t offset); u32 external_rom_r(offs_t offset);
@ -127,17 +131,18 @@ private:
void igs_mahjong_map(address_map &map) ATTR_COLD; void igs_mahjong_map(address_map &map) ATTR_COLD;
void igs_mahjong_xor_map(address_map &map) ATTR_COLD; void igs_mahjong_xor_map(address_map &map) ATTR_COLD;
void zhongguo_xor_map(address_map &map) ATTR_COLD;
void extradraw_map(address_map &map) ATTR_COLD; void extradraw_map(address_map &map) ATTR_COLD;
}; };
void igs_m027_state::machine_start() void igs_m027_state::machine_start()
{ {
std::fill(std::begin(m_xor_table), std::end(m_xor_table), 0); std::fill(std::begin(m_xor_table), std::end(m_xor_table), 0);
m_dsw_io_select = 7; m_io_select[0] = m_io_select[1] = 0xff;
m_unk2_write_count = 0; m_unk2_write_count = 0;
save_item(NAME(m_xor_table)); save_item(NAME(m_xor_table));
save_item(NAME(m_dsw_io_select)); save_item(NAME(m_io_select));
save_item(NAME(m_unk2_write_count)); save_item(NAME(m_unk2_write_count));
} }
@ -165,11 +170,11 @@ void igs_m027_state::igs_mahjong_map(address_map &map)
map(0x38008000, 0x38008003).umask32(0x000000ff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); map(0x38008000, 0x38008003).umask32(0x000000ff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
map(0x38009000, 0x38009003).umask32(0x000000ff).r(FUNC(igs_m027_state::test_r)); map(0x38009000, 0x38009003).umask32(0x000000ff).r(FUNC(igs_m027_state::test_r));
map(0x38009000, 0x38009003).umask32(0x0000ff00).w(FUNC(igs_m027_state::kbd_io_select_w)); map(0x38009000, 0x38009003).umask32(0x0000ff00).w(FUNC(igs_m027_state::io_select_w<0>));
map(0x40000008, 0x4000000b).w(FUNC(igs_m027_state::unk2_w)); map(0x40000008, 0x4000000b).w(FUNC(igs_m027_state::unk2_w));
map(0x4000000c, 0x4000000f).r(FUNC(igs_m027_state::unk2_r)); map(0x4000000c, 0x4000000f).r(FUNC(igs_m027_state::unk2_r));
map(0x40000018, 0x4000001b).umask32(0x000000ff).w(FUNC(igs_m027_state::dsw_io_select_w)); map(0x40000018, 0x4000001b).umask32(0x000000ff).w(FUNC(igs_m027_state::io_select_w<1>));
map(0x50000000, 0x500003ff).umask32(0x000000ff).w(FUNC(igs_m027_state::xor_table_w)); // uploads XOR table to external ROM here map(0x50000000, 0x500003ff).umask32(0x000000ff).w(FUNC(igs_m027_state::xor_table_w)); // uploads XOR table to external ROM here
map(0x70000200, 0x70000203).ram(); // ?????????????? map(0x70000200, 0x70000203).ram(); // ??????????????
@ -183,6 +188,13 @@ void igs_m027_state::igs_mahjong_xor_map(address_map &map)
map(0x08000000, 0x0807ffff).r(FUNC(igs_m027_state::external_rom_r)); // Game ROM map(0x08000000, 0x0807ffff).r(FUNC(igs_m027_state::external_rom_r)); // Game ROM
} }
void igs_m027_state::zhongguo_xor_map(address_map &map)
{
igs_mahjong_xor_map(map);
map(0x38009000, 0x38009003).umask32(0x0000ff00).r(NAME((&igs_m027_state::kbd_r<1, 0, 2>)));
}
void igs_m027_state::extradraw_map(address_map &map) void igs_m027_state::extradraw_map(address_map &map)
{ {
igs_mahjong_map(map); igs_mahjong_map(map);
@ -355,7 +367,14 @@ static INPUT_PORTS_START( mahjong )
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW2:8" )
PORT_START("TEST") PORT_START("TEST")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) // 哈巴
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) PORT_NAME("Clear") // 清除
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_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // TODO: default assignment clashes with mahjong I, using it hangs waiting for hopper to respond
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( jking02 ) static INPUT_PORTS_START( jking02 )
@ -447,16 +466,65 @@ static INPUT_PORTS_START( lhdmg )
PORT_DIPSETTING( 0x00, "Continue Play" ) // 续玩 PORT_DIPSETTING( 0x00, "Continue Play" ) // 续玩
PORT_DIPNAME( 0x40, 0x40, "Number Type" ) PORT_DIPLOCATION("SW2:7") // 数字型态 (affects credit and bet display) PORT_DIPNAME( 0x40, 0x40, "Number Type" ) PORT_DIPLOCATION("SW2:7") // 数字型态 (affects credit and bet display)
PORT_DIPSETTING( 0x40, "Numbers" ) // 数字 (text and digits) PORT_DIPSETTING( 0x40, "Numbers" ) // 数字 (text and digits)
PORT_DIPSETTING( 0x00, "Blocks" ) // 方块 (pig for credit, apples for bet, mahjong plates suit for numbers) PORT_DIPSETTING( 0x00, "Blocks" ) // 方块 (pigs for credit, apples for bet, mahjong tong tiles for numbers)
PORT_DIPNAME( 0x80, 0x80, "Hidden Function" ) PORT_DIPLOCATION("SW2:8") // 隐分功能 (hides credits and bets, game plays normally) PORT_DIPNAME( 0x80, 0x80, "Hidden Function" ) PORT_DIPLOCATION("SW2:8") // 隐分功能 (hides credits and bets, game plays normally)
PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 无 PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 无
PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有 PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
INPUT_PORTS_END
PORT_MODIFY("TEST") static INPUT_PORTS_START( zhongguo )
PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) PORT_INCLUDE(mahjong)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // 查帐
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) // missing joystick mode controls
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // TODO: default assignment clashes with mahjong I, using it hangs waiting for hopper to respond
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x03, 0x03, DEF_STR(Coin_A) ) PORT_DIPLOCATION("SW1:1,2") // 投币比率
PORT_DIPSETTING( 0x03, DEF_STR(1C_1C) )
PORT_DIPSETTING( 0x02, DEF_STR(1C_2C) )
PORT_DIPSETTING( 0x01, DEF_STR(1C_3C) )
PORT_DIPSETTING( 0x00, DEF_STR(1C_5C) )
PORT_DIPNAME( 0x0c, 0x0c, "Key-In Rate" ) PORT_DIPLOCATION("SW1:3,4") // 开分比率
PORT_DIPSETTING( 0x0c, "10" )
PORT_DIPSETTING( 0x08, "20" )
PORT_DIPSETTING( 0x04, "50" )
PORT_DIPSETTING( 0x00, "100" )
PORT_DIPNAME( 0x10, 0x10, "Credit Limit" ) PORT_DIPLOCATION("SW1:5") // 进分上限
PORT_DIPSETTING( 0x10, "1000" )
PORT_DIPSETTING( 0x00, "2000" )
PORT_DIPNAME( 0x20, 0x20, "Credit Mode" ) PORT_DIPLOCATION("SW1:6") // 进分上方式 (sets coin input function)
PORT_DIPSETTING( 0x20, "Coin Acceptor" ) // 投币 (uses coin A rate)
PORT_DIPSETTING( 0x00, "Key-In" ) // 开分 (uses key-in rate)
PORT_DIPNAME( 0x40, 0x40, "Payout Mode" ) PORT_DIPLOCATION("SW1:7") // 退分上方式
PORT_DIPSETTING( 0x40, "Return Coins" ) // 退币 (uses hopper to pay out credits)
PORT_DIPSETTING( 0x00, "Key-Out" ) // 洗分 (just clears credits)
PORT_DIPNAME( 0x80, 0x80, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW1:8") // 示范音乐
PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 无
PORT_DIPSETTING( 0x80, DEF_STR(On) ) // 有
PORT_MODIFY("DSW2")
PORT_DIPNAME( 0x01, 0x01, "Control Mode" ) PORT_DIPLOCATION("SW2:1") // 操作模式
PORT_DIPSETTING( 0x01, "Buttons" ) // 按键
PORT_DIPSETTING( 0x00, "Joystick" ) // 搖杆
PORT_DIPNAME( 0x06, 0x06, "Card Display" ) PORT_DIPLOCATION("SW2:2,3") // 扑克画面
PORT_DIPSETTING( 0x06, "Small Cards" ) // 小扑克
PORT_DIPSETTING( 0x04, "Cards" ) // 扑克
PORT_DIPSETTING( 0x02, "Alternate" ) // 変异 (numbers with coloured dot patterns for suits)
PORT_DIPSETTING( 0x00, "Small Cards" ) // 小扑克
PORT_DIPNAME( 0x08, 0x08, "Double Up Jackpot" ) PORT_DIPLOCATION("SW2:4") // 比倍爆机
PORT_DIPSETTING( 0x08, "1000" )
PORT_DIPSETTING( 0x00, "2000" )
PORT_DIPNAME( 0x10, 0x10, "Double Up Function" ) PORT_DIPLOCATION("SW2:5") // 比倍功能
PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // 无
PORT_DIPSETTING( 0x10, DEF_STR(On) ) // 有
PORT_DIPNAME( 0x20, 0x20, "Double Up/Continue Play" ) PORT_DIPLOCATION("SW2:6") // 比倍续玩
PORT_DIPSETTING( 0x20, "Double Up" ) // 比倍
PORT_DIPSETTING( 0x00, "Continue Play" ) // 续玩
PORT_DIPNAME( 0x40, 0x40, "Credit Display" ) PORT_DIPLOCATION("SW2:7") // 萤屏计分
PORT_DIPSETTING( 0x40, "Numbers" ) // 数字 (text and digits)
PORT_DIPSETTING( 0x00, "Circle Tiles" ) // 筒子 (pigs for credits, apples for bet, mahjong tong tiles for numbers)
PORT_DIPNAME( 0x80, 0x80, "Hidden Function" ) PORT_DIPLOCATION("SW2:8") // 隐分功能 (hides credits and bets, game plays normally)
PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 无
PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( amazonia ) static INPUT_PORTS_START( amazonia )
@ -548,33 +616,29 @@ u8 igs_m027_state::ppi_porta_r()
u8 data = 0xff; u8 data = 0xff;
for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
if (!BIT(m_dsw_io_select, i)) if (!BIT(m_io_select[1], i))
data &= m_io_dsw[i].read_safe(0xff); data &= m_io_dsw[i].read_safe(0xff);
return data; return data;
} }
u8 igs_m027_state::ppi_portc_mahjong_r() template <unsigned N, unsigned S, unsigned R>
u8 igs_m027_state::kbd_r()
{ {
u8 data = 0xff; u8 data = 0xff;
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
if (!BIT(m_kbd_io_select, i + 3)) if (!BIT(m_io_select[N], i + S))
data &= m_io_kbd[i].read_safe(0xff); data &= m_io_kbd[i].read_safe(0xff);
return data; return (data << R) | (data >> (8 - R));
} }
void igs_m027_state::kbd_io_select_w(u8 data) template <unsigned N>
void igs_m027_state::io_select_w(u8 data)
{ {
m_kbd_io_select = data; m_io_select[N] = data;
}
void igs_m027_state::dsw_io_select_w(u8 data)
{
m_dsw_io_select = data;
} }
@ -612,7 +676,7 @@ u32 igs_m027_state::lhdmg_unk2_r()
{ {
logerror("%s: lhdmg_unk2_r\n", machine().describe_context()); logerror("%s: lhdmg_unk2_r\n", machine().describe_context());
if (m_dsw_io_select & 1) if (m_io_select[1] & 1)
return 0xffffffff; return 0xffffffff;
else else
return 0xffffffff ^ 0x400000; return 0xffffffff ^ 0x400000;
@ -663,13 +727,22 @@ void igs_m027_state::m027_xor(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::igs_mahjong_xor_map); m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::igs_mahjong_xor_map);
} }
void igs_m027_state::mahjong_xor(machine_config &config) void igs_m027_state::lhdmg_xor(machine_config &config)
{ {
m027_xor(config); m027_xor(config);
m_ppi->in_pa_callback().set_ioport("DSW1"); m_ppi->in_pa_callback().set_ioport("DSW1");
m_ppi->in_pb_callback().set_ioport("DSW2"); m_ppi->in_pb_callback().set_ioport("DSW2");
m_ppi->in_pc_callback().set(FUNC(igs_m027_state::ppi_portc_mahjong_r)); m_ppi->in_pc_callback().set(NAME((&igs_m027_state::kbd_r<0, 3, 0>)));
}
void igs_m027_state::zhongguo_xor(machine_config &config)
{
lhdmg_xor(config);
m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_state::zhongguo_xor_map);
m_ppi->in_pc_callback().set_constant(0xff);
} }
void igs_m027_state::extradraw(machine_config &config) void igs_m027_state::extradraw(machine_config &config)
@ -1760,35 +1833,35 @@ void igs_m027_state::init_lhdmg()
***************************************************************************/ ***************************************************************************/
// Complete dumps // Complete dumps
GAME( 1999, slqz3, 0, m027_xor, base, igs_m027_state, init_slqz3, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 3 (China, VS107C)", MACHINE_NOT_WORKING ) GAME( 1999, slqz3, 0, m027_xor, base, igs_m027_state, init_slqz3, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 3 (China, VS107C)", MACHINE_NOT_WORKING )
GAME( 1999, qlgs, 0, m027_xor, qlgs, igs_m027_state, init_qlgs, ROT0, "IGS", "Que Long Gao Shou", MACHINE_NOT_WORKING ) GAME( 1999, qlgs, 0, m027_xor, qlgs, igs_m027_state, init_qlgs, ROT0, "IGS", "Que Long Gao Shou", MACHINE_NOT_WORKING )
GAME( 1999, fruitpar, 0, m027_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_NOT_WORKING ) GAME( 1999, fruitpar, 0, m027_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V214)", MACHINE_NOT_WORKING )
GAME( 1999, fruitpara, fruitpar, m027_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V206US)", MACHINE_NOT_WORKING ) GAME( 1999, fruitpara, fruitpar, m027_xor, base, igs_m027_state, init_fruitpar, ROT0, "IGS", "Fruit Paradise (V206US)", MACHINE_NOT_WORKING )
GAME( 1999, lhdmg, 0, mahjong_xor, lhdmg, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Manguan", MACHINE_NOT_WORKING ) // 龙虎大满贯 GAME( 1999, lhdmg, 0, lhdmg_xor, lhdmg, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Manguan", MACHINE_NOT_WORKING ) // 龙虎大满贯
GAME( 1999, lhdmgp, lhdmg, m027_xor, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Manguan Plus", MACHINE_NOT_WORKING ) // 龙虎大满贯 GAME( 1999, lhdmgp, lhdmg, lhdmg_xor, lhdmg, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Da Manguan Plus", MACHINE_NOT_WORKING ) // 龙虎大满贯
GAME( 1999, lhzb3, 0, m027_xor, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_NOT_WORKING ) // 龙虎争霸Ⅲ GAME( 1999, lhzb3, 0, m027_xor, base, igs_m027_state, init_lhdmg, ROT0, "IGS", "Long Hu Zhengba III", MACHINE_NOT_WORKING ) // 龙虎争霸Ⅲ
GAME( 2004, lhzb4, 0, m027_xor, base, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4", MACHINE_NOT_WORKING ) // 龙虎争霸4 GAME( 2004, lhzb4, 0, m027_xor, base, igs_m027_state, init_lhzb4, ROT0, "IGS", "Long Hu Zhengba 4", MACHINE_NOT_WORKING ) // 龙虎争霸4
GAME( 1999, lthy, 0, m027_xor, base, igs_m027_state, init_lthy, ROT0, "IGS", "Long Teng Hu Yue", MACHINE_NOT_WORKING ) GAME( 1999, lthy, 0, m027_xor, base, igs_m027_state, init_lthy, ROT0, "IGS", "Long Teng Hu Yue", MACHINE_NOT_WORKING )
GAME( 2000, zhongguo, 0, m027_xor, base, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhongguo Chu Da D", MACHINE_NOT_WORKING ) // 中国锄大D GAME( 2000, zhongguo, 0, zhongguo_xor, zhongguo, igs_m027_state, init_zhongguo, ROT0, "IGS", "Zhongguo Chu Da D", MACHINE_NOT_WORKING ) // 中国锄大D
GAME( 200?, jking02, 0, m027_xor, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NOT_WORKING ) GAME( 200?, jking02, 0, m027_xor, jking02, igs_m027_state, init_jking02, ROT0, "IGS", "Jungle King 2002 (V209US)", MACHINE_NOT_WORKING )
GAME( 2003, mgzz, 0, m027_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V101CN)", MACHINE_NOT_WORKING ) GAME( 2003, mgzz, 0, m027_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V101CN)", MACHINE_NOT_WORKING )
GAME( 2000, mgzza, mgzz, m027_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V100CN)", MACHINE_NOT_WORKING ) GAME( 2000, mgzza, mgzz, m027_xor, base, igs_m027_state, init_mgzz, ROT0, "IGS", "Man Guan Zhi Zun (V100CN)", MACHINE_NOT_WORKING )
GAME( 2007, mgcs3, 0, m027_xor, base, igs_m027_state, init_mgcs3, ROT0, "IGS", "Man Guan Caishen 3 (V101CN)", MACHINE_NOT_WORKING ) GAME( 2007, mgcs3, 0, m027_xor, base, igs_m027_state, init_mgcs3, ROT0, "IGS", "Man Guan Caishen 3 (V101CN)", MACHINE_NOT_WORKING )
GAME( 1999, oceanpar, 0, m027_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM GAME( 1999, oceanpar, 0, m027_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V105US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 1999, oceanpara, oceanpar, m027_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM GAME( 1999, oceanpara, oceanpar, m027_xor, base, igs_m027_state, init_oceanpar, ROT0, "IGS", "Ocean Paradise (V101US)", MACHINE_NOT_WORKING ) // 1999 copyright in ROM
GAME( 200?, cjddz, 0, m027_xor, base, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu", MACHINE_NOT_WORKING ) // 超级斗地主 GAME( 200?, cjddz, 0, m027_xor, base, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu", MACHINE_NOT_WORKING ) // 超级斗地主
GAME( 200?, extradrw, 0, extradraw, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Extra Draw", MACHINE_NOT_WORKING ) GAME( 200?, extradrw, 0, extradraw, base, igs_m027_state, init_extradrw, ROT0, "IGS", "Extra Draw", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255 // these have an IGS025 protection device instead of the 8255
GAME( 2002, chessc2, 0, m027_xor, base, igs_m027_state, init_chessc2, ROT0, "IGS", "Chess Challenge II", MACHINE_NOT_WORKING ) GAME( 2002, chessc2, 0, m027_xor, base, igs_m027_state, init_chessc2, ROT0, "IGS", "Chess Challenge II", MACHINE_NOT_WORKING )
// Incomplete dumps // Incomplete dumps
GAME( 1999, amazonia, 0, m027, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_NOT_WORKING ) GAME( 1999, amazonia, 0, m027, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King (V104BR)", MACHINE_NOT_WORKING )
GAME( 1999, amazonkp, amazonia, m027, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King Plus (V204BR)", MACHINE_NOT_WORKING ) GAME( 1999, amazonkp, amazonia, m027, amazonia, igs_m027_state, init_amazonia, ROT0, "IGS", "Amazonia King Plus (V204BR)", MACHINE_NOT_WORKING )
GAME( 2005, olympic5, 0, m027, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V112US)", MACHINE_NOT_WORKING ) // IGS FOR V112US 2005 02 14 GAME( 2005, olympic5, 0, m027, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V112US)", MACHINE_NOT_WORKING ) // IGS FOR V112US 2005 02 14
GAME( 2003, olympic5a, olympic5, m027, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V107US)", MACHINE_NOT_WORKING ) // IGS FOR V107US 2003 10 2 GAME( 2003, olympic5a, olympic5, m027, base, igs_m027_state, init_olympic5, ROT0, "IGS", "Olympic 5 (V107US)", MACHINE_NOT_WORKING ) // IGS FOR V107US 2003 10 2
GAME( 200?, luckycrs, 0, m027, base, igs_m027_state, init_luckycrs, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_NOT_WORKING ) GAME( 200?, luckycrs, 0, m027, base, igs_m027_state, init_luckycrs, ROT0, "IGS", "Lucky Cross (V106SA)", MACHINE_NOT_WORKING )
GAME( 2003, amazoni2, 0, m027, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_NOT_WORKING ) GAME( 2003, amazoni2, 0, m027, base, igs_m027_state, init_amazoni2, ROT0, "IGS", "Amazonia King II (V202BR)", MACHINE_NOT_WORKING )
GAME( 2002, sdwx, 0, m027, base, igs_m027_state, init_sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_NOT_WORKING ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?) GAME( 2002, sdwx, 0, m027, base, igs_m027_state, init_sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", MACHINE_NOT_WORKING ) // aka Christmas 5 Line? (or Amazonia King II, shares roms at least?)
GAME( 200?, klxyj, 0, m027, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_NOT_WORKING ) GAME( 200?, klxyj, 0, m027, base, igs_m027_state, init_klxyj, ROT0, "IGS", "Kuai Le Xi You Ji", MACHINE_NOT_WORKING )
// these have an IGS025 protection device instead of the 8255 // these have an IGS025 protection device instead of the 8255
GAME( 200?, gonefsh2, 0, m027, base, igs_m027_state, init_gonefsh2, ROT0, "IGS", "Gone Fishing 2", MACHINE_NOT_WORKING ) GAME( 200?, gonefsh2, 0, m027, base, igs_m027_state, init_gonefsh2, ROT0, "IGS", "Gone Fishing 2", MACHINE_NOT_WORKING )