Piccolo Poker 100 updates...

- Protection understood, documented, and completelly simulated.
- Removed the ugly patch/hack in the driver_init that formerly allows to boot.
- Some clean-ups...
- Added technical notes.
This commit is contained in:
Roberto Fresca 2018-11-10 15:11:08 +01:00
parent b6449656d8
commit 1e6540f07b
2 changed files with 105 additions and 92 deletions

View File

@ -281,9 +281,21 @@
--- DRIVER UPDATES ---
[2018-11-10]
Piccolo Poker 100 from Admiral/Novomatic.
- Protection understood, documented, and completelly simulated.
- Removed the ugly patch/hack in the driver_init that formerly allows to boot.
- Some clean-ups...
- Added technical notes.
(2010-10 till 2018-10: untracked changes)
[2010-09-28]
Piccolo Poker 100 from Admiral - Novomatic.
Piccolo Poker 100 from Admiral/Novomatic.
- Added a workaround to get the game booting.
- Created inputs from the scratch.
- Promoted to 'working'.
@ -1092,6 +1104,7 @@ static INPUT_PORTS_START( piccolop )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) // protection... fixed low by hardware to be always active.
PORT_START("IN7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN) // lack of v-sync if low
@ -1311,58 +1324,52 @@ ROM_START( videomat ) /* polish bootleg */
ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) )
ROM_END
ROM_START( sigmapkr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sigmapkr.u6", 0x0000, 0x10000, CRC(aa3f429a) SHA1(8c82e86de7280590ba157860cbf9783f893f8554) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "sigmapkr.u47", 0x0000, 0x4000, CRC(49eb69a8) SHA1(22be5870d501d229aa56fb18146ec0d8f8eea72e) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s147an_spkr.u48", 0x0000, 0x0200, CRC(3d8683d0) SHA1(1d99cd89db1b3c8e14bdafab05d1f70ad5bc604d) )
ROM_END
ROM_START( sigma2k )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sigma2k.u6", 0x0000, 0x10000, CRC(608d1771) SHA1(0ec94d780565472c7e68da7e3ce19aea3f1ab4a5) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "sigma2k.u47", 0x0000, 0x10000, CRC(3ed7b9df) SHA1(788a90ffa6cb0bfebf607815a695a5afe930945c) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s147an_s2k.u48", 0x0000, 0x0200, CRC(715361cc) SHA1(cac239399c9ec5d7498e49a906fb5b934ef7f4dc) )
ROM_END
/*
Rabbit Poker, or Arizona Poker 1.1 ??
Piccolo Poker (Admiral, licensed by Novomatic).
Seems a interesting American Poker II variant.
American Poker 2 board
program rom on small daughter board
with GAL22V10 and PIC16F84A
prom not dumped
Roms have swapped halves. Rechecked on PCB.
The protection is based on a stuck bit at RAM offset $C416.
$C416 is the RAM image of input port 16h. Seems that bit6 is
fixed active by hardware and is checked by the program when
the game initializes and when the operator & supervisor keys
are active.
The contents of this RAM offset is AND'ed with 0xE0 to clear
the previous values, and then compared with 0x40 to check if
this input line (inexistent in other hardware) is active.
1382: 41 ld b,c
1383: 80 add a,b
1384: 00 nop ------\
1385: 00 nop | Obvious patch...
1386: 00 nop | Dunno what was there originally.
1387: 00 nop ------/
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 ---> THE TRAP.
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 (clear the five inputs)
1549: FE 40 cp $40 ; Compare with $40. Is the bit6 active?
154B: C2 88 13 jp nz,$1388 ; Not?... Jumps to the TRAP. The game freezes.
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
*/
ROM_START( rabbitpk )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "poldi_ren.u6", 0x0000, 0x10000, CRC(ef0d5b47) SHA1(5d209c803ab8ced08953d24202a364ce1aa677c2) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "poldi_graf.u47", 0x0000, 0x4000, CRC(f1807f39) SHA1(631645272c7508104749e0ff1357bd74098851d5) )
ROM_REGION( 0x200, "proms", 0 ) /* not dumped. using the ampoker2 one instead */
ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) )
ROM_END
/*
Piccolo Poker (Admiral, licensed by Novomatic).
Seems a interesting American Poker II variant.
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) )
@ -1379,6 +1386,27 @@ ROM_START( piccolop )
ROM_END
/*
Rabbit Poker, or Arizona Poker 1.1 ??
American Poker 2 board
program rom on small daughter board
with GAL22V10 and PIC16F84A
prom not dumped
*/
ROM_START( rabbitpk )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "poldi_ren.u6", 0x0000, 0x10000, CRC(ef0d5b47) SHA1(5d209c803ab8ced08953d24202a364ce1aa677c2) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "poldi_graf.u47", 0x0000, 0x4000, CRC(f1807f39) SHA1(631645272c7508104749e0ff1357bd74098851d5) )
ROM_REGION( 0x200, "proms", 0 ) /* not dumped. using the ampoker2 one instead */
ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) )
ROM_END
/*
Arizona 10. This one has way more Italian text than rabbitpk. Also has Arizona in the graphics ROM, instead of Rabbit.
@ -1393,7 +1421,6 @@ Devices
1x TDA2003 u16 Audio Amplifier - sound
1x oscillator 6.000MHz oz1
ROMs
1x NM27C256 2 dumped
1x M27C512 1 dumped
@ -1435,6 +1462,33 @@ ROM_START( arizna10 )
ROM_LOAD( "gal22v10d.u6", 0x400, 0x2e5, NO_DUMP ) // on small piggyback at u6
ROM_END
/******** Sigma sets ********/
ROM_START( sigmapkr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sigmapkr.u6", 0x0000, 0x10000, CRC(aa3f429a) SHA1(8c82e86de7280590ba157860cbf9783f893f8554) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "sigmapkr.u47", 0x0000, 0x4000, CRC(49eb69a8) SHA1(22be5870d501d229aa56fb18146ec0d8f8eea72e) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s147an_spkr.u48", 0x0000, 0x0200, CRC(3d8683d0) SHA1(1d99cd89db1b3c8e14bdafab05d1f70ad5bc604d) )
ROM_END
ROM_START( sigma2k )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sigma2k.u6", 0x0000, 0x10000, CRC(608d1771) SHA1(0ec94d780565472c7e68da7e3ce19aea3f1ab4a5) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "sigma2k.u47", 0x0000, 0x10000, CRC(3ed7b9df) SHA1(788a90ffa6cb0bfebf607815a695a5afe930945c) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "82s147an_s2k.u48", 0x0000, 0x0200, CRC(715361cc) SHA1(cac239399c9ec5d7498e49a906fb5b934ef7f4dc) )
ROM_END
/*************************
* Driver Init *
*************************/
@ -1458,48 +1512,6 @@ void ampoker2_state::init_rabbitpk()
}
}
void ampoker2_state::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 ------\
1385: 00 nop | Obvious patch...
1386: 00 nop | Dunno if was made originally.
1387: 00 nop ------/
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 --- WTH???
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_t *rom = memregion("maincpu")->base();
// NOP'ing the mortal jump...
rom[0x154b] = 0x00;
rom[0x154c] = 0x00;
rom[0x154d] = 0x00;
}
/*************************
* Game Drivers *
@ -1515,8 +1527,10 @@ GAMEL( 1994, ampkr228, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init,
GAMEL( 1995, ampkr95, ampoker2, ampoker2, ampkr95, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker 95", MACHINE_SUPPORTS_SAVE, layout_ampoker2 )
GAMEL( 1990, pkrdewin, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Poker De Win", MACHINE_SUPPORTS_SAVE, layout_ampoker2 )
GAMEL( 1990, videomat, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Videomat (Polish bootleg)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 )
GAME( 1991, piccolop, ampoker2, ampoker2, piccolop, ampoker2_state, empty_init, ROT0, "Admiral/Novomatic", "Piccolo Poker 100", MACHINE_SUPPORTS_SAVE )
GAMEL( 1990, rabbitpk, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg", "Rabbit Poker (Arizona Poker v1.1?)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 )
GAMEL( 1995, arizna10, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg (Ri.Bi)", "Arizona 10 (v1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) // undumped PIC for protection?
// different games not based on american poker 2
GAMEL( 1995, sigmapkr, 0, ampoker2, sigmapkr, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker", MACHINE_SUPPORTS_SAVE, layout_sigmapkr )
GAMEL( 1998, sigma2k, 0, sigma2k, sigma2k, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker 2000", MACHINE_SUPPORTS_SAVE, layout_sigmapkr )
GAME( 1991, piccolop, ampoker2, ampoker2, piccolop, ampoker2_state, init_piccolop, ROT0, "Admiral/Novomatic", "Piccolo Poker 100", MACHINE_SUPPORTS_SAVE )
GAMEL( 1995, arizna10, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg (Ri.Bi)", "Arizona 10 (v1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) // undumped PIC for protection?

View File

@ -29,7 +29,6 @@ public:
DECLARE_WRITE8_MEMBER(watchdog_reset_w);
DECLARE_WRITE8_MEMBER(videoram_w);
void init_rabbitpk();
void init_piccolop();
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(s2k_get_bg_tile_info);
DECLARE_PALETTE_INIT(ampoker2);