From 140b1ca07adda3edc8b4d0830211f586b97e07cc Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 26 Jan 2022 18:09:48 +0100 Subject: [PATCH] New clones marked as NOT_WORKING -------------------------------- Kung Fu (IGS, v202N) [Jorge Silva] --- src/mame/drivers/igspoker.cpp | 85 +++++++++++++++++++++++------------ src/mame/drivers/jackie.cpp | 1 + src/mame/drivers/segac2.cpp | 2 +- src/mame/mame.lst | 3 +- 4 files changed, 61 insertions(+), 30 deletions(-) diff --git a/src/mame/drivers/igspoker.cpp b/src/mame/drivers/igspoker.cpp index 2dd09968cda..ecb1dc90536 100644 --- a/src/mame/drivers/igspoker.cpp +++ b/src/mame/drivers/igspoker.cpp @@ -126,6 +126,7 @@ public: void init_igs_ncs2(); void init_cpokerpk(); void init_kungfu(); + void init_kungfua(); DECLARE_READ_LINE_MEMBER(hopper_r); @@ -135,13 +136,13 @@ protected: virtual void video_start() override; private: - uint8_t igs_irqack_r(); - void igs_irqack_w(uint8_t data); + uint8_t irqack_r(); + void irqack_w(uint8_t data); void bg_tile_w(offs_t offset, uint8_t data); void fg_tile_w(offs_t offset, uint8_t data); void fg_color_w(offs_t offset, uint8_t data); - void igs_nmi_and_coins_w(uint8_t data); - void igs_lamps_w(uint8_t data); + void nmi_and_coins_w(uint8_t data); + void lamps_w(uint8_t data); uint8_t custom_io_r(); void custom_io_w(uint8_t data); uint8_t exp_rom_r(offs_t offset); @@ -150,9 +151,9 @@ private: TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); DECLARE_VIDEO_START(cpokerpk); - uint32_t screen_update_igs_video(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_cpokerpk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(igs_interrupt); + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); void cpokerpk_io_map(address_map &map); void igspoker_io_map(address_map &map); @@ -186,7 +187,7 @@ void igspoker_state::machine_reset() } -TIMER_DEVICE_CALLBACK_MEMBER(igspoker_state::igs_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(igspoker_state::interrupt) { int scanline = param; @@ -201,13 +202,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(igspoker_state::igs_interrupt) } -uint8_t igspoker_state::igs_irqack_r() +uint8_t igspoker_state::irqack_r() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0; } -void igspoker_state::igs_irqack_w(uint8_t data) +void igspoker_state::irqack_w(uint8_t data) { // m_maincpu->set_input_line(0, CLEAR_LINE); } @@ -252,7 +253,7 @@ void igspoker_state::video_start() m_fg_tilemap->set_transparent_pen(0); } -uint32_t igspoker_state::screen_update_igs_video(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t igspoker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->black_pen(), cliprect); @@ -284,7 +285,7 @@ void igspoker_state::show_out() #endif } -void igspoker_state::igs_nmi_and_coins_w(uint8_t data) +void igspoker_state::nmi_and_coins_w(uint8_t data) { machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c @@ -302,7 +303,7 @@ void igspoker_state::igs_nmi_and_coins_w(uint8_t data) show_out(); } -void igspoker_state::igs_lamps_w(uint8_t data) +void igspoker_state::lamps_w(uint8_t data) { /* - Lbits - @@ -354,9 +355,8 @@ uint8_t igspoker_state::custom_io_r() void igspoker_state::custom_io_w(uint8_t data) { -#if VERBOSE + logerror("PC %06X: Protection write %02x\n",m_maincpu->pc(),data); -#endif switch (data) { @@ -427,10 +427,10 @@ void igspoker_state::igspoker_io_map(address_map &map) map(0x4004, 0x4004).portr("DSW5"); /* DSW5 */ map(0x5080, 0x5083).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0x5090, 0x5090).w(FUNC(igspoker_state::custom_io_w)); - map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::igs_lamps_w)); /* Keyboard */ + map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::lamps_w)); /* Keyboard */ map(0x50a0, 0x50a0).portr("BUTTONS2"); /* Not connected */ map(0x50b0, 0x50b1).w("ymsnd", FUNC(ym2413_device::write)); - map(0x50c0, 0x50c0).r(FUNC(igspoker_state::igs_irqack_r)).w(FUNC(igspoker_state::igs_irqack_w)); + map(0x50c0, 0x50c0).r(FUNC(igspoker_state::irqack_r)).w(FUNC(igspoker_state::irqack_w)); map(0x6800, 0x6fff).ram().w(FUNC(igspoker_state::bg_tile_w)).share("bg_tile_ram"); map(0x7000, 0x77ff).ram().w(FUNC(igspoker_state::fg_tile_w)).share("fg_tile_ram"); map(0x7800, 0x7fff).ram().w(FUNC(igspoker_state::fg_color_w)).share("fg_color_ram"); @@ -1180,14 +1180,14 @@ void igspoker_state::number10_io_map(address_map &map) map(0x4004, 0x4004).portr("DSW5"); /* DSW5 */ map(0x4006, 0x4006).portr("DSW6"); map(0x4007, 0x4007).portr("DSW7"); - map(0x50f0, 0x50f0).w(FUNC(igspoker_state::igs_nmi_and_coins_w)); + map(0x50f0, 0x50f0).w(FUNC(igspoker_state::nmi_and_coins_w)); map(0x5080, 0x5080).portr("SERVICE"); /* Services */ map(0x5090, 0x5090).w(FUNC(igspoker_state::custom_io_w)); - map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::igs_lamps_w)); /* Keyboard */ + map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::lamps_w)); /* Keyboard */ map(0x50a0, 0x50a0).portr("BUTTONS2"); /* Sound synthesys has been patched out, replaced by ADPCM samples */ map(0x50b0, 0x50b0).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x50c0, 0x50c0).r(FUNC(igspoker_state::igs_irqack_r)).w(FUNC(igspoker_state::igs_irqack_w)); + map(0x50c0, 0x50c0).r(FUNC(igspoker_state::irqack_r)).w(FUNC(igspoker_state::irqack_w)); map(0x7000, 0x77ff).ram().w(FUNC(igspoker_state::fg_tile_w)).share("fg_tile_ram"); map(0x7800, 0x7fff).ram().w(FUNC(igspoker_state::fg_color_w)).share("fg_color_ram"); } @@ -1202,15 +1202,15 @@ void igspoker_state::cpokerpk_io_map(address_map &map) map(0x4002, 0x4002).portr("DSW3"); /* DSW3 */ map(0x4003, 0x4003).portr("DSW4"); /* DSW4 */ map(0x4004, 0x4004).portr("DSW5"); /* DSW5 */ - map(0x50f0, 0x50f0).w(FUNC(igspoker_state::igs_nmi_and_coins_w)); + map(0x50f0, 0x50f0).w(FUNC(igspoker_state::nmi_and_coins_w)); map(0x5081, 0x5081).portr("SERVICE"); /* Services */ map(0x5082, 0x5082).portr("COINS"); /* Coing & Kbd */ map(0x5090, 0x5090).w(FUNC(igspoker_state::custom_io_w)); - map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::igs_lamps_w)); /* Keyboard */ + map(0x5091, 0x5091).r(FUNC(igspoker_state::custom_io_r)).w(FUNC(igspoker_state::lamps_w)); /* Keyboard */ map(0x50a0, 0x50a0).portr("BUTTONS2"); /* Sound synthesys has been patched out, replaced by ADPCM samples */ map(0x50b0, 0x50b0).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x50c0, 0x50c0).r(FUNC(igspoker_state::igs_irqack_r)).w(FUNC(igspoker_state::igs_irqack_w)); + map(0x50c0, 0x50c0).r(FUNC(igspoker_state::irqack_r)).w(FUNC(igspoker_state::irqack_w)); map(0x7000, 0x77ff).ram().w(FUNC(igspoker_state::fg_tile_w)).share("fg_tile_ram"); map(0x7800, 0x7fff).ram().w(FUNC(igspoker_state::fg_color_w)).share("fg_color_ram"); } @@ -1939,10 +1939,10 @@ void igspoker_state::igspoker(machine_config &config) Z80(config, m_maincpu, 3579545); m_maincpu->set_addrmap(AS_PROGRAM, &igspoker_state::igspoker_prg_map); m_maincpu->set_addrmap(AS_IO, &igspoker_state::igspoker_io_map); - TIMER(config, "scantimer").configure_scanline(FUNC(igspoker_state::igs_interrupt), "screen", 0, 1); + TIMER(config, "scantimer").configure_scanline(FUNC(igspoker_state::interrupt), "screen", 0, 1); i8255_device &ppi(I8255A(config, "ppi")); - ppi.out_pa_callback().set(FUNC(igspoker_state::igs_nmi_and_coins_w)); + ppi.out_pa_callback().set(FUNC(igspoker_state::nmi_and_coins_w)); ppi.in_pb_callback().set_ioport("SERVICE"); ppi.in_pc_callback().set_ioport("COINS"); @@ -1952,7 +1952,7 @@ void igspoker_state::igspoker(machine_config &config) m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(64*8, 32*8); // TODO: wrong screen size! m_screen->set_visarea(0*8, 64*8-1, 0, 32*8-1); - m_screen->set_screen_update(FUNC(igspoker_state::screen_update_igs_video)); + m_screen->set_screen_update(FUNC(igspoker_state::screen_update)); m_screen->set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_igspoker); @@ -2965,6 +2965,22 @@ void igspoker_state::init_pktet346() rom[0xbb0c] = 0xc3; } +ROM_START( kungfu ) // IGS PCB N0- 0139 + ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "u23", 0x00000, 0x10000, CRC(53396dd3) SHA1(1bab42394f016f800dbd80603c70defc25380fd7) ) // missing label, probably 'kung fu 8' + ROM_LOAD( "kungfu-7.u22", 0x10000, 0x08000, CRC(0568f20b) SHA1(a51a10deee0d581b79d0fee354cedceaa660f55c) ) // 1ST AND 2ND HALF IDENTICAL, otherwise same as the other set + ROM_IGNORE( 0x08000 ) + + ROM_REGION( 0x60000, "gfx1", 0 ) + ROM_LOAD( "kungfu-4.u4", 0x00000, 0x20000, CRC(df4afedb) SHA1(56ab18c46a199653c284417a8e9edc9f32374318) ) + ROM_LOAD( "kungfu-5.u5", 0x20000, 0x20000, CRC(25c9c98e) SHA1(2d3a399d8d53ee5cb8106d2b35d1ab1778439f81) ) + ROM_LOAD( "kungfu-6.u6", 0x40000, 0x20000, CRC(f1ec5f0d) SHA1(0aa888e13312ed5d98953c81f03a61c6175c7fec) ) + + ROM_REGION( 0x30000, "gfx2", ROMREGION_ERASE00 ) + ROM_LOAD( "kungfu-1.u1", 0x00000, 0x4000, CRC(abaada6b) SHA1(a6b910db7451e8ca737f43f32dfc8fc5ecf865f4) ) + ROM_LOAD( "kungfu-2.u2", 0x10000, 0x4000, CRC(927b3060) SHA1(a780ea5aaee04287cc9533c2d258dc18f8426530) ) + ROM_LOAD( "kungfu-3.u3", 0x20000, 0x4000, CRC(bbf78e03) SHA1(06fee093e75e2611d00c076c2e0a681938fa8b74) ) +ROM_END /* @@ -2983,7 +2999,7 @@ Board silkscreend on top PCB NO.0013-B .41 27128 stickered 2 .40 27128 stickered 1 .98 27256 stickered 7 couldn't read chip, but board was silkscreened 27c256 -.97 27512 stickered ? looked like japanese writing +.97 27512 stickered ? looked like Japanese writing .38 74s287 .46 18cv8 <--- same checksum as .48 .47 pal16l8a <--- checksum was 0 @@ -2998,7 +3014,7 @@ open 24 pin socket @ u54 */ -ROM_START( kungfu ) +ROM_START( kungfua ) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) // u97 contains leftover x86 code at 0-3fff (compiled with Borland Turbo-C). // You can rename the rom to kungfu.exe and run it (DOS MZ executable)! @@ -3025,6 +3041,18 @@ ROM_START( kungfu ) ROM_END void igspoker_state::init_kungfu() +{ + uint8_t *rom = memregion("maincpu")->base(); + for (int A = 0; A < 0x10000; A++) + { + rom[A] ^= 0x01; + if ((A & 0x0060) == 0x0020) rom[A] ^= 0x20; + if ((A & 0x0282) == 0x0282) rom[A] ^= 0x01; + if ((A & 0x0940) == 0x0940) rom[A] ^= 0x02; + } +} + +void igspoker_state::init_kungfua() { uint8_t *rom = memregion("maincpu")->base(); @@ -3071,4 +3099,5 @@ GAMEL( 1993?,pktet346, 0, pktetris, pktet346, igspoker_state, init_pkt GAMEL( 199?, igstet341, pktet346, pktetris, igstet341,igspoker_state, init_tet341, ROT0, "IGS", "Tetris (v341R)", 0, layout_igspoker ) GAMEL( 199?, igstet342, pktet346, pktetris, igstet341,igspoker_state, init_tet341, ROT0, "IGS", "Tetris (v342R)", 0, layout_igspoker ) -GAMEL( 1992, kungfu, 0, igspoker, cpoker, igspoker_state, init_kungfu, ROT0, "IGS", "Kung Fu (IGS, v100)", MACHINE_NOT_WORKING, layout_igspoker ) +GAMEL( 199?, kungfu, 0, igspoker, cpoker, igspoker_state, init_kungfu, ROT0, "IGS", "Kung Fu (IGS, v202N)", MACHINE_NOT_WORKING, layout_igspoker ) // decryption should be good, needs proper address map +GAMEL( 1992, kungfua, kungfu, igspoker, cpoker, igspoker_state, init_kungfua, ROT0, "IGS", "Kung Fu (IGS, v100)", MACHINE_NOT_WORKING, layout_igspoker ) // missing internal ROM dump diff --git a/src/mame/drivers/jackie.cpp b/src/mame/drivers/jackie.cpp index bd923d3a109..83881782177 100644 --- a/src/mame/drivers/jackie.cpp +++ b/src/mame/drivers/jackie.cpp @@ -3,6 +3,7 @@ /* Happy Jackie (c) 1993 IGS. Video Slot machine game for amusement only. +IGS PCB N0-T0039-4 Driver by David Haywood and Mirko Buffoni */ diff --git a/src/mame/drivers/segac2.cpp b/src/mame/drivers/segac2.cpp index 9b404301090..3645760a5ea 100644 --- a/src/mame/drivers/segac2.cpp +++ b/src/mame/drivers/segac2.cpp @@ -2909,7 +2909,7 @@ GAME( 1994, stkclmns, 0, segac2, stkclmns, segac2_state, init_st GAME( 1994, stkclmnsj, stkclmns, segac2, stkclmns, segac2_state, init_stkclmnj, ROT0, "Sega", "Stack Columns (Japan)", 0 ) GAME( 1994, ichir, 0, segac2, ichir, segac2_state, init_ichir, ROT0, "Sega", "Puzzle & Action: Ichidant-R (World)", 0 ) -GAME( 1994, ichirbl, ichir, segac2, ichir, segac2_state, init_noprot, ROT0, "Sega", "Puzzle & Action: Ichidant-R (World) (bootleg)", 0 ) +GAME( 1994, ichirbl, ichir, segac2, ichir, segac2_state, init_noprot, ROT0, "bootleg", "Puzzle & Action: Ichidant-R (World) (bootleg)", 0 ) GAME( 1994, ichirk, ichir, segac2, ichir, segac2_state, init_ichirk, ROT0, "Sega", "Puzzle & Action: Ichidant-R (Korea)", 0 ) GAME( 1994, ichirj, ichir, segac2, ichir, segac2_state, init_ichirj, ROT0, "Sega", "Puzzle & Action: Ichidant-R (Japan)", 0 ) GAME( 1994, ichirjbl, ichir, segac, ichir, segac2_state, init_ichirjbl, ROT0, "bootleg", "Puzzle & Action: Ichidant-R (Japan) (bootleg)", 0 ) // C board, no samples diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4ad0d412dac..15c7b761392 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17225,7 +17225,8 @@ igs_ncs // (c) 198? IGS igs_ncs2 // (c) 2000 IGS igstet341 // (c) 199? IGS igstet342 // (c) 199? IGS -kungfu // (c) 1992 IGS +kungfu // (c) 199? IGS +kungfua // (c) 1992 IGS number10 // (c) IGS (Board labeled Playmark Srl) numbr10l // (c) IGS (Board labeled Playmark Srl) pktet346 // (c) 199? IGS