From a026c8df1274fb54b6469a3d7dfa5a824436954a Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 8 Mar 2025 07:42:31 +0100 Subject: [PATCH] New clones marked not working ----------------------------- Jin Hu Lu 2 (v120GI) [dyq. little0, Guru] --- src/emu/xtal.cpp | 1 + src/mame/igs/spoker.cpp | 346 ++++++++++++++++++++++++++-------- src/mame/mame.lst | 1 + src/mame/subsino/subsino2.cpp | 71 ++++--- 4 files changed, 314 insertions(+), 105 deletions(-) diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 271a4fcc4c5..6fa14b3f2de 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -476,6 +476,7 @@ const double XTAL::known_xtals[] = { 48'556'800, // 48.5568_MHz_XTAL Wyse WY-85 48'654'000, // 48.654_MHz_XTAL Qume QVT-201 48'660'000, // 48.66_MHz_XTAL Zaxxon + 48'940'000, // 48.94_MHz_XTAL Queen Bee New 49'152'000, // 49.152_MHz_XTAL Used on some Namco PCBs, Baraduke h/w, System 21, Super System 22 49'423'500, // 49.4235_MHz_XTAL Wyse WY-185 50'000'000, // 50_MHz_XTAL Williams/Midway T/W/V-unit system diff --git a/src/mame/igs/spoker.cpp b/src/mame/igs/spoker.cpp index f0a27e7f702..156f72bda9c 100644 --- a/src/mame/igs/spoker.cpp +++ b/src/mame/igs/spoker.cpp @@ -30,6 +30,9 @@ - 3super8 randomly crashes - 3super8 doesn't have the 8x32 tilemap, change the video emulation accordingly - jinhulu2 stops at "system is connecting". Some type of link feature? + - jinhulu2 has wrong colors and machine translated DIP definitions which + could use improving. Inputs in the "SERVICE" port seem to register two different + buttons ***************************************************************************/ @@ -39,6 +42,7 @@ #include "cpu/z80/z80.h" #include "machine/i8255.h" #include "machine/nvram.h" +#include "sound/ay8910.h" #include "sound/okim6295.h" #include "sound/ymopl.h" @@ -48,6 +52,16 @@ #include "tilemap.h" +// configurable logging +#define LOG_IGS003 (1U << 1) + +// #define VERBOSE (LOG_GENERAL | LOG_IGS003) + +#include "logmacro.h" + +#define LOGIGS003(...) LOGMASKED(LOG_IGS003, __VA_ARGS__) + + namespace { class spoker_state : public driver_device @@ -66,14 +80,14 @@ public: m_leds(*this, "led%u", 0U) { } - void spoker(machine_config &config); - void _3super8(machine_config &config); + void spoker(machine_config &config) ATTR_COLD; + void _3super8(machine_config &config) ATTR_COLD; - void init_spk100(); - void init_spk114it(); - void init_spk116it(); - void init_spk120in(); - void init_3super8(); + void init_spk100() ATTR_COLD; + void init_spk114it() ATTR_COLD; + void init_spk116it() ATTR_COLD; + void init_spk120in() ATTR_COLD; + void init_3super8() ATTR_COLD; int hopper_r(); @@ -94,7 +108,7 @@ protected: required_shared_ptr m_fg_color_ram; tilemap_t *m_fg_tilemap = nullptr; - required_ioport_array<5> m_dsw; + optional_ioport_array<5> m_dsw; output_finder<7> m_leds; // common @@ -132,9 +146,9 @@ class spokeru_state : public spoker_state public: using spoker_state::spoker_state; - void spokeru(machine_config &config); + void spokeru(machine_config &config) ATTR_COLD; - void init_spokeru(); + void init_spokeru() ATTR_COLD; protected: virtual void video_start() override ATTR_COLD; @@ -155,12 +169,23 @@ public: spokeru_state(mconfig, type, tag) { } - void jinhulu2(machine_config &config); + void jinhulu2(machine_config &config)ATTR_COLD; - void init_jinhulu2(); + void init_jinhulu2() ATTR_COLD; + void init_jinhulu2120gi() ATTR_COLD; + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void video_start() override ATTR_COLD; private: + uint8_t m_protection_res = 0; + void nmi_w(uint8_t data); + uint8_t igs003c_r(); + void igs003c_w(uint8_t data); + + TILE_GET_INFO_MEMBER(get_fg_tile_info); void portmap(address_map &map) ATTR_COLD; }; @@ -215,6 +240,12 @@ TILE_GET_INFO_MEMBER(spoker_state::get_fg_tile_info) tileinfo.set(0, code, (4 * (code >> 14) + 3), 0); } +TILE_GET_INFO_MEMBER(jinhulu2_state::get_fg_tile_info) // TODO: wrong color bits +{ + int const code = m_fg_tile_ram[tile_index] | (m_fg_color_ram[tile_index] << 8); + tileinfo.set(0, code, 2 * (code >> 13), 0); +} + void spoker_state::fg_tile_w(offs_t offset, uint8_t data) { m_fg_tile_ram[offset] = data; @@ -257,6 +288,11 @@ void spokeru_state::video_start() m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(spokeru_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); } +void jinhulu2_state::video_start() +{ + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jinhulu2_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); +} + void jb_state::video_start() { m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jb_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); @@ -473,6 +509,33 @@ uint8_t spoker_state::magic_r() return 0; } +uint8_t jinhulu2_state::igs003c_r() +{ + LOGIGS003("PC %06X: Protection read %02x\n", m_maincpu->pc(), m_protection_res); + + return m_protection_res; +} + +void jinhulu2_state::igs003c_w(uint8_t data) +{ + switch (data) + { + // case 0x01: break; // TODO: possibly selects inputs read by the SYSTEM port? + case 0x02: m_protection_res = ioport("IN0")->read(); break; + case 0x20: m_protection_res = 0x49; break; + case 0x21: m_protection_res = 0x47; break; + case 0x22: m_protection_res = 0x53; break; + case 0x24: m_protection_res = 0x41; break; + case 0x25: m_protection_res = 0x41; break; + case 0x26: m_protection_res = 0x7f; break; + case 0x27: m_protection_res = 0x41; break; + case 0x28: m_protection_res = 0x41; break; + case 0x2a: m_protection_res = 0x3e; break; + case 0x2b: m_protection_res = 0x41; break; + default: LOGIGS003("PC %06X: Protection write %02x\n", m_maincpu->pc(), data); m_protection_res = data; + } +} + /*************************************************************************** Memory Maps @@ -534,14 +597,14 @@ void jinhulu2_state::portmap(address_map &map) map(0x0000, 0x003f).ram(); // Z180 internal regs map(0x2000, 0x20ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0x3000, 0x30ff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext"); - // TODO: the following reads may be hooked to the wrong inputs - map(0x4000, 0x4000).portr("DSW1"); + map(0x4000, 0x4000).portr("DSW3"); map(0x4001, 0x4001).portr("DSW2"); - map(0x4002, 0x4002).portr("DSW3"); + map(0x4002, 0x4002).portr("DSW1"); map(0x5001, 0x5001).portr("SERVICE"); + map(0x5002, 0x5003).w("ymsnd", FUNC(ym2149_device::data_address_w)); map(0x5010, 0x5010).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - //map(0x5030, 0x5030).w(FUNC()); // TODO: almost surely same protections as seen in igspoker.cpp and igs011.cpp. Probably the IGS003 - //map(0x5031, 0x5031).r(FUNC()); // TODO: " + map(0x5030, 0x5030).w(FUNC(jinhulu2_state::igs003c_w)); + map(0x5031, 0x5031).r(FUNC(jinhulu2_state::igs003c_r)); map(0x5031, 0x5031).w(FUNC(jinhulu2_state::nmi_w)); map(0x7000, 0x77ff).ram().w(FUNC(jinhulu2_state::fg_tile_w)).share(m_fg_tile_ram); map(0x7800, 0x7fff).ram().w(FUNC(jinhulu2_state::fg_color_w)).share(m_fg_color_ram); @@ -1240,6 +1303,101 @@ static INPUT_PORTS_START( jb ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END +static INPUT_PORTS_START( jinhulu2 ) // these are verified for v120GI + PORT_START("DSW1") + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x06, 0x06, "Auto Hold" ) PORT_DIPLOCATION("SW1:2,3") + PORT_DIPSETTING( 0x06, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPSETTING( 0x02, "Only When Winning" ) + PORT_DIPSETTING( 0x00, "Only When Winning (duplicate)" ) + PORT_DIPNAME( 0x08, 0x08, "Credit Limit" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x08, "4000" ) + PORT_DIPSETTING( 0x00, "Unlimited" ) + PORT_DIPNAME( 0x70, 0x70, "Minimum Bet For Bonus" ) PORT_DIPLOCATION("SW1:5,6,7") + PORT_DIPSETTING( 0x70, "1" ) + PORT_DIPSETTING( 0x60, "10" ) + PORT_DIPSETTING( 0x50, "20" ) + PORT_DIPSETTING( 0x40, "50" ) + PORT_DIPSETTING( 0x30, "80" ) + PORT_DIPSETTING( 0x20, "100" ) + PORT_DIPSETTING( 0x10, "120" ) + PORT_DIPSETTING( 0x00, "150" ) + PORT_DIPNAME( 0x80, 0x80, "Card Opening And Scoring Speed" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x03, "Minimum Bet" ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "5" ) + PORT_DIPSETTING( 0x01, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x1c, 0x1c, "Start Points" ) PORT_DIPLOCATION("SW2:3,4,5") + PORT_DIPSETTING( 0x1c, "10" ) + PORT_DIPSETTING( 0x18, "20" ) + PORT_DIPSETTING( 0x14, "40" ) + PORT_DIPSETTING( 0x10, "50" ) + PORT_DIPSETTING( 0x0c, "100" ) + PORT_DIPSETTING( 0x08, "200" ) + PORT_DIPSETTING( 0x04, "250" ) + PORT_DIPSETTING( 0x00, "500" ) + PORT_DIPNAME( 0x20, 0x20, "Light Points" ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPNAME( 0x40, 0x40, "Double-Up Limit" ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x40, "5000" ) + PORT_DIPSETTING( 0x00, "7500" ) + PORT_DIPNAME( 0x80, 0x80, "Four Plum Multiplier" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, "40" ) + PORT_DIPSETTING( 0x00, "60" ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x03, 0x03, "Double-Up Limit Base Number" ) PORT_DIPLOCATION("SW3:1,2") + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x02, "200" ) + PORT_DIPSETTING( 0x01, "300" ) + PORT_DIPSETTING( 0x00, "400" ) + PORT_DIPNAME( 0x0c, 0x0c, "Double-Up Accumulated Jackpot" ) PORT_DIPLOCATION("SW3:3,4") + PORT_DIPSETTING( 0x0c, "300" ) + PORT_DIPSETTING( 0x08, "500" ) + PORT_DIPSETTING( 0x04, "800" ) + PORT_DIPSETTING( 0x00, "1000" ) + PORT_DIPNAME( 0x30, 0x30, "Payout Rate" ) PORT_DIPLOCATION("SW3:5,6") + PORT_DIPSETTING( 0x30, "20000" ) + PORT_DIPSETTING( 0x20, "30000" ) + PORT_DIPSETTING( 0x10, "40000" ) + PORT_DIPSETTING( 0x00, "50000" ) + PORT_DIPNAME( 0x40, 0x40, "Double-Up Card Opening Speed" ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x40, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x80, 0x80, "Continuous Card Opening" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // lights both Bet and Keyout in test mode + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) // lights both Book-Keeping and Small in test mode + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) // lights both Start and Big + PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW ) // lights both Test and Take Score in test mode + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) // lights both Hold 1 and Double Up in test mode + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + /*************************************************************************** Graphics Layout & Graphics Decode @@ -1298,13 +1456,13 @@ static GFXDECODE_START( gfx_3super8 ) GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6, 0, 16 ) GFXDECODE_END -// TODO: probably correct but to be verified once it passes the connection check +// TODO: bitplane order probably wrong static const gfx_layout layout_8x8x4 = { 8, 8, RGN_FRAC(1, 1), 4, - { STEP4(24, -8) }, + { 0, 8, 16, 24 }, { STEP8(0, 1) }, { STEP8(0, 8*4) }, 8*8*4 @@ -1334,6 +1492,13 @@ void spoker_state::machine_start() save_item(NAME(m_igs_magic)); } +void jinhulu2_state::machine_start() +{ + spoker_state::machine_start(); + + save_item(NAME(m_protection_res)); +} + void spoker_state::machine_reset() { m_nmi_ack = 0; @@ -1404,8 +1569,11 @@ void jinhulu2_state::jinhulu2(machine_config &config) spokeru(config); m_maincpu->set_addrmap(AS_IO, &jinhulu2_state::portmap); + m_maincpu->set_clock(12_MHz_XTAL); m_gfxdecode->set_info(gfx_jinhulu2); + + YM2149(config.replace(), "ymsnd", 12_MHz_XTAL / 12).add_route(ALL_OUTPUTS, "mono", 0.5); } @@ -1795,45 +1963,51 @@ ROM_END /********************************************************************************* -Jin Hu Lu 2, IGS (year unknown, board dead/rotten, battery leaked EXTENSIVELY and killed it) -This is a Poker game. -Board is a mix of through-hole and surface mounted parts (lots of logic is SMD). -Some chips have year 1999 so this is 1999 or later. +Jin Hu Lu 2, IGS, 1995 +Hu Lu Wang II, IGS, 1995 +These are Poker / Card games. +Board is a mix of through-hole and surface mounted parts (lots of SMD logic). +Hardware Info By Guru +--------------------- -PCB Layout ----------- - -IGS PCB No- 0202 - : -|--------------------------------------------| -|SW4 BATTERY 12MHz Z180 | -| | -|1 | -|8 T518B PRG.U40| -|W PAL | -|A PAL 6264 | -|Y 2149C PAL | -| PAL SKT | -| IGS-003C | -| | -|1 | -|0 IGS002 | -|W | -|A IGS001A | -|Y VOL 6264 6264 | -| UPC1242 M6295 27C4002.U39| -|7805 SP_U12.U12 SW1 SW2 SW3 | -|--------------------------------------------| +IGS PCB NO-0202- +IGS PCB NO-0202-2 + |------------------------------------------| + | BATT 12MHz P1 | +|-| SW4 Z180 | +|18 | +|OR T518B PRG.U40| +|22 TLP521(x20) PAL | +|WAY PAL 6264*| +| 2149C PAL | +|-| PAL PAL | + | IGS-003C | +|-| ULN2004 | +|1 |------| | +|0 |IGS002| | +|W |-------| |------| | +|A |IGS001A| | +|Y VOL 6264 |-------| 6264 | +|-|UPC1242 M6295 GFX.U39| + | 7805 SP.U12 SW1 SW2 SW3 | + |------------------------------------------| Notes: - 2149C - Might be an 8255 PPI. Definitely not a YM2149 ;-) - Z180 - Zilog Z8018008PSC Z180 MPU. Chip rated at 8MHz so clock input likely to be 6MHz [12/2] - IGS003C - In a socket but marked on PCB as 'ASIC3' (which is unusual) so could be a custom chip and not a ROM? - IGS001/2 - Custom IGS Chip (QFP80) - 6264 - 8kBx8-bit SRAM - SKT - Empty socket, missing PAL maybe? - M6295 - Oki Sound Chip. Clock input possibly 1.000MHz [12/12] - T518B - Reset Chip + 2149C - 2149C - Marked '2149C 9913'. This is a clone YM2149. Clock Input 1.000MHz [12/12] + Z180 - Zilog Z8018008PSC or HD64B180ROP Z180 MPU. Chip rated at 8MHz but crystal input on pin 2 is 12MHz + Clock Out on pin 64 is 6.000MHz + IGS003C - In a socket but marked on PCB as 'ASIC3' (which is unusual). It's an IGS custom chip. + IGS001/002 - Custom IGS Chip (QFP80) + 6264 - 8kB x8-bit SRAM. *=This RAM is battery-backed. + M6295 - OKI M6295 4-Channel ADPCM Voice Synthesis LSI. Clock Input 1.000MHz [12/12]. Pin 7 HIGH. + T518B - Mitsumi T518B Reset Chip + ULN2004 - ULN2004 7-Channel Darlington Transistor Array SW1/2/3 - 8-Position DIP Switch - SP_U12.U12 - OKI Samples. Board printed '27C020' but actual chip is Intel FLASH P28F001 + SW4 - Toggle Switch for NVRAM Clear and Reset + P1 - 4-Pin Link Connector + BATT - 3.6V Ni-Cad Battery + PRG.U40 - 27C512 EPROM (main program) + GFX.U39 - 27C4002 or 27C4096 EPROM (Graphics/Tiles) + SP.U12 - OKI Samples. Board printed '27C020' but actual chip is Intel FLASH P28F001 *********************************************************************************/ @@ -1849,6 +2023,18 @@ ROM_START( jinhulu2 ) ROM_LOAD( "sp_u12.u12", 0x00000, 0x20000, CRC(1aeb078c) SHA1(9b8a256f51e66733c4ec30b451ca0711ed02318e) ) ROM_END +ROM_START( jinhulu2120gi ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "prg.u40", 0x00000, 0x10000, CRC(379a2965) SHA1(fbff8a6a3b378cac116d8c630082fc866f85ac6b) ) + + ROM_REGION( 0x40000, "tiles", 0 ) + ROM_LOAD( "gfx.u39", 0x00000, 0x40000, CRC(d5bc6a5d) SHA1(26b83229e4a2b2502f1e9af31c71872d7d12bf93) ) // 1xxxxxxxxxxxxxxxxxx = 0xFF + ROM_IGNORE( 0x40000 ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "sp.u12", 0x00000, 0x20000, CRC(1aeb078c) SHA1(9b8a256f51e66733c4ec30b451ca0711ed02318e) ) // same as jinhulu2 +ROM_END + /*************************************************************************** Driver Init ***************************************************************************/ @@ -1892,6 +2078,17 @@ void jinhulu2_state::init_jinhulu2() } +void jinhulu2_state::init_jinhulu2120gi() +{ + init_jinhulu2(); + + uint8_t *rom = memregion("maincpu")->base(); + + // extra layer + for (int a = 0; a < 0xf000; a++) + if ((a & 0x0280) == 0x0200) rom[a] ^= 0x40; +} + void spoker_state::init_spk116it() { uint8_t *rom = memregion("maincpu")->base(); @@ -1987,22 +2184,23 @@ void spoker_state::init_3super8() Game Drivers ***************************************************************************/ -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1996, spk306us, 0, spokeru, spoker, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v306US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk205us, spk306us, spokeru, spoker, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v205US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk203us, spk306us, spokeru, spk203us, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v203US)", MACHINE_SUPPORTS_SAVE ) // LS1. 8 203US in test mode -GAME( 1996, spk201ua, spk306us, spokeru, spk201ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v201UA)", MACHINE_SUPPORTS_SAVE ) // still shows 200UA in test mode -GAME( 1996, spk200ua, spk306us, spokeru, spk200ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v200UA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk200, spk306us, spoker, spk100, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v200)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk130, spk306us, spoker, spk130, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v130)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk120in, spk306us, spoker, spoker, spoker_state, init_spk120in, ROT0, "IGS", "Super Poker (v120IN)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk116it, spk306us, spoker, spoker, spoker_state, init_spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk116itmx, spk306us, spoker, spoker, spoker_state, init_spk114it, ROT0, "IGS", "Super Poker (v116IT-MX)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk115it, spk306us, spoker, spoker, spoker_state, init_spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk114it, spk306us, spoker, spk114it, spoker_state, init_spk114it, ROT0, "IGS", "Super Poker (v114IT)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk102ua, spk306us, spokeru, spk102ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk102u, spk306us, spoker, spk102ua, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v102U)", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, spk100, spk306us, spoker, spk100, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v100)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993?, 3super8, 0, _3super8, 3super8, spoker_state, init_3super8, ROT0, "", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // ROMs are badly dumped -GAME( 1997, jbell, 0, jb, jb, jb_state, init_spokeru, ROT0, "IGS", "Jingle Bell (v200US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, jinhulu2, 0, jinhulu2, spoker, jinhulu2_state, init_jinhulu2, ROT0, "IGS", "Jin Hu Lu 2 (v412GS)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // tries to link to something? +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS +GAME( 1996, spk306us, 0, spokeru, spoker, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v306US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk205us, spk306us, spokeru, spoker, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v205US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk203us, spk306us, spokeru, spk203us, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v203US)", MACHINE_SUPPORTS_SAVE ) // LS1. 8 203US in test mode +GAME( 1996, spk201ua, spk306us, spokeru, spk201ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v201UA)", MACHINE_SUPPORTS_SAVE ) // still shows 200UA in test mode +GAME( 1996, spk200ua, spk306us, spokeru, spk200ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v200UA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk200, spk306us, spoker, spk100, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v200)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk130, spk306us, spoker, spk130, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v130)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk120in, spk306us, spoker, spoker, spoker_state, init_spk120in, ROT0, "IGS", "Super Poker (v120IN)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk116it, spk306us, spoker, spoker, spoker_state, init_spk116it, ROT0, "IGS", "Super Poker (v116IT)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk116itmx, spk306us, spoker, spoker, spoker_state, init_spk114it, ROT0, "IGS", "Super Poker (v116IT-MX)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk115it, spk306us, spoker, spoker, spoker_state, init_spk116it, ROT0, "IGS", "Super Poker (v115IT)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk114it, spk306us, spoker, spk114it, spoker_state, init_spk114it, ROT0, "IGS", "Super Poker (v114IT)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk102ua, spk306us, spokeru, spk102ua, spokeru_state, init_spokeru, ROT0, "IGS", "Super Poker (v102UA)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk102u, spk306us, spoker, spk102ua, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v102U)", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, spk100, spk306us, spoker, spk100, spoker_state, init_spk100, ROT0, "IGS", "Super Poker (v100)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993?, 3super8, 0, _3super8, 3super8, spoker_state, init_3super8, ROT0, "", "3 Super 8 (Italy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // ROMs are badly dumped +GAME( 1997, jbell, 0, jb, jb, jb_state, init_spokeru, ROT0, "IGS", "Jingle Bell (v200US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, jinhulu2, 0, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2, ROT0, "IGS", "Jin Hu Lu 2 (v412GS)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // tries to link to something? +GAME( 1995, jinhulu2120gi, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2120gi, ROT0, "IGS", "Jin Hu Lu 2 (v120GI)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // inputs diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 7d05cd837e7..bce8d070669 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20832,6 +20832,7 @@ kov3hd101 3super8 jbell jinhulu2 +jinhulu2120gi spk100 spk102u spk102ua diff --git a/src/mame/subsino/subsino2.cpp b/src/mame/subsino/subsino2.cpp index c02025f9d7d..37a1f8be881 100644 --- a/src/mame/subsino/subsino2.cpp +++ b/src/mame/subsino/subsino2.cpp @@ -66,6 +66,7 @@ by the otherwise seemingly unnecessary internal ROMs. ************************************************************************************************************/ #include "emu.h" + #include "subsino_crypt.h" #include "subsino_io.h" @@ -78,6 +79,7 @@ by the otherwise seemingly unnecessary internal ROMs. #include "sound/okim6295.h" #include "sound/ymopl.h" #include "video/ramdac.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -132,23 +134,25 @@ public: , m_leds(*this, "led%u", 0U) { } - void bishjan(machine_config &config); - void xiaoao(machine_config &config); - void saklove(machine_config &config); - void mtrain(machine_config &config); - void tbonusal(machine_config &config); - void humlan(machine_config &config); - void new2001(machine_config &config); - void expcard(machine_config &config); - void xplan(machine_config &config); - void xtrain(machine_config &config); - void ptrain(machine_config &config); + void bishjan(machine_config &config) ATTR_COLD; + void xiaoao(machine_config &config) ATTR_COLD; + void saklove(machine_config &config) ATTR_COLD; + void mtrain(machine_config &config) ATTR_COLD; + void tbonusal(machine_config &config) ATTR_COLD; + void humlan(machine_config &config) ATTR_COLD; + void queenbn(machine_config &config) ATTR_COLD; + void new2001(machine_config &config) ATTR_COLD; + void expcard(machine_config &config) ATTR_COLD; + void xplan(machine_config &config) ATTR_COLD; + void xtrain(machine_config &config) ATTR_COLD; + void ptrain(machine_config &config) ATTR_COLD; - void init_wtrnymph(); - void init_mtrain(); - void init_tbonusal(); + void init_wtrnymph() ATTR_COLD; + void init_mtrain() ATTR_COLD; + void init_tbonusal() ATTR_COLD; protected: + virtual void machine_start() override ATTR_COLD { m_leds.resolve(); } virtual void video_start() override ATTR_COLD; private: @@ -225,7 +229,7 @@ private: TILE_GET_INFO_MEMBER(ss9601_get_tile_info_0); TILE_GET_INFO_MEMBER(ss9601_get_tile_info_1); - uint32_t screen_update_subsino2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void bishjan_map(address_map &map) ATTR_COLD; void mtrain_io(address_map &map) ATTR_COLD; @@ -239,8 +243,6 @@ private: void xplan_io(address_map &map) ATTR_COLD; void xplan_map(address_map &map) ATTR_COLD; - virtual void machine_start() override { m_leds.resolve(); } - layer_t m_layers[2]; uint8_t m_ss9601_byte_lo; uint8_t m_ss9601_byte_lo2; @@ -745,7 +747,7 @@ void subsino2_state::video_start() save_item(NAME(m_bishjan_input)); } -uint32_t subsino2_state::screen_update_subsino2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t subsino2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int layers_ctrl = ~m_ss9601_disable; int y; @@ -2807,7 +2809,7 @@ void subsino2_state::bishjan(machine_config &config) m_screen->set_size(512, 256); m_screen->set_visarea(0, 512-1, 0, 256-16-1); m_screen->set_refresh_hz(60); - m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2)); + m_screen->set_screen_update(FUNC(subsino2_state::screen_update)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set_inputline(m_maincpu, 0); // edge-triggered interrupt @@ -2868,6 +2870,13 @@ void subsino2_state::humlan(machine_config &config) // SS9804 } +void subsino2_state::queenbn(machine_config &config) +{ + humlan(config); + + m_maincpu->set_clock(48.94_MHz_XTAL / 3); +} + /*************************************************************************** Magic Train ***************************************************************************/ @@ -2902,7 +2911,7 @@ void subsino2_state::mtrain(machine_config &config) m_screen->set_visarea(0, 512-1, 0, 256-32-1); m_screen->set_refresh_hz(58.7270); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state - m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2)); + m_screen->set_screen_update(FUNC(subsino2_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601); @@ -2962,7 +2971,7 @@ void subsino2_state::saklove(machine_config &config) m_screen->set_visarea(0, 512-1, 0, 256-16-1); m_screen->set_refresh_hz(58.7270); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state - m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2)); + m_screen->set_screen_update(FUNC(subsino2_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ss9601); @@ -3013,7 +3022,7 @@ void subsino2_state::xplan(machine_config &config) m_screen->set_visarea(0, 512-1, 0, 256-16-1); m_screen->set_refresh_hz(58.7270); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); // game reads vblank state - m_screen->set_screen_update(FUNC(subsino2_state::screen_update_subsino2)); + m_screen->set_screen_update(FUNC(subsino2_state::screen_update)); m_screen->set_palette(m_palette); m_screen->screen_vblank().set("maincpu", FUNC(am188em_device::int0_w)); @@ -3126,7 +3135,7 @@ Notes: Xiao Ao Jiang Hu uses 44.1MHz Crystal Queen Bee New uses 48.94MHz Crystal DS1230.Q3 - Dallas DS1230A 1-Wire EEPROM (TO92). Hidden among other parts disguised as a transistor. - Each game has different EEPROM data used for protection. + Each game has different EEPROM data used for protection. All these have the surface scratched and the part location is marked Q3. PROG.U21 - 27C020 or 27C040 EPROM (main program) SND.U10 - 27C080 or 27C040 EPROM. Game boots to I/O test screen if this ROM is not present so this is a program ROM for @@ -4056,18 +4065,18 @@ GAME( 2000, new2001, 0, new2001, new2001, subsino2_state, empty_ini GAME( 2006, xplan, 0, xplan, xplan, subsino2_state, empty_init, ROT0, "Subsino", "X-Plan (Ver. 101)", MACHINE_NOT_WORKING ) -GAME( 2001, queenbee, 0, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino (American Alpha license)", "Queen Bee (Ver. 114)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues -GAME( 2001, queenbeeb, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (Brazil, Ver. 202)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available -GAME( 2001, queenbeei, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (Israel, Ver. 100)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available -GAME( 2001, queenbeesa, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (SA-101-HARD)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues, only program ROM available +GAME( 2001, queenbee, 0, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino (American Alpha license)", "Queen Bee (Ver. 114)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues +GAME( 2001, queenbeeb, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (Brazil, Ver. 202)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues, only program ROM available +GAME( 2001, queenbeei, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (Israel, Ver. 100)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues, only program ROM available +GAME( 2001, queenbeesa, queenbee, humlan, queenbee, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee (SA-101-HARD)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues, only program ROM available -GAME( 2001, humlan, queenbee, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino (Truemax license)", "Humlan's Lyckohjul (Sweden, Ver. 402)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues +GAME( 2001, humlan, queenbee, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino (Truemax license)", "Humlan's Lyckohjul (Sweden, Ver. 402)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues -GAME( 2002, queenbn, 0, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Nu Wang Feng New / Queen Bee New (China, Ver. 1.10)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues +GAME( 2002, queenbn, 0, queenbn, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Nv Wang Feng New / Queen Bee New (China, Ver. 1.10)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues -GAME( 2002, xreel, queenbee, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino (ECM license)", "X-Reel", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues +GAME( 2002, xreel, queenbee, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino (ECM license)", "X-Reel", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues -GAME( 2002, squeenb, 0, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Super Queen Bee (Ver. 101)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // severe timing issues +GAME( 2002, squeenb, 0, humlan, humlan, subsino2_state, empty_init, ROT0, "Subsino", "Super Queen Bee (Ver. 101)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_TIMING ) // severe timing issues GAME( 2003, qbeebing, 0, humlan, qbeebing, subsino2_state, empty_init, ROT0, "Subsino", "Queen Bee Bingo", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS )