trunk/src/mess/drivers/ql.c
| r26713 | r26714 | |
| 783 | 783 | DEVCB_DRIVER_LINE_MEMBER(ql_state, ql_comdata_w), |
| 784 | 784 | DEVCB_NULL, // TXD1 |
| 785 | 785 | 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), |
| 788 | 786 | DEVCB_NULL, // NETOUT |
| 789 | | DEVCB_NULL, // NETIN |
| 790 | 787 | DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdselck_w), |
| 791 | 788 | DEVCB_DEVICE_LINE_MEMBER(MDV_1, microdrive_image_device, comms_in_w), |
| 792 | 789 | DEVCB_DRIVER_LINE_MEMBER(ql_state, zx8302_mdrdw_w), |
| r26713 | r26714 | |
| 1008 | 1005 | MCFG_MICRODRIVE_ADD(MDV_2, mdv2_config) |
| 1009 | 1006 | MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL) // wired as DCE |
| 1010 | 1007 | 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)) |
| 1011 | 1009 | |
| 1012 | 1010 | // cartridge |
| 1013 | 1011 | MCFG_CARTSLOT_ADD("cart") |
trunk/src/mess/machine/zx8302.c
| r26713 | r26714 | |
| 67 | 67 | memset(&out_comdata_cb, 0, sizeof(out_comdata_cb)); |
| 68 | 68 | memset(&out_txd1_cb, 0, sizeof(out_txd1_cb)); |
| 69 | 69 | 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)); |
| 72 | 70 | memset(&out_netout_cb, 0, sizeof(out_netout_cb)); |
| 73 | | memset(&in_netin_cb, 0, sizeof(in_netin_cb)); |
| 74 | 71 | memset(&out_mdselck_cb, 0, sizeof(out_mdselck_cb)); |
| 75 | 72 | memset(&out_mdseld_cb, 0, sizeof(out_mdseld_cb)); |
| 76 | 73 | memset(&out_mdrdw_cb, 0, sizeof(out_mdrdw_cb)); |
| r26713 | r26714 | |
| 175 | 172 | zx8302_device::zx8302_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 176 | 173 | : device_t(mconfig, ZX8302, "Sinclair ZX8302", tag, owner, clock, "zx8302", __FILE__), |
| 177 | 174 | device_serial_interface(mconfig, *this), |
| 175 | m_dtr1(0), |
| 176 | m_cts2(0), |
| 178 | 177 | m_idr(1), |
| 179 | 178 | m_irq(0), |
| 180 | 179 | m_ctr(time(NULL) + RTC_BASE_ADJUST), |
| r26713 | r26714 | |
| 202 | 201 | m_out_comdata_func.resolve(out_comdata_cb, *this); |
| 203 | 202 | m_out_txd1_func.resolve(out_txd1_cb, *this); |
| 204 | 203 | 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); |
| 207 | 204 | m_out_netout_func.resolve(out_netout_cb, *this); |
| 208 | | m_in_netin_func.resolve(in_netin_cb, *this); |
| 209 | 205 | m_out_mdselck_func.resolve(out_mdselck_cb, *this); |
| 210 | 206 | m_out_mdseld_func.resolve(out_mdseld_cb, *this); |
| 211 | 207 | m_out_mdrdw_func.resolve(out_mdrdw_cb, *this); |
| r26713 | r26714 | |
| 225 | 221 | m_gap_timer->adjust(attotime::zero, 0, attotime::from_msec(31)); |
| 226 | 222 | |
| 227 | 223 | // register for state saving |
| 224 | save_item(NAME(m_dtr1)); |
| 225 | save_item(NAME(m_cts2)); |
| 228 | 226 | save_item(NAME(m_idr)); |
| 229 | 227 | save_item(NAME(m_tcr)); |
| 230 | 228 | save_item(NAME(m_tdr)); |
| r26713 | r26714 | |
| 326 | 324 | switch (m_tcr & MODE_MASK) |
| 327 | 325 | { |
| 328 | 326 | case MODE_NET: |
| 329 | | receive_register_update_bit(m_in_netin_func()); |
| 327 | receive_register_update_bit(get_in_data_bit()); |
| 330 | 328 | break; |
| 331 | 329 | } |
| 332 | 330 | } |
| r26713 | r26714 | |
| 457 | 455 | // TODO microdrive GAP |
| 458 | 456 | |
| 459 | 457 | // data terminal ready |
| 460 | | data |= m_in_dtr1_func() << 4; |
| 458 | data |= m_dtr1 << 4; |
| 461 | 459 | |
| 462 | 460 | // clear to send |
| 463 | | data |= m_in_cts2_func() << 5; |
| 461 | data |= m_cts2 << 5; |
| 464 | 462 | |
| 465 | 463 | // IPC busy |
| 466 | 464 | data |= m_ipc_busy << 6; |
| r26713 | r26714 | |
| 634 | 632 | trigger_interrupt(INT_EXTERNAL); |
| 635 | 633 | } |
| 636 | 634 | } |
| 635 | |
| 636 | WRITE_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 | |
| 648 | WRITE_LINE_MEMBER( zx8302_device::write_dtr1 ) |
| 649 | { |
| 650 | m_dtr1 = state; |
| 651 | } |
| 652 | |
| 653 | WRITE_LINE_MEMBER( zx8302_device::write_cts2 ) |
| 654 | { |
| 655 | m_cts2 = state; |
| 656 | } |
trunk/src/mess/machine/zx8302.h
| r26713 | r26714 | |
| 77 | 77 | devcb_write_line out_comdata_cb; |
| 78 | 78 | devcb_write_line out_txd1_cb; |
| 79 | 79 | devcb_write_line out_txd2_cb; |
| 80 | | devcb_read_line in_dtr1_cb; |
| 81 | | devcb_read_line in_cts2_cb; |
| 82 | 80 | devcb_write_line out_netout_cb; |
| 83 | | devcb_read_line in_netin_cb; |
| 84 | 81 | |
| 85 | 82 | // microdrive |
| 86 | 83 | devcb_write_line out_mdselck_cb; |
| r26713 | r26714 | |
| 118 | 115 | DECLARE_WRITE_LINE_MEMBER( comdata_w ); |
| 119 | 116 | DECLARE_WRITE_LINE_MEMBER( extint_w ); |
| 120 | 117 | |
| 118 | DECLARE_WRITE_LINE_MEMBER( write_netin ); |
| 119 | DECLARE_WRITE_LINE_MEMBER( write_dtr1 ); |
| 120 | DECLARE_WRITE_LINE_MEMBER( write_cts2 ); |
| 121 | |
| 121 | 122 | protected: |
| 122 | 123 | // device-level overrides |
| 123 | 124 | virtual void device_start(); |
| r26713 | r26714 | |
| 194 | 195 | devcb_resolved_write_line m_out_comdata_func; |
| 195 | 196 | devcb_resolved_write_line m_out_txd1_func; |
| 196 | 197 | 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; |
| 199 | 198 | devcb_resolved_write_line m_out_netout_func; |
| 200 | | devcb_resolved_read_line m_in_netin_func; |
| 201 | 199 | |
| 202 | 200 | devcb_resolved_write_line m_out_mdselck_func; |
| 203 | 201 | devcb_resolved_write_line m_out_mdseld_func; |
| r26713 | r26714 | |
| 208 | 206 | devcb_resolved_write_line m_out_raw2_func; |
| 209 | 207 | devcb_resolved_read_line m_in_raw2_func; |
| 210 | 208 | |
| 209 | int m_dtr1; |
| 210 | int m_cts2; |
| 211 | |
| 211 | 212 | // registers |
| 212 | 213 | UINT8 m_idr; // IPC data register |
| 213 | 214 | UINT8 m_tcr; // transfer control register |