Previous 199869 Revisions Next

r29220 Thursday 3rd April, 2014 at 16:27:32 UTC by Osso
i8355_device: converted to devcb2 (nw)
[src/emu/machine]i8355.c i8355.h
[src/mess/drivers]exp85.c

trunk/src/emu/machine/i8355.c
r29219r29220
6565
6666   if (m_ddr[port] != 0xff)
6767   {
68      data |= m_in_port_func[port](0) & ~m_ddr[port];
68      if (port == 0) {data |= m_in_pa_cb(0) & ~m_ddr[port];}
69      else { data |= m_in_pb_cb(0) & ~m_ddr[port];}
6970   }
7071
7172   return data;
r29219r29220
8081{
8182   m_output[port] = data;
8283
83   m_out_port_func[port](0, m_output[port] & m_ddr[port]);
84   if (port == 0) {m_out_pa_cb((offs_t)0, m_output[port] & m_ddr[port]);}
85   else {m_out_pb_cb((offs_t)0, m_output[port] & m_ddr[port]);}
8486}
8587
8688
r29219r29220
9698i8355_device::i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
9799   : device_t(mconfig, I8355, "Intel 8355", tag, owner, clock, "i8355", __FILE__),
98100      device_memory_interface(mconfig, *this),
101      m_in_pa_cb(*this),
102      m_out_pa_cb(*this),
103      m_in_pb_cb(*this),
104      m_out_pb_cb(*this),
99105      m_space_config("ram", ENDIANNESS_LITTLE, 8, 11, 0, NULL, *ADDRESS_MAP_NAME(i8355))
100106{
101107}
102108
103
104109//-------------------------------------------------
105//  device_config_complete - perform any
106//  operations now that the configuration is
107//  complete
108//-------------------------------------------------
109
110void i8355_device::device_config_complete()
111{
112   // inherit a copy of the static data
113   const i8355_interface *intf = reinterpret_cast<const i8355_interface *>(static_config());
114   if (intf != NULL)
115      *static_cast<i8355_interface *>(this) = *intf;
116
117   // or initialize to defaults if none provided
118   else
119   {
120      memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
121      memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
122      memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
123      memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
124   }
125}
126
127
128//-------------------------------------------------
129110//  device_start - device-specific startup
130111//-------------------------------------------------
131112
132113void i8355_device::device_start()
133114{
134115   // resolve callbacks
135   m_in_port_func[0].resolve(m_in_pa_cb, *this);
136   m_in_port_func[1].resolve(m_in_pb_cb, *this);
137   m_out_port_func[0].resolve(m_out_pa_cb, *this);
138   m_out_port_func[1].resolve(m_out_pb_cb, *this);
116   m_in_pa_cb.resolve_safe(0);
117   m_in_pb_cb.resolve_safe(0);
118   m_out_pa_cb.resolve_safe();
119   m_out_pb_cb.resolve_safe();
139120
140121   // register for state saving
141122   save_item(NAME(m_output));
trunk/src/emu/machine/i8355.h
r29219r29220
5252//  INTERFACE CONFIGURATION MACROS
5353///*************************************************************************
5454
55#define MCFG_I8355_ADD(_tag, _clock, _config) \
56   MCFG_DEVICE_ADD((_tag), I8355, _clock)  \
57   MCFG_DEVICE_CONFIG(_config)
55#define MCFG_I8355_IN_PA_CB(_devcb) \
56   devcb = &i8355_device::set_in_pa_callback(*device, DEVCB2_##_devcb);
5857
59#define I8355_INTERFACE(name) \
60   const i8355_interface (name) =
58#define MCFG_I8355_OUT_PA_CB(_devcb) \
59   devcb = &i8355_device::set_out_pa_callback(*device, DEVCB2_##_devcb);
60   
61#define MCFG_I8355_IN_PB_CB(_devcb) \
62   devcb = &i8355_device::set_in_pb_callback(*device, DEVCB2_##_devcb);
63   
64#define MCFG_I8355_OUT_PB_CB(_devcb) \
65   devcb = &i8355_device::set_out_pb_callback(*device, DEVCB2_##_devcb);
66   
6167
62
63
6468///*************************************************************************
6569//  TYPE DEFINITIONS
6670///*************************************************************************
6771
68// ======================> i8355_interface
69
70struct i8355_interface
71{
72   devcb_read8             m_in_pa_cb;
73   devcb_write8            m_out_pa_cb;
74
75   devcb_read8             m_in_pb_cb;
76   devcb_write8            m_out_pb_cb;
77};
78
79
80
8172// ======================> i8355_device
8273
8374class i8355_device :    public device_t,
84                  public device_memory_interface,
85                  public i8355_interface
75                  public device_memory_interface
8676{
8777public:
8878   // construction/destruction
8979   i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
9080
81   template<class _Object> static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<i8355_device &>(device).m_in_pa_cb.set_callback(object); }
82   template<class _Object> static devcb2_base &set_out_pa_callback(device_t &device, _Object object) { return downcast<i8355_device &>(device).m_out_pa_cb.set_callback(object); }
83   template<class _Object> static devcb2_base &set_in_pb_callback(device_t &device, _Object object) { return downcast<i8355_device &>(device).m_in_pb_cb.set_callback(object); }
84   template<class _Object> static devcb2_base &set_out_pb_callback(device_t &device, _Object object) { return downcast<i8355_device &>(device).m_out_pb_cb.set_callback(object); }
85   
9186   DECLARE_READ8_MEMBER( io_r );
9287   DECLARE_WRITE8_MEMBER( io_w );
9388
r29219r29220
9691
9792protected:
9893   // device-level overrides
99   virtual void device_config_complete();
10094   virtual void device_start();
10195   virtual void device_reset();
10296
r29219r29220
107101   inline void write_port(int port, UINT8 data);
108102
109103private:
110   devcb_resolved_read8        m_in_port_func[2];
111   devcb_resolved_write8       m_out_port_func[2];
104   devcb2_read8             m_in_pa_cb;
105   devcb2_write8            m_out_pa_cb;
112106
107   devcb2_read8             m_in_pb_cb;
108   devcb2_write8            m_out_pb_cb;
109
113110   // registers
114111   UINT8 m_output[2];          // output latches
115112   UINT8 m_ddr[2];             // DDR latches
trunk/src/mess/drivers/exp85.c
r29219r29220
131131   m_speaker->level_w(!BIT(data, 7));
132132}
133133
134static I8355_INTERFACE( i8355_intf )
135{
136   DEVCB_DRIVER_MEMBER(exp85_state, i8355_a_r),
137   DEVCB_DRIVER_MEMBER(exp85_state, i8355_a_w),
138   DEVCB_NULL,
139   DEVCB_NULL
140};
141
142134/* I8085A Interface */
143135
144136READ_LINE_MEMBER( exp85_state::sid_r )
r29219r29220
220212
221213   /* devices */
222214   MCFG_I8155_ADD(I8155_TAG, XTAL_6_144MHz/2, i8155_intf)
223   MCFG_I8355_ADD(I8355_TAG, XTAL_6_144MHz/2, i8355_intf)
215   MCFG_DEVICE_ADD(I8355_TAG, I8355, XTAL_6_144MHz/2)
216   MCFG_I8355_IN_PA_CB(READ8(exp85_state, i8355_a_r))
217   MCFG_I8355_OUT_PA_CB(WRITE8(exp85_state, i8355_a_w))
224218   MCFG_CASSETTE_ADD("cassette", exp85_cassette_interface)
225219
226220   MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")

Previous 199869 Revisions Next


© 1997-2024 The MAME Team