diff options
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 |
commit | 2f013cea4185ab114acaff0ddafc3268e42ca241 (patch) | |
tree | f8e57db1b01bcd9d7aaa7b4d307a2d8782540c85 | |
parent | 8cdf5a0f59018335ae24a378f6b79740edffe50a (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.cpp | 122 | ||||
-rw-r--r-- | src/mame/mame.lst | 2 |
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 |