From bf18c1056bd353c488db84deb30b6127f42019a9 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Tue, 28 Sep 2010 10:19:57 +0000 Subject: [PATCH] Improvements to Piccolo Poker 100. [Roberto Fresca] * Added a workaround to get the game booting. * Created inputs from the scratch. * Promoted to 'working'. * Added technical and game notes. New games added or promoted from NOT_WORKING status --------------------------------------------------- Piccolo Poker 100 [Roberto Fresca] --- src/mame/drivers/ampoker2.c | 173 +++++++++++++++++++++++++++++++----- 1 file changed, 150 insertions(+), 23 deletions(-) diff --git a/src/mame/drivers/ampoker2.c b/src/mame/drivers/ampoker2.c index afc67d650cf..18cf066da57 100644 --- a/src/mame/drivers/ampoker2.c +++ b/src/mame/drivers/ampoker2.c @@ -27,7 +27,7 @@ rabbitpk | clone | Rabbit Poker / Arizona Poker 1.1? (with PIC) sigmapkr | parent | Sigma Poker. sigma2k | parent | Sigma Poker 2000. - piccolop | parent | Piccolo Poker. + piccolop | parent | Piccolo Poker 100. ********************************************************************************* @@ -114,6 +114,20 @@ 5) Turn OFF the Supervisor Key (0). + Piccolo Poker 100: + + To 'init' (boot) the machine: + 1) Turn ON the Operator Key (9). + 2) Press the DOOR key (O). You are entering the Operator Mode. + 3) Turn OFF the Operator Key (9). + 4) Reset the machine. (sometimes you must reset manually the machine due to watchdog issues). + + If you win some credits, you'll be on troubles due to unemulated hopper. + Just discharge the credits one by one pressing quickly the door switch (O) + If you want to play without the hopper issues, just leave the door open (O). In this mode, + the game is playable but doesn't contabilize in the meters. + + ********************************************************************************* @@ -281,6 +295,15 @@ --- DRIVER UPDATES --- + [2010-09-28] + + Piccolo Poker 100 from Admiral - Novomatic. + - Added a workaround to get the game booting. + - Created inputs from the scratch. + - Promoted to 'working'. + - Added technical and game notes. + + [2009-08-17] - Added Rabbit Poker / Arizona Poker? set (with GAL22V10 and PIC16F84A). @@ -359,6 +382,8 @@ - Find why the watchdog sometimes stop to work. - Analyze the write to port 0x21 after reset. + - Proper lamps for Piccolo Poker. + - Hopper emulation. *********************************************************************************/ @@ -993,6 +1018,94 @@ static INPUT_PORTS_START( sigma2k ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( piccolop ) + PORT_START("IN0") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN0-2") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + + PORT_START("IN1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal/Take") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("Operator Key") PORT_TOGGLE + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN1-5") PORT_CODE(KEYCODE_2_PAD) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN2-2") PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_DOOR ) PORT_NAME("Door Switch") + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) + + PORT_START("IN3") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Out") PORT_CODE(KEYCODE_G) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Supervisor Key") PORT_TOGGLE PORT_CODE(KEYCODE_0) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) + + PORT_START("IN4") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Hopper Low") PORT_CODE(KEYCODE_H) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / Red") + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + + PORT_START("IN5") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Return Line") PORT_CODE(KEYCODE_J) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("TILT") PORT_CODE(KEYCODE_K) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Black") + + PORT_START("IN6") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN6-2") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN6-3") PORT_CODE(KEYCODE_5_PAD) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + + PORT_START("IN7") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) // lack of v-sync if low + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN7-2") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("IN7-3") PORT_CODE(KEYCODE_7_PAD) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Coin Refill") PORT_CODE(KEYCODE_R) +INPUT_PORTS_END + /************************* * Graphics Layouts * @@ -1270,7 +1383,6 @@ Roms have swapped halves. Rechecked on PCB. */ - ROM_START( piccolop ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "v4.1.bin", 0x4000, 0x4000, CRC(ae092c43) SHA1(191e233310d59d3b4eb71c7081799835efcae069) ) @@ -1316,7 +1428,8 @@ static DRIVER_INIT( rabbitpk ) static DRIVER_INIT( piccolop ) { /* - + The protection is based on a stuck bit at RAM offset $C416. + 1382: 41 ld b,c 1383: 80 add a,b 1384: 00 nop ------\ @@ -1326,17 +1439,31 @@ static DRIVER_INIT( piccolop ) 1388: 3E 08 ld a,$08 138A: D3 37 out ($37),a ; Sets bit3 to keep happy the watchdog reset. 138C: 32 01 C0 ld ($C001),a - 138F: 18 FE jr $138F ; INFINITE LOOP --- WTF??? + 138F: 18 FE jr $138F ; INFINITE LOOP --- WTH??? - The following patch will break the infinite loop, - but reset the game constantly. + 1541: 21 16 C4 ld hl,$C416 ; Load $C416 into HL... + 1544: CB 4E bit 1,(hl) + 1546: 7E ld a,(hl) ; Load the $C416 contents... + 1547: E6 E0 and $E0 ; AND $E0 + 1549: FE 40 cp $40 ; Compare with $40 + 154B: C2 88 13 jp nz,$1388 ; Jumps to stuck! + + 154E: FD 21 AA C0 ld iy,$C0AA ; Else continue... + 1552: 11 16 C5 ld de,$C516 + 1555: 21 88 57 ld hl,$5788 + 1558: 06 08 ld b,$08 + 155A: 1A ld a,(de) + 155B: BE cp (hl) + 155C: C2 13 2A jp nz,$2A13 */ -// UINT8 *rom = memory_region(machine, "maincpu"); + UINT8 *rom = memory_region(machine, "maincpu"); -// rom[0x138f] = 0x00; -// rom[0x1390] = 0x00; + /* NOP'ing the mortal jump... */ + rom[0x154b] = 0x00; + rom[0x154c] = 0x00; + rom[0x154d] = 0x00; } @@ -1345,17 +1472,17 @@ static DRIVER_INIT( piccolop ) * Game Drivers * *************************/ -/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ -GAMEL( 1990, ampoker2, 0, ampoker2, ampoker2, 0, ROT0, "Novomatic", "American Poker II", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, ampkr2b1, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 1)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, ampkr2b2, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 2)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr2b3, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 3)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr2b4, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 4)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr228, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg?", "American Poker II (iamp2 v28)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1995, ampkr95, ampoker2, ampoker2, ampkr95, 0, ROT0, "bootleg", "American Poker 95", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, pkrdewin, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "Poker De Win", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, videomat, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "Videomat (Polish bootleg)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, rabbitpk, ampoker2, ampoker2, ampoker2, rabbitpk, ROT0, "bootleg", "Rabbit Poker (Arizona Poker v1.1?)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1995, sigmapkr, 0, ampoker2, sigmapkr, 0, ROT0, "Sigma Inc.", "Sigma Poker", GAME_SUPPORTS_SAVE, layout_sigmapkr ) -GAMEL( 1998, sigma2k, 0, sigma2k, sigma2k, 0, ROT0, "Sigma Inc.", "Sigma Poker 2000", GAME_SUPPORTS_SAVE, layout_sigmapkr ) -GAME( 1990, piccolop, ampoker2, ampoker2, ampoker2, piccolop, ROT0, "Admiral - Novomatic", "Piccolo Poker", GAME_NOT_WORKING ) +/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ +GAMEL( 1990, ampoker2, 0, ampoker2, ampoker2, 0, ROT0, "Novomatic", "American Poker II", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, ampkr2b1, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 1)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, ampkr2b2, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 2)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2b3, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 3)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2b4, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "American Poker II (bootleg, set 4)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr228, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg?", "American Poker II (iamp2 v28)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1995, ampkr95, ampoker2, ampoker2, ampkr95, 0, ROT0, "bootleg", "American Poker 95", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, pkrdewin, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "Poker De Win", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, videomat, ampoker2, ampoker2, ampoker2, 0, ROT0, "bootleg", "Videomat (Polish bootleg)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, rabbitpk, ampoker2, ampoker2, ampoker2, rabbitpk, ROT0, "bootleg", "Rabbit Poker (Arizona Poker v1.1?)", GAME_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1995, sigmapkr, 0, ampoker2, sigmapkr, 0, ROT0, "Sigma Inc.", "Sigma Poker", GAME_SUPPORTS_SAVE, layout_sigmapkr ) +GAMEL( 1998, sigma2k, 0, sigma2k, sigma2k, 0, ROT0, "Sigma Inc.", "Sigma Poker 2000", GAME_SUPPORTS_SAVE, layout_sigmapkr ) +GAME( 1990, piccolop, ampoker2, ampoker2, piccolop, piccolop, ROT0, "Admiral/Novomatic", "Piccolo Poker 100", GAME_SUPPORTS_SAVE )