Previous 199869 Revisions Next

r29639 Monday 14th April, 2014 at 17:11:41 UTC by Osso
tpi6525_device: converted to devcb2 (nw)
[src/emu/bus/c64]ieee488.c magic_voice.c
[src/emu/bus/plus4]c1551.c
[src/emu/machine]6525tpi.c 6525tpi.h
[src/mess/drivers]amiga.c cbm2.c

trunk/src/emu/machine/6525tpi.c
r29638r29639
106106
107107tpi6525_device::tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
108108   : device_t(mconfig, TPI6525, "6525 TPI", tag, owner, clock, "tpi6525", __FILE__),
109   m_out_irq_cb(*this),
110   m_in_pa_cb(*this),
111   m_out_pa_cb(*this),
112   m_in_pb_cb(*this),
113   m_out_pb_cb(*this),
114   m_in_pc_cb(*this),
115   m_out_pc_cb(*this),
116   m_out_ca_cb(*this),
117   m_out_cb_cb(*this),
109118   m_port_a(0),
110119   m_ddr_a(0),
111120   m_in_a(0),
r29638r29639
128137}
129138
130139//-------------------------------------------------
131//  device_config_complete - perform any
132//  operations now that the configuration is
133//  complete
134//-------------------------------------------------
135
136void tpi6525_device::device_config_complete()
137{
138   // inherit a copy of the static data
139   const tpi6525_interface *intf = reinterpret_cast<const tpi6525_interface *>(static_config());
140   if (intf != NULL)
141      *static_cast<tpi6525_interface *>(this) = *intf;
142
143   // or initialize to defaults if none provided
144   else
145   {
146      memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
147      memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
148      memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
149      memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
150      memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
151      memset(&m_in_pc_cb, 0, sizeof(m_in_pc_cb));
152      memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
153      memset(&m_out_ca_cb, 0, sizeof(m_out_ca_cb));
154      memset(&m_out_cb_cb, 0, sizeof(m_out_cb_cb));
155   }
156}
157
158//-------------------------------------------------
159140//  device_start - device-specific startup
160141//-------------------------------------------------
161142
162143void tpi6525_device::device_start()
163144{
164145   // resolve callbacks
165   m_out_irq_func.resolve(m_out_irq_cb, *this);
166   m_in_pa_func.resolve(m_in_pa_cb, *this);
167   m_out_pa_func.resolve(m_out_pa_cb, *this);
168   m_in_pb_func.resolve(m_in_pb_cb, *this);
169   m_out_pb_func.resolve(m_out_pb_cb, *this);
170   m_in_pc_func.resolve(m_in_pc_cb, *this);
171   m_out_pc_func.resolve(m_out_pc_cb, *this);
172   m_out_ca_func.resolve(m_out_ca_cb, *this);
173   m_out_cb_func.resolve(m_out_cb_cb, *this);
146   m_out_irq_cb.resolve_safe();
147   m_in_pa_cb.resolve();
148   m_out_pa_cb.resolve_safe();
149   m_in_pb_cb.resolve();
150   m_out_pb_cb.resolve_safe();
151   m_in_pc_cb.resolve();
152   m_out_pc_cb.resolve_safe();
153   m_out_ca_cb.resolve_safe();
154   m_out_cb_cb.resolve_safe();
174155
175156   /* register for state saving */
176157   save_item(NAME(m_port_a));
r29638r29639
215196
216197      DBG_LOG(machine(), 3, "tpi6525", ("%s set interrupt\n", tag()));
217198
218      m_out_irq_func(m_interrupt_level);
199      m_out_irq_cb(m_interrupt_level);
219200   }
220201}
221202
r29638r29639
228209
229210      DBG_LOG(machine(), 3, "tpi6525", ("%s clear interrupt\n", tag()));
230211
231      m_out_irq_func(m_interrupt_level);
212      m_out_irq_cb(m_interrupt_level);
232213   }
233214}
234215
r29638r29639
315296{
316297   UINT8 data = m_in_a;
317298
318   if (!m_in_pa_func.isnull())
319      data = m_in_pa_func(offset);
299   if (!m_in_pa_cb.isnull())
300      data = m_in_pa_cb(offset);
320301
321302   data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a);
322303
r29638r29639
334315{
335316   UINT8 data = m_in_b;
336317
337   if (!m_in_pb_func.isnull())
338      data = m_in_pb_func(offset);
318   if (!m_in_pb_cb.isnull())
319      data = m_in_pb_cb(offset);
339320
340321   data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b);
341322
r29638r29639
353334{
354335   UINT8 data = m_in_c;
355336
356   if (!m_in_pc_func.isnull())
357      data &= m_in_pc_func(offset);
337   if (!m_in_pc_cb.isnull())
338      data &= m_in_pc_cb(offset);
358339
359340   data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c);
360341
r29638r29639
377358   case 0:
378359      data = m_in_a;
379360
380      if (!m_in_pa_func.isnull())
381         data &= m_in_pa_func(0);
361      if (!m_in_pa_cb.isnull())
362         data &= m_in_pa_cb(0);
382363
383364      data = (data & ~m_ddr_a) | (m_ddr_a & m_port_a);
384365
r29638r29639
387368   case 1:
388369      data = m_in_b;
389370
390      if (!m_in_pb_func.isnull())
391         data &= m_in_pb_func(0);
371      if (!m_in_pb_cb.isnull())
372         data &= m_in_pb_cb(0);
392373
393374      data = (data & ~m_ddr_b) | (m_ddr_b & m_port_b);
394375
r29638r29639
412393      {
413394         data = m_in_c;
414395
415         if (!m_in_pc_func.isnull())
416            data &= m_in_pc_func(0);
396         if (!m_in_pc_cb.isnull())
397            data &= m_in_pc_cb(0);
417398
418399         data = (data & ~m_ddr_c) | (m_ddr_c & m_port_c);
419400      }
r29638r29639
491472   {
492473   case 0:
493474      m_port_a = data;
494      m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
475      m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
495476      break;
496477
497478   case 1:
498479      m_port_b = data;
499      m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
480      m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
500481      break;
501482
502483   case 2:
503484      m_port_c = data;
504485
505486      if (!INTERRUPT_MODE)
506         m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
487         m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
507488      break;
508489
509490   case 3:
510491      m_ddr_a = data;
511      m_out_pa_func(0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
492      m_out_pa_cb((offs_t)0, (m_port_a & m_ddr_a) | (m_ddr_a ^ 0xff));
512493      break;
513494
514495   case 4:
515496      m_ddr_b = data;
516      m_out_pb_func(0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
497      m_out_pb_cb((offs_t)0, (m_port_b & m_ddr_b) | (m_ddr_b ^ 0xff));
517498      break;
518499
519500   case 5:
520501      m_ddr_c = data;
521502
522503      if (!INTERRUPT_MODE)
523         m_out_pc_func(0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
504         m_out_pc_cb((offs_t)0, (m_port_c & m_ddr_c) | (m_ddr_c ^ 0xff));
524505      break;
525506
526507   case 6:
r29638r29639
533514            if (m_ca_level != CA_MANUAL_LEVEL)
534515            {
535516               m_ca_level = CA_MANUAL_LEVEL;
536               m_out_ca_func(m_ca_level);
517               m_out_ca_cb(m_ca_level);
537518            }
538519         }
539520         if (CB_MANUAL_OUT)
r29638r29639
541522            if (m_cb_level != CB_MANUAL_LEVEL)
542523            {
543524               m_cb_level = CB_MANUAL_LEVEL;
544               m_out_cb_func(m_cb_level);
525               m_out_cb_cb(m_cb_level);
545526            }
546527         }
547528      }
trunk/src/emu/machine/6525tpi.h
r29638r29639
3131
3232
3333/***************************************************************************
34    TYPE DEFINITIONS
35***************************************************************************/
36
37struct tpi6525_interface
38{
39   devcb_write_line    m_out_irq_cb;
40
41   devcb_read8         m_in_pa_cb;
42   devcb_write8        m_out_pa_cb;
43
44   devcb_read8         m_in_pb_cb;
45   devcb_write8        m_out_pb_cb;
46
47   devcb_read8         m_in_pc_cb;
48   devcb_write8        m_out_pc_cb;
49
50   devcb_write_line    m_out_ca_cb;
51   devcb_write_line    m_out_cb_cb;
52};
53
54
55/***************************************************************************
5634    DEVICE CONFIGURATION MACROS
5735***************************************************************************/
5836
59class tpi6525_device : public device_t,
60                        public tpi6525_interface
37class tpi6525_device : public device_t
6138{
6239public:
6340   tpi6525_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6441   ~tpi6525_device() {}
6542
43   template<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_irq_cb.set_callback(object); }
44   template<class _Object> static devcb2_base &set_in_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pa_cb.set_callback(object); }
45   template<class _Object> static devcb2_base &set_out_pa_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pa_cb.set_callback(object); }
46   template<class _Object> static devcb2_base &set_in_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pb_cb.set_callback(object); }
47   template<class _Object> static devcb2_base &set_out_pb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pb_cb.set_callback(object); }
48   template<class _Object> static devcb2_base &set_in_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_in_pc_cb.set_callback(object); }
49   template<class _Object> static devcb2_base &set_out_pc_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_pc_cb.set_callback(object); }
50   template<class _Object> static devcb2_base &set_out_ca_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_ca_cb.set_callback(object); }
51   template<class _Object> static devcb2_base &set_out_cb_callback(device_t &device, _Object object) { return downcast<tpi6525_device &>(device).m_out_cb_cb.set_callback(object); }
52   
6653   DECLARE_READ8_MEMBER( read );
6754   DECLARE_WRITE8_MEMBER( write );
6855
r29638r29639
8572
8673protected:
8774   // device-level overrides
88   virtual void device_config_complete();
8975   virtual void device_start();
9076   virtual void device_reset();
9177
9278private:
9379   // internal state
94   devcb_resolved_write_line   m_out_irq_func;
95   devcb_resolved_read8        m_in_pa_func;
96   devcb_resolved_write8       m_out_pa_func;
97   devcb_resolved_read8        m_in_pb_func;
98   devcb_resolved_write8       m_out_pb_func;
99   devcb_resolved_read8        m_in_pc_func;
100   devcb_resolved_write8       m_out_pc_func;
101   devcb_resolved_write_line   m_out_ca_func;
102   devcb_resolved_write_line   m_out_cb_func;
80   devcb2_write_line    m_out_irq_cb;
10381
82   devcb2_read8         m_in_pa_cb;
83   devcb2_write8        m_out_pa_cb;
84
85   devcb2_read8         m_in_pb_cb;
86   devcb2_write8        m_out_pb_cb;
87
88   devcb2_read8         m_in_pc_cb;
89   devcb2_write8        m_out_pc_cb;
90
91   devcb2_write_line    m_out_ca_cb;
92   devcb2_write_line    m_out_cb_cb;
93
10494   UINT8 m_port_a, m_ddr_a, m_in_a;
10595   UINT8 m_port_b, m_ddr_b, m_in_b;
10696   UINT8 m_port_c, m_ddr_c, m_in_c;
r29638r29639
119109extern const device_type TPI6525;
120110
121111
122#define MCFG_TPI6525_ADD(_tag, _intrf) \
123   MCFG_DEVICE_ADD(_tag, TPI6525, 0) \
124   MCFG_DEVICE_CONFIG(_intrf)
112#define MCFG_TPI6525_OUT_IRQ_CB(_devcb) \
113   devcb = &tpi6525_device::set_out_irq_callback(*device, DEVCB2_##_devcb);
125114
115#define MCFG_TPI6525_IN_PA_CB(_devcb) \
116   devcb = &tpi6525_device::set_in_pa_callback(*device, DEVCB2_##_devcb);
126117
118#define MCFG_TPI6525_OUT_PA_CB(_devcb) \
119   devcb = &tpi6525_device::set_out_pa_callback(*device, DEVCB2_##_devcb);
127120
121#define MCFG_TPI6525_IN_PB_CB(_devcb) \
122   devcb = &tpi6525_device::set_in_pb_callback(*device, DEVCB2_##_devcb);
123
124#define MCFG_TPI6525_OUT_PB_CB(_devcb) \
125   devcb = &tpi6525_device::set_out_pb_callback(*device, DEVCB2_##_devcb);
126
127#define MCFG_TPI6525_IN_PC_CB(_devcb) \
128   devcb = &tpi6525_device::set_in_pc_callback(*device, DEVCB2_##_devcb);
129
130#define MCFG_TPI6525_OUT_PC_CB(_devcb) \
131   devcb = &tpi6525_device::set_out_pc_callback(*device, DEVCB2_##_devcb);
132
133#define MCFG_TPI6525_OUT_CA_CB(_devcb) \
134   devcb = &tpi6525_device::set_out_ca_callback(*device, DEVCB2_##_devcb);
135
136#define MCFG_TPI6525_OUT_CB_CB(_devcb) \
137   devcb = &tpi6525_device::set_out_cb_callback(*device, DEVCB2_##_devcb);
138
139
128140#endif /* __TPI6525_H__ */
trunk/src/emu/bus/c64/magic_voice.c
r29638r29639
185185   m_exrom = state;
186186}
187187
188static const tpi6525_interface tpi_intf =
189{
190   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_irq_w),
191   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_r),
192   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pa_w),
193   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_r),
194   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_pb_w),
195   DEVCB_NULL,
196   DEVCB_NULL,
197   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_ca_w),
198   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_magic_voice_cartridge_device, tpi_cb_w),
199};
200
201
202188//-------------------------------------------------
203189//  t6721_interface
204190//-------------------------------------------------
r29638r29639
235221//-------------------------------------------------
236222
237223static MACHINE_CONFIG_FRAGMENT( c64_magic_voice )
238   MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
224   MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0)
225   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_irq_w))
226   MCFG_TPI6525_IN_PA_CB(READ8(c64_magic_voice_cartridge_device, tpi_pa_r))
227   MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pa_w))
228   MCFG_TPI6525_IN_PB_CB(READ8(c64_magic_voice_cartridge_device, tpi_pb_r))
229   MCFG_TPI6525_OUT_PB_CB(WRITE8(c64_magic_voice_cartridge_device, tpi_pb_w))
230   MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_ca_w))
231   MCFG_TPI6525_OUT_CA_CB(WRITELINE(c64_magic_voice_cartridge_device, tpi_cb_w))
239232   MCFG_40105_ADD(CMOS40105_TAG, DEVWRITELINE(MOS6525_TAG, tpi6525_device, i3_w), NULL)
240233
241234   MCFG_SPEAKER_STANDARD_MONO("mono")
trunk/src/emu/bus/c64/ieee488.c
r29638r29639
138138   m_roml_sel = BIT(data, 4);
139139}
140140
141static const tpi6525_interface tpi_intf =
142{
143   DEVCB_NULL,
144   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_r),
145   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pa_w),
146   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
147   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
148   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_r),
149   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_ieee488_device, tpi_pc_w),
150   DEVCB_NULL,
151   DEVCB_NULL
152};
153
154
155141//-------------------------------------------------
156142//  MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
157143//-------------------------------------------------
158144
159145static MACHINE_CONFIG_FRAGMENT( c64_ieee488 )
160   MCFG_TPI6525_ADD(MOS6525_TAG, tpi_intf)
161
146   MCFG_DEVICE_ADD(MOS6525_TAG, TPI6525, 0)
147   MCFG_TPI6525_IN_PA_CB(READ8(c64_ieee488_device, tpi_pa_r))
148   MCFG_TPI6525_OUT_PA_CB(WRITE8(c64_ieee488_device, tpi_pa_w))
149   MCFG_TPI6525_IN_PB_CB(DEVREAD8(IEEE488_TAG, ieee488_device, dio_r))
150   MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(IEEE488_TAG, ieee488_device, dio_w))
151   MCFG_TPI6525_IN_PC_CB(READ8(c64_ieee488_device, tpi_pc_r))
152   MCFG_TPI6525_OUT_PC_CB(WRITE8(c64_ieee488_device, tpi_pc_w))
153   
162154   MCFG_CBM_IEEE488_ADD(NULL)
163155   MCFG_C64_PASSTHRU_EXPANSION_SLOT_ADD()
164156MACHINE_CONFIG_END
trunk/src/emu/bus/plus4/c1551.c
r29638r29639
241241   m_ga->oe_w(BIT(data, 4));
242242}
243243
244static const tpi6525_interface tpi0_intf =
245{
246   DEVCB_NULL,
247   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r),
248   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w),
249   DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_r),
250   DEVCB_DEVICE_MEMBER(C64H156_TAG, c64h156_device, yb_w),
251   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_r),
252   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi0_pc_w),
253   DEVCB_NULL,
254   DEVCB_NULL
255};
256
257
258244//-------------------------------------------------
259245//  tpi6525_interface tpi1_intf
260246//-------------------------------------------------
r29638r29639
325311   m_dav = BIT(data, 6);
326312}
327313
328static const tpi6525_interface tpi1_intf =
329{
330   DEVCB_NULL,
331   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_r),
332   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tcbm_data_w),
333   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pb_r),
334   DEVCB_NULL,
335   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_r),
336   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1551_device, tpi1_pc_w),
337   DEVCB_NULL,
338   DEVCB_NULL
339};
340
341
342314//-------------------------------------------------
343315//  ADDRESS_MAP( c1551_mem )
344316//-------------------------------------------------
r29638r29639
380352   MCFG_QUANTUM_PERFECT_CPU(M6510T_TAG)
381353
382354   MCFG_PLS100_ADD(PLA_TAG)
383   MCFG_TPI6525_ADD(M6523_0_TAG, tpi0_intf)
384   MCFG_TPI6525_ADD(M6523_1_TAG, tpi1_intf)
385
355   MCFG_DEVICE_ADD(M6523_0_TAG, TPI6525, 0)
356   MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r))
357   MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w))
358   MCFG_TPI6525_IN_PB_CB(DEVREAD8(C64H156_TAG, c64h156_device, yb_r))
359   MCFG_TPI6525_OUT_PB_CB(DEVWRITE8(C64H156_TAG, c64h156_device, yb_w))
360   MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi0_pc_r))
361   MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi0_pc_w))
362   MCFG_DEVICE_ADD(M6523_1_TAG, TPI6525, 0)
363   MCFG_TPI6525_IN_PA_CB(READ8(c1551_device, tcbm_data_r))
364   MCFG_TPI6525_OUT_PA_CB(WRITE8(c1551_device, tcbm_data_w))
365   MCFG_TPI6525_IN_PB_CB(READ8(c1551_device, tpi1_pb_r))
366   MCFG_TPI6525_IN_PC_CB(READ8(c1551_device, tpi1_pc_r))
367   MCFG_TPI6525_OUT_PC_CB(WRITE8(c1551_device, tpi1_pc_w))
368   
386369   MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL_16MHz)
387370   MCFG_64H156_BYTE_CALLBACK(DEVWRITELINE(C64H156_TAG, c64h156_device, atni_w))
388371   MCFG_FLOPPY_DRIVE_ADD(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats)
trunk/src/mess/drivers/cbm2.c
r29638r29639
13791379   m_vicdotsel = state;
13801380}
13811381
1382static const tpi6525_interface tpi1_intf =
1383{
1384   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_irq_w),
1385   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1386   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1387   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1388   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
1389   DEVCB_NULL,
1390   DEVCB_NULL,
1391   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_ca_w),
1392   DEVCB_NULL
1393};
1394
1395static const tpi6525_interface p500_tpi1_intf =
1396{
1397   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_irq_w),
1398   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1399   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1400   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1401   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
1402   DEVCB_NULL,
1403   DEVCB_NULL,
1404   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_ca_w),
1405   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_cb_w)
1406};
1407
1408
14091382//-------------------------------------------------
14101383//  tpi6525_interface tpi2_intf
14111384//-------------------------------------------------
r29638r29639
15241497   m_vicbnksel = data >> 6;
15251498}
15261499
1527static const tpi6525_interface tpi2_intf =
1528{
1529   DEVCB_NULL,
1530   DEVCB_NULL,
1531   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1532   DEVCB_NULL,
1533   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1534   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pc_r),
1535   DEVCB_NULL,
1536   DEVCB_NULL,
1537   DEVCB_NULL
1538};
1539
1540static const tpi6525_interface hp_tpi2_intf =
1541{
1542   DEVCB_NULL,
1543   DEVCB_NULL,
1544   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1545   DEVCB_NULL,
1546   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1547   DEVCB_DRIVER_MEMBER(cbm2hp_state, tpi2_pc_r),
1548   DEVCB_NULL,
1549   DEVCB_NULL,
1550   DEVCB_NULL
1551};
1552
1553static const tpi6525_interface p500_tpi2_intf =
1554{
1555   DEVCB_NULL,
1556   DEVCB_NULL,
1557   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1558   DEVCB_NULL,
1559   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1560   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_r),
1561   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_w),
1562   DEVCB_NULL,
1563   DEVCB_NULL
1564};
1565
1566
15671500//-------------------------------------------------
15681501//  MOS6526_INTERFACE( cia_intf )
15691502//-------------------------------------------------
r29638r29639
17731706   }
17741707}
17751708
1776static const tpi6525_interface ext_tpi_intf =
1777{
1778   DEVCB_NULL,
1779   DEVCB_DEVICE_MEMBER(EXT_MOS6526_TAG, mos6526_device, pa_r),
1780   DEVCB_NULL,
1781   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_r),
1782   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pb_w),
1783   DEVCB_NULL,
1784   DEVCB_DRIVER_MEMBER(cbm2_state, ext_tpi_pc_w),
1785   DEVCB_NULL,
1786   DEVCB_NULL
1787};
1788
1789
17901709//-------------------------------------------------
17911710//  MOS6526_INTERFACE( ext_cia_intf )
17921711//-------------------------------------------------
r29638r29639
21362055   // devices
21372056   MCFG_PLS100_ADD(PLA1_TAG)
21382057   MCFG_PLS100_ADD(PLA2_TAG)
2139   MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
2140   MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
2058   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2059   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w))
2060   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2061   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2062   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r))
2063   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2064   MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w))
2065   MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w))
2066   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2067   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2068   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2069   MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r))
2070   MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w))
21412071   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, VIC6567_CLOCK)
21422072   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
21432073   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29638r29639
22402170   // devices
22412171   MCFG_PLS100_ADD(PLA1_TAG)
22422172   MCFG_PLS100_ADD(PLA2_TAG)
2243   MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
2244   MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
2173   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2174   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(p500_state, tpi1_irq_w))
2175   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2176   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2177   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, tpi1_pb_r))
2178   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2179   MCFG_TPI6525_OUT_CA_CB(WRITELINE(p500_state, tpi1_ca_w))
2180   MCFG_TPI6525_OUT_CB_CB(WRITELINE(p500_state, tpi1_cb_w))
2181   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2182   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2183   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2184   MCFG_TPI6525_IN_PC_CB(READ8(p500_state, tpi2_pc_r))
2185   MCFG_TPI6525_OUT_PC_CB(WRITE8(p500_state, tpi2_pc_w))
22452186   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0)
22462187   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
22472188   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29638r29639
23402281
23412282   // devices
23422283   MCFG_PLS100_ADD(PLA1_TAG)
2343   MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
2344   MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
2284   MCFG_DEVICE_ADD(MOS6525_1_TAG, TPI6525, 0)
2285   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(cbm2_state, tpi1_irq_w))
2286   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pa_r))
2287   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi1_pa_w))
2288   MCFG_TPI6525_IN_PA_CB(READ8(cbm2_state, tpi1_pb_r))
2289   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi1_pb_w))
2290   MCFG_TPI6525_OUT_CA_CB(WRITELINE(cbm2_state, tpi1_ca_w))
2291   MCFG_DEVICE_ADD(MOS6525_2_TAG, TPI6525, 0)
2292   MCFG_TPI6525_OUT_PA_CB(WRITE8(cbm2_state, tpi2_pa_w))
2293   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, tpi2_pb_w))
2294   MCFG_TPI6525_IN_PC_CB(READ8(cbm2_state, tpi2_pc_r))
23452295   MCFG_DEVICE_ADD(MOS6551A_TAG, MOS6551, 0)
23462296   MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
23472297   MCFG_MOS6551_IRQ_HANDLER(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i4_w))
r29638r29639
24542404//-------------------------------------------------
24552405
24562406static MACHINE_CONFIG_DERIVED_CLASS( cbm2hp_ntsc, cbm2lp_ntsc, cbm2hp_state )
2457   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
2458   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
2407   MCFG_DEVICE_MODIFY(MOS6525_2_TAG)
2408   MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r))
24592409MACHINE_CONFIG_END
24602410
24612411
r29638r29639
24892439   MCFG_CPU_IO_MAP(ext_io)
24902440
24912441   MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL)
2492   MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
2442   MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0)
2443   MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r))
2444   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r))
2445   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w))
2446   MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w))
24932447   MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9)
24942448   MCFG_MOS6526_TOD(60)
24952449   MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w))
r29638r29639
25092463   MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
25102464
25112465   // devices
2512   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
2513   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
2466   MCFG_DEVICE_MODIFY(MOS6525_2_TAG)
2467   MCFG_TPI6525_IN_PC_CB(READ8(cbm2hp_state, tpi2_pc_r))
25142468
25152469   MCFG_DEVICE_MODIFY(MOS6526_TAG)
25162470   MCFG_MOS6526_TOD(50)
r29638r29639
25472501   MCFG_CPU_IO_MAP(ext_io)
25482502
25492503   MCFG_PIC8259_ADD(EXT_I8259A_TAG, INPUTLINE(EXT_I8088_TAG, INPUT_LINE_IRQ0), VCC, NULL)
2550   MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf)
2504   MCFG_DEVICE_ADD(EXT_MOS6525_TAG, TPI6525, 0)
2505   MCFG_TPI6525_IN_PA_CB(DEVREAD8(EXT_MOS6526_TAG, mos6526_device, pa_r))
2506   MCFG_TPI6525_IN_PB_CB(READ8(cbm2_state, ext_tpi_pb_r))
2507   MCFG_TPI6525_OUT_PB_CB(WRITE8(cbm2_state, ext_tpi_pb_w))
2508   MCFG_TPI6525_OUT_PC_CB(WRITE8(cbm2_state, ext_tpi_pc_w))
25512509   MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL_18MHz/9)
25522510   MCFG_MOS6526_TOD(50)
25532511   MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(cbm2_state, ext_cia_irq_w))
trunk/src/mess/drivers/amiga.c
r29638r29639
502502   MACHINE_RESET_CALL_LEGACY( amigacd );
503503}
504504
505static const tpi6525_interface cdtv_tpi_intf =
506{
507   DEVCB_DRIVER_LINE_MEMBER(amiga_state, amigacd_tpi6525_irq),
508   DEVCB_NULL,
509   DEVCB_NULL,
510   DEVCB_NULL,
511   DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portb_w),
512   DEVCB_DRIVER_MEMBER(amiga_state, amigacd_tpi6525_portc_r),
513   DEVCB_NULL,
514   DEVCB_NULL,
515   DEVCB_NULL
516};
517
518505READ8_MEMBER(a1200_state::a1200_cia_0_portA_r)
519506{
520507   UINT8 ret = ioport("CIA0PORTA")->read() & 0xc0; /* Gameport 1 and 0 buttons */
r29638r29639
684671   MCFG_CDROM_ADD( "cdrom", cdtv_cdrom)
685672   MCFG_SOFTWARE_LIST_ADD("cd_list", "cdtv")
686673
687   MCFG_TPI6525_ADD("tpi6525", cdtv_tpi_intf)
688
674   MCFG_DEVICE_ADD("tpi6525", TPI6525, 0)
675   MCFG_TPI6525_OUT_IRQ_CB(WRITELINE(amiga_state, amigacd_tpi6525_irq))
676   MCFG_TPI6525_OUT_PB_CB(WRITE8(amiga_state, amigacd_tpi6525_portb_w))
677   MCFG_TPI6525_IN_PC_CB(READ8(amiga_state, amigacd_tpi6525_portc_r))
678   
689679   MCFG_DEVICE_MODIFY("cia_0")
690680   MCFG_MOS6526_TOD(0) // connected to vsync
691681MACHINE_CONFIG_END

Previous 199869 Revisions Next


© 1997-2024 The MAME Team