summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bookkeeping.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/bookkeeping.cpp')
-rw-r--r--src/emu/bookkeeping.cpp107
1 files changed, 63 insertions, 44 deletions
diff --git a/src/emu/bookkeeping.cpp b/src/emu/bookkeeping.cpp
index 169d4d369ff..47e4b2a195a 100644
--- a/src/emu/bookkeeping.cpp
+++ b/src/emu/bookkeeping.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria
/*********************************************************************
- bookkeeping.c
+ bookkeeping.cpp
Bookkeeping simple machine functions.
@@ -11,6 +11,8 @@
#include "emu.h"
#include "config.h"
+#include "xmlfile.h"
+
//**************************************************************************
// BOOKKEEPING MANAGER
@@ -20,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;
@@ -39,7 +41,9 @@ bookkeeping_manager::bookkeeping_manager(running_machine &machine)
machine.save().save_item(NAME(m_dispensed_tickets));
// register for configuration
- machine.configuration().config_register("counters", config_load_delegate(&bookkeeping_manager::config_load, this), config_save_delegate(&bookkeeping_manager::config_save, this));
+ machine.configuration().config_register("counters",
+ configuration_manager::load_delegate(&bookkeeping_manager::config_load, this),
+ configuration_manager::save_delegate(&bookkeeping_manager::config_save, this));
}
@@ -49,6 +53,16 @@ bookkeeping_manager::bookkeeping_manager(running_machine &machine)
***************************************************************************/
/*-------------------------------------------------
+ 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
-------------------------------------------------*/
@@ -60,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;
}
@@ -80,36 +94,30 @@ void bookkeeping_manager::increment_dispensed_tickets(int delta)
and tickets
-------------------------------------------------*/
-void bookkeeping_manager::config_load(config_type cfg_type, util::xml::data_node const *parentnode)
+void bookkeeping_manager::config_load(config_type cfg_type, config_level cfg_level, util::xml::data_node const *parentnode)
{
- util::xml::data_node const *coinnode, *ticketnode;
-
- /* on init, reset the counters */
+ // on init, reset the counters
if (cfg_type == config_type::INIT)
{
memset(m_coin_count, 0, sizeof(m_coin_count));
m_dispensed_tickets = 0;
}
- /* only care about game-specific data */
- if (cfg_type != config_type::GAME)
- return;
-
- /* might not have any data */
- if (parentnode == nullptr)
+ // only care about system-specific data
+ if ((cfg_type != config_type::SYSTEM) || !parentnode)
return;
- /* iterate over coins nodes */
- for (coinnode = parentnode->get_child("coins"); coinnode; coinnode = coinnode->get_next_sibling("coins"))
+ // iterate over coins nodes
+ for (util::xml::data_node const *coinnode = parentnode->get_child("coins"); coinnode; coinnode = coinnode->get_next_sibling("coins"))
{
int index = coinnode->get_attribute_int("index", -1);
if (index >= 0 && index < COIN_COUNTERS)
m_coin_count[index] = coinnode->get_attribute_int("number", 0);
}
- /* get the single tickets node */
- ticketnode = parentnode->get_child("tickets");
- if (ticketnode != nullptr)
+ // get the single tickets node
+ util::xml::data_node const *const ticketnode = parentnode->get_child("tickets");
+ if (ticketnode)
m_dispensed_tickets = ticketnode->get_attribute_int("number", 0);
}
@@ -121,19 +129,17 @@ void bookkeeping_manager::config_load(config_type cfg_type, util::xml::data_node
void bookkeeping_manager::config_save(config_type cfg_type, util::xml::data_node *parentnode)
{
- int i;
-
- /* only care about game-specific data */
- if (cfg_type != config_type::GAME)
+ // only save system-specific data
+ if (cfg_type != config_type::SYSTEM)
return;
- /* iterate over coin counters */
- for (i = 0; i < COIN_COUNTERS; i++)
+ // iterate over coin counters
+ for (int i = 0; i < COIN_COUNTERS; i++)
{
if (m_coin_count[i] != 0)
{
- util::xml::data_node *coinnode = parentnode->add_child("coins", nullptr);
- if (coinnode != nullptr)
+ util::xml::data_node *const coinnode = parentnode->add_child("coins", nullptr);
+ if (coinnode)
{
coinnode->set_attribute_int("index", i);
coinnode->set_attribute_int("number", m_coin_count[i]);
@@ -141,11 +147,11 @@ void bookkeeping_manager::config_save(config_type cfg_type, util::xml::data_node
}
}
- /* output tickets */
+ // output tickets
if (m_dispensed_tickets != 0)
{
- util::xml::data_node *tickets = parentnode->add_child("tickets", nullptr);
- if (tickets != nullptr)
+ util::xml::data_node *const tickets = parentnode->add_child("tickets", nullptr);
+ if (tickets)
tickets->set_attribute_int("number", m_dispensed_tickets);
}
}
@@ -157,11 +163,11 @@ void bookkeeping_manager::config_save(config_type cfg_type, util::xml::data_node
void bookkeeping_manager::coin_counter_w(int num, int on)
{
- if (num >= ARRAY_LENGTH(m_coin_count))
+ 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;
}
@@ -174,19 +180,32 @@ void bookkeeping_manager::coin_counter_w(int num, int on)
int bookkeeping_manager::coin_counter_get_count(int num)
{
- if (num >= ARRAY_LENGTH(m_coin_count))
+ if (num >= std::size(m_coin_count))
return 0;
return m_coin_count[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 >= ARRAY_LENGTH(m_coinlockedout))
+ if (num >= std::size(m_coinlockedout))
return;
m_coinlockedout[num] = on;
}
@@ -199,7 +218,7 @@ void bookkeeping_manager::coin_lockout_w(int num,int on)
int bookkeeping_manager::coin_lockout_get_state(int num)
{
- if (num >= ARRAY_LENGTH(m_coinlockedout))
+ if (num >= std::size(m_coinlockedout))
return false;
return m_coinlockedout[num];
}
@@ -212,6 +231,6 @@ int bookkeeping_manager::coin_lockout_get_state(int num)
void bookkeeping_manager::coin_lockout_global_w(int on)
{
- for (int i = 0; i < ARRAY_LENGTH(m_coinlockedout); i++)
+ for (int i = 0; i < std::size(m_coinlockedout); i++)
coin_lockout_w(i, on);
}