From 821acc6f88b6e8f55a60f272221bb9fd59573688 Mon Sep 17 00:00:00 2001 From: Roberto Fresca Date: Sat, 30 Aug 2025 01:38:58 +0200 Subject: goldstar.cpp driver improvements. [Roberto Fresca, Grull Osgo] - Fixed Joker Master title tilemap/scroll bug. - Fixed cmv4 hopper DIP switches polarity. - Added Animal House button-lamps control panel. - Added hopper support to the following sets: roypok96, roypok96a, roypok96b, nfb96se, nfb96sea, nfb96seb, nfb96sec, carb2003, and noved. - Added remaining lucky8t (A900) DIP switches. [Ioannis Bampoulas] --- src/mame/igs/goldstar.cpp | 92 ++++++++++------ src/mame/layout/animalhs.lay | 256 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 314 insertions(+), 34 deletions(-) create mode 100644 src/mame/layout/animalhs.lay diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index 9f62d7bf119..67c4751c43d 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -250,6 +250,7 @@ #include +#include "animalhs.lh" #include "bingowng.lh" #include "cherryb3.lh" #include "chrygld.lh" @@ -905,9 +906,9 @@ void goldstar_state::video_start() void cmaster_state::video_start() { - m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); - m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); - m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); + m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); m_reel_tilemap[0]->set_scroll_cols(64); m_reel_tilemap[1]->set_scroll_cols(64); @@ -916,7 +917,7 @@ void cmaster_state::video_start() m_cmaster_girl_num = 0; m_cmaster_girl_pal = 0; - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_cherrym_fg_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 64, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmaster_state::get_cherrym_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_fg_tilemap->set_transparent_pen(0); m_enable_reg = 0x0b; @@ -964,7 +965,8 @@ uint32_t goldstar_state::screen_update_goldstar(screen_device &screen, bitmap_rg for (int i = 0; i < 64; i++) m_bg_tilemap->set_scrolly(i, m_bg_scroll[i]); - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + const rectangle bg_visible(0*8, (63)*8-1, 8*8, (31)*8-1); // top clipped for jkrmast + m_bg_tilemap->draw(screen, bitmap, bg_visible, 0, 0); } if (m_enable_reg & 0x08) @@ -1159,9 +1161,9 @@ TILE_GET_INFO_MEMBER(cmast97_state::get_cmast97_bg_tile_info) void cmast97_state::video_start() { - m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); - m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); - m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); + m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); m_reel_tilemap[0]->set_scroll_cols(64); m_reel_tilemap[1]->set_scroll_cols(64); @@ -1174,11 +1176,11 @@ void cmast97_state::video_start() m_cmaster_girl_num = 0; m_cmaster_girl_pal = 0; - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_cherrym_fg_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 64, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_cherrym_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_scrolly(0, -16); - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_cmast97_bg_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 64, 32); + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cmast97_state::get_cmast97_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); } void cmast97_state::cmast97_palette_init(palette_device &palette) const @@ -1237,11 +1239,11 @@ TILE_GET_INFO_MEMBER(wingco_state::get_magical_fg_tile_info) VIDEO_START_MEMBER(wingco_state, bingowng) { - m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wingco_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8,32, 64, 8); + m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wingco_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); m_reel_tilemap[0]->set_scroll_cols(64); - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wingco_state::get_goldstar_fg_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 64, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(wingco_state::get_goldstar_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_fg_tilemap->set_transparent_pen(0); // is there an enable reg for this game? @@ -3298,11 +3300,11 @@ static INPUT_PORTS_START( cmv4_dsw2 ) PORT_DIPSETTING( 0x02, "6" ) PORT_DIPSETTING( 0x01, "7" ) PORT_DIPSETTING( 0x00, "8 (Highest)" ) - PORT_DIPNAME( 0x18, 0x00, "Hopper Limit" ) PORT_DIPLOCATION("DSW2:4,5") - PORT_DIPSETTING( 0x18, "300" ) - PORT_DIPSETTING( 0x10, "500" ) - PORT_DIPSETTING( 0x08, "1000" ) - PORT_DIPSETTING( 0x00, "Unlimited" ) + PORT_DIPNAME( 0x18, 0x18, "Hopper Limit" ) PORT_DIPLOCATION("DSW2:4,5") + PORT_DIPSETTING( 0x18, "Unlimited" ) + PORT_DIPSETTING( 0x10, "1000" ) + PORT_DIPSETTING( 0x08, "500" ) + PORT_DIPSETTING( 0x00, "300" ) PORT_DIPNAME( 0x20, 0x20, "100+ Odds Sound" ) PORT_DIPLOCATION("DSW2:6") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( On ) ) @@ -5623,8 +5625,11 @@ static INPUT_PORTS_START( lucky8t ) PORT_DIPNAME( 0x01, 0x01, "Max Bet" ) PORT_DIPLOCATION("DSW1:1") PORT_DIPSETTING( 0x01, "64" ) PORT_DIPSETTING( 0x00, "120" ) - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW1:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW1:3") + PORT_DIPNAME( 0x06, 0x06, "Bonus / Game Difficulty" ) PORT_DIPLOCATION("DSW1:2,3") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x18, 0x18, "Double-Up Game Pay Rate" ) PORT_DIPLOCATION("DSW1:4,5") // OK PORT_DIPSETTING( 0x18, "60%" ) PORT_DIPSETTING( 0x10, "70%" ) @@ -5633,8 +5638,11 @@ static INPUT_PORTS_START( lucky8t ) PORT_DIPNAME( 0x20, 0x20, "Reel Speed" ) PORT_DIPLOCATION("DSW1:6") PORT_DIPSETTING( 0x20, "Normal" ) PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7") - PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW1:8") + PORT_DIPNAME( 0xc0, 0xc0, "JP Game Difficulty" ) PORT_DIPLOCATION("DSW1:7,8") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( Hardest ) ) PORT_MODIFY("DSW2") PORT_DIPNAME( 0x03, 0x01, "Main Game Pay Rate" ) PORT_DIPLOCATION("DSW2:1,2") // OK @@ -5645,35 +5653,47 @@ static INPUT_PORTS_START( lucky8t ) PORT_DIPNAME( 0x04, 0x04, "Double Up Game" ) PORT_DIPLOCATION("DSW2:3") // OK, use stop buttons to play PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW2:4") + PORT_DIPNAME( 0x08, 0x08, "Seven Crowns Difficulty" ) PORT_DIPLOCATION("DSW2:4") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW2:5") PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW2:6") PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW2:7") PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW2:8") PORT_MODIFY("DSW3") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW3:1") - PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW3:2") - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW3:3") + PORT_DIPNAME( 0x03, 0x03, "Coin Value" ) PORT_DIPLOCATION("DSW3:1,2") + PORT_DIPSETTING( 0x00, "50" ) + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x01, "200" ) + PORT_DIPSETTING( 0x02, "300" ) + PORT_DIPNAME( 0x04, 0x04, "Bell Bonus Difficulty" ) PORT_DIPLOCATION("DSW3:3") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW3:4") PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW3:5") PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW3:6") PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW3:7") - PORT_DIPNAME( 0x80, 0x80, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:8") // conditional to DSW1-1 max bet + PORT_DIPNAME( 0x80, 0x80, "Minimum Bet" ) PORT_DIPLOCATION("DSW3:8") // conditional to DSW1-1 max bet PORT_DIPSETTING( 0x80, "16" ) PORT_CONDITION("DSW1", 0x01, NOTEQUALS, 0x00) // for max 64 PORT_DIPSETTING( 0x00, "32" ) PORT_CONDITION("DSW1", 0x01, NOTEQUALS, 0x00) // for max 64 PORT_DIPSETTING( 0x80, "32" ) PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00) // for max 120 PORT_DIPSETTING( 0x00, "40" ) PORT_CONDITION("DSW1", 0x01, EQUALS, 0x00) // for max 120 PORT_MODIFY("DSW4") - PORT_DIPNAME( 0x03, 0x03, "Key In Rate" ) PORT_DIPLOCATION("DSW4:1,2") // OK + PORT_DIPNAME( 0x03, 0x03, "Key In Rate" ) PORT_DIPLOCATION("DSW4:1,2") // OK PORT_DIPSETTING( 0x03, "100" ) PORT_DIPSETTING( 0x00, "500" ) PORT_DIPSETTING( 0x02, "1000" ) PORT_DIPSETTING( 0x01, "3000" ) - PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW4:3") - PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW4:4") - PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW4:5") + PORT_DIPNAME( 0x0c, 0x0c, "Big Jackpot Difficulty" ) PORT_DIPLOCATION("DSW4:3,4") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x10, 0x00, "Tuning (Difficulty)" ) PORT_DIPLOCATION("DSW4:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // manual recommends this ON PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW4:6") PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW4:7") PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW4:8") @@ -7541,10 +7561,10 @@ static INPUT_PORTS_START( roypok96 ) PORT_START("IN2") 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( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Hopper presence detection PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) PORT_NAME("Key Out / Attendant") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Hopper") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("Settings") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") @@ -8019,6 +8039,10 @@ static INPUT_PORTS_START( nfb96bl ) PORT_INCLUDE( cmv4_service ) + PORT_MODIFY("IN2") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_CUSTOM ) // Hopper presence detection + PORT_START("DSW1") PORT_DIPNAME( 0x07, 0x03, "Game Rate" ) PORT_DIPLOCATION("DSW1:1,2,3") // OK PORT_DIPSETTING( 0x07, "Level 1 - 90%" ) @@ -24937,7 +24961,7 @@ GAMEL( 199?, chryglda, ncb3, cb3e, chrygld, cb3_state, init_cb3e GAME( 1994, chryangla, ncb3, chryangla,ncb3, cb3_state, init_chryangl, ROT0, "bootleg (G.C.I.)", "Cherry Angel (encrypted, W-4 hardware)", MACHINE_NOT_WORKING ) // DYNA CB3 V1.40 string, decrypted but only test screens work GAME( 1991, eldoraddoa, eldoradd, eldoraddoa,animalhs,cmaster_state, init_eldoraddoa,ROT0, "Dyna", "El Dorado (V1.4D)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS ) // improve GFX drawing, correct palette decode, I/O, etc -GAME( 1991, animalhs, 0, animalhs, animalhs, cmaster_state, init_animalhs, ROT0, "Suns Co Ltd.", "Animal House (V1.0, set 1)", MACHINE_NOT_WORKING ) // improve GFX drawing, correct palette decode, I/O, etc +GAMEL( 1991, animalhs, 0, animalhs, animalhs, cmaster_state, init_animalhs, ROT0, "Suns Co Ltd.", "Animal House (V1.0, set 1)", 0, layout_animalhs ) // improve GFX drawing, correct palette decode GAME( 1991, animalhsa, animalhs, animalhs, animalhs, cmaster_state, init_animalhs, ROT0, "Suns Co Ltd.", "Animal House (V1.0, set 2)", MACHINE_NOT_WORKING ) // improve GFX drawing, correct palette decode, I/O, etc // looks like a hack of Cherry Bonus 3 diff --git a/src/mame/layout/animalhs.lay b/src/mame/layout/animalhs.lay new file mode 100644 index 00000000000..86d5f3278e0 --- /dev/null +++ b/src/mame/layout/animalhs.lay @@ -0,0 +1,256 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3