diff options
Diffstat (limited to 'src/devices/machine/ticket.cpp')
-rw-r--r-- | src/devices/machine/ticket.cpp | 77 |
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"); } } |