Previous 199869 Revisions Next

r29498 Wednesday 9th April, 2014 at 17:08:24 UTC by Osso
wd11c00_17_device: converted to devcb2 (nw)
[src/emu/bus/isa]wdxt_gen.c
[src/emu/machine]wd11c00_17.c wd11c00_17.h

trunk/src/emu/bus/isa/wdxt_gen.c
r29497r29498
140140   m_ram[offset] = data;
141141}
142142
143static WD11C00_17_INTERFACE( host_intf )
144{
145   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, irq5_w),
146   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, drq3_w),
147   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, mr_w),
148   DEVCB_NULL,
149   DEVCB_NULL,
150   DEVCB_CPU_INPUT_LINE(WD1015_TAG, MCS48_INPUT_IRQ),
151   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, rd322_r),
152   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, ram_r),
153   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, wdxt_gen_device, ram_w),
154   DEVCB_DEVICE_MEMBER(WD2010A_TAG, wd2010_device, read),
155   DEVCB_DEVICE_MEMBER(WD2010A_TAG, wd2010_device, write)
156};
157
158
159143//-------------------------------------------------
160144//  MACHINE_DRIVER( wdxt_gen )
161145//-------------------------------------------------
r29497r29498
164148   MCFG_CPU_ADD(WD1015_TAG, I8049, 5000000)
165149   MCFG_CPU_IO_MAP(wd1015_io)
166150
167   MCFG_WD11C00_17_ADD(WD11C00_17_TAG, 5000000, host_intf)
151   MCFG_DEVICE_ADD(WD11C00_17_TAG, WD11C00_17, 5000000)
152   MCFG_WD11C00_17_OUT_IRQ5_CB(WRITELINE(wdxt_gen_device, irq5_w))
153   MCFG_WD11C00_17_OUT_DRQ3_CB(WRITELINE(wdxt_gen_device, drq3_w))
154   MCFG_WD11C00_17_OUT_MR_CB(WRITELINE(wdxt_gen_device, mr_w))
155   MCFG_WD11C00_17_OUT_RA3_CB(INPUTLINE(WD1015_TAG, MCS48_INPUT_IRQ))
156   MCFG_WD11C00_17_IN_RD322_CB(READ8(wdxt_gen_device, rd322_r))
157   MCFG_WD11C00_17_IN_RAMCS_CB(READ8(wdxt_gen_device, ram_r))
158   MCFG_WD11C00_17_OUT_RAMWR_CB(WRITE8(wdxt_gen_device, ram_w))
159   MCFG_WD11C00_17_IN_CS1010_CB(DEVREAD8(WD2010A_TAG, wd2010_device, read))
160   MCFG_WD11C00_17_OUT_CS1010_CB(DEVWRITE8(WD2010A_TAG, wd2010_device, write))
168161   MCFG_DEVICE_ADD(WD2010A_TAG, WD2010, 5000000)
169162   MCFG_WD2010_OUT_BCR_CB(DEVWRITELINE(WD11C00_17_TAG, wd11c00_17_device, clct_w))
170163   MCFG_WD2010_IN_BCS_CB(DEVREAD8(WD11C00_17_TAG, wd11c00_17_device, read))
trunk/src/emu/machine/wd11c00_17.c
r29497r29498
4242const device_type WD11C00_17 = &device_creator<wd11c00_17_device>;
4343
4444
45//-------------------------------------------------
46//  device_config_complete - perform any
47//  operations now that the configuration is
48//  complete
49//-------------------------------------------------
50
51void wd11c00_17_device::device_config_complete()
52{
53   // inherit a copy of the static data
54   const wd11c00_17_interface *intf = reinterpret_cast<const wd11c00_17_interface *>(static_config());
55   if (intf != NULL)
56      *static_cast<wd11c00_17_interface *>(this) = *intf;
57
58   // or initialize to defaults if none provided
59   else
60   {
61      memset(&m_out_irq5_cb, 0, sizeof(m_out_irq5_cb));
62      memset(&m_out_drq3_cb, 0, sizeof(m_out_drq3_cb));
63      memset(&m_out_mr_cb, 0, sizeof(m_out_mr_cb));
64      memset(&m_out_busy_cb, 0, sizeof(m_out_busy_cb));
65      memset(&m_out_req_cb, 0, sizeof(m_out_req_cb));
66      memset(&m_out_ra3_cb, 0, sizeof(m_out_ra3_cb));
67      memset(&m_in_rd322_cb, 0, sizeof(m_in_rd322_cb));
68      memset(&m_in_ramcs_cb, 0, sizeof(m_in_ramcs_cb));
69      memset(&m_out_ramwr_cb, 0, sizeof(m_out_ramwr_cb));
70      memset(&m_in_cs1010_cb, 0, sizeof(m_in_cs1010_cb));
71      memset(&m_out_cs1010_cb, 0, sizeof(m_out_cs1010_cb));
72   }
73}
74
75
76
7745//**************************************************************************
7846//  INLINE HELPERS
7947//**************************************************************************
r29497r29498
9361
9462   if (m_ra3 != ra3)
9563   {
96      m_out_ra3_func(ra3 ? ASSERT_LINE : CLEAR_LINE);
64      m_out_ra3_cb(ra3 ? ASSERT_LINE : CLEAR_LINE);
9765      m_ra3 = ra3;
9866   }
9967
r29497r29498
10169
10270   if (m_irq5 != irq5)
10371   {
104      m_out_irq5_func(irq5);
72      m_out_irq5_cb(irq5);
10573      m_irq5 = irq5;
10674   }
10775
r29497r29498
10977
11078   if (m_drq3 != drq3)
11179   {
112      m_out_drq3_func(drq3);
80      m_out_drq3_cb(drq3);
11381      m_drq3 = drq3;
11482   }
11583
r29497r29498
11785
11886   if (m_busy != busy)
11987   {
120      m_out_busy_func(busy);
88      m_out_busy_cb(busy);
12189      m_busy = busy;
12290   }
12391
r29497r29498
12593
12694   if (m_req != req)
12795   {
128      m_out_req_func(req);
96      m_out_req_cb(req);
12997      m_req = req;
13098   }
13199}
r29497r29498
152120
153121   if (m_status & STATUS_BUSY)
154122   {
155      data = m_in_ramcs_func(m_ra & 0x7ff);
123      data = m_in_ramcs_cb(m_ra & 0x7ff);
156124
157125      increment_address();
158126   }
r29497r29498
169137{
170138   if (m_status & STATUS_BUSY)
171139   {
172      m_out_ramwr_func(m_ra & 0x7ff, data);
140      m_out_ramwr_cb(m_ra & 0x7ff, data);
173141
174142      increment_address();
175143   }
r29497r29498
182150
183151inline void wd11c00_17_device::software_reset()
184152{
185   m_out_mr_func(ASSERT_LINE);
186   m_out_mr_func(CLEAR_LINE);
153   m_out_mr_cb(ASSERT_LINE);
154   m_out_mr_cb(CLEAR_LINE);
187155
188156   device_reset();
189157}
r29497r29498
212180
213181wd11c00_17_device::wd11c00_17_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
214182   : device_t(mconfig, WD11C00_17, "Western Digital WD11C00-17", tag, owner, clock, "wd11c00_17", __FILE__),
183      m_out_irq5_cb(*this),
184      m_out_drq3_cb(*this),
185      m_out_mr_cb(*this),
186      m_out_busy_cb(*this),
187      m_out_req_cb(*this),
188      m_out_ra3_cb(*this),
189      m_in_rd322_cb(*this),
190      m_in_ramcs_cb(*this),
191      m_out_ramwr_cb(*this),
192      m_in_cs1010_cb(*this),
193      m_out_cs1010_cb(*this),
215194      m_status(0),
216195      m_ra(0),
217196      m_irq5(CLEAR_LINE),
r29497r29498
230209void wd11c00_17_device::device_start()
231210{
232211   // resolve callbacks
233   m_out_irq5_func.resolve(m_out_irq5_cb, *this);
234   m_out_drq3_func.resolve(m_out_drq3_cb, *this);
235   m_out_mr_func.resolve(m_out_mr_cb, *this);
236   m_out_busy_func.resolve(m_out_busy_cb, *this);
237   m_out_req_func.resolve(m_out_req_cb, *this);
238   m_out_ra3_func.resolve(m_out_ra3_cb, *this);
239   m_in_rd322_func.resolve(m_in_rd322_cb, *this);
240   m_in_ramcs_func.resolve(m_in_ramcs_cb, *this);
241   m_out_ramwr_func.resolve(m_out_ramwr_cb, *this);
242   m_in_cs1010_func.resolve(m_in_cs1010_cb, *this);
243   m_out_cs1010_func.resolve(m_out_cs1010_cb, *this);
212   m_out_irq5_cb.resolve_safe();
213   m_out_drq3_cb.resolve_safe();
214   m_out_mr_cb.resolve_safe();
215   m_out_busy_cb.resolve_safe();
216   m_out_req_cb.resolve_safe();
217   m_out_ra3_cb.resolve_safe();
218   m_in_rd322_cb.resolve_safe(0);
219   m_in_ramcs_cb.resolve_safe(0);
220   m_out_ramwr_cb.resolve_safe();
221   m_in_cs1010_cb.resolve_safe(0);
222   m_out_cs1010_cb.resolve_safe();
244223}
245224
246225
r29497r29498
280259      break;
281260
282261   case 2: // Read Drive Configuration Information
283      data = m_in_rd322_func(0);
262      data = m_in_rd322_cb(0);
284263      break;
285264
286265   case 3: // Not Used
r29497r29498
361340      break;
362341
363342   case 0x20:
364      data = m_in_cs1010_func(m_ra >> 8);
343      data = m_in_cs1010_cb(m_ra >> 8);
365344      break;
366345   }
367346
r29497r29498
384363      break;
385364
386365   case 0x20:
387      m_out_cs1010_func(m_ra >> 8, data);
366      m_out_cs1010_cb(m_ra >> 8, data);
388367      break;
389368
390369   case 0x60:
trunk/src/emu/machine/wd11c00_17.h
r29497r29498
2323//  INTERFACE CONFIGURATION MACROS
2424//**************************************************************************
2525
26#define MCFG_WD11C00_17_ADD(_tag, _clock, _config) \
27   MCFG_DEVICE_ADD(_tag, WD11C00_17, _clock) \
28   MCFG_DEVICE_CONFIG(_config)
26#define MCFG_WD11C00_17_OUT_IRQ5_CB(_devcb) \
27   devcb = &wd11c00_17_device::set_out_irq5_callback(*device, DEVCB2_##_devcb);
2928
29#define MCFG_WD11C00_17_OUT_DRQ3_CB(_devcb) \
30   devcb = &wd11c00_17_device::set_out_drq3_callback(*device, DEVCB2_##_devcb);
3031
31#define WD11C00_17_INTERFACE(_name) \
32   const wd11c00_17_interface (_name) =
32#define MCFG_WD11C00_17_OUT_MR_CB(_devcb) \
33   devcb = &wd11c00_17_device::set_out_mr_callback(*device, DEVCB2_##_devcb);
3334
35#define MCFG_WD11C00_17_OUT_BUSY_CB(_devcb) \
36   devcb = &wd11c00_17_device::set_out_busy_callback(*device, DEVCB2_##_devcb);
3437
38#define MCFG_WD11C00_17_OUT_REQ_CB(_devcb) \
39   devcb = &wd11c00_17_device::set_out_req_callback(*device, DEVCB2_##_devcb);
3540
41#define MCFG_WD11C00_17_OUT_RA3_CB(_devcb) \
42   devcb = &wd11c00_17_device::set_out_ra3_callback(*device, DEVCB2_##_devcb);
43
44#define MCFG_WD11C00_17_IN_RD322_CB(_devcb) \
45   devcb = &wd11c00_17_device::set_in_rd322_callback(*device, DEVCB2_##_devcb);
46
47#define MCFG_WD11C00_17_IN_RAMCS_CB(_devcb) \
48   devcb = &wd11c00_17_device::set_in_ramcs_callback(*device, DEVCB2_##_devcb);
49
50#define MCFG_WD11C00_17_OUT_RAMWR_CB(_devcb) \
51   devcb = &wd11c00_17_device::set_out_ramwr_callback(*device, DEVCB2_##_devcb);
52
53#define MCFG_WD11C00_17_IN_CS1010_CB(_devcb) \
54   devcb = &wd11c00_17_device::set_in_cs1010_callback(*device, DEVCB2_##_devcb);
55
56#define MCFG_WD11C00_17_OUT_CS1010_CB(_devcb) \
57   devcb = &wd11c00_17_device::set_out_cs1010_callback(*device, DEVCB2_##_devcb);
58
3659//**************************************************************************
3760//  TYPE DEFINITIONS
3861//**************************************************************************
3962
40// ======================> wd11c00_17_interface
41
42struct wd11c00_17_interface
43{
44   devcb_write_line    m_out_irq5_cb;
45   devcb_write_line    m_out_drq3_cb;
46   devcb_write_line    m_out_mr_cb;
47   devcb_write_line    m_out_busy_cb;
48   devcb_write_line    m_out_req_cb;
49   devcb_write_line    m_out_ra3_cb;
50   devcb_read8         m_in_rd322_cb;
51   devcb_read8         m_in_ramcs_cb;
52   devcb_write8        m_out_ramwr_cb;
53   devcb_read8         m_in_cs1010_cb;
54   devcb_write8        m_out_cs1010_cb;
55};
56
57
5863// ======================> wd11c00_17_device
5964
60class wd11c00_17_device :   public device_t,
61                     public wd11c00_17_interface
65class wd11c00_17_device :   public device_t
6266{
6367public:
6468   // construction/destruction
6569   wd11c00_17_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6670
71   template<class _Object> static devcb2_base &set_out_irq5_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_irq5_cb.set_callback(object); }
72   template<class _Object> static devcb2_base &set_out_drq3_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_drq3_cb.set_callback(object); }
73   template<class _Object> static devcb2_base &set_out_mr_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_mr_cb.set_callback(object); }
74   template<class _Object> static devcb2_base &set_out_busy_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_busy_cb.set_callback(object); }
75   template<class _Object> static devcb2_base &set_out_req_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_req_cb.set_callback(object); }
76   template<class _Object> static devcb2_base &set_out_ra3_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_ra3_cb.set_callback(object); }
77   template<class _Object> static devcb2_base &set_in_rd322_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_in_rd322_cb.set_callback(object); }
78   template<class _Object> static devcb2_base &set_in_ramcs_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_in_ramcs_cb.set_callback(object); }
79   template<class _Object> static devcb2_base &set_out_ramwr_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_ramwr_cb.set_callback(object); }
80   template<class _Object> static devcb2_base &set_in_cs1010_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_in_cs1010_cb.set_callback(object); }
81   template<class _Object> static devcb2_base &set_out_cs1010_callback(device_t &device, _Object object) { return downcast<wd11c00_17_device &>(device).m_out_cs1010_cb.set_callback(object); }
82   
6783   DECLARE_READ8_MEMBER( io_r );
6884   DECLARE_WRITE8_MEMBER( io_w );
6985
r29497r29498
86102   // device-level overrides
87103   virtual void device_start();
88104   virtual void device_reset();
89   virtual void device_config_complete();
90105
91106private:
92107   inline void check_interrupt();
r29497r29498
96111   inline void software_reset();
97112   inline void select();
98113
99   devcb_resolved_write_line   m_out_irq5_func;
100   devcb_resolved_write_line   m_out_drq3_func;
101   devcb_resolved_write_line   m_out_mr_func;
102   devcb_resolved_write_line   m_out_busy_func;
103   devcb_resolved_write_line   m_out_req_func;
104   devcb_resolved_write_line   m_out_ra3_func;
105   devcb_resolved_read8        m_in_rd322_func;
106   devcb_resolved_read8        m_in_ramcs_func;
107   devcb_resolved_write8       m_out_ramwr_func;
108   devcb_resolved_read8        m_in_cs1010_func;
109   devcb_resolved_write8       m_out_cs1010_func;
114   devcb2_write_line    m_out_irq5_cb;
115   devcb2_write_line    m_out_drq3_cb;
116   devcb2_write_line    m_out_mr_cb;
117   devcb2_write_line    m_out_busy_cb;
118   devcb2_write_line    m_out_req_cb;
119   devcb2_write_line    m_out_ra3_cb;
120   devcb2_read8         m_in_rd322_cb;
121   devcb2_read8         m_in_ramcs_cb;
122   devcb2_write8        m_out_ramwr_cb;
123   devcb2_read8         m_in_cs1010_cb;
124   devcb2_write8        m_out_cs1010_cb;
110125
111126   UINT8 m_status;
112127   UINT8 m_mask;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team