From 03bc3ea6a43d0143ec0d2a80507b5f5d950a50de Mon Sep 17 00:00:00 2001 From: RobertoFresca Date: Tue, 29 Aug 2017 21:49:22 -0300 Subject: unkitpkr: Improved the input system. Mapped the remaining inputs. Hooked the AY8912 port and rerouted the dip switch there. All inputs from the test mode are working. Added technical notes about the hacked code. Flagged the game as IMPERFECT GRAPHICS due to the bookkeeping is not completely readable due to the graphics bank hack needed to show the ingame graphics properly. [Roberto Fresca] New working machines -------------------- unknown Italian poker game [caius, AJR, Ivan Vangelista, Roberto Fresca] --- src/mame/drivers/wallc.cpp | 91 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 24 deletions(-) diff --git a/src/mame/drivers/wallc.cpp b/src/mame/drivers/wallc.cpp index 835d3e67733..a10d4d68a0c 100644 --- a/src/mame/drivers/wallc.cpp +++ b/src/mame/drivers/wallc.cpp @@ -197,11 +197,13 @@ uint32_t wallc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, return 0; } + WRITE8_MEMBER(wallc_state::wallc_coin_counter_w) { machine().bookkeeping().coin_counter_w(0, data & 2); } + WRITE8_MEMBER(wallc_state::unkitpkr_out0_w) { } @@ -237,20 +239,20 @@ static ADDRESS_MAP_START( unkitpkr_map, AS_PROGRAM, 8, wallc_state ) AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(videoram_w) AM_MIRROR(0xc00) AM_SHARE("videoram") /* 2114, 2114 */ AM_RANGE(0xa000, 0xa3ff) AM_RAM /* 2114, 2114 */ - AM_RANGE(0xb000, 0xb000) AM_READ_PORT("SYSTEM") - AM_RANGE(0xb100, 0xb100) AM_READ_PORT("IN0") - AM_RANGE(0xb200, 0xb200) AM_READ_PORT("IN1") - AM_RANGE(0xb300, 0xb300) AM_READ_PORT("IN2") - AM_RANGE(0xb500, 0xb5ff) AM_READNOP // read by memory test routine left over from some other game - AM_RANGE(0xb600, 0xb600) AM_READ_PORT("DSW") + AM_RANGE(0xb000, 0xb000) AM_READ_PORT("IN0") + AM_RANGE(0xb100, 0xb100) AM_READ_PORT("IN1") + AM_RANGE(0xb200, 0xb200) AM_READ_PORT("IN2") + AM_RANGE(0xb300, 0xb300) AM_READ_PORT("IN3") + AM_RANGE(0xb500, 0xb5ff) AM_READNOP // read by memory test routine. left over from some other game AM_RANGE(0xb000, 0xb000) AM_WRITE(unkitpkr_out0_w) AM_RANGE(0xb100, 0xb100) AM_WRITE(unkitpkr_out1_w) AM_RANGE(0xb200, 0xb200) AM_WRITE(unkitpkr_out2_w) AM_RANGE(0xb500, 0xb500) AM_DEVWRITE("aysnd", ay8912_device, address_w) - AM_RANGE(0xb600, 0xb600) AM_DEVWRITE("aysnd", ay8912_device, data_w) + AM_RANGE(0xb600, 0xb600) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w) // Port A = DSW ADDRESS_MAP_END + static INPUT_PORTS_START( wallc ) PORT_START("SYSTEM") /* b200 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) //Right curve button; select current playfield in test mode @@ -309,7 +311,7 @@ static INPUT_PORTS_START( wallc ) INPUT_PORTS_END static INPUT_PORTS_START( unkitpkr ) - PORT_START("SYSTEM") /* b000 */ + PORT_START("IN0") /* b000 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -319,27 +321,27 @@ static INPUT_PORTS_START( unkitpkr ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN0") /* b100 */ + PORT_START("IN1") /* b100 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // coin clear? + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // coin out PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_START("IN1") /* b200 */ + PORT_START("IN2") /* b200 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) - PORT_START("IN2") /* b300 */ + PORT_START("IN3") /* b300 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) @@ -350,17 +352,17 @@ static INPUT_PORTS_START( unkitpkr ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("DSW") /* b600 */ - PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2") // ok + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2") // ok PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x03, "1 Coin/10 Credits" ) - PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:3,4") // ok + PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:3,4") // ok PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x0c, "1 Coin/10 Credits" ) - PORT_DIPNAME( 0x30, 0x00, "Coin C" ) PORT_DIPLOCATION("SW2:5,6") // ok + PORT_DIPNAME( 0x30, 0x00, "Coin C" ) PORT_DIPLOCATION("SW2:5,6") // ok PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) @@ -369,6 +371,7 @@ static INPUT_PORTS_START( unkitpkr ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) INPUT_PORTS_END + static const gfx_layout charlayout = { 8,8, /* 8*8 characters */ @@ -384,6 +387,7 @@ static GFXDECODE_START( wallc ) GFXDECODE_ENTRY( "gfx1", 0 , charlayout, 0, 4 ) GFXDECODE_END + DRIVER_INIT_MEMBER(wallc_state, wallc) { uint8_t c; @@ -424,7 +428,6 @@ DRIVER_INIT_MEMBER(wallc_state, wallca) } - static MACHINE_CONFIG_START( wallc ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 12288000 / 4) /* 3.072 MHz ? */ @@ -450,13 +453,21 @@ static MACHINE_CONFIG_START( wallc ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( unkitpkr, wallc ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(unkitpkr_map) MCFG_VIDEO_START_OVERRIDE(wallc_state, unkitpkr) + + /* sound hardware */ + MCFG_SOUND_MODIFY("aysnd") + MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW")) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END + + /*************************************************************************** Game driver(s) @@ -506,7 +517,6 @@ ROM_START( brkblast ) ROM_END - /* It use a epoxy brick like wallc @@ -614,6 +624,37 @@ DRIVER_INIT_MEMBER(wallc_state, sidam) } } +/* + Unknown Italian Poker + Seems a brute hack of an unknown game. + + The "conforme alla legge n." string is overwritting the hands table: + + "CONFORME" = Royal Flush + (blank line) = Straight Flush + "ALLA LEGGE" = Four of a Kind + (blank line) = Full House + "N.904 DEL" = Flush + (blank line) = Straight + "17.12.1986" = Three of a Kind + (blank line) = Double Pair + "........." = Simple Pair + + Also the code is hacked/patched to avoid some jumps: + + 00cb: ld a,(hl) + 00cc: cp c + 00cd: nop + 00ce: nop + 00cf: nop + + 00d2: ld a,(hl) + 00d3: cp c + 00d4: nop + 00d5: nop + 00d6: nop + +*/ ROM_START( unkitpkr ) ROM_REGION( 0x8000, "maincpu", 0 ) ROM_LOAD( "1", 0x0000, 0x2000, CRC(82dacf83) SHA1(d2bd4664737aeb968e9e34da74c2654e556c8567) ) @@ -627,7 +668,7 @@ ROM_START( unkitpkr ) ROM_CONTINUE( 0x2000, 0x1000 ) // first half is empty ROM_REGION( 0x0020, "proms", 0 ) - ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) BAD_DUMP ) // from wallc; not dumped yet + ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) ) // dumped; matches the wallc bp ROM_END DRIVER_INIT_MEMBER(wallc_state, unkitpkr) @@ -643,9 +684,11 @@ DRIVER_INIT_MEMBER(wallc_state, unkitpkr) } } -GAME( 1984, wallc, 0, wallc, wallc, wallc_state, wallc, ROT0, "Midcoin", "Wall Crash (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, wallca, wallc, wallc, wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1984, brkblast, wallc, wallc, wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", MACHINE_SUPPORTS_SAVE ) // Spanish bootleg board, Fadesa stickers / text on various components -GAME( 1984, sidampkr, 0, wallc, wallc, wallc_state, sidam, ROT270, "Sidam", "unknown Sidam Poker", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 198?, unkitpkr, 0, unkitpkr, unkitpkr, wallc_state, unkitpkr, ROT0, "", "unknown Italian poker game", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS +GAME( 1984, wallc, 0, wallc, wallc, wallc_state, wallc, ROT0, "Midcoin", "Wall Crash (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, wallca, wallc, wallc, wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1984, brkblast, wallc, wallc, wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", MACHINE_SUPPORTS_SAVE ) // Spanish bootleg board, Fadesa stickers / text on various components + +GAME( 1984, sidampkr, 0, wallc, wallc, wallc_state, sidam, ROT270, "Sidam", "unknown Sidam Poker", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 198?, unkitpkr, 0, unkitpkr, unkitpkr, wallc_state, unkitpkr, ROT0, "", "unknown Italian poker game", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -- cgit v1.2.3