summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/ticket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/ticket.cpp')
-rw-r--r--src/devices/machine/ticket.cpp77
1 files changed, 36 insertions, 41 deletions
diff --git a/src/devices/machine/ticket.cpp b/src/devices/machine/ticket.cpp
index f18faa45aab..e8cd2d419b6 100644
--- a/src/devices/machine/ticket.cpp
+++ b/src/devices/machine/ticket.cpp
@@ -2,23 +2,17 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- ticket.c
+ ticket.cpp
Generic ticket dispensing device.
***************************************************************************/
#include "emu.h"
-#include "machine/ticket.h"
-
-
-//**************************************************************************
-// DEBUGGING
-//**************************************************************************
-
-#define DEBUG_TICKET 0
-#define LOG(x) do { if (DEBUG_TICKET) logerror x; } while (0)
+#include "ticket.h"
+#define VERBOSE (0)
+#include "logmacro.h"
//**************************************************************************
@@ -36,37 +30,36 @@ DEFINE_DEVICE_TYPE(HOPPER, hopper_device, "coin_hopper", "Coin Hopper")
//**************************************************************************
//-------------------------------------------------
-// ticket_dispenser_device - constructor
+// constructor
//-------------------------------------------------
ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
- , m_motor_sense(TICKET_MOTOR_ACTIVE_LOW)
- , m_status_sense(TICKET_STATUS_ACTIVE_LOW)
, m_period(attotime::from_msec(100))
, m_hopper_type(false)
- , m_motoron(0)
- , m_ticketdispensed(0)
- , m_ticketnotdispensed(0)
- , m_status(0)
- , m_power(0)
+ , m_status(false)
+ , m_power(false)
, m_timer(nullptr)
- , m_output(*this, "led2") // TODO: probably shouldn't be hardcoded
+ , m_output(*this, tag) // TODO: change to "tag:status"
+ , m_dispense_handler(*this)
{
}
ticket_dispenser_device::ticket_dispenser_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ticket_dispenser_device(mconfig, TICKET_DISPENSER, tag, owner, clock)
{
+ m_hopper_type = false;
}
hopper_device::hopper_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ticket_dispenser_device(mconfig, HOPPER, tag, owner, clock)
{
+ m_hopper_type = true;
}
+
//-------------------------------------------------
-// ~ticket_dispenser_device - destructor
+// destructor
//-------------------------------------------------
ticket_dispenser_device::~ticket_dispenser_device()
@@ -74,6 +67,7 @@ ticket_dispenser_device::~ticket_dispenser_device()
}
+
//**************************************************************************
// READ/WRITE HANDLERS
//**************************************************************************
@@ -82,7 +76,7 @@ ticket_dispenser_device::~ticket_dispenser_device()
// line_r - read the status line
//-------------------------------------------------
-READ_LINE_MEMBER( ticket_dispenser_device::line_r )
+int ticket_dispenser_device::line_r()
{
return m_status ? 1 : 0;
}
@@ -92,26 +86,26 @@ READ_LINE_MEMBER( ticket_dispenser_device::line_r )
// motor_w - write the control line
//-------------------------------------------------
-WRITE_LINE_MEMBER( ticket_dispenser_device::motor_w )
+void ticket_dispenser_device::motor_w(int state)
{
- // On an activate signal, start dispensing!
- if (bool(state) == m_motoron)
+ // On rising edge, start dispensing!
+ if (state)
{
if (!m_power)
{
- LOG(("%s: Ticket Power On\n", machine().describe_context()));
+ LOG("%s: Ticket Power On\n", machine().describe_context());
m_timer->adjust(m_period);
m_power = true;
- m_status = m_ticketnotdispensed;
+ m_status = false;
}
}
else
{
if (m_power)
{
- if (m_hopper_type == false || m_status == m_ticketnotdispensed)
+ if (!m_hopper_type || !m_status)
{
- LOG(("%s: Ticket Power Off\n", machine().describe_context()));
+ LOG("%s: Ticket Power Off\n", machine().describe_context());
m_timer->adjust(attotime::never);
m_output = 0;
}
@@ -131,11 +125,7 @@ WRITE_LINE_MEMBER( ticket_dispenser_device::motor_w )
void ticket_dispenser_device::device_start()
{
- m_motoron = (m_motor_sense == TICKET_MOTOR_ACTIVE_HIGH);
- m_ticketdispensed = (m_status_sense == TICKET_STATUS_ACTIVE_HIGH);
- m_ticketnotdispensed = !m_ticketdispensed;
-
- m_timer = timer_alloc();
+ m_timer = timer_alloc(FUNC(ticket_dispenser_device::update_output_state), this);
m_output.resolve();
@@ -150,39 +140,44 @@ void ticket_dispenser_device::device_start()
void ticket_dispenser_device::device_reset()
{
- m_status = m_ticketnotdispensed;
+ m_status = false;
m_power = false;
}
//-------------------------------------------------
-// device_timer - handle timer callbacks
+// update_output_state -
//-------------------------------------------------
-void ticket_dispenser_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(ticket_dispenser_device::update_output_state)
{
// if we still have power, keep toggling ticket states
if (m_power)
{
m_status = !m_status;
- LOG(("Ticket Status Changed to %02X\n", m_status));
+ LOG("Ticket Status Changed to %02X\n", m_status);
m_timer->adjust(m_period);
}
else if (m_hopper_type)
{
m_status = !m_status;
- LOG(("%s: Ticket Power Off\n", machine().describe_context()));
+ LOG("%s: Ticket Power Off\n", machine().describe_context());
m_timer->adjust(attotime::never);
m_output = 0;
}
// update output status
- m_output = m_status == m_ticketdispensed;
+ m_output = m_status;
+
+ if (m_hopper_type)
+ {
+ m_dispense_handler(m_status);
+ }
// if we just dispensed, increment global count
- if (m_status == m_ticketdispensed)
+ if (m_status)
{
machine().bookkeeping().increment_dispensed_tickets(1);
- LOG(("Ticket Dispensed\n"));
+ LOG("Ticket Dispensed\n");
}
}