Previous 199869 Revisions Next

r36366 Tuesday 10th March, 2015 at 17:34:08 UTC by David Haywood
expose V53 device callbacks to users (nw)
[src/emu/cpu/nec]v53.c v53.h

trunk/src/emu/cpu/nec/v53.c
r244877r244878
181181   m_DULA = 0x00;
182182   m_OPHA = 0x00;
183183
184   m_simk = 0x03;
184185}
185186
186187void v53_base_device::device_start()
187188{
188189   nec_common_device::device_start();
190
191   m_txd_handler.resolve_safe();
192   m_rts_handler.resolve_safe();
193   m_dtr_handler.resolve_safe();
194   m_rxrdy_handler.resolve_safe();
195   m_txrdy_handler.resolve_safe();
196   m_txempty_handler.resolve_safe();
197
198   m_out0_handler.resolve_safe();
199   m_out1_handler.resolve_safe();
200   m_out2_handler.resolve_safe();
189201}
190202
191203void v53_base_device::install_peripheral_io()
r244877r244878
265277      }
266278      else
267279      {
268         space(AS_IO).install_readwrite_handler(base+0x00, base+0x01, read8_delegate(FUNC(v53_base_device::scu_srb_r), this), write8_delegate(FUNC(v53_base_device::scu_stb_w), this), 0x00ff);
269         space(AS_IO).install_readwrite_handler(base+0x02, base+0x03, read8_delegate(FUNC(v53_base_device::scu_sst_r), this), write8_delegate(FUNC(v53_base_device::scu_scm_w), this), 0x00ff);
270         space(AS_IO).install_write_handler(base+0x04, base+0x05, write8_delegate(FUNC(v53_base_device::scu_smd_w), this), 0x00ff);
280         space(AS_IO).install_readwrite_handler(base+0x00, base+0x01, read8_delegate(FUNC(v53_scu_device::data_r), (v53_scu_device*)m_v53scu), write8_delegate(FUNC(v53_scu_device::data_w), (v53_scu_device*)m_v53scu), 0x00ff);
281         space(AS_IO).install_readwrite_handler(base+0x02, base+0x03, read8_delegate(FUNC(v53_scu_device::status_r),  (v53_scu_device*)m_v53scu), write8_delegate(FUNC(v53_scu_device::command_w),  (v53_scu_device*)m_v53scu), 0x00ff);
282         space(AS_IO).install_write_handler(base+0x04, base+0x05, write8_delegate(FUNC(v53_scu_device::mode_w), (v53_scu_device*)m_v53scu), 0x00ff);
271283         space(AS_IO).install_readwrite_handler(base+0x06, base+0x07, read8_delegate(FUNC(v53_base_device::scu_simk_r), this), write8_delegate(FUNC(v53_base_device::scu_simk_w), this), 0x00ff);
272284
273285      }
r244877r244878
279291
280292/*** SCU ***/
281293
282READ8_MEMBER(v53_base_device::scu_srb_r)
294
295READ8_MEMBER(v53_base_device::scu_simk_r)
283296{
284   printf("v53: scu_srb_r\n");
285   return 0;
297   printf("v53: scu_simk_r\n");
298   return m_simk;
286299}
287300
288WRITE8_MEMBER(v53_base_device::scu_stb_w)
301WRITE8_MEMBER(v53_base_device::scu_simk_w)
289302{
290   printf("v53: scu_stb_w %02x\n", data);
303   m_simk = data;
304   printf("v53: scu_simk_w %02x\n", data);
291305}
292306
293READ8_MEMBER(v53_base_device::scu_sst_r)
307WRITE_LINE_MEMBER(v53_base_device::scu_txd_trampoline_cb)
294308{
295   printf("v53: scu_sst_r\n");
296   return 0;
309   m_txd_handler(state);
297310}
298311
299WRITE8_MEMBER(v53_base_device::scu_scm_w)
312WRITE_LINE_MEMBER(v53_base_device::scu_dtr_trampoline_cb)
300313{
301   printf("v53: scu_scm_w %02x\n", data);
314   m_dtr_handler(state);
302315}
303316
304WRITE8_MEMBER(v53_base_device::scu_smd_w)
317WRITE_LINE_MEMBER(v53_base_device::scu_rts_trampoline_cb)
305318{
306   printf("v53: scu_smd_w %02x\n", data);
319   m_rts_handler(state);
307320}
308321
309READ8_MEMBER(v53_base_device::scu_simk_r)
322WRITE_LINE_MEMBER(v53_base_device::scu_rxrdy_trampoline_cb)
310323{
311   printf("v53: scu_simk_r\n");
312   return 0;
324   // should we mask this here based on m_simk? it can mask the interrupt
325   m_rxrdy_handler(state);
313326}
314327
315WRITE8_MEMBER(v53_base_device::scu_simk_w)
328WRITE_LINE_MEMBER(v53_base_device::scu_txrdy_trampoline_cb)
316329{
317   printf("v53: scu_simk_w %02x\n", data);
330   // should we mask this here based on m_simk? it can mask the interrupt
331   m_txrdy_handler(state);
318332}
319333
334WRITE_LINE_MEMBER(v53_base_device::scu_txempty_trampoline_cb)
335{
336   m_txempty_handler(state);
337}
320338
339WRITE_LINE_MEMBER(v53_base_device::scu_syndet_trampoline_cb)
340{
341   m_syndet_handler(state);
342}
343
344
321345/*** TCU ***/
322346
323347WRITE8_MEMBER(v53_base_device::tmu_tct0_w) { m_v53tcu->write(space, 0, data); }
r244877r244878
330354READ8_MEMBER(v53_base_device::tmu_tst1_r) {   return m_v53tcu->read(space, 1); }
331355READ8_MEMBER(v53_base_device::tmu_tst2_r) {   return m_v53tcu->read(space, 2); }
332356
357
358WRITE_LINE_MEMBER(v53_base_device::tcu_out0_trampoline_cb)
359{
360   m_out0_handler(state);
361}
362
363WRITE_LINE_MEMBER(v53_base_device::tcu_out1_trampoline_cb)
364{
365   m_out1_handler(state);
366}
367
368WRITE_LINE_MEMBER(v53_base_device::tcu_out2_trampoline_cb)
369{
370   m_out2_handler(state);
371}
372
373
374
333375/*** DMA ***/
334376
335377// could be wrong / nonexistent
r244877r244878
459501}
460502
461503static MACHINE_CONFIG_FRAGMENT( v53 )
504
462505   MCFG_DEVICE_ADD("pit", PIT8254, 0) // functionality identical to uPD71054
463   MCFG_PIT8253_CLK0(16000000/2/8)
464   //MCFG_PIT8253_OUT0_HANDLER(WRITELINE(v53_base_device, pit_out0))
506   MCFG_PIT8253_CLK0(1000000) // todo
507   MCFG_PIT8253_CLK1(1000000) // todo
508   MCFG_PIT8253_CLK2(1000000) // todo
509   MCFG_PIT8253_OUT0_HANDLER(WRITELINE( v53_base_device, tcu_out0_trampoline_cb ))
510   MCFG_PIT8253_OUT1_HANDLER(WRITELINE( v53_base_device, tcu_out1_trampoline_cb ))
511   MCFG_PIT8253_OUT2_HANDLER(WRITELINE( v53_base_device, tcu_out2_trampoline_cb ))
465512
513
466514   MCFG_DEVICE_ADD("upd71071dma", V53_DMAU, 4000000)
467515   MCFG_I8237_OUT_HREQ_CB(WRITELINE(v53_base_device, dma_hrq_changed))
468516   MCFG_I8237_OUT_IOW_3_CB(WRITE8(v53_base_device, dma_io_3_w))
r244877r244878
472520   MCFG_PIC8259_ADD( "upd71059pic", WRITELINE(v53_base_device, upd71059_irq_w), VCC, READ8(v53_base_device,get_pic_ack))
473521
474522   MCFG_DEVICE_ADD("v53scu", V53_SCU, 0)
523   MCFG_I8251_TXD_HANDLER(WRITELINE(v53_base_device, scu_txd_trampoline_cb))
524   MCFG_I8251_DTR_HANDLER(WRITELINE(v53_base_device, scu_dtr_trampoline_cb))
525   MCFG_I8251_RTS_HANDLER(WRITELINE(v53_base_device, scu_rts_trampoline_cb))
526   MCFG_I8251_RXRDY_HANDLER(WRITELINE(v53_base_device,scu_rxrdy_trampoline_cb))
527   MCFG_I8251_TXRDY_HANDLER(WRITELINE(v53_base_device,scu_txrdy_trampoline_cb))
528   MCFG_I8251_TXEMPTY_HANDLER(WRITELINE(v53_base_device, scu_txempty_trampoline_cb))
529   MCFG_I8251_SYNDET_HANDLER(WRITELINE(v53_base_device, scu_syndet_trampoline_cb))
475530
476531MACHINE_CONFIG_END
477532
r244877r244878
487542   m_v53tcu(*this, "pit"),
488543   m_v53dmau(*this, "upd71071dma"),
489544   m_v53icu(*this, "upd71059pic"),
490   m_v53scu(*this, "v53scu")
545   m_v53scu(*this, "v53scu"),
546   // SCU
547   m_txd_handler(*this),
548   m_dtr_handler(*this),
549   m_rts_handler(*this),
550   m_rxrdy_handler(*this),
551   m_txrdy_handler(*this),
552   m_txempty_handler(*this),
553   m_syndet_handler(*this),
554   // TCU
555   m_out0_handler(*this),
556   m_out1_handler(*this),
557   m_out2_handler(*this)
491558{
492559}
493560
trunk/src/emu/cpu/nec/v53.h
r244877r244878
88#include "machine/pic8259.h"
99#include "machine/i8251.h"
1010
11// SCU
12
13#define MCFG_V53_SCU_TXD_HANDLER(_devcb) \
14   devcb = &v53_base_device::set_txd_handler(*device, DEVCB_##_devcb);
15
16#define MCFG_V53_SCU_DTR_HANDLER(_devcb) \
17   devcb = &v53_base_device::set_dtr_handler(*device, DEVCB_##_devcb);
18
19#define MCFG_V53_SCU_RTS_HANDLER(_devcb) \
20   devcb = &v53_base_device::set_rts_handler(*device, DEVCB_##_devcb);
21
22#define MCFG_V53_SCU_RXRDY_HANDLER(_devcb) \
23   devcb = &v53_base_device::set_rxrdy_handler(*device, DEVCB_##_devcb);
24
25#define MCFG_V53_SCU_TXRDY_HANDLER(_devcb) \
26   devcb = &v53_base_device::set_txrdy_handler(*device, DEVCB_##_devcb);
27
28#define MCFG_V53_SCU_TXEMPTY_HANDLER(_devcb) \
29   devcb = &v53_base_device::set_txempty_handler(*device, DEVCB_##_devcb);
30
31#define MCFG_V53_SCU_SYNDET_HANDLER(_devcb) \
32   devcb = &v53_base_device::set_syndet_handler(*device, DEVCB_##_devcb);
33
34// TCU
35#define MCFG_V53_TCU_CLK0(_clk) \
36   v53_base_device::set_clk0(*device, _clk);
37
38#define MCFG_V53_TCU_CLK1(_clk) \
39   v53_base_device::set_clk1(*device, _clk);
40
41#define MCFG_V53_TCU_CLK2(_clk) \
42   v53_base_device::set_clk2(*device, _clk);
43
44#define MCFG_V53_TCU_OUT0_HANDLER(_devcb) \
45   devcb = &v53_base_device::set_out0_handler(*device, DEVCB_##_devcb);
46
47#define MCFG_V53_TCU_OUT1_HANDLER(_devcb) \
48   devcb = &v53_base_device::set_out1_handler(*device, DEVCB_##_devcb);
49
50#define MCFG_V53_TCU_OUT2_HANDLER(_devcb) \
51   devcb = &v53_base_device::set_out2_handler(*device, DEVCB_##_devcb);
52
53
54
1155class v53_base_device : public nec_common_device
1256{
1357public:
r244877r244878
4488   UINT8 m_DULA;
4589   UINT8 m_OPHA;
4690
47   // TMU
91   // TCU
92
93
94   // SCU
95   DECLARE_READ8_MEMBER(scu_simk_r);
96   DECLARE_WRITE8_MEMBER(scu_simk_w);
97   UINT8 m_simk;
98   template<class _Object> static devcb_base &set_txd_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_txd_handler.set_callback(object); }
99   template<class _Object> static devcb_base &set_dtr_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_dtr_handler.set_callback(object); }
100   template<class _Object> static devcb_base &set_rts_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_rts_handler.set_callback(object); }
101   template<class _Object> static devcb_base &set_rxrdy_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_rxrdy_handler.set_callback(object); }
102   template<class _Object> static devcb_base &set_txrdy_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_txrdy_handler.set_callback(object); }
103   template<class _Object> static devcb_base &set_txempty_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_txempty_handler.set_callback(object); }
104   template<class _Object> static devcb_base &set_syndet_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_syndet_handler.set_callback(object); }
105   DECLARE_WRITE_LINE_MEMBER(scu_txd_trampoline_cb);
106   DECLARE_WRITE_LINE_MEMBER(scu_dtr_trampoline_cb);
107   DECLARE_WRITE_LINE_MEMBER(scu_rts_trampoline_cb);
108   DECLARE_WRITE_LINE_MEMBER(scu_rxrdy_trampoline_cb);
109   DECLARE_WRITE_LINE_MEMBER(scu_txrdy_trampoline_cb);
110   DECLARE_WRITE_LINE_MEMBER(scu_txempty_trampoline_cb);
111   DECLARE_WRITE_LINE_MEMBER(scu_syndet_trampoline_cb);
112
113   // TCU
48114   DECLARE_READ8_MEMBER(tmu_tst0_r);
49115   DECLARE_WRITE8_MEMBER(tmu_tct0_w);
50116   DECLARE_READ8_MEMBER(tmu_tst1_r);
r244877r244878
52118   DECLARE_READ8_MEMBER(tmu_tst2_r);
53119   DECLARE_WRITE8_MEMBER(tmu_tct2_w);
54120   DECLARE_WRITE8_MEMBER(tmu_tmd_w);
121//   static void set_clk0(device_t &device, double clk0) { downcast<v53_base_device &>(device).m_clk0 = clk0; }
122//   static void set_clk1(device_t &device, double clk1) { downcast<v53_base_device &>(device).m_clk1 = clk1; }
123//   static void set_clk2(device_t &device, double clk2) { downcast<v53_base_device &>(device).m_clk2 = clk2; }
124   template<class _Object> static devcb_base &set_out0_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_out0_handler.set_callback(object); }
125   template<class _Object> static devcb_base &set_out1_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_out1_handler.set_callback(object); }
126   template<class _Object> static devcb_base &set_out2_handler(device_t &device, _Object object) { return downcast<v53_base_device &>(device).m_out2_handler.set_callback(object); }
127   DECLARE_WRITE_LINE_MEMBER(tcu_out0_trampoline_cb);
128   DECLARE_WRITE_LINE_MEMBER(tcu_out1_trampoline_cb);
129   DECLARE_WRITE_LINE_MEMBER(tcu_out2_trampoline_cb);
55130
56   // SCU
57   DECLARE_READ8_MEMBER(scu_srb_r);
58   DECLARE_WRITE8_MEMBER(scu_stb_w);
59   DECLARE_READ8_MEMBER(scu_sst_r);
60   DECLARE_WRITE8_MEMBER(scu_scm_w);
61   DECLARE_WRITE8_MEMBER(scu_smd_w);
62   DECLARE_READ8_MEMBER(scu_simk_r);
63   DECLARE_WRITE8_MEMBER(scu_simk_w);
64
65
131   
66132   void install_peripheral_io();
67133
68134   const address_space_config m_io_space_config;
r244877r244878
99165   virtual machine_config_constructor device_mconfig_additions() const;
100166   virtual void device_start();
101167   virtual void device_reset();
168
169   // SCU
170   devcb_write_line m_txd_handler;
171   devcb_write_line m_dtr_handler;
172   devcb_write_line m_rts_handler;
173   devcb_write_line m_rxrdy_handler;
174   devcb_write_line m_txrdy_handler;
175   devcb_write_line m_txempty_handler;
176   devcb_write_line m_syndet_handler;
177
178   // TCU
179//   double m_clk0;
180//   double m_clk1;
181//   double m_clk2;
182   devcb_write_line m_out0_handler;
183   devcb_write_line m_out1_handler;
184   devcb_write_line m_out2_handler;
102185};
103186
104187


Previous 199869 Revisions Next


© 1997-2024 The MAME Team