summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/meters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/meters.cpp')
-rw-r--r--src/devices/machine/meters.cpp90
1 files changed, 20 insertions, 70 deletions
diff --git a/src/devices/machine/meters.cpp b/src/devices/machine/meters.cpp
index cf36ff75177..93ab6fd7fdc 100644
--- a/src/devices/machine/meters.cpp
+++ b/src/devices/machine/meters.cpp
@@ -1,11 +1,10 @@
// license:BSD-3-Clause
// copyright-holders:James Wallace
-///////////////////////////////////////////////////////////////////////////
-// //
-// Electro mechanical meters //
-// //
-// //
-///////////////////////////////////////////////////////////////////////////
+/**********************************************************************
+
+ Electromechanical Meter device
+
+**********************************************************************/
#include "emu.h"
#include "meters.h"
@@ -30,19 +29,17 @@ meters_device::meters_device(const machine_config &mconfig, const char *tag, dev
void meters_device::device_start()
{
- if ( m_number_mtr > MAXMECHMETERS )
+ if (m_number_mtr > MAXMECHMETERS)
m_number_mtr = MAXMECHMETERS;
- for ( int i = 0; i < m_number_mtr; i++ )
+ for (int i = 0; i < m_number_mtr; i++)
{
m_meter_info[i].reacttime = METERREACTTIME;
m_meter_info[i].state = 0;
m_meter_info[i].count = 0;
m_meter_info[i].on = 0;
- m_meter_info[i].meter_timer = timer_alloc(i);
- m_meter_info[i].meter_timer->reset();
+ m_meter_info[i].meter_timer = timer_alloc(FUNC(meters_device::count_tick), this);
- //save_item(NAME(m_meter_info[i].reacttime), i); //enable if void ReactTime(int id, int32_t cycles) gets used
save_item(NAME(m_meter_info[i].state), i);
save_item(NAME(m_meter_info[i].count), i);
save_item(NAME(m_meter_info[i].on), i);
@@ -58,89 +55,42 @@ void meters_device::device_reset()
}
//-------------------------------------------------
-// device_timer - device-specific timer events
+// count_tick - advance the meter's counter
//-------------------------------------------------
-void meters_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(meters_device::count_tick)
{
- if (id >= m_number_mtr)
- throw emu_fatalerror("Unknown id in meters_device::device_timer");
-
m_meter_info[param].count++;
}
-///////////////////////////////////////////////////////////////////////////
-
-int meters_device::GetNumberMeters(void) // currently unused
-{
- return m_number_mtr;
-}
-
-///////////////////////////////////////////////////////////////////////////
-
-void meters_device::Setcount(int id, int32_t count) // currently unused
-{
- if ( id >= m_number_mtr )
- return;
-
- m_meter_info[id].count = count;
-}
-
-///////////////////////////////////////////////////////////////////////////
-
-int32_t meters_device::Getcount(int id) // currently unused
-{
- int32_t result = 0;
-
- if ( id < m_number_mtr )
- result = m_meter_info[id].count;
-
- return result;
-}
-
-///////////////////////////////////////////////////////////////////////////
-
-void meters_device::ReactTime(int id, int32_t cycles) // currently unused
-{
- if ( id >= m_number_mtr )
- return;
-
- m_meter_info[id].reacttime = cycles;
-}
-
-///////////////////////////////////////////////////////////////////////////
-
-int meters_device::GetActivity(int id)
+int meters_device::get_activity(int id)
{
return m_meter_info[id].on;
}
-///////////////////////////////////////////////////////////////////////////
-
int meters_device::update(int id, int state)
{
- int res = 0;
-
- if ( id >= m_number_mtr )
- return res;
+ if (id >= m_number_mtr)
+ return 0;
- state = state?1:0;
+ state = state ? 1 : 0;
- if ( m_meter_info[id].state != state )
+ if (m_meter_info[id].state != state)
{ // meter state is changing
m_meter_info[id].state = state;
- if ( state )
+ if (state)
{
- m_meter_info[id].on =1;
+ m_meter_info[id].on = true;
m_meter_info[id].meter_timer->adjust(attotime::from_seconds(m_meter_info[id].reacttime), id);
}
else
{
- m_meter_info[id].on =0;
- m_meter_info[id].meter_timer->adjust(attotime::never, id);
+ m_meter_info[id].on = false;
+ m_meter_info[id].meter_timer->adjust(attotime::never);
}
}
+
return m_meter_info[id].on;
}