From 152389867e9eea2c9d28f5714ed81052001c53eb Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 31 Oct 2024 00:49:48 +0100 Subject: [PATCH] bookkeeping: don't increment coin counter at power-on when initial counter_w input is 1, add handlers for resetting counters --- src/emu/bookkeeping.cpp | 45 +++++++++++++++++++++++++--------- src/emu/bookkeeping.h | 11 +++++++-- src/mame/konami/quickpick5.cpp | 35 +++++++++++++------------- 3 files changed, 61 insertions(+), 30 deletions(-) diff --git a/src/emu/bookkeeping.cpp b/src/emu/bookkeeping.cpp index 9f3e414e03f..47e4b2a195a 100644 --- a/src/emu/bookkeeping.cpp +++ b/src/emu/bookkeeping.cpp @@ -22,11 +22,11 @@ // bookkeeping_manager - constructor //------------------------------------------------- -bookkeeping_manager::bookkeeping_manager(running_machine &machine) - : m_machine(machine), - m_dispensed_tickets(0) +bookkeeping_manager::bookkeeping_manager(running_machine &machine) : + m_machine(machine), + m_dispensed_tickets(0) { - /* reset coin counters */ + // reset coin counters for (int counternum = 0; counternum < COIN_COUNTERS; counternum++) { m_lastcoin[counternum] = 0; @@ -52,6 +52,16 @@ bookkeeping_manager::bookkeeping_manager(running_machine &machine) TICKETS ***************************************************************************/ +/*------------------------------------------------- + increment_dispensed_tickets - increment the + number of dispensed tickets +-------------------------------------------------*/ + +void bookkeeping_manager::increment_dispensed_tickets(int delta) +{ + m_dispensed_tickets += delta; +} + /*------------------------------------------------- get_dispensed_tickets - return the number of tickets dispensed @@ -64,13 +74,13 @@ int bookkeeping_manager::get_dispensed_tickets() const /*------------------------------------------------- - increment_dispensed_tickets - increment the - number of dispensed tickets + reset_dispensed_tickets - reset the number of + tickets dispensed -------------------------------------------------*/ -void bookkeeping_manager::increment_dispensed_tickets(int delta) +void bookkeeping_manager::reset_dispensed_tickets() { - m_dispensed_tickets += delta; + m_dispensed_tickets = 0; } @@ -156,8 +166,8 @@ void bookkeeping_manager::coin_counter_w(int num, int on) if (num >= std::size(m_coin_count)) return; - /* Count it only if the data has changed from 0 to non-zero */ - if (on && (m_lastcoin[num] == 0)) + // count it only if the data has changed from 0 to non-zero + if (machine().time() > attotime::zero && on && (m_lastcoin[num] == 0)) m_coin_count[num]++; m_lastcoin[num] = on; } @@ -176,11 +186,24 @@ int bookkeeping_manager::coin_counter_get_count(int num) } +/*------------------------------------------------- + coin_counter_reset_count - reset the coin count + for a given coin +-------------------------------------------------*/ + +void bookkeeping_manager::coin_counter_reset_count(int num) +{ + if (num >= std::size(m_coin_count)) + return; + m_coin_count[num] = 0; +} + + /*------------------------------------------------- coin_lockout_w - locks out one coin input -------------------------------------------------*/ -void bookkeeping_manager::coin_lockout_w(int num,int on) +void bookkeeping_manager::coin_lockout_w(int num, int on) { if (num >= std::size(m_coinlockedout)) return; diff --git a/src/emu/bookkeeping.h b/src/emu/bookkeeping.h index 0d09c497b36..038d924f12f 100644 --- a/src/emu/bookkeeping.h +++ b/src/emu/bookkeeping.h @@ -32,11 +32,14 @@ public: bookkeeping_manager(running_machine &machine); // ----- tickets ----- + // increment the number of dispensed tickets + void increment_dispensed_tickets(int delta); + // return the number of tickets dispensed int get_dispensed_tickets() const; - // increment the number of dispensed tickets - void increment_dispensed_tickets(int delta); + // reset the number of dispensed tickets + void reset_dispensed_tickets(); // ----- coin counters ----- // write to a particular coin counter (clocks on active high edge) @@ -45,6 +48,9 @@ public: // return the coin count for a given coin int coin_counter_get_count(int num); + // reset the coin count for a given coin + void coin_counter_reset_count(int num); + // enable/disable coin lockout for a particular coin void coin_lockout_w(int num, int on); @@ -56,6 +62,7 @@ public: // getters running_machine &machine() const { return m_machine; } + private: void config_load(config_type cfg_type, config_level cfg_level, util::xml::data_node const *parentnode); void config_save(config_type cfg_type, util::xml::data_node *parentnode); diff --git a/src/mame/konami/quickpick5.cpp b/src/mame/konami/quickpick5.cpp index 60471787985..09d6b2864f8 100644 --- a/src/mame/konami/quickpick5.cpp +++ b/src/mame/konami/quickpick5.cpp @@ -392,7 +392,7 @@ static INPUT_PORTS_START( quickpick5 ) PORT_BIT(0xd8, IP_ACTIVE_LOW, IPT_UNUSED) PORT_START("DSW1") - PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIPSW1:1,2,3") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIPSW1:1,2,3") PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) @@ -401,22 +401,22 @@ static INPUT_PORTS_START( quickpick5 ) PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x03, DEF_STR( 1C_7C ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW1:4") + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW1:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x30, 0x30, "Jack Pot" ) PORT_DIPLOCATION("DIPSW1:5,6") + PORT_DIPNAME( 0x30, 0x30, "Jack Pot" ) PORT_DIPLOCATION("DIPSW1:5,6") PORT_DIPSETTING( 0x30, "300" ) PORT_DIPSETTING( 0x20, "500" ) PORT_DIPSETTING( 0x10, "700" ) PORT_DIPSETTING( 0x00, "1000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Max Pay" ) PORT_DIPLOCATION("DIPSW1:7,8") + PORT_DIPNAME( 0xc0, 0xc0, "Max Pay" ) PORT_DIPLOCATION("DIPSW1:7,8") PORT_DIPSETTING( 0xc0, "400" ) PORT_DIPSETTING( 0x80, "500" ) PORT_DIPSETTING( 0x40, "700" ) PORT_DIPSETTING( 0x00, "1000" ) PORT_START("DSW2") - PORT_DIPNAME( 0x0f, 0x0f, "Max Payout" ) PORT_DIPLOCATION("DIPSW2:1,2,3,4") + PORT_DIPNAME( 0x0f, 0x0f, "Max Payout" ) PORT_DIPLOCATION("DIPSW2:1,2,3,4") PORT_DIPSETTING( 0x0f, "65%" ) PORT_DIPSETTING( 0x0e, "70%" ) PORT_DIPSETTING( 0x0d, "75%" ) @@ -433,15 +433,15 @@ static INPUT_PORTS_START( quickpick5 ) PORT_DIPSETTING( 0x02, "91%" ) PORT_DIPSETTING( 0x01, "92%" ) PORT_DIPSETTING( 0x00, "94%" ) - PORT_DIPNAME( 0x30, 0x30, "Button Time" ) PORT_DIPLOCATION("DIPSW2:5,6") + PORT_DIPNAME( 0x30, 0x30, "Button Time" ) PORT_DIPLOCATION("DIPSW2:5,6") PORT_DIPSETTING( 0x30, "15 Seconds" ) PORT_DIPSETTING( 0x20, "20 Seconds" ) PORT_DIPSETTING( 0x10, "30 Seconds" ) PORT_DIPSETTING( 0x00, "40 Seconds" ) - PORT_DIPNAME( 0x40, 0x00, "Backup Memory" ) PORT_DIPLOCATION("DIPSW2:7") + PORT_DIPNAME( 0x40, 0x00, "Backup Memory" ) PORT_DIPLOCATION("DIPSW2:7") PORT_DIPSETTING( 0x00, "Clear" ) PORT_DIPSETTING( 0x40, "Keep" ) - PORT_DIPNAME( 0x80, 0x00, "Attract Sound" ) PORT_DIPLOCATION("DIPSW2:8") + PORT_DIPNAME( 0x80, 0x00, "Attract Sound" ) PORT_DIPLOCATION("DIPSW2:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) @@ -509,7 +509,8 @@ static INPUT_PORTS_START( waijockey ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("Bet 1-4") PORT_CODE(KEYCODE_G) PORT_START("DSW1") - PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIPSW1:1,2,3,4") + // Coinage DSW is only for converting 100 Yen coin to medals via the hopper + PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DIPSW1:1,2,3,4") PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) ) @@ -526,7 +527,7 @@ static INPUT_PORTS_START( waijockey ) PORT_DIPSETTING( 0x02, "1 Coin/14 Credits" ) PORT_DIPSETTING( 0x01, "1 Coin/15 Credits" ) PORT_DIPSETTING( 0x00, "1 Coin/16 Credits" ) - PORT_DIPNAME( 0xf0, 0xf0, "Max Payout" ) PORT_DIPLOCATION("DIPSW1:5,6,7,8") + PORT_DIPNAME( 0xf0, 0xf0, "Max Payout" ) PORT_DIPLOCATION("DIPSW1:5,6,7,8") PORT_DIPSETTING( 0xf0, "60%" ) PORT_DIPSETTING( 0xe0, "62%" ) PORT_DIPSETTING( 0xd0, "64%" ) @@ -545,28 +546,28 @@ static INPUT_PORTS_START( waijockey ) PORT_DIPSETTING( 0x00, "90%" ) PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:1") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:2") + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:3") + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:3") PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:4") + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DIPSW2:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x10, 0x10, "Game Play Mode" ) PORT_DIPLOCATION("DIPSW2:5") // more like gameplay test mode PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, "Payout Mode" ) PORT_DIPLOCATION("DIPSW2:6") + PORT_DIPNAME( 0x20, 0x00, "Payout Mode" ) PORT_DIPLOCATION("DIPSW2:6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, "Attract Sound" ) PORT_DIPLOCATION("DIPSW2:7") + PORT_DIPNAME( 0x40, 0x00, "Attract Sound" ) PORT_DIPLOCATION("DIPSW2:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Backup Memory" ) PORT_DIPLOCATION("DIPSW2:8") + PORT_DIPNAME( 0x80, 0x00, "Backup Memory" ) PORT_DIPLOCATION("DIPSW2:8") PORT_DIPSETTING( 0x00, "Clear" ) PORT_DIPSETTING( 0x80, "Keep" )