Previous 199869 Revisions Next

r26714 Monday 23rd December, 2013 at 12:31:00 UTC by smf
replaced read netin/dtr1/cts2 callbacks in ZX8302 with write handlers, which allows multiple chips to be connected together without using glue methods. [smf]
[src/mess/drivers]ql.c
[src/mess/machine]zx8302.c zx8302.h

trunk/src/mess/drivers/ql.c
r26713r26714
783783   DEVCB_DRIVER_LINE_MEMBER(ql_state, ql_comdata_w),
784784   DEVCB_NULL, // TXD1
785785   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
786   DEVCB_NULL, // DTR1
787   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r),
788786   DEVCB_NULL, // NETOUT
789   DEVCB_NULL, // NETIN
790787   DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdselck_w),
791788   DEVCB_DEVICE_LINE_MEMBER(MDV_1, microdrive_image_device, comms_in_w),
792789   DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdrdw_w),
r26713r26714
10081005   MCFG_MICRODRIVE_ADD(MDV_2, mdv2_config)
10091006   MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL) // wired as DCE
10101007   MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL) // wired as DTE
1008   MCFG_RS232_OUT_CTS_HANDLER(DEVWRITELINE(ZX8302_TAG, zx8302_device, write_cts2))
10111009
10121010   // cartridge
10131011   MCFG_CARTSLOT_ADD("cart")
trunk/src/mess/machine/zx8302.c
r26713r26714
6767      memset(&out_comdata_cb, 0, sizeof(out_comdata_cb));
6868      memset(&out_txd1_cb, 0, sizeof(out_txd1_cb));
6969      memset(&out_txd2_cb, 0, sizeof(out_txd2_cb));
70      memset(&in_dtr1_cb, 0, sizeof(in_dtr1_cb));
71      memset(&in_cts2_cb, 0, sizeof(in_cts2_cb));
7270      memset(&out_netout_cb, 0, sizeof(out_netout_cb));
73      memset(&in_netin_cb, 0, sizeof(in_netin_cb));
7471      memset(&out_mdselck_cb, 0, sizeof(out_mdselck_cb));
7572      memset(&out_mdseld_cb, 0, sizeof(out_mdseld_cb));
7673      memset(&out_mdrdw_cb, 0, sizeof(out_mdrdw_cb));
r26713r26714
175172zx8302_device::zx8302_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
176173   : device_t(mconfig, ZX8302, "Sinclair ZX8302", tag, owner, clock, "zx8302", __FILE__),
177174      device_serial_interface(mconfig, *this),
175      m_dtr1(0),
176      m_cts2(0),
178177      m_idr(1),
179178      m_irq(0),
180179      m_ctr(time(NULL) + RTC_BASE_ADJUST),
r26713r26714
202201   m_out_comdata_func.resolve(out_comdata_cb, *this);
203202   m_out_txd1_func.resolve(out_txd1_cb, *this);
204203   m_out_txd2_func.resolve(out_txd2_cb, *this);
205   m_in_dtr1_func.resolve(in_dtr1_cb, *this);
206   m_in_cts2_func.resolve(in_cts2_cb, *this);
207204   m_out_netout_func.resolve(out_netout_cb, *this);
208   m_in_netin_func.resolve(in_netin_cb, *this);
209205   m_out_mdselck_func.resolve(out_mdselck_cb, *this);
210206   m_out_mdseld_func.resolve(out_mdseld_cb, *this);
211207   m_out_mdrdw_func.resolve(out_mdrdw_cb, *this);
r26713r26714
225221   m_gap_timer->adjust(attotime::zero, 0, attotime::from_msec(31));
226222
227223   // register for state saving
224   save_item(NAME(m_dtr1));
225   save_item(NAME(m_cts2));
228226   save_item(NAME(m_idr));
229227   save_item(NAME(m_tcr));
230228   save_item(NAME(m_tdr));
r26713r26714
326324   switch (m_tcr & MODE_MASK)
327325   {
328326   case MODE_NET:
329      receive_register_update_bit(m_in_netin_func());
327      receive_register_update_bit(get_in_data_bit());
330328      break;
331329   }
332330}
r26713r26714
457455   // TODO microdrive GAP
458456
459457   // data terminal ready
460   data |= m_in_dtr1_func() << 4;
458   data |= m_dtr1 << 4;
461459
462460   // clear to send
463   data |= m_in_cts2_func() << 5;
461   data |= m_cts2 << 5;
464462
465463   // IPC busy
466464   data |= m_ipc_busy << 6;
r26713r26714
634632      trigger_interrupt(INT_EXTERNAL);
635633   }
636634}
635
636WRITE_LINE_MEMBER( zx8302_device::write_netin )
637{
638   if (state)
639   {
640      input_callback(m_input_state | RX);
641   }
642   else
643   {
644      input_callback(m_input_state & ~RX);
645   }
646}
647
648WRITE_LINE_MEMBER( zx8302_device::write_dtr1 )
649{
650   m_dtr1 = state;
651}
652
653WRITE_LINE_MEMBER( zx8302_device::write_cts2 )
654{
655   m_cts2 = state;
656}
trunk/src/mess/machine/zx8302.h
r26713r26714
7777   devcb_write_line    out_comdata_cb;
7878   devcb_write_line    out_txd1_cb;
7979   devcb_write_line    out_txd2_cb;
80   devcb_read_line     in_dtr1_cb;
81   devcb_read_line     in_cts2_cb;
8280   devcb_write_line    out_netout_cb;
83   devcb_read_line     in_netin_cb;
8481
8582   // microdrive
8683   devcb_write_line    out_mdselck_cb;
r26713r26714
118115   DECLARE_WRITE_LINE_MEMBER( comdata_w );
119116   DECLARE_WRITE_LINE_MEMBER( extint_w );
120117
118   DECLARE_WRITE_LINE_MEMBER( write_netin );
119   DECLARE_WRITE_LINE_MEMBER( write_dtr1 );
120   DECLARE_WRITE_LINE_MEMBER( write_cts2 );
121
121122protected:
122123   // device-level overrides
123124   virtual void device_start();
r26713r26714
194195   devcb_resolved_write_line   m_out_comdata_func;
195196   devcb_resolved_write_line   m_out_txd1_func;
196197   devcb_resolved_write_line   m_out_txd2_func;
197   devcb_resolved_read_line    m_in_dtr1_func;
198   devcb_resolved_read_line    m_in_cts2_func;
199198   devcb_resolved_write_line   m_out_netout_func;
200   devcb_resolved_read_line    m_in_netin_func;
201199
202200   devcb_resolved_write_line   m_out_mdselck_func;
203201   devcb_resolved_write_line   m_out_mdseld_func;
r26713r26714
208206   devcb_resolved_write_line   m_out_raw2_func;
209207   devcb_resolved_read_line    m_in_raw2_func;
210208
209   int m_dtr1;
210   int m_cts2;
211
211212   // registers
212213   UINT8 m_idr;                    // IPC data register
213214   UINT8 m_tcr;                    // transfer control register

Previous 199869 Revisions Next


© 1997-2024 The MAME Team