// license:BSD-3-Clause // copyright-holders:Ryan Holtz /***************************************************************************** 5/74174/5 Hex/Quad D Flip-Flops with Clear *****************************************************************************/ #include "emu.h" #include "74175.h" DEFINE_DEVICE_TYPE(TTL74174, ttl74174_device, "ttl74174", "54/74174 Hex D Flip-Flops with Clear") DEFINE_DEVICE_TYPE(TTL74175, ttl74175_device, "ttl74175", "54/74175 Quad D Flip-Flops with Clear") ttl741745_device::ttl741745_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_q1_func(*this) , m_q2_func(*this) , m_q3_func(*this) , m_q4_func(*this) , m_clock(0) , m_clear(0) , m_d1(0) , m_d2(0) , m_d3(0) , m_d4(0) , m_q1(0) , m_q2(0) , m_q3(0) , m_q4(0) { } ttl74174_device::ttl74174_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : ttl741745_device(mconfig, TTL74174, tag, owner, clock) , m_q5_func(*this) , m_q6_func(*this) , m_d5(0) , m_d6(0) , m_q5(0) , m_q6(0) { } ttl74175_device::ttl74175_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : ttl741745_device(mconfig, TTL74175, tag, owner, clock) , m_not_q1_func(*this) , m_not_q2_func(*this) , m_not_q3_func(*this) , m_not_q4_func(*this) { } void ttl741745_device::device_start() { save_item(NAME(m_d1)); save_item(NAME(m_d2)); save_item(NAME(m_d3)); save_item(NAME(m_d4)); save_item(NAME(m_q1)); save_item(NAME(m_q2)); save_item(NAME(m_q3)); save_item(NAME(m_q4)); } void ttl741745_device::device_reset() { init(); } void ttl74174_device::device_start() { ttl741745_device::device_start(); save_item(NAME(m_d5)); save_item(NAME(m_d6)); save_item(NAME(m_q5)); save_item(NAME(m_q6)); } void ttl74175_device::device_start() { save_item(NAME(m_not_q1)); save_item(NAME(m_not_q2)); save_item(NAME(m_not_q3)); save_item(NAME(m_not_q4)); } void ttl741745_device::init() { m_clock = 0; m_clear = 0; m_d1 = 0; m_d2 = 0; m_d3 = 0; m_d4 = 0; m_q1 = 0; m_q2 = 0; m_q3 = 0; m_q4 = 0; } void ttl741745_device::tick() { uint8_t last_q1 = m_q1; uint8_t last_q2 = m_q2; uint8_t last_q3 = m_q3; uint8_t last_q4 = m_q4; int q1 = m_d1; int q2 = m_d2; int q3 = m_d3; int q4 = m_d4; if (m_clear) { q1 = 0; q2 = 0; q3 = 0; q4 = 0; } m_q1 = q1; m_q2 = q2; m_q3 = q3; m_q4 = q4; if (last_q1 != m_q1) m_q1_func(m_q1); if (last_q2 != m_q2) m_q2_func(m_q2); if (last_q3 != m_q3) m_q3_func(m_q3); if (last_q4 != m_q4) m_q4_func(m_q4); } void ttl741745_device::clear_w(int state) { m_clear = state; } void ttl741745_device::clock_w(int state) { uint8_t last_clock = m_clock; m_clock = state; if (m_clock != last_clock && m_clock != 0) { tick(); } } void ttl741745_device::d1_w(int state) { m_d1 = state; } void ttl741745_device::d2_w(int state) { m_d2 = state; } void ttl741745_device::d3_w(int state) { m_d3 = state; } void ttl741745_device::d4_w(int state) { m_d4 = state; } void ttl74174_device::d5_w(int state) { m_d5 = state; } void ttl74174_device::d6_w(int state) { m_d6 = state; } void ttl74174_device::init() { ttl741745_device::init(); m_d5 = 0; m_d6 = 0; m_q5 = 0; m_q6 = 0; } void ttl74174_device::tick() { ttl741745_device::tick(); uint8_t last_q5 = m_q5; uint8_t last_q6 = m_q6; int q5 = m_d5; int q6 = m_d6; if (m_clear) { q5 = 0; q6 = 0; } m_q5 = q5; m_q6 = q6; if (last_q5 != m_q5) m_q5_func(m_q5); if (last_q6 != m_q6) m_q6_func(m_q6); } void ttl74175_device::tick() { uint8_t last_q1 = m_q1; uint8_t last_q2 = m_q2; uint8_t last_q3 = m_q3; uint8_t last_q4 = m_q4; ttl741745_device::tick(); if (last_q1 != m_q1) m_not_q1_func(m_q1 ^ 1); if (last_q2 != m_q1) m_not_q2_func(m_q2 ^ 1); if (last_q3 != m_q1) m_not_q3_func(m_q3 ^ 1); if (last_q4 != m_q1) m_not_q4_func(m_q4 ^ 1); }