summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/74153.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/74153.h')
-rw-r--r--src/devices/machine/74153.h128
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