Previous 199869 Revisions Next

r26686 Sunday 22nd December, 2013 at 12:00:26 UTC by smf
replaced read rx/cts/dcd callbacks in ACIA6850 write write handlers, which allows multiple chips to be connected together without using glue methods. [smf]
[src/emu/bus/a2bus]a2midi.c a2midi.h
[src/emu/bus/c64]midi_maplin.c midi_maplin.h midi_namesoft.c midi_namesoft.h midi_passport.c midi_passport.h midi_sci.c midi_sci.h midi_siel.c midi_siel.h
[src/emu/bus/cbmiec]interpod.c
[src/emu/machine]6850acia.c 6850acia.h
[src/mame/drivers]bfcobra.c bfmsys85.c calomega.c jpmsys5.c mpu4vid.c
[src/mame/includes]calomega.h jpmsys5.h
[src/mess/drivers]68ksbc.c atarist.c bbc.c bml3.c cat.c ec65.c mekd2.c mirage.c newbrain.c ob68k1a.c osi.c poly.c tavernie.c tek405x.c v6809.c votrtnt.c
[src/mess/includes]atarist.h bbc.h newbrain.h osi.h thomson.h
[src/mess/machine]bbc.c isa_gus.c isa_gus.h thomson.c

trunk/src/mame/drivers/bfcobra.c
r26685r26686
238238      : driver_device(mconfig, type, tag),
239239      m_maincpu(*this, "maincpu"),
240240      m_audiocpu(*this, "audiocpu"),
241      m_acia6850_2(*this, "acia6850_2"),
241242      m_upd7759(*this, "upd") { }
242243
243244   UINT8 m_bank_data[4];
r26685r26686
248249   UINT8 m_flip_8;
249250   UINT8 m_flip_22;
250251   UINT8 m_videomode;
251   UINT8 m_z80_m6809_line;
252   UINT8 m_m6809_z80_line;
253252   UINT8 m_data_r;
254253   UINT8 m_data_t;
255254   int m_irq_state;
r26685r26686
286285   DECLARE_WRITE8_MEMBER(fd_ctrl_w);
287286   DECLARE_READ8_MEMBER(upd_r);
288287   DECLARE_WRITE8_MEMBER(upd_w);
289   DECLARE_READ_LINE_MEMBER(z80_acia_rx_r);
290   DECLARE_WRITE_LINE_MEMBER(z80_acia_tx_w);
291288   DECLARE_WRITE_LINE_MEMBER(z80_acia_irq);
292   DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r);
293   DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w);
294289   DECLARE_WRITE_LINE_MEMBER(m6809_data_irq);
295   DECLARE_READ_LINE_MEMBER(data_acia_rx_r);
296290   DECLARE_WRITE_LINE_MEMBER(data_acia_tx_w);
297291   DECLARE_DRIVER_INIT(bfcobra);
298292   virtual void machine_reset();
r26685r26686
312306   UINT8 results_phase(void);
313307   required_device<cpu_device> m_maincpu;
314308   required_device<cpu_device> m_audiocpu;
309   required_device<acia6850_device> m_acia6850_2;
315310   required_device<upd7759_device> m_upd7759;
316311};
317312
r26685r26686
16181613    What are the correct ACIA clocks ?
16191614*/
16201615
1621READ_LINE_MEMBER(bfcobra_state::z80_acia_rx_r)
1622{
1623   return m_m6809_z80_line;
1624}
1625
1626WRITE_LINE_MEMBER(bfcobra_state::z80_acia_tx_w)
1627{
1628   m_z80_m6809_line = state;
1629}
1630
16311616WRITE_LINE_MEMBER(bfcobra_state::z80_acia_irq)
16321617{
16331618   m_acia_irq = state;
r26685r26686
16381623{
16391624   500000,
16401625   500000,
1641   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_rx_r), /*&m6809_z80_line,*/
1642   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_tx_w), /*&z80_m6809_line,*/
1626   DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx),
16431627   DEVCB_NULL,
1644   DEVCB_NULL,
1645   DEVCB_NULL,
16461628   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,z80_acia_irq)
16471629};
16481630
1649READ_LINE_MEMBER(bfcobra_state::m6809_acia_rx_r)
1650{
1651   return m_z80_m6809_line;
1652}
1653
1654WRITE_LINE_MEMBER(bfcobra_state::m6809_acia_tx_w)
1655{
1656   m_m6809_z80_line = state;
1657}
1658
16591631WRITE_LINE_MEMBER(bfcobra_state::m6809_data_irq)
16601632{
16611633   m_audiocpu->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
r26685r26686
16651637{
16661638   500000,
16671639   500000,
1668   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_rx_r),/*&z80_m6809_line,*/
1669   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_acia_tx_w),/*&m6809_z80_line,*/
1640   DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx),
16701641   DEVCB_NULL,
1671   DEVCB_NULL,
1672   DEVCB_NULL,
16731642   DEVCB_NULL
16741643};
16751644
1676READ_LINE_MEMBER(bfcobra_state::data_acia_rx_r)
1677{
1678   return m_data_r;
1679}
1680
16811645WRITE_LINE_MEMBER(bfcobra_state::data_acia_tx_w)
16821646{
1683      m_data_t = state;
1647   m_data_t = state;
16841648}
16851649
16861650
r26685r26686
16881652{
16891653   500000,
16901654   500000,
1691   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_rx_r),/*data_r,*/
16921655   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,data_acia_tx_w),/*data_t,*/
16931656   DEVCB_NULL,
1694   DEVCB_NULL,
1695   DEVCB_NULL,
16961657   DEVCB_DRIVER_LINE_MEMBER(bfcobra_state,m6809_data_irq)
16971658};
16981659
r26685r26686
17441705   membank("bank4")->set_base(memregion("user1")->base());
17451706
17461707   /* TODO: Properly sort out the data ACIA */
1747   m_data_r = 1;
1708   m_acia6850_2->write_rx(1);
17481709
17491710   /* Finish this */
1750   save_item(NAME(m_z80_m6809_line));
1751   save_item(NAME(m_m6809_z80_line));
17521711   save_item(NAME(m_data_r));
17531712   save_item(NAME(m_data_t));
17541713   save_item(NAME(m_h_scroll));
trunk/src/mame/drivers/calomega.c
r26685r26686
26522652*                 ACIA Interface                 *
26532653*************************************************/
26542654
2655READ_LINE_MEMBER(calomega_state::acia_rx_r)
2656{
2657   return m_rx_line;
2658}
2659
26602655WRITE_LINE_MEMBER(calomega_state::acia_tx_w)
26612656{
26622657   m_tx_line = state;
r26685r26686
26662661{
26672662   UART_CLOCK,
26682663   UART_CLOCK,
2669   DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_rx_r), /*&rx_line,*/
26702664   DEVCB_DRIVER_LINE_MEMBER(calomega_state,acia_tx_w), /*&tx_line,*/
26712665   DEVCB_NULL,
2672   DEVCB_NULL,
2673   DEVCB_NULL,
26742666   DEVCB_DRIVER_LINE_MEMBER(calomega_state,tx_rx_clk)
26752667};
26762668
trunk/src/mame/drivers/mpu4vid.c
r26685r26686
247247   //Video
248248   UINT8 m_m6840_irq_state;
249249   UINT8 m_m6850_irq_state;
250   UINT8 m_m68k_m6809_line;
251   UINT8 m_m6809_m68k_line;
252   UINT8 m_m68k_acia_cts;
253   UINT8 m_m6809_acia_cts;
254   UINT8 m_m6809_acia_rts;
255   UINT8 m_m6809_acia_dcd;
256250   int m_gfx_index;
257251   INT8 m_cur[2];
258252
r26685r26686
282276   DECLARE_VIDEO_START(mpu4_vid);
283277   UINT32 screen_update_mpu4_vid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
284278   TIMER_DEVICE_CALLBACK_MEMBER(scanline_timer_callback);
285   DECLARE_READ_LINE_MEMBER(m6809_acia_rx_r);
286   DECLARE_WRITE_LINE_MEMBER(m6809_acia_tx_w);
287   DECLARE_READ_LINE_MEMBER(m6809_acia_cts_r);
288   DECLARE_WRITE_LINE_MEMBER(m6809_acia_rts_w);
289   DECLARE_READ_LINE_MEMBER(m6809_acia_dcd_r);
290279   DECLARE_WRITE_LINE_MEMBER(m6809_acia_irq);
291   DECLARE_READ_LINE_MEMBER(m68k_acia_rx_r);
292   DECLARE_WRITE_LINE_MEMBER(m68k_acia_tx_w);
293   DECLARE_READ_LINE_MEMBER(m68k_acia_cts_r);
294   DECLARE_WRITE_LINE_MEMBER(m68k_acia_rts_w);
295   DECLARE_READ_LINE_MEMBER(m68k_acia_dcd_r);
296280   DECLARE_WRITE_LINE_MEMBER(m68k_acia_irq);
297281   DECLARE_WRITE_LINE_MEMBER(cpu1_ptm_irq);
298282   DECLARE_WRITE8_MEMBER(vid_o1_callback);
r26685r26686
343327
344328/* Communications with 6809 board */
345329
346READ_LINE_MEMBER(mpu4vid_state::m6809_acia_rx_r)
347{
348   return m_m68k_m6809_line;
349}
350
351WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_tx_w)
352{
353   m_m6809_m68k_line = state;
354}
355
356READ_LINE_MEMBER(mpu4vid_state::m6809_acia_cts_r)
357{
358   return m_m6809_acia_cts;
359}
360
361WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_rts_w)
362{
363   m_m6809_acia_rts = state;
364}
365
366READ_LINE_MEMBER(mpu4vid_state::m6809_acia_dcd_r)
367{
368   return m_m6809_acia_dcd;
369}
370
371330WRITE_LINE_MEMBER(mpu4vid_state::m6809_acia_irq)
372331{
373   m_m68k_acia_cts = state;
332   m_acia_1->write_cts(state);
374333   m_maincpu->set_input_line(M6809_IRQ_LINE, state);
375334}
376335
r26685r26686
378337{
379338   0,
380339   0,
381   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rx_r),
382   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_tx_w),
383   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_cts_r),
384   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_rts_w),
385   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_dcd_r),
340   DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_rx),
341   DEVCB_DEVICE_LINE_MEMBER("acia6850_1", acia6850_device, write_dcd),
386342   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m6809_acia_irq)
387343};
388344
389READ_LINE_MEMBER(mpu4vid_state::m68k_acia_rx_r)
390{
391   return m_m6809_m68k_line;
392}
393
394WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_tx_w)
395{
396   m_m68k_m6809_line = state;
397}
398
399READ_LINE_MEMBER(mpu4vid_state::m68k_acia_cts_r)
400{
401   return m_m68k_acia_cts;
402}
403
404WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_rts_w)
405{
406   m_m6809_acia_dcd = state;
407}
408
409READ_LINE_MEMBER(mpu4vid_state::m68k_acia_dcd_r)
410{
411   return m_m6809_acia_rts;
412}
413
414345WRITE_LINE_MEMBER(mpu4vid_state::m68k_acia_irq)
415346{
416   m_m6809_acia_cts = state;
347   m_acia_0->write_cts(state);
417348   m_m6850_irq_state = state;
418349   update_mpu68_interrupts(1);
419350}
r26685r26686
422353{
423354   0,
424355   0,
425   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rx_r),
426   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_tx_w),
427   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_cts_r),
428   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_rts_w),
429   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_dcd_r),
356   DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_rx),
357   DEVCB_DEVICE_LINE_MEMBER("acia6850_0", acia6850_device, write_dcd),
430358   DEVCB_DRIVER_LINE_MEMBER(mpu4vid_state, m68k_acia_irq)
431359};
432360
trunk/src/mame/drivers/bfmsys85.c
r26685r26686
9090   int m_mux_input;
9191   UINT8 m_Inputs[64];
9292   UINT8 m_codec_data[256];
93   UINT8 m_sys85_data_line_r;
9493   UINT8 m_sys85_data_line_t;
9594   DECLARE_WRITE8_MEMBER(watchdog_w);
9695   DECLARE_READ8_MEMBER(irqlatch_r);
r26685r26686
124123///////////////////////////////////////////////////////////////////////////
125124
126125
127READ_LINE_MEMBER(bfmsys85_state::sys85_data_r)
128{
129   return m_sys85_data_line_r;
130}
131
132126WRITE_LINE_MEMBER(bfmsys85_state::sys85_data_w)
133127{
134128   m_sys85_data_line_t = state;
r26685r26686
138132{
139133   500000,
140134   500000,
141   DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_r),
142135   DEVCB_DRIVER_LINE_MEMBER(bfmsys85_state,sys85_data_w),
136   DEVCB_NULL,
143137   DEVCB_NULL
144138};
145139
trunk/src/mame/drivers/jpmsys5.c
r26685r26686
352352      case START:
353353      {
354354         m_touch_shift_cnt = 0;
355         m_a2_data_in = 0;
355         acia6850_2->write_rx(0);
356356         m_touch_state = DATA;
357357         break;
358358      }
359359      case DATA:
360360      {
361         m_a2_data_in = (m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1;
361         acia6850_2->write_rx((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
362362
363363         if (++m_touch_shift_cnt == 8)
364364            m_touch_state = STOP1;
r26685r26686
367367      }
368368      case STOP1:
369369      {
370         m_a2_data_in = 1;
370         acia6850_2->write_rx(1);
371371         m_touch_state = STOP2;
372372         break;
373373      }
374374      case STOP2:
375375      {
376         m_a2_data_in = 1;
376         acia6850_2->write_rx(1);
377377
378378         if (++m_touch_data_count == 3)
379379         {
r26685r26686
596596
597597/* Clocks are incorrect */
598598
599READ_LINE_MEMBER(jpmsys5_state::a0_rx_r)
600{
601   return m_a0_data_in;
602}
603
604599WRITE_LINE_MEMBER(jpmsys5_state::a0_tx_w)
605600{
606601   m_a0_data_out = state;
607602}
608603
609READ_LINE_MEMBER(jpmsys5_state::a0_dcd_r)
610{
611   return m_a0_acia_dcd;
612}
613
614604static ACIA6850_INTERFACE( acia0_if )
615605{
616606   10000,
617607   10000,
618   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_rx_r), /*&a0_data_in,*/
619608   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_tx_w), /*&a0_data_out,*/
620609   DEVCB_NULL,
621   DEVCB_NULL,
622   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a0_dcd_r), /*&a0_acia_dcd,*/
623610   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
624611};
625612
626READ_LINE_MEMBER(jpmsys5_state::a1_rx_r)
627{
628   return m_a1_data_in;
629}
630
631613WRITE_LINE_MEMBER(jpmsys5_state::a1_tx_w)
632614{
633615   m_a1_data_out = state;
634616}
635617
636READ_LINE_MEMBER(jpmsys5_state::a1_dcd_r)
637{
638   return m_a1_acia_dcd;
639}
640
641618static ACIA6850_INTERFACE( acia1_if )
642619{
643620   10000,
644621   10000,
645   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_rx_r), /*&state->m_a1_data_in,*/
646622   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_tx_w), /*&state->m_a1_data_out,*/
647623   DEVCB_NULL,
648   DEVCB_NULL,
649   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a1_dcd_r), /*&state->m_a1_acia_dcd,*/
650624   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
651625};
652626
653READ_LINE_MEMBER(jpmsys5_state::a2_rx_r)
654{
655   return m_a2_data_in;
656}
657
658627WRITE_LINE_MEMBER(jpmsys5_state::a2_tx_w)
659628{
660629   m_a2_data_out = state;
661630}
662631
663READ_LINE_MEMBER(jpmsys5_state::a2_dcd_r)
664{
665   return m_a2_acia_dcd;
666}
667
668632static ACIA6850_INTERFACE( acia2_if )
669633{
670634   10000,
671635   10000,
672   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_rx_r), /*&state->m_a2_data_in,*/
673636   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_tx_w), /*&state->m_a2_data_out,*/
674637   DEVCB_NULL,
675   DEVCB_NULL,
676   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,a2_dcd_r), /*&state->m_a2_acia_dcd,*/
677638   DEVCB_DRIVER_LINE_MEMBER(jpmsys5_state,acia_irq)
678639};
679640
r26685r26686
694655{
695656   m_touch_timer->reset();
696657   m_touch_state = IDLE;
697   m_a2_data_in = 1;
698   m_a2_acia_dcd = 0;
658   acia6850_2->write_rx(1);
659   acia6850_2->write_dcd(0);
699660   m_vfd->reset();
700661
701662}
r26685r26686
892853
893854MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5)
894855{
895   m_a2_data_in = 1;
896   m_a2_acia_dcd = 0;
856   acia6850_2->write_rx(1);
857   acia6850_2->write_dcd(0);
897858   m_vfd->reset();
898859}
899860
trunk/src/mame/includes/jpmsys5.h
r26685r26686
1818   jpmsys5_state(const machine_config &mconfig, device_type type, const char *tag)
1919      : driver_device(mconfig, type, tag),
2020      m_maincpu(*this, "maincpu"),
21      acia6850_2(*this, "acia6850_2"),
2122      m_upd7759(*this, "upd7759"),
2223      m_tms34061(*this, "tms34061"),
2324      m_vfd(*this, "vfd"),
2425      m_direct_port(*this, "DIRECT") { }
2526
2627   required_device<cpu_device> m_maincpu;
28   required_device<acia6850_device> acia6850_2;
2729   required_device<upd7759_device> m_upd7759;
2830   optional_device<tms34061_device> m_tms34061;
2931   optional_device<roc10937_t> m_vfd;
r26685r26686
4244   int m_muxram[255];
4345   int m_alpha_clock;
4446   int m_chop;
45   UINT8 m_a0_acia_dcd;
4647   UINT8 m_a0_data_out;
47   UINT8 m_a0_data_in;
48   UINT8 m_a1_acia_dcd;
4948   UINT8 m_a1_data_out;
50   UINT8 m_a1_data_in;
51   UINT8 m_a2_acia_dcd;
5249   UINT8 m_a2_data_out;
53   UINT8 m_a2_data_in;
5450   DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
5551   DECLARE_READ16_MEMBER(sys5_tms34061_r);
5652   DECLARE_WRITE16_MEMBER(ramdac_w);
r26685r26686
7167   DECLARE_WRITE_LINE_MEMBER(u29_ca2_w);
7268   DECLARE_WRITE_LINE_MEMBER(u29_cb2_w);
7369   DECLARE_WRITE_LINE_MEMBER(acia_irq);
74   DECLARE_READ_LINE_MEMBER(a0_rx_r);
7570   DECLARE_WRITE_LINE_MEMBER(a0_tx_w);
76   DECLARE_READ_LINE_MEMBER(a0_dcd_r);
77   DECLARE_READ_LINE_MEMBER(a1_rx_r);
7871   DECLARE_WRITE_LINE_MEMBER(a1_tx_w);
79   DECLARE_READ_LINE_MEMBER(a1_dcd_r);
80   DECLARE_READ_LINE_MEMBER(a2_rx_r);
8172   DECLARE_WRITE_LINE_MEMBER(a2_tx_w);
82   DECLARE_READ_LINE_MEMBER(a2_dcd_r);
8373   DECLARE_READ16_MEMBER(mux_awp_r);
8474   DECLARE_READ16_MEMBER(coins_awp_r);
8575   void sys5_draw_lamps();
trunk/src/mame/includes/calomega.h
r26685r26686
88      m_maincpu(*this, "maincpu") { }
99
1010   UINT8 m_tx_line;
11   UINT8 m_rx_line;
1211   int m_s903_mux_data;
1312   int m_s905_mux_data;
1413   required_shared_ptr<UINT8> m_videoram;
r26685r26686
3534   DECLARE_WRITE8_MEMBER(lamps_903a_w);
3635   DECLARE_WRITE8_MEMBER(lamps_903b_w);
3736   DECLARE_WRITE8_MEMBER(lamps_905_w);
38   DECLARE_READ_LINE_MEMBER(acia_rx_r);
3937   DECLARE_WRITE_LINE_MEMBER(acia_tx_w);
4038   DECLARE_DRIVER_INIT(elgrande);
4139   DECLARE_DRIVER_INIT(standard);
trunk/src/emu/machine/6850acia.c
r26685r26686
8484void acia6850_device::device_start()
8585{
8686   // resolve callbacks
87   m_in_rx_func.resolve(m_in_rx_cb, *this);
8887   m_out_tx_func.resolve(m_out_tx_cb, *this);
89   m_in_cts_func.resolve(m_in_cts_cb, *this);
9088   m_out_rts_func.resolve(m_out_rts_cb, *this);
91   m_in_dcd_func.resolve(m_in_dcd_cb, *this);
9289   m_out_irq_func.resolve(m_out_irq_cb, *this);
9390
9491   m_tx_counter = 0;
r26685r26686
124121   save_item(NAME(m_first_reset));
125122   save_item(NAME(m_rts));
126123   save_item(NAME(m_brk));
124   save_item(NAME(m_rxd));
125   save_item(NAME(m_dcd));
126   save_item(NAME(m_cts));
127127   save_item(NAME(m_status_read));
128128   save_item(NAME(m_dcd_triggered));
129129}
r26685r26686
135135
136136void acia6850_device::device_reset()
137137{
138   int cts = m_in_cts_func();
139   int dcd = m_in_dcd_func();
140
141   m_status = (cts << 3) | (dcd << 2) | ACIA6850_STATUS_TDRE;
138   m_status = (m_cts << 3) | (m_dcd << 2) | ACIA6850_STATUS_TDRE;
142139   m_tdr = 0;
143140   m_rdr = 0;
144141   m_tx_shift = 0;
r26685r26686
178175   }
179176}
180177
178DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_rx )
179{
180   m_rts = state;
181}
181182
183DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_dcd )
184{
185   m_dcd = state;
186}
187
188DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_cts )
189{
190   m_cts = state;
191}
192
182193//-------------------------------------------------
183194//  device_timer - handle timer callbacks
184195//-------------------------------------------------
r26685r26686
226237
227238void acia6850_device::check_dcd_input()
228239{
229   int dcd = m_in_dcd_func();
230
231   if (dcd)
240   if (m_dcd)
232241   {
233242      // IRQ from DCD is edge triggered
234243      if ( ! ( m_status & ACIA6850_STATUS_DCD ) )
r26685r26686
438447         }
439448         else
440449         {
441            int _cts = m_in_cts_func();
442
443            if (_cts)
450            if (m_cts)
444451            {
445452               m_status |= ACIA6850_STATUS_CTS;
446453            }
r26685r26686
542549
543550void acia6850_device::tx_clock_in()
544551{
545   int _cts = m_in_cts_func();
546
547   if (_cts)
552   if (m_cts)
548553   {
549554      m_status |= ACIA6850_STATUS_CTS;
550555   }
r26685r26686
578583   }
579584   else
580585   {
581      int rxd = m_in_rx_func();
582
583586      switch (m_rx_state)
584587      {
585588         case START:
586589         {
587            if (rxd == 0)
590            if (m_rxd == 0)
588591            {
589592               if (LOG) logerror("MC6850 '%s': RX START BIT\n", tag());
590593               m_rx_shift = 0;
r26685r26686
596599         }
597600         case DATA:
598601         {
599            if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), rxd);
600            m_rx_shift |= rxd ? 0x80 : 0;
601            m_rx_parity ^= rxd;
602            if (LOG) logerror("MC6850 '%s': RX DATA BIT %x\n", tag(), m_rxd);
603            m_rx_shift |= m_rxd ? 0x80 : 0;
604            m_rx_parity ^= m_rxd;
602605
603606            if (--m_rx_bits == 0)
604607            {
r26685r26686
618621         }
619622         case PARITY:
620623         {
621            if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), rxd);
622            m_rx_parity ^= rxd;
624            if (LOG) logerror("MC6850 '%s': RX PARITY BIT %x\n", tag(), m_rxd);
625            m_rx_parity ^= m_rxd;
623626
624627            if (m_parity == EVEN)
625628            {
r26685r26686
641644         }
642645         case STOP:
643646         {
644            if (rxd == 1)
647            if (m_rxd == 1)
645648            {
646649               if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag());
647650               if (m_stopbits == 1)
r26685r26686
672675         }
673676         case STOP2:
674677         {
675            if (rxd == 1)
678            if (m_rxd == 1)
676679            {
677680               if (LOG) logerror("MC6850 '%s': RX STOP BIT\n", tag());
678681               m_status &= ~ACIA6850_STATUS_FE;
trunk/src/emu/machine/6850acia.h
r26685r26686
5454   int m_tx_clock;
5555   int m_rx_clock;
5656
57   devcb_read_line     m_in_rx_cb;
5857   devcb_write_line    m_out_tx_cb;
59
60   devcb_read_line     m_in_cts_cb;
6158   devcb_write_line    m_out_rts_cb;
62   devcb_read_line     m_in_dcd_cb;
63
6459   devcb_write_line    m_out_irq_cb;
6560};
6661
r26685r26686
8378   DECLARE_WRITE8_MEMBER( data_write );
8479   DECLARE_READ8_MEMBER( data_read );
8580
81   DECLARE_WRITE_LINE_MEMBER( write_rx );
82   DECLARE_WRITE_LINE_MEMBER( write_dcd );
83   DECLARE_WRITE_LINE_MEMBER( write_cts );
84
8685   void tx_clock_in();
8786   void rx_clock_in();
8887
r26685r26686
131130      EVEN
132131   };
133132
134   devcb_resolved_read_line    m_in_rx_func;
135133   devcb_resolved_write_line   m_out_tx_func;
136   devcb_resolved_read_line    m_in_cts_func;
137134   devcb_resolved_write_line   m_out_rts_func;
138   devcb_resolved_read_line    m_in_dcd_func;
139135   devcb_resolved_write_line   m_out_irq_func;
140136
141137   UINT8       m_ctrl;
r26685r26686
174170   serial_state m_tx_state;
175171   int         m_irq;
176172   bool        m_dcd_triggered;
173   int         m_rxd;
174   int         m_dcd;
175   int         m_cts;
177176
178177   emu_timer   *m_rx_timer;
179178   emu_timer   *m_tx_timer;
trunk/src/emu/bus/a2bus/a2midi.h
r26685r26686
3636   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
3737   DECLARE_WRITE_LINE_MEMBER( ptm_irq_w );
3838   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
39   DECLARE_READ_LINE_MEMBER( rx_in );
40   DECLARE_WRITE_LINE_MEMBER( tx_out );
4139
4240protected:
4341   virtual void device_start();
r26685r26686
4846
4947   required_device<ptm6840_device> m_ptm;
5048   required_device<acia6850_device> m_acia;
51   required_device<serial_port_device> m_mdout;
5249
5350private:
5451   bool m_acia_irq, m_ptm_irq;
55   int m_rx_state;
5652};
5753
5854// device type definition
trunk/src/emu/bus/a2bus/a2midi.c
r26685r26686
3232   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, ptm_irq_w)
3333};
3434
35static struct acia6850_interface acia_interface =
35static ACIA6850_INTERFACE( acia_interface )
3636{
3737   31250*16,   // tx clock
3838   0,          // rx clock (we manually clock rx)
39   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, rx_in),  // rx in
40   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, tx_out), // tx out
41   DEVCB_NULL, // cts in
39   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx), // tx out
4240   DEVCB_NULL, // rts out
43   DEVCB_NULL, // dcd in
4441   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, a2bus_midi_device, acia_irq_w)
4542};
4643
r26685r26686
8077      device_t(mconfig, A2BUS_MIDI, "6850 MIDI card", tag, owner, clock, "a2midi", __FILE__),
8178      device_a2bus_card_interface(mconfig, *this),
8279      m_ptm(*this, MIDI_PTM_TAG),
83      m_acia(*this, MIDI_ACIA_TAG),
84      m_mdout(*this, "mdout")
80      m_acia(*this, MIDI_ACIA_TAG)
8581{
8682}
8783
r26685r26686
8985      device_t(mconfig, type, name, tag, owner, clock, shortname, source),
9086      device_a2bus_card_interface(mconfig, *this),
9187      m_ptm(*this, MIDI_PTM_TAG),
92      m_acia(*this, MIDI_ACIA_TAG),
93      m_mdout(*this, "mdout")
88      m_acia(*this, MIDI_ACIA_TAG)
9489{
9590}
9691
r26685r26686
107102void a2bus_midi_device::device_reset()
108103{
109104   m_acia_irq = m_ptm_irq = false;
110   m_rx_state = 0;
111105}
112106
113107/*-------------------------------------------------
r26685r26686
192186
193187WRITE_LINE_MEMBER( a2bus_midi_device::midi_rx_w )
194188{
195   m_rx_state = state;
189   m_acia->write_rx(state);
190
196191   for (int i = 0; i < 16; i++)    // divider is set to 16
197192   {
198193      m_acia->rx_clock_in();
199194   }
200195}
201
202READ_LINE_MEMBER( a2bus_midi_device::rx_in )
203{
204   return m_rx_state;
205}
206
207WRITE_LINE_MEMBER( a2bus_midi_device::tx_out )
208{
209   m_mdout->tx(state);
210}
trunk/src/emu/bus/cbmiec/interpod.c
r26685r26686
169169   0,
170170   DEVCB_NULL,
171171   DEVCB_NULL,
172   DEVCB_NULL,
173   DEVCB_NULL,
174   DEVCB_NULL,
175172   DEVCB_NULL
176173};
177174
trunk/src/emu/bus/c64/midi_sci.c
r26685r26686
3737   m_slot->irq_w(state);
3838}
3939
40READ_LINE_MEMBER( c64_sequential_midi_cartridge_device::rx_in )
41{
42   return m_rx_state;
43}
44
45WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::tx_out )
46{
47   m_mdout->tx(state);
48}
49
5040static ACIA6850_INTERFACE( acia_intf )
5141{
5242   500000,
5343   0,          // rx clock (we manually clock rx)
54   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, rx_in),
55   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, tx_out),
44   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
5645   DEVCB_NULL,
57   DEVCB_NULL,
58   DEVCB_NULL,
5946   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_sequential_midi_cartridge_device, acia_irq_w)
6047};
6148
r26685r26686
7057
7158WRITE_LINE_MEMBER( c64_sequential_midi_cartridge_device::midi_rx_w )
7259{
73   m_rx_state = state;
60   m_acia->write_rx(state);
7461
7562   for (int i = 0; i < 16; i++)    // divider is set to 16
7663   {
r26685r26686
125112c64_sequential_midi_cartridge_device::c64_sequential_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
126113   device_t(mconfig, C64_MIDI_SCI, "C64 Sequential Circuits MIDI", tag, owner, clock, "c64_midisci", __FILE__),
127114   device_c64_expansion_card_interface(mconfig, *this),
128   m_acia(*this, MC6850_TAG),
129   m_mdout(*this, "mdout"),
130   m_rx_state(0)
115   m_acia(*this, MC6850_TAG)
131116{
132117}
133118
r26685r26686
139124void c64_sequential_midi_cartridge_device::device_start()
140125{
141126   // state saving
142   save_item(NAME(m_rx_state));
143127}
144128
145129//-------------------------------------------------
r26685r26686
149133void c64_sequential_midi_cartridge_device::device_reset()
150134{
151135   m_acia->reset();
152
153   m_rx_state = 0;
154136}
155137
156138
trunk/src/emu/bus/c64/midi_sci.h
r26685r26686
4141
4242   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
4343   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
44   DECLARE_READ_LINE_MEMBER( rx_in );
45   DECLARE_WRITE_LINE_MEMBER( tx_out );
4644
4745protected:
4846   // device-level overrides
r26685r26686
5553
5654private:
5755   required_device<acia6850_device> m_acia;
58   required_device<serial_port_device> m_mdout;
59
60   int m_rx_state;
6156};
6257
6358
trunk/src/emu/bus/c64/midi_passport.c
r26685r26686
6060   m_slot->irq_w(m_ptm_irq || m_acia_irq);
6161}
6262
63READ_LINE_MEMBER( c64_passport_midi_cartridge_device::rx_in )
64{
65   return m_rx_state;
66}
67
68WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::tx_out )
69{
70   m_mdout->tx(state);
71}
72
7363static ACIA6850_INTERFACE( acia_intf )
7464{
7565   500000,
7666   0,          // rx clock (we manually clock rx)
77   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, rx_in),
78   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, tx_out),
67   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
7968   DEVCB_NULL,
80   DEVCB_NULL,
81   DEVCB_NULL,
8269   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_passport_midi_cartridge_device, acia_irq_w)
8370};
8471
r26685r26686
9380
9481WRITE_LINE_MEMBER( c64_passport_midi_cartridge_device::midi_rx_w )
9582{
96   m_rx_state = state;
83   m_acia->write_rx(state);
9784
9885   for (int i = 0; i < 16; i++)    // divider is set to 16
9986   {
r26685r26686
151138   device_c64_expansion_card_interface(mconfig, *this),
152139   m_acia(*this, MC6850_TAG),
153140   m_ptm(*this, MC6840_TAG),
154   m_mdout(*this, "mdout"),
155141   m_ptm_irq(CLEAR_LINE),
156   m_acia_irq(CLEAR_LINE),
157   m_rx_state(0)
142   m_acia_irq(CLEAR_LINE)
158143{
159144}
160145
r26685r26686
168153   // state saving
169154   save_item(NAME(m_ptm_irq));
170155   save_item(NAME(m_acia_irq));
171   save_item(NAME(m_rx_state));
172156}
173157
174158
r26685r26686
180164{
181165   m_acia->reset();
182166   m_ptm->reset();
183
184   m_rx_state = 0;
185167}
186168
187169
trunk/src/emu/bus/c64/midi_passport.h
r26685r26686
4343   DECLARE_WRITE_LINE_MEMBER( ptm_irq_w );
4444   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
4545   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
46   DECLARE_READ_LINE_MEMBER( rx_in );
47   DECLARE_WRITE_LINE_MEMBER( tx_out );
4846
4947protected:
5048   // device-level overrides
r26685r26686
5856private:
5957   required_device<acia6850_device> m_acia;
6058   required_device<ptm6840_device> m_ptm;
61   required_device<serial_port_device> m_mdout;
6259
6360   int m_ptm_irq;
6461   int m_acia_irq;
65   int m_rx_state;
6662};
6763
6864
trunk/src/emu/bus/c64/midi_namesoft.c
r26685r26686
3737   m_slot->nmi_w(state);
3838}
3939
40READ_LINE_MEMBER( c64_namesoft_midi_cartridge_device::rx_in )
41{
42   return m_rx_state;
43}
44
45WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::tx_out )
46{
47   m_mdout->tx(state);
48}
49
5040static ACIA6850_INTERFACE( acia_intf )
5141{
5242   500000,
5343   0,          // rx clock (we manually clock rx)
54   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, rx_in),
55   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, tx_out),
44   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
5645   DEVCB_NULL,
57   DEVCB_NULL,
58   DEVCB_NULL,
5946   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_namesoft_midi_cartridge_device, acia_irq_w)
6047};
6148
r26685r26686
7057
7158WRITE_LINE_MEMBER( c64_namesoft_midi_cartridge_device::midi_rx_w )
7259{
73   m_rx_state = state;
60   m_acia->write_rx(state);
7461
7562   for (int i = 0; i < 16; i++)    // divider is set to 16
7663   {
r26685r26686
125112c64_namesoft_midi_cartridge_device::c64_namesoft_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
126113   device_t(mconfig, C64_MIDI_NAMESOFT, "C64 Namesoft MIDI", tag, owner, clock, "c64_midins", __FILE__),
127114   device_c64_expansion_card_interface(mconfig, *this),
128   m_acia(*this, MC6850_TAG),
129   m_mdout(*this, "mdout"),
130   m_rx_state(0)
115   m_acia(*this, MC6850_TAG)
131116{
132117}
133118
r26685r26686
138123
139124void c64_namesoft_midi_cartridge_device::device_start()
140125{
141   // state saving
142   save_item(NAME(m_rx_state));
143126}
144127
145128//-------------------------------------------------
r26685r26686
149132void c64_namesoft_midi_cartridge_device::device_reset()
150133{
151134   m_acia->reset();
152
153   m_rx_state = 0;
154135}
155136
156137
trunk/src/emu/bus/c64/midi_namesoft.h
r26685r26686
4141
4242   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
4343   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
44   DECLARE_READ_LINE_MEMBER( rx_in );
45   DECLARE_WRITE_LINE_MEMBER( tx_out );
46
4744protected:
4845   // device-level overrides
4946   virtual void device_start();
r26685r26686
5552
5653private:
5754   required_device<acia6850_device> m_acia;
58   required_device<serial_port_device> m_mdout;
59
60   int m_rx_state;
6155};
6256
6357
trunk/src/emu/bus/c64/midi_siel.c
r26685r26686
3737   m_slot->irq_w(state);
3838}
3939
40READ_LINE_MEMBER( c64_siel_midi_cartridge_device::rx_in )
41{
42   return m_rx_state;
43}
44
45WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::tx_out )
46{
47   m_mdout->tx(state);
48}
49
5040static ACIA6850_INTERFACE( acia_intf )
5141{
5242   XTAL_2MHz,
5343   0,          // rx clock (we manually clock rx)
54   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, rx_in),
55   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, tx_out),
44   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
5645   DEVCB_NULL,
57   DEVCB_NULL,
58   DEVCB_NULL,
5946   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_siel_midi_cartridge_device, acia_irq_w)
6047};
6148
r26685r26686
7057
7158WRITE_LINE_MEMBER( c64_siel_midi_cartridge_device::midi_rx_w )
7259{
73   m_rx_state = state;
60   m_acia->write_rx(state);
7461
7562   for (int i = 0; i < 64; i++)    // divider is set to 64
7663   {
r26685r26686
125112c64_siel_midi_cartridge_device::c64_siel_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
126113   device_t(mconfig, C64_MIDI_SIEL, "C64 Siel MIDI", tag, owner, clock, "c64_midisiel", __FILE__),
127114   device_c64_expansion_card_interface(mconfig, *this),
128   m_acia(*this, MC6850_TAG),
129   m_mdout(*this, "mdout"),
130   m_rx_state(0)
115   m_acia(*this, MC6850_TAG)
131116{
132117}
133118
r26685r26686
139124void c64_siel_midi_cartridge_device::device_start()
140125{
141126   // state saving
142   save_item(NAME(m_rx_state));
143127}
144128
145129
r26685r26686
150134void c64_siel_midi_cartridge_device::device_reset()
151135{
152136   m_acia->reset();
153
154   m_rx_state = 0;
155137}
156138
157139
trunk/src/emu/bus/c64/midi_siel.h
r26685r26686
4141
4242   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
4343   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
44   DECLARE_READ_LINE_MEMBER( rx_in );
45   DECLARE_WRITE_LINE_MEMBER( tx_out );
4644
4745protected:
4846   // device-level overrides
r26685r26686
5553
5654private:
5755   required_device<acia6850_device> m_acia;
58   required_device<serial_port_device> m_mdout;
59
60   int m_rx_state;
6156};
6257
6358
trunk/src/emu/bus/c64/midi_maplin.c
r26685r26686
3737   m_slot->irq_w(state);
3838}
3939
40READ_LINE_MEMBER( c64_maplin_midi_cartridge_device::rx_in )
41{
42   return m_rx_state;
43}
44
45WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::tx_out )
46{
47   m_mdout->tx(state);
48}
49
5040static ACIA6850_INTERFACE( acia_intf )
5141{
5242   500000,
5343   0,          // rx clock (we manually clock rx)
54   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, rx_in),
55   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, tx_out),
44   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
5645   DEVCB_NULL,
57   DEVCB_NULL,
58   DEVCB_NULL,
5946   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, c64_maplin_midi_cartridge_device, acia_irq_w)
6047};
6148
r26685r26686
7057
7158WRITE_LINE_MEMBER( c64_maplin_midi_cartridge_device::midi_rx_w )
7259{
73   m_rx_state = state;
60   m_acia->write_rx(state);
7461
7562   for (int i = 0; i < 16; i++)    // divider is set to 64
7663   {
r26685r26686
125112c64_maplin_midi_cartridge_device::c64_maplin_midi_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
126113   device_t(mconfig, C64_MIDI_MAPLIN, "C64 Maplin MIDI", tag, owner, clock, "c64_midimap", __FILE__),
127114   device_c64_expansion_card_interface(mconfig, *this),
128   m_acia(*this, MC6850_TAG),
129   m_mdout(*this, "mdout"),
130   m_rx_state(0)
115   m_acia(*this, MC6850_TAG)
131116{
132117}
133118
r26685r26686
139124void c64_maplin_midi_cartridge_device::device_start()
140125{
141126   // state saving
142   save_item(NAME(m_rx_state));
143127}
144128
145129
r26685r26686
150134void c64_maplin_midi_cartridge_device::device_reset()
151135{
152136   m_acia->reset();
153
154   m_rx_state = 0;
155137}
156138
157139
trunk/src/emu/bus/c64/midi_maplin.h
r26685r26686
4141
4242   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
4343   DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
44   DECLARE_READ_LINE_MEMBER( rx_in );
45   DECLARE_WRITE_LINE_MEMBER( tx_out );
4644
4745protected:
4846   // device-level overrides
r26685r26686
5553
5654private:
5755   required_device<acia6850_device> m_acia;
58   required_device<serial_port_device> m_mdout;
59
60   int m_rx_state;
6156};
6257
6358
trunk/src/mess/machine/thomson.c
r26685r26686
826826   DEVCB_NULL
827827};
828828
829READ_LINE_MEMBER( thomson_state::to7_modem_rx_r )
830{
831   return m_to7_modem_rx;
832}
833
834829WRITE_LINE_MEMBER( thomson_state::to7_modem_tx_w )
835830{
836831   m_to7_modem_tx = state;
r26685r26686
840835{
841836   1200,
842837   1200, /* 1200 bauds, might be divided by 16 */
843   DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_rx_r), /*&to7_modem_rx,*/
844838   DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_tx_w), /*&to7_modem_tx,*/
845839   DEVCB_NULL,
846   DEVCB_NULL,
847   DEVCB_NULL,
848840   DEVCB_DRIVER_LINE_MEMBER(thomson_state, to7_modem_cb)
849841};
850842
r26685r26686
853845void thomson_state::to7_modem_reset()
854846{
855847   LOG (( "to7_modem_reset called\n" ));
856   m_to7_modem_rx = 0;
848   m_acia->write_rx(0);
857849   m_to7_modem_tx = 0;
858850   /* pia_reset() is called in machine_reset */
859851   /* acia_6850 has no reset (?) */
r26685r26686
864856void thomson_state::to7_modem_init()
865857{
866858   LOG (( "to7_modem_init: MODEM not implemented!\n" ));
867   save_item(NAME(m_to7_modem_rx));
868859   save_item(NAME(m_to7_modem_tx));
869860}
870861
trunk/src/mess/machine/isa_gus.c
r26685r26686
12001200
12011201/* 16-bit ISA card device implementation */
12021202
1203static const acia6850_interface gus_midi_interface =
1203static ACIA6850_INTERFACE(gus_midi_interface)
12041204{
12051205   31250 * 16,
12061206   0,
1207
1208   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, rx_in),   // rx in
1209   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa16_gus_device, tx_out),  // tx out
1210
1207   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
12111208   DEVCB_NULL,
1212   DEVCB_NULL,
1213   DEVCB_NULL,
1214
12151209   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,isa16_gus_device,midi_irq)
12161210};
12171211
r26685r26686
12901284{
12911285   m_gf1 = subdevice<gf1_device>("gf1");
12921286   m_midi = subdevice<acia6850_device>("midi");
1293   m_mdout = subdevice<serial_port_device>("mdout");
12941287   set_isa_device();
12951288   m_isa->install_device(0x0200, 0x0201, 0, 0, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) );
12961289   m_isa->install_device(0x0220, 0x022f, 0, 0, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) );
r26685r26686
17121705
17131706WRITE_LINE_MEMBER( isa16_gus_device::midi_rx_w )
17141707{
1715   m_rx_state = state;
1708   m_midi->write_rx(state);
17161709   for (int i = 0; i < 16; i++)    // divider is set to 16
17171710   {
17181711      m_midi->rx_clock_in();
17191712   }
17201713}
17211714
1722READ_LINE_MEMBER( isa16_gus_device::rx_in )
1723{
1724   return m_rx_state;
1725}
1726
1727WRITE_LINE_MEMBER( isa16_gus_device::tx_out )
1728{
1729   m_mdout->tx(state);
1730}
1731
17321715WRITE_LINE_MEMBER( isa16_gus_device::nmi_w)
17331716{
17341717   m_irq_status |= IRQ_SB;
trunk/src/mess/machine/isa_gus.h
r26685r26686
255255      DECLARE_WRITE_LINE_MEMBER(drq2_w);
256256      DECLARE_WRITE_LINE_MEMBER(nmi_w);
257257      DECLARE_WRITE_LINE_MEMBER( midi_rx_w );
258      DECLARE_READ_LINE_MEMBER( rx_in );
259      DECLARE_WRITE_LINE_MEMBER( tx_out );
260258
261259      // DMA overrides
262260      virtual UINT8 dack_r(int line);
r26685r26686
274272private:
275273      gf1_device* m_gf1;
276274      acia6850_device* m_midi;
277      serial_port_device* m_mdout;
278275
279276      UINT8 m_irq_status;
280277      attotime m_joy_time;
281      int m_rx_state;
282278};
283279
284280// device type definition
trunk/src/mess/machine/bbc.c
r26685r26686
12971297void bbc_state::MC6850_Receive_Clock(int new_clock)
12981298{
12991299   m_rxd_cass = new_clock;
1300   update_acia_rxd();
13001301
13011302   //
13021303   // Somehow the "serial processor" generates 16 clock signals towards
r26685r26686
13661367            logerror ("Cassette length %d\n",m_wav_len);
13671368            m_nr_high_tones = 0;
13681369            m_dcd_cass = 0;
1370            update_acia_dcd();
13691371            m_len0=0;
13701372            m_len1=0;
13711373            m_len2=0;
r26685r26686
13871389            logerror("Serial value 0\n");
13881390            m_nr_high_tones = 0;
13891391            m_dcd_cass = 0;
1392            update_acia_dcd();
13901393            MC6850_Receive_Clock(0);
13911394            m_len0=0;
13921395            m_len1=0;
r26685r26686
14021405            if ( m_nr_high_tones > 100 )
14031406            {
14041407               m_dcd_cass = 1;
1408               update_acia_dcd();
14051409            }
14061410            MC6850_Receive_Clock(1);
14071411            m_len0=0;
r26685r26686
14161420   }
14171421}
14181422
1423WRITE_LINE_MEMBER( bbc_state::write_rxd_serial )
1424{
1425   m_rxd_serial = state;
1426   update_acia_rxd();
1427}
14191428
1420READ_LINE_MEMBER( bbc_state::bbc_rxd_r )
1429void bbc_state::update_acia_rxd()
14211430{
1422   return ( m_serproc_data & 0x40 ) ? m_rs232->rx() : m_rxd_cass;
1431   m_acia->write_rx(( m_serproc_data & 0x40 ) ? m_rxd_serial : m_rxd_cass);
14231432}
14241433
14251434
1426READ_LINE_MEMBER( bbc_state::bbc_dcd_r )
1435WRITE_LINE_MEMBER( bbc_state::write_dcd_serial )
14271436{
1428   return ( m_serproc_data & 0x40 ) ? m_rs232->dcd_r() : m_dcd_cass;
1437   m_dcd_serial = state;
1438   update_acia_dcd();
14291439}
14301440
1441void bbc_state::update_acia_dcd()
1442{
1443   m_acia->write_dcd(( m_serproc_data & 0x40 ) ? m_dcd_serial : m_dcd_cass);
1444}
14311445
1432READ_LINE_MEMBER( bbc_state::bbc_cts_r )
1446
1447WRITE_LINE_MEMBER( bbc_state::write_cts_serial )
14331448{
1434   return ( m_serproc_data & 0x40 ) ? m_rs232->cts_r() : 0;
1449   m_cts_serial = state;
1450   update_acia_cts();
14351451}
14361452
1453void bbc_state::update_acia_cts()
1454{
1455   m_acia->write_cts(( m_serproc_data & 0x40 ) ? m_cts_serial : 0);
1456}
14371457
1458
14381459WRITE_LINE_MEMBER( bbc_state::bbc_rts_w )
14391460{
14401461   if ( m_serproc_data & 0x40 )
r26685r26686
15161537   };
15171538
15181539   m_serproc_data = data;
1540   update_acia_rxd();
1541   update_acia_dcd();
1542   update_acia_cts();
15191543   BBC_Cassette_motor(m_serproc_data & 0x80);
15201544
15211545   // Set transmit clock rate
trunk/src/mess/includes/bbc.h
r26685r26686
175175   int m_len3;
176176   int m_mc6850_clock;
177177   UINT8 m_serproc_data;
178   int m_rxd_serial;
179   int m_dcd_serial;
180   int m_cts_serial;
178181   int m_dcd_cass;
179182   int m_rxd_cass;
180183   int m_cass_out_enabled;
r26685r26686
340343   DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_intrq_w);
341344   DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_drq_w);
342345   DECLARE_WRITE_LINE_MEMBER(bbc_vsync);
343   DECLARE_READ_LINE_MEMBER(bbc_rxd_r);
344   DECLARE_READ_LINE_MEMBER(bbc_dcd_r);
345   DECLARE_READ_LINE_MEMBER(bbc_cts_r);
346   void update_acia_rxd();
347   void update_acia_dcd();
348   void update_acia_cts();
346349   DECLARE_WRITE_LINE_MEMBER(bbc_rts_w);
347350   DECLARE_WRITE_LINE_MEMBER(bbc_txd_w);
351   DECLARE_WRITE_LINE_MEMBER(write_rxd_serial);
352   DECLARE_WRITE_LINE_MEMBER(write_dcd_serial);
353   DECLARE_WRITE_LINE_MEMBER(write_cts_serial);
348354   DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
349355
350356   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart );
trunk/src/mess/includes/thomson.h
r26685r26686
137137   DECLARE_WRITE8_MEMBER( to7_io_portb_out );
138138   DECLARE_WRITE8_MEMBER( to7_io_cb2_out );
139139   DECLARE_WRITE_LINE_MEMBER( to7_modem_cb );
140   DECLARE_READ_LINE_MEMBER( to7_modem_rx_r );
141140   DECLARE_WRITE_LINE_MEMBER( to7_modem_tx_w );
142141   DECLARE_READ8_MEMBER( to7_modem_mea8000_r );
143142   DECLARE_WRITE8_MEMBER( to7_modem_mea8000_w );
r26685r26686
339338   UINT8 m_thom_cart_bank;     /* current bank */
340339   UINT8 m_to7_lightpen_step;
341340   UINT8 m_to7_lightpen;
342   UINT8 m_to7_modem_rx;
343341   UINT8 m_to7_modem_tx;
344342   /* calls to7_game_update_cb periodically */
345343   emu_timer* m_to7_game_timer;
trunk/src/mess/includes/atarist.h
r26685r26686
8787         m_maincpu(*this, M68000_TAG),
8888         m_fdc(*this, WD1772_TAG),
8989         m_mfp(*this, MC68901_TAG),
90         m_acia0(*this, MC6850_0_TAG),
9091         m_acia1(*this, MC6850_1_TAG),
9192         m_centronics(*this, CENTRONICS_TAG),
9293         m_ram(*this, RAM_TAG),
9394         m_rs232(*this, RS232_TAG),
94         m_mdout(*this, "mdout"),
9595         m_p31(*this, "P31"),
9696         m_p32(*this, "P32"),
9797         m_p33(*this, "P33"),
r26685r26686
125125   required_device<cpu_device> m_maincpu;
126126   required_device<wd1772_t> m_fdc;
127127   required_device<mc68901_device> m_mfp;
128   required_device<acia6850_device> m_acia0;
128129   required_device<acia6850_device> m_acia1;
129130   required_device<centronics_device> m_centronics;
130131   required_device<ram_device> m_ram;
131132   required_device<rs232_port_device> m_rs232;
132   required_device<serial_port_device> m_mdout;
133133   required_ioport m_p31;
134134   required_ioport m_p32;
135135   required_ioport m_p33;
r26685r26686
231231
232232   DECLARE_WRITE8_MEMBER( psg_pa_w );
233233
234   DECLARE_READ_LINE_MEMBER( ikbd_rx_r );
235234   DECLARE_WRITE_LINE_MEMBER( ikbd_tx_w );
236235   DECLARE_WRITE_LINE_MEMBER( acia_ikbd_irq_w );
237   DECLARE_READ_LINE_MEMBER( midi_rx_in );
238   DECLARE_WRITE_LINE_MEMBER( midi_tx_out );
239236   DECLARE_WRITE_LINE_MEMBER( acia_midi_irq_w );
240237
241238   DECLARE_READ8_MEMBER( mfp_gpio_r );
r26685r26686
254251   /* memory state */
255252   UINT8 m_mmu;
256253
257   // MIDI state
258   int m_midi_rx_state;
259
260254   /* keyboard state */
261255   int m_acia_ikbd_irq;
262256   int m_acia_midi_irq;
r26685r26686
267261   UINT8 m_ikbd_mouse_px;
268262   UINT8 m_ikbd_mouse_py;
269263   UINT8 m_ikbd_mouse_pc;
270   int m_ikbd_rx;
271264   int m_ikbd_tx;
272265   int m_ikbd_joy;
273   int m_midi_rx;
274266   int m_midi_tx;
275267
276268   /* floppy state */
trunk/src/mess/includes/osi.h
r26685r26686
3030public:
3131   enum
3232   {
33      TIMER_CASSETTE,
3334      TIMER_SETUP_BEEP
3435   };
3536
3637   sb2m600_state(const machine_config &mconfig, device_type type, const char *tag)
3738      : driver_device(mconfig, type, tag),
3839   m_maincpu(*this, M6502_TAG),
40   m_acia_0(*this, "acia_0"),
3941   m_cassette(*this, "cassette"),
4042   m_discrete(*this, DISCRETE_TAG),
4143   m_ram(*this, RAM_TAG),
r26685r26686
6062   DECLARE_READ8_MEMBER( keyboard_r );
6163   DECLARE_WRITE8_MEMBER( keyboard_w );
6264   DECLARE_WRITE8_MEMBER( ctrl_w );
63   DECLARE_READ_LINE_MEMBER( cassette_rx );
6465   DECLARE_WRITE_LINE_MEMBER( cassette_tx );
6566
6667   /* keyboard state */
r26685r26686
7879   DECLARE_PALETTE_INIT(osi630);
7980
8081   required_device<cpu_device> m_maincpu;
82   required_device<acia6850_device> m_acia_0;
8183   required_device<cassette_image_device> m_cassette;
8284   optional_device<discrete_sound_device> m_discrete;
8385   required_device<ram_device> m_ram;
r26685r26686
9496   required_ioport m_io_sound;
9597   required_ioport m_io_reset;
9698   optional_device<beep_device> m_beeper;
99   emu_timer *m_cassette_timer;
97100
98101protected:
99102   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
trunk/src/mess/includes/newbrain.h
r26685r26686
164164   int m_bee;              // identity
165165   UINT8 m_enrg1;          // enable register 1
166166   UINT8 m_enrg2;          // enable register 2
167   int m_acia_rxd;         // ACIA receive
168167   int m_acia_txd;         // ACIA transmit
169168
170169   // COP420 state
r26685r26686
239238   DECLARE_READ8_MEMBER( usbs_r );
240239   DECLARE_WRITE8_MEMBER( usbs_w );
241240   DECLARE_WRITE8_MEMBER( paging_w );
242   DECLARE_READ_LINE_MEMBER( acia_rx );
243241   DECLARE_WRITE_LINE_MEMBER( acia_tx );
244242   DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
245243   DECLARE_WRITE_LINE_MEMBER( fdc_interrupt );
trunk/src/mess/drivers/atarist.c
r26685r26686
594594   m_ikbd_joy = BIT(data, 0);
595595
596596   // serial transmit
597   m_ikbd_rx = BIT(data, 4);
597   m_acia0->write_rx(BIT(data, 4));
598598}
599599
600600
r26685r26686
18221822//  ACIA6850_INTERFACE( acia_ikbd_intf )
18231823//-------------------------------------------------
18241824
1825READ_LINE_MEMBER( st_state::ikbd_rx_r )
1826{
1827   return m_ikbd_rx;
1828}
1829
18301825WRITE_LINE_MEMBER( st_state::ikbd_tx_w )
18311826{
18321827   m_ikbd_tx = state;
r26685r26686
18431838{
18441839   Y2/64,
18451840   Y2/64,
1846   DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r),
18471841   DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w),
18481842   DEVCB_NULL,
1849   DEVCB_NULL,
1850   DEVCB_NULL,
18511843   DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w)
18521844};
18531845
r26685r26686
18601852{
18611853   U517/2/16, // 500kHz
18621854   U517/2/2, // 1MHZ
1863   DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_rx_r),
18641855   DEVCB_DRIVER_LINE_MEMBER(st_state, ikbd_tx_w),
18651856   DEVCB_NULL,
1866   DEVCB_NULL,
1867   DEVCB_NULL,
18681857   DEVCB_DRIVER_LINE_MEMBER(st_state, acia_ikbd_irq_w)
18691858};
18701859
r26685r26686
18731862//  ACIA6850_INTERFACE( acia_midi_intf )
18741863//-------------------------------------------------
18751864
1876READ_LINE_MEMBER( st_state::midi_rx_in )
1877{
1878   return m_midi_rx_state;
1879}
1880
1881WRITE_LINE_MEMBER( st_state::midi_tx_out )
1882{
1883   m_mdout->tx(state);
1884}
1885
18861865WRITE_LINE_MEMBER( st_state::acia_midi_irq_w )
18871866{
18881867   m_acia_midi_irq = state;
r26685r26686
18941873{
18951874   Y2/64,
18961875   0,          // rx clock (we manually clock rx)
1897   DEVCB_DRIVER_LINE_MEMBER(st_state, midi_rx_in),
1898   DEVCB_DRIVER_LINE_MEMBER(st_state, midi_tx_out),
1876   DEVCB_DEVICE_LINE_MEMBER("mdout", serial_port_device, tx),
18991877   DEVCB_NULL,
1900   DEVCB_NULL,
1901   DEVCB_NULL,
19021878   DEVCB_DRIVER_LINE_MEMBER(st_state, acia_midi_irq_w)
19031879};
19041880
r26685r26686
21522128
21532129WRITE_LINE_MEMBER( st_state::midi_rx_w )
21542130{
2155   m_midi_rx_state = state;
2131   m_acia1->write_rx(state);
21562132
21572133   for (int i = 0; i < 64; i++)    // divider is set to 64
21582134   {
r26685r26686
22392215   save_item(NAME(m_ikbd_mouse_px));
22402216   save_item(NAME(m_ikbd_mouse_py));
22412217   save_item(NAME(m_ikbd_mouse_pc));
2242   save_item(NAME(m_ikbd_rx));
22432218   save_item(NAME(m_ikbd_tx));
22442219   save_item(NAME(m_ikbd_joy));
2245   save_item(NAME(m_midi_rx));
22462220   save_item(NAME(m_midi_tx));
22472221   save_item(NAME(m_acia_ikbd_irq));
22482222   save_item(NAME(m_acia_midi_irq));
r26685r26686
26182592   MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, centronics_intf)
26192593   MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL, NULL)
26202594
2621   MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin", NULL)
2595   MCFG_SERIAL_PORT_ADD("mdin", midiin_slot, "midiin")
26222596   MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(st_state, midi_rx_w))
26232597
2624   MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout", NULL)
2598   MCFG_SERIAL_PORT_ADD("mdout", midiout_slot, "midiout")
26252599
26262600   // cartridge
26272601   MCFG_CARTSLOT_ADD("cart")
trunk/src/mess/drivers/bbc.c
r26685r26686
555555{
556556   0,
557557   0,
558   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rxd_r),
559558   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_txd_w),
560   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_cts_r),
561559   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_rts_w),
562   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbc_dcd_r),
563560   DEVCB_DRIVER_LINE_MEMBER(bbc_state,bbcb_acia6850_irq_w)
564561};
565562
r26685r26686
697694   /* acia */
698695   MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
699696   MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
697   MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
698   MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial))
699   MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial))
700700
701701   /* devices */
702702   MCFG_VIA6522_ADD("via6522_0", 1000000, bbcb_system_via)
r26685r26686
884884   /* acia */
885885   MCFG_ACIA6850_ADD("acia6850", bbc_acia6850_interface)
886886   MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
887   MCFG_SERIAL_OUT_RX_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
888   MCFG_RS232_OUT_DCD_HANDLER(WRITELINE(bbc_state, write_dcd_serial))
889   MCFG_RS232_OUT_CTS_HANDLER(WRITELINE(bbc_state, write_cts_serial))
887890
888891   /* devices */
889892   MCFG_UPD7002_ADD("upd7002", bbc_uPD7002)
trunk/src/mess/drivers/cat.c
r26685r26686
13081308   3579545, // guess
13091309   DEVCB_NULL,
13101310   DEVCB_NULL,
1311   DEVCB_NULL,
1312   DEVCB_NULL,
1313   DEVCB_NULL,
1311   DEVCB_NULL
13141312};
13151313
13161314static const via6522_interface swyft_via0_config =
trunk/src/mess/drivers/ob68k1a.c
r26685r26686
215215{
216216   0,
217217   0,
218   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
219218   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
220   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, cts_r),
221219   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
222   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dcd_r),
223220   DEVCB_NULL
224221};
225222
r26685r26686
232229{
233230   0,
234231   0,
235   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
236232   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
237   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r),
238233   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
239   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dcd_r),
240234   DEVCB_NULL,
241235};
242236
r26685r26686
318312   MCFG_ACIA6850_ADD(MC6850_0_TAG, acia0_intf)
319313   MCFG_ACIA6850_ADD(MC6850_1_TAG, acia1_intf)
320314   MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(ob68k1a_state, rx_tx_0_w), WRITELINE(ob68k1a_state, rx_tx_1_w))
315
321316   MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, "serial_terminal")
317   MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_rx))
318   MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_dcd))
319   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_0_TAG, acia6850_device, write_cts))
320
322321   MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
322   MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_rx))
323   MCFG_RS232_OUT_DCD_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_dcd))
324   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(MC6850_1_TAG, acia6850_device, write_cts))
323325
324326   // internal ram
325327   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/mekd2.c
r26685r26686
106106   DECLARE_WRITE8_MEMBER(mekd2_digit_w);
107107   DECLARE_WRITE8_MEMBER(mekd2_segment_w);
108108   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mekd2_cart);
109   DECLARE_READ_LINE_MEMBER(cass_r);
110109   DECLARE_WRITE_LINE_MEMBER(cass_w);
111110   TIMER_DEVICE_CALLBACK_MEMBER(mekd2_c);
112111   TIMER_DEVICE_CALLBACK_MEMBER(mekd2_p);
r26685r26686
327326   DEVCB_CPU_INPUT_LINE("maincpu", M6800_IRQ_LINE)     /* IRQB output */
328327};
329328
330READ_LINE_MEMBER( mekd2_state::cass_r )
331{
332   return (bool)m_cass_data[2];
333}
334
335329WRITE_LINE_MEMBER( mekd2_state::cass_w )
336330{
337331   m_cass_state = state;
r26685r26686
341335{
342336   XTAL_MEKD2 / 256, /* tx clock 4800Hz */
343337   300,     /* rx clock line, toggled by cassette circuit */
344   DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_r), /* in rxd func */
345338   DEVCB_DRIVER_LINE_MEMBER(mekd2_state, cass_w), /* out txd func */
346   DEVCB_NULL, /* in cts func */
347   DEVCB_NULL, /* out rts func */
348   DEVCB_NULL, /* in dcd func */
339   DEVCB_NULL, // cts
349340   DEVCB_NULL  /* out irq func NOT USED */
350341};
351342
r26685r26686
393384   if (cass_ws != m_cass_data[0])
394385   {
395386      m_cass_data[0] = cass_ws;
396      m_cass_data[2] = ((m_cass_data[1] < 12) ? 1 : 0);
387      m_acia->write_rx((m_cass_data[1] < 12) ? 1 : 0);
397388      m_cass_data[1] = 0;
398389   }
399390}
trunk/src/mess/drivers/newbrain.c
r26685r26686
11531153
11541154/* Machine Initialization */
11551155
1156READ_LINE_MEMBER( newbrain_eim_state::acia_rx )
1157{
1158   return m_acia_rxd;
1159}
1160
11611156WRITE_LINE_MEMBER( newbrain_eim_state::acia_tx )
11621157{
11631158   m_acia_txd = state;
r26685r26686
11721167{
11731168   0,
11741169   0,
1175   DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_rx),
11761170   DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_tx),
11771171   DEVCB_NULL,
1178   DEVCB_NULL,
1179   DEVCB_NULL,
11801172   DEVCB_DRIVER_LINE_MEMBER(newbrain_eim_state, acia_interrupt)
11811173};
11821174
trunk/src/mess/drivers/poly.c
r26685r26686
161161{
162162   1,
163163   1,
164   DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
165164   DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
166   DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
167165   DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
168   DEVCB_NULL,
169166   DEVCB_NULL
170167};
171168
trunk/src/mess/drivers/tavernie.c
r26685r26686
334334{
335335   153600,
336336   153600,
337   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
338337   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
339   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
340338   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
341   DEVCB_NULL,
342339   DEVCB_NULL
343340};
344341
r26685r26686
367364
368365   /* Devices */
369366   MCFG_CASSETTE_ADD( "cassette", default_cassette_interface )
367
370368   MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
369   MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
370   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
371
371372   MCFG_PIA6821_ADD("pia", mc6821_intf)
372373   MCFG_PTM6840_ADD("ptm", mc6840_intf)
373374   MCFG_ACIA6850_ADD("acia", mc6850_intf)
trunk/src/mess/drivers/bml3.c
r26685r26686
105105   DECLARE_WRITE8_MEMBER(bml3bus_irq_w);
106106   DECLARE_WRITE8_MEMBER(bml3bus_firq_w);
107107
108   DECLARE_READ_LINE_MEMBER( bml3_acia_rx_r );
109108   DECLARE_WRITE_LINE_MEMBER( bml3_acia_tx_w );
110   DECLARE_READ_LINE_MEMBER( bml3_acia_dts_r );
111109   DECLARE_WRITE_LINE_MEMBER( bml3_acia_rts_w );
112   DECLARE_READ_LINE_MEMBER(bml3_acia_dcd_r);
113110   DECLARE_WRITE_LINE_MEMBER(bml3_acia_irq_w);
114111
115112   DECLARE_READ8_MEMBER(bml3_a000_r); DECLARE_WRITE8_MEMBER(bml3_a000_w);
r26685r26686
925922};
926923
927924
928READ_LINE_MEMBER( bml3_state::bml3_acia_rx_r )
929{
930   logerror("TAPE R\n");
931   return 1;
932}
933
934925WRITE_LINE_MEMBER( bml3_state::bml3_acia_tx_w )
935926{
936927   logerror("%02x TAPE\n",state);
937928}
938929
939930
940READ_LINE_MEMBER( bml3_state::bml3_acia_dts_r )
941{
942   logerror("TAPE R DTS\n");
943   return 1;
944}
945
946931WRITE_LINE_MEMBER( bml3_state::bml3_acia_rts_w )
947932{
948933   logerror("%02x TAPE RTS\n",state);
949934}
950935
951READ_LINE_MEMBER( bml3_state::bml3_acia_dcd_r )
952{
953   logerror("TAPE R DCD\n");
954   return 1;
955}
956
957936WRITE_LINE_MEMBER( bml3_state::bml3_acia_irq_w )
958937{
959938   logerror("%02x TAPE IRQ\n",state);
r26685r26686
964943{
965944   600,
966945   600,
967   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rx_r),
968946   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_tx_w),
969   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dts_r),
970947   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_rts_w),
971   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_dcd_r),
972948   DEVCB_DRIVER_LINE_MEMBER(bml3_state, bml3_acia_irq_w)
973949};
974950
trunk/src/mess/drivers/osi.c
r26685r26686
644644
645645/* Machine Start */
646646
647READ_LINE_MEMBER( sb2m600_state::cassette_rx )
648{
649   return ((m_cassette)->input() > 0.0) ? 1 : 0;
650}
651
652647WRITE_LINE_MEMBER( sb2m600_state::cassette_tx )
653648{
654649   m_cassette->output(state ? +1.0 : -1.0);
r26685r26686
658653{
659654   X1/32,
660655   X1/32,
661   DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx),
662656   DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx),
663657   DEVCB_NULL,
664   DEVCB_NULL,
665   DEVCB_NULL,
666658   DEVCB_NULL
667659};
668660
r26685r26686
670662{
671663   500000, //
672664   500000, //
673   DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_rx),
674665   DEVCB_DRIVER_LINE_MEMBER(sb2m600_state, cassette_tx),
675666   DEVCB_NULL,
676   DEVCB_NULL,
677   DEVCB_NULL,
678667   DEVCB_NULL
679668};
680669
r26685r26686
684673   XTAL_4MHz/8,    // 250 kHz
685674   DEVCB_NULL,
686675   DEVCB_NULL,
687   DEVCB_NULL,
688   DEVCB_NULL,
689   DEVCB_NULL,
690676   DEVCB_NULL
691677};
692678
r26685r26686
935921{
936922   switch (id)
937923   {
924   case TIMER_CASSETTE:
925      m_acia_0->write_rx(((m_cassette)->input() > 0.0) ? 1 : 0);
926      break;
938927   case TIMER_SETUP_BEEP:
939928      m_beeper->set_state(0);
940929      m_beeper->set_frequency(300);
r26685r26686
947936DRIVER_INIT_MEMBER(c1p_state,c1p)
948937{
949938   timer_set(attotime::zero, TIMER_SETUP_BEEP);
939   m_cassette_timer = timer_alloc(TIMER_CASSETTE);
940   m_cassette_timer->adjust(attotime::from_hz(44100), 0, attotime::from_hz(44100));
950941}
951942
952943
trunk/src/mess/drivers/votrtnt.c
r26685r26686
9393{
9494   153600,
9595   153600,
96   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
9796   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
98   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
9997   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
100   DEVCB_NULL,
10198   DEVCB_NULL
10299};
103100
r26685r26686
120117
121118   /* serial hardware */
122119   MCFG_ACIA6850_ADD("acia", acia_intf)
120
123121   MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
122   MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
123   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
124124
125125   /* sound hardware */
126126   MCFG_SPEAKER_STANDARD_MONO("mono")
trunk/src/mess/drivers/mirage.c
r26685r26686
284284{
285285   0,              // tx clock
286286   0,              // rx clock
287   DEVCB_NULL,         // rx in
288287   DEVCB_NULL,         // rx out
289   DEVCB_NULL,         // cts in
290288   DEVCB_NULL,         // rts out
291   DEVCB_NULL,         // dcd in
292289   DEVCB_DRIVER_LINE_MEMBER(mirage_state, acia_irq_w)
293290};
294291
trunk/src/mess/drivers/v6809.c
r26685r26686
337337   10,
338338   DEVCB_NULL,
339339   DEVCB_NULL,
340   DEVCB_NULL,
341   DEVCB_NULL,
342   DEVCB_NULL,
343340   DEVCB_NULL
344341};
345342
trunk/src/mess/drivers/ec65.c
r26685r26686
9292   0,
9393   DEVCB_NULL,
9494   DEVCB_NULL,
95   DEVCB_NULL,
96   DEVCB_NULL,
97   DEVCB_NULL,
9895   DEVCB_NULL
9996};
10097
trunk/src/mess/drivers/tek405x.c
r26685r26686
11141114   0,
11151115   DEVCB_NULL,
11161116   DEVCB_NULL,
1117   DEVCB_LINE_GND,
1118   DEVCB_NULL,
1119   DEVCB_LINE_GND,
11201117   DEVCB_DRIVER_LINE_MEMBER(tek4051_state, acia_irq_w)
11211118};
11221119
trunk/src/mess/drivers/68ksbc.c
r26685r26686
6666{
6767   153600,
6868   153600,
69   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
7069   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
71   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, cts_r),
7270   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
73   DEVCB_NULL,
7471   DEVCB_NULL
7572};
7673
r26685r26686
8077   MCFG_CPU_PROGRAM_MAP(c68ksbc_mem)
8178
8279   MCFG_ACIA6850_ADD("acia", acia_intf)
80
8381   MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
82   MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rx))
83   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
8484MACHINE_CONFIG_END
8585
8686/* ROM definition */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team