diff options
Diffstat (limited to 'src/devices/machine/74153.h')
-rw-r--r-- | src/devices/machine/74153.h | 128 |
1 files changed, 67 insertions, 61 deletions
diff --git a/src/devices/machine/74153.h b/src/devices/machine/74153.h index 77194610742..aa8a5c22115 100644 --- a/src/devices/machine/74153.h +++ b/src/devices/machine/74153.h @@ -1,65 +1,77 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/***************************************************************************** +// license: BSD-3-Clause +// copyright-holders: Dirk Best +/*************************************************************************** - 74153 Dual 4-line to 1-line data selectors/multiplexers + SN54/74153 + Dual 4-Input Multiplexer - Pin layout and functions to access pins: + ___ ___ + EA/1G 1 |* u | 16 VCC + S1/B 2 | | 15 EB/2G + I3A/1C3 3 | | 14 S0/A + I2A/1C2 4 | | 13 I3B/2C3 + I1A/1C1 5 | | 12 I2B/2C2 + I0A/1C0 6 | | 11 I1B/2C1 + ZA/1Y 7 | | 10 I0B/2C0 + GND 8 |_______| 9 ZB/2Y - enable_w(0) [1] /1G VCC [16] - b_w [2] B /2G [15] enable_w(1) - input_line_w(0,3) [3] 1C3 A [14] a_w - input_line_w(0,2) [4] 1C2 2C3 [13] input_line_w(1,3) - input_line_w(0,1) [5] 1C1 2C2 [12] input_line_w(1,2) - input_line_w(0,0) [6] 1C0 2C1 [11] input_line_w(1,1) - output_r(0) [7] 1Y 2C0 [10] input_line_w(1,0) - [8] GND 2Y [9] output_r(1) +***************************************************************************/ +#pragma once - Truth table (all logic levels indicate the actual voltage on the line): +#ifndef MAME_DEVICES_MACHINE_74153_H +#define MAME_DEVICES_MACHINE_74153_H - INPUTS | OUTPUT - | - G | B A | C0 C1 C2 C3 | Y - --+------+-------------+--- - H | X X | X X X X | L - L | L L | X X X X | C0 - L | L H | X X X X | C1 - L | H L | X X X X | C2 - L | H H | X X X X | C3 - --+------+-------------+--- - L = lo (0) - H = hi (1) - X = any state +#include "emu.h" -*****************************************************************************/ -#ifndef TTL74153_H -#define TTL74153_H +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** +#define MCFG_TTL153_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, TTL153, 0) -typedef device_delegate<void (void)> ttl74153_output_delegate; +#define MCFG_TTL153_ZA_CB(_devcb) \ + devcb = &ttl153_device::set_za_callback(*device, DEVCB_##_devcb); -#define TTL74153_OUTPUT_CB(_name) void _name(void) +#define MCFG_TTL153_ZB_CB(_devcb) \ + devcb = &ttl153_device::set_zb_callback(*device, DEVCB_##_devcb); -class ttl74153_device : public device_t +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class ttl153_device : public device_t { public: - ttl74153_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - ~ttl74153_device() {} + // construction/destruction + ttl153_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // configuration + template<class _Object> static devcb_base &set_za_callback(device_t &device, _Object object) + { return downcast<ttl153_device &>(device).m_za_cb.set_callback(object); } + + template<class _Object> static devcb_base &set_zb_callback(device_t &device, _Object object) + { return downcast<ttl153_device &>(device).m_zb_cb.set_callback(object); } - static void set_output_callback(device_t &device, ttl74153_output_delegate callback) { downcast<ttl74153_device &>(device).m_output_cb = callback; } + // select + DECLARE_WRITE_LINE_MEMBER(s0_w); + DECLARE_WRITE_LINE_MEMBER(s1_w); - /* must call update() after setting the inputs */ - void update(); + // input a + DECLARE_WRITE_LINE_MEMBER(i0a_w); + DECLARE_WRITE_LINE_MEMBER(i1a_w); + DECLARE_WRITE_LINE_MEMBER(i2a_w); + DECLARE_WRITE_LINE_MEMBER(i3a_w); - void a_w(int data); - void b_w(int data); - void input_line_w(int section, int input_line, int data); - void enable_w(int section, int data); - int output_r(int section); + // input b + DECLARE_WRITE_LINE_MEMBER(i0b_w); + DECLARE_WRITE_LINE_MEMBER(i1b_w); + DECLARE_WRITE_LINE_MEMBER(i2b_w); + DECLARE_WRITE_LINE_MEMBER(i3b_w); protected: // device-level overrides @@ -67,26 +79,20 @@ protected: virtual void device_reset() override; private: - // internal state - ttl74153_output_delegate m_output_cb; + void update_a(); + void update_b(); - /* inputs */ - int m_a; /* pin 14 */ - int m_b; /* pin 2 */ - int m_input_lines[2][4]; /* pins 3-6,10-13 */ - int m_enable[2]; /* pins 1,15 */ + // callbacks + devcb_write_line m_za_cb; + devcb_write_line m_zb_cb; - /* output */ - int m_output[2]; /* pins 7,9 */ - - /* internals */ - int m_last_output[2]; + // state + bool m_s[2]; + bool m_ia[4]; + bool m_ib[4]; }; -extern const device_type TTL74153; - - -#define MCFG_74153_OUTPUT_CB(_class, _method) \ - ttl74153_device::set_output_callback(*device, ttl74153_output_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); +// device type definition +extern const device_type TTL153; -#endif +#endif // MAME_DEVICES_MACHINE_74153_H |