summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Roberto Fresca <robbie@robertofresca.com>2019-04-17 02:41:34 +0200
committer Roberto Fresca <robbie@robertofresca.com>2019-04-17 02:41:34 +0200
commit2f013cea4185ab114acaff0ddafc3268e42ca241 (patch)
treef8e57db1b01bcd9d7aaa7b4d307a2d8782540c85
parent8cdf5a0f59018335ae24a378f6b79740edffe50a (diff)
Unknown Galanthis/Zenitone poker game improvements: [Roberto Fresca]
- Change romset name to bonuspkr. - Change game description to Bonus Poker. - Reverse-engineered the code to allow boot the game. - Added proper set of inputs. - Added buttons-lamps support/layout. Machines promoted to working ---------------------------- Bonus Poker [Roberto Fresca, Team Europe]
-rw-r--r--src/mame/drivers/goldnpkr.cpp122
-rw-r--r--src/mame/mame.lst2
2 files changed, 112 insertions, 12 deletions
diff --git a/src/mame/drivers/goldnpkr.cpp b/src/mame/drivers/goldnpkr.cpp
index e9b27b0e973..43d3e4a6a84 100644
--- a/src/mame/drivers/goldnpkr.cpp
+++ b/src/mame/drivers/goldnpkr.cpp
@@ -1342,6 +1342,7 @@ public:
void init_vkdlswwr();
void init_vkdlswwv();
void init_bchancep();
+ void init_bonuspkr();
DECLARE_READ8_MEMBER(pottnpkr_mux_port_r);
DECLARE_WRITE8_MEMBER(lamps_a_w);
@@ -4091,6 +4092,69 @@ static INPUT_PORTS_START( bsuertev )
INPUT_PORTS_END
+static INPUT_PORTS_START( bonuspkr )
+ /* Multiplexed - 4x5bits */
+ PORT_START("IN0-0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Meters")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) PORT_NAME("Deal / Draw")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_CANCEL )
+ 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("IN0-1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_IMPULSE(3) PORT_NAME("Out (Manual Collect)") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Off (Payout)") PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small")
+ 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("IN0-2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 )
+ 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("IN0-3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Learn Mode") PORT_CODE(KEYCODE_F2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("IN0-3 02") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 )
+ 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("SW1")
+ /* only bits 4-7 are connected here and were routed to SW1 1-4 */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPNAME( 0x10, 0x00, "Pair of Aces" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x10, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x20, 0x20, "50hz/60hz" ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x20, "50hz" )
+ PORT_DIPSETTING( 0x00, "60hz" )
+ PORT_DIPNAME( 0x40, 0x00, "Payout Mode" ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x40, "Manual" )
+ PORT_DIPSETTING( 0x00, "Auto" )
+ PORT_DIPNAME( 0x80, 0x00, "Royal Flush" ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+INPUT_PORTS_END
+
+
/*********************************************
* Graphics Layouts *
@@ -10289,15 +10353,17 @@ ROM_END
/*
- COPYRIGHT 1984 GALANTHIS INC.
- FOR AMUSEMENT ONLY.
-
- COPYRIGHT (C) 1983
- ZENITONE LIMITED
- MALCOLM MAILER.
+ Bonus Poker.
+ Copyright 1984 Galanthis Inc.
+ For amusement only.
+
+ From inside another rom:
+ Copyright (C) 1983
+ Zenitone Limited.
+ Malcom Mailer.
S/N 24165483.
*/
-ROM_START( unknownpg )
+ROM_START( bonuspkr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "5000_bonus_12000.bin", 0x5000, 0x1000, CRC(eb93b60b) SHA1(6d6dcc0899caf1cb2179264c311bb41050834aa4) )
ROM_LOAD( "5_6000.bin", 0x6000, 0x1000, CRC(9f444112) SHA1(cae3a092898b4cc12a4f3eac955d8c8590a7b1fd) )
@@ -10312,9 +10378,6 @@ ROM_START( unknownpg )
ROM_LOAD( "bp_c2.bin", 0x0800, 0x0800, CRC(b59a8a11) SHA1(d378ac2615ec9990903d1ad9c63f785cb65f41ab) ) // cards deck gfx, bitplane 2
ROM_LOAD( "bp_c3.bin", 0x1000, 0x0800, CRC(cb4e8cb9) SHA1(c99f685f2f2ef4d360b48449e9520b40df58b3ae) ) // cards deck gfx, bitplane 3
-// ROM_REGION( 0x0800, "nvram", 0 ) // default NVRAM, otherwise settings parameters are incorrect
-// ROM_LOAD( "unknown_nvram.bin", 0x0000, 0x0800, CRC(b0c63467) SHA1(0a031686821ce7da43816076ea498389310b98c6) )
-
ROM_REGION( 0x0100, "proms", 0 )
ROM_LOAD( "74s387.b", 0x0000, 0x0100, CRC(7f31066b) SHA1(15420780ec6b2870fc4539ec3afe4f0c58eedf12) ) // color PROM
@@ -11450,6 +11513,43 @@ void goldnpkr_state::init_bchancep()
}
+/*
+ Bonus Poker protection.
+
+ Code checks for a ROM offset value (at $FFC8) and XOR it with the next value.
+ if the result is 0, the code continues. If not 0, just jump to a previous
+ subroutine, getting an infinite loop...
+
+ 7B7A: A9 FF lda #$ff ; Set the offset pointer to $30/$31...
+ 7B7C: 85 31 sta $31
+ 7B7E: A9 19 lda #$19
+ 7B80: 0A asl a
+ 7B81: 0A asl a
+ 7B82: 0A asl a
+ 7B83: 85 30 sta $30
+ 7B85: A0 01 ldy #$01 ; load Y with 1.
+ 7B87: B1 30 lda ($30), y ; load A with the content of $FFC8,y (0xAA).
+ 7B89: 88 dey ; decrement Y...
+ 7B8A: 51 30 eor ($30), y ; XOR against the content of $FFC8,y (now 0x55).
+ 7B8C: F0 03 beq $7b91 ; if 0, jumps to $7B91 (where the game execution continues).
+
+ 7B8E: 4C 4C E0 jmp $e04c ; jumps to an infinite loop.
+
+ 7B91: A2 1D ldx #$1d ; the game continue executing...
+
+*/
+
+void goldnpkr_state::init_bonuspkr()
+{
+// NOPing the DEY, so the XOR is against the same value
+// instead of the next offset one.
+
+ uint8_t *ROM = memregion("maincpu")->base();
+
+ ROM[0x7b89] = 0xea;
+}
+
+
/*********************************************
* Game Drivers *
*********************************************/
@@ -11588,7 +11688,7 @@ GAME( 1991, poker91, 0, witchcrd, poker91, goldnpkr_state, empty_init
GAME( 198?, genie, 0, genie, genie, goldnpkr_state, empty_init, ROT0, "Video Fun Games Ltd.", "Genie (ICP-1, set 1)", 0 )
GAME( 198?, geniea, genie, geniea, geniea, goldnpkr_state, empty_init, ROT0, "<unknown>", "Genie (ICP-1, set 2)", 0 )
GAMEL( 1983, silverga, 0, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "Silver Game", 0, layout_goldnpkr )
-GAME( 1984, unknownpg, 0, goldnpkr, caspoker, goldnpkr_state, empty_init, ROT0, "Galanthis Inc./Zenitone Ltd", "unknown Galanthis/Zenitone poker game", MACHINE_NOT_WORKING )
+GAMEL( 1984, bonuspkr, 0, goldnpkr, bonuspkr, goldnpkr_state, init_bonuspkr, ROT0, "Galanthis Inc.", "Bonus Poker", 0, layout_goldnpkr )
GAMEL( 198?, superdbl, pottnpkr, goldnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "Karateco", "Super Double (French)", 0, layout_goldnpkr )
GAME( 198?, pokerdub, 0, pottnpkr, goldnpkr, goldnpkr_state, empty_init, ROT0, "<unknown>", "unknown French poker game", MACHINE_NOT_WORKING ) // lacks of 2nd program ROM.
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index a3a95f190a7..1271006ba6a 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -14248,6 +14248,7 @@ animpkr // 198?, Unknown
animpkra // 198?, Unknown
bchancep // 198?, Unknown
bchanceq // 198?, Unknown
+bonuspkr // 1984, Galanthis Inc.
brasil86 // 1986, Unknown
brasil87 // 1987, Unknown
brasil89 // 1989, Unknown
@@ -14278,7 +14279,6 @@ bsuerteu // 1991, Unknown
bsuertev // 1991, Unknown
caspoker // 1987, PM / Beck Elektronik.
caspokera // 1986, PM / Beck Elektronik.
-unknownpg // 1984, Galanthis Inc./Zenitone Ltd.
falcnwld // 1991, TVG
falcnwlda // (c) 1990, Video Klein
falcnwldb // (c) 1990, Video Klein