void mos6551_device::update_serial() { int brg = m_ctrl & CTRL_BRG_MASK; if (brg == CTRL_BRG_16X_EXTCLK) { set_rcv_rate(m_ext_rxc / 16); set_tra_rate(m_ext_rxc / 16); } else { int baud = clock() / brg_divider[brg] / 16; set_tra_rate(baud); if (m_ctrl & CTRL_RXC_BRG) { set_rcv_rate(baud); } else { set_rcv_rate(m_ext_rxc / 16); } int num_data_bits = 8; int stop_bit_count = 1; int parity_code = PARITY_NONE; switch (m_ctrl & CTRL_WL_MASK) { case CTRL_WL_8: num_data_bits = 8; break; case CTRL_WL_7: num_data_bits = 7; break; case CTRL_WL_6: num_data_bits = 6; break; case CTRL_WL_5: num_data_bits = 5; break; } set_data_frame(num_data_bits, stop_bit_count, parity_code, false); } if (m_cmd & CMD_DTR) m_connection_state |= DTR; else m_connection_state &= ~DTR; m_dtr_handler((m_connection_state & DTR) ? 0 : 1); if ((m_cmd & CMD_TC_MASK) == CMD_TC_RTS_HI) m_connection_state &= ~RTS; else m_connection_state |= RTS; m_rts_handler((m_connection_state & RTS) ? 0 : 1); serial_connection_out(); }
void ins8250_uart_device::update_clock() { int baud; if(m_regs.dl == 0) { set_tra_rate(0); set_rcv_rate(0); return; } baud = clock()/(m_regs.dl*16); set_tra_rate(baud); set_rcv_rate(baud); }
void midiout_device::device_reset() { // we don't Tx, we Rx at 31250 8-N-1 set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_rcv_rate(31250); set_tra_rate(0); }
//------------------------------------------------- // update_serial - //------------------------------------------------- void z80sio_channel::update_serial() { int data_bit_count = get_rx_word_length(); stop_bits_t stop_bits = get_stop_bits(); parity_t parity; LOG(("Z80SIO update_serial\n")); if (m_wr4 & WR4_PARITY_ENABLE) { if (m_wr4 & WR4_PARITY_EVEN) parity = PARITY_EVEN; else parity = PARITY_ODD; } else parity = PARITY_NONE; set_data_frame(1, data_bit_count, parity, stop_bits); int clocks = get_clock_mode(); if (m_rxc > 0) { set_rcv_rate(m_rxc / clocks); } if (m_txc > 0) { set_tra_rate(m_txc / clocks); } receive_register_reset(); // if stop bits is changed from 0, receive register has to be reset }
void z80dart_channel::update_serial() { int data_bit_count = get_rx_word_length(); stop_bits_t stop_bits = get_stop_bits(); parity_t parity; if (m_wr[4] & WR4_PARITY_ENABLE) { if (m_wr[4] & WR4_PARITY_EVEN) parity = PARITY_EVEN; else parity = PARITY_ODD; } else parity = PARITY_NONE; set_data_frame(1, data_bit_count, parity, stop_bits); int clocks = get_clock_mode(); if (m_rxc > 0) { set_rcv_rate(m_rxc / clocks); } if (m_txc > 0) { set_tra_rate(m_txc / clocks); } receive_register_reset(); // if stop bits is changed from 0, receive register has to be reset (FIXME: doing this without checking is stupid) }
void jvc_xvd701_device::device_start() { int startbits = 1; int databits = 8; parity_t parity = PARITY_ODD; stop_bits_t stopbits = STOP_BITS_1; set_data_frame(startbits, databits, parity, stopbits); int txbaud = 9600; set_tra_rate(txbaud); int rxbaud = 9600; set_rcv_rate(rxbaud); output_rxd(1); // TODO: make this configurable output_dcd(0); output_dsr(0); output_ri(0); output_cts(0); m_timer_response = timer_alloc(TIMER_RESPONSE); }
void mc2661_device::device_start() { // resolve callbacks m_write_txd.resolve_safe(); m_write_rxrdy.resolve_safe(); m_write_txrdy.resolve_safe(); m_write_rts.resolve_safe(); m_write_dtr.resolve_safe(); m_write_txemt_dschg.resolve_safe(); m_write_bkdet.resolve_safe(); m_write_xsync.resolve_safe(); // create the timers if (m_rxc > 0) { set_rcv_rate(m_rxc); } if (m_txc > 0) { set_tra_rate(m_txc); } // save state save_item(NAME(m_rhr)); save_item(NAME(m_thr)); save_item(NAME(m_cr)); save_item(NAME(m_sr)); save_item(NAME(m_mr)); save_item(NAME(m_sync)); save_item(NAME(m_mode_index)); save_item(NAME(m_sync_index)); }
void z80dart_channel::update_serial() { int data_bit_count = get_rx_word_length(); stop_bits_t stop_bits = get_stop_bits(); parity_t parity; if (m_wr[4] & WR4_PARITY_ENABLE) { if (m_wr[4] & WR4_PARITY_EVEN) parity = PARITY_EVEN; else parity = PARITY_ODD; } else parity = PARITY_NONE; set_data_frame(1, data_bit_count, parity, stop_bits); int clocks = get_clock_mode(); if (m_rxc > 0) { set_rcv_rate(m_rxc / clocks); } if (m_txc > 0) { set_tra_rate(m_txc / clocks); } }
void mc68901_device::device_start() { m_start_bit_hack_for_external_clocks = true; /* resolve callbacks */ m_out_irq_cb.resolve_safe(); m_out_gpio_cb.resolve_safe(); m_out_tao_cb.resolve_safe(); m_out_tbo_cb.resolve_safe(); m_out_tco_cb.resolve_safe(); m_out_tdo_cb.resolve_safe(); m_out_so_cb.resolve_safe(); //m_out_rr_cb.resolve_safe(); //m_out_tr_cb.resolve_safe(); /* create the timers */ m_timer[TIMER_A] = timer_alloc(TIMER_A); m_timer[TIMER_B] = timer_alloc(TIMER_B); m_timer[TIMER_C] = timer_alloc(TIMER_C); m_timer[TIMER_D] = timer_alloc(TIMER_D); if (m_rx_clock > 0) { set_rcv_rate(m_rx_clock); } if (m_tx_clock > 0) { set_tra_rate(m_tx_clock); } /* register for state saving */ save_item(NAME(m_gpip)); save_item(NAME(m_aer)); save_item(NAME(m_ddr)); save_item(NAME(m_ier)); save_item(NAME(m_ipr)); save_item(NAME(m_isr)); save_item(NAME(m_imr)); save_item(NAME(m_vr)); save_item(NAME(m_tacr)); save_item(NAME(m_tbcr)); save_item(NAME(m_tcdcr)); save_item(NAME(m_tdr)); save_item(NAME(m_tmc)); save_item(NAME(m_to)); save_item(NAME(m_ti)); save_item(NAME(m_scr)); save_item(NAME(m_ucr)); save_item(NAME(m_rsr)); save_item(NAME(m_tsr)); save_item(NAME(m_transmit_buffer)); save_item(NAME(m_transmit_pending)); save_item(NAME(m_receive_buffer)); save_item(NAME(m_overrun_pending)); save_item(NAME(m_gpio_input)); save_item(NAME(m_gpio_output)); save_item(NAME(m_rsr_read)); save_item(NAME(m_next_rsr)); }
void serial_terminal_device::device_reset() { generic_terminal_device::device_reset(); m_rbit = 1; if(m_slot) m_owner->out_rx(m_rbit); else m_out_tx_func(m_rbit); UINT8 val = m_io_term_frame->read(); set_tra_rate(rates[val & 0x0f]); set_rcv_rate(rates[val & 0x0f]); switch(val & 0x30) { case 0x10: set_data_frame(7, 1, PARITY_EVEN, false); break; case 0x00: default: set_data_frame(8, 1, PARITY_NONE, false); break; case 0x20: set_data_frame(8, 2, PARITY_NONE, false); break; case 0x30: set_data_frame(8, 1, PARITY_EVEN, false); break; } }
void apollo_kbd_device::device_reset() { LOG1(("reset apollo_kbd")); m_beeper.reset(); m_mouse.reset(); // init keyboard m_loopback_mode = 1; m_mode = KBD_MODE_0_COMPATIBILITY; m_delay = 500; m_repeat = 33; m_last_pressed = 0; memset(m_keytime, 0, sizeof(m_keytime)); memset(m_keyon, 0, sizeof(m_keyon)); // start timer m_timer->adjust( attotime::zero, 0, attotime::from_msec(5)); // every 5ms // keyboard comms is at 8E1, 1200 baud set_data_frame(1, 8, PARITY_EVEN, STOP_BITS_1); set_rcv_rate(1200); set_tra_rate(1200); m_tx_busy = false; m_xmit_read = m_xmit_write = 0; }
void z80dart_channel::update_serial() { int clocks = get_clock_mode(); if (m_rxc > 0) { set_rcv_rate(m_rxc / clocks); } if (m_txc > 0) { set_tra_rate(m_txc / clocks); } int num_data_bits = get_rx_word_length(); int stop_bit_count = get_stop_bits(); int parity_code = SERIAL_PARITY_NONE; if (m_wr[1] & WR4_PARITY_ENABLE) { if (m_wr[1] & WR4_PARITY_EVEN) parity_code = SERIAL_PARITY_EVEN; else parity_code = SERIAL_PARITY_ODD; } set_data_frame(num_data_bits, stop_bit_count, parity_code); }
void octopus_keyboard_device::device_reset() { buffered_rs232_device::device_reset(); set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_rcv_rate(1200); set_tra_rate(9600); receive_register_reset(); transmit_register_reset(); m_enabled = 0; m_delay = 500; // 3*100+200 m_repeat = 110; // 4^2*5+30 stop_processing(); reset_key_state(); typematic_stop(); clear_fifo(); output_dcd(0); output_dsr(0); output_cts(0); output_rxd(1); start_processing(attotime::from_hz(9600)); }
void midiout_device::device_reset() { // we don't Tx, we Rx at 31250 8-N-1 set_rcv_rate(31250); set_tra_rate(0); set_data_frame(8, 1, PARITY_NONE, false); }
void midiin_device::device_reset() { m_tx_busy = false; m_xmit_read = m_xmit_write = 0; // we don't Rx, we Tx at 31250 8-N-1 set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_rcv_rate(0); set_tra_rate(31250); }
void midiin_device::device_reset() { m_tx_busy = false; m_xmit_read = m_xmit_write = 0; // we don't Rx, we Tx at 31250 8-N-1 set_rcv_rate(0); set_tra_rate(31250); set_data_frame(8, 1, SERIAL_PARITY_NONE); }
void esqpanel_device::device_reset() { // panel comms is at 62500 baud (double the MIDI rate), 8N2 set_data_frame(1, 8, PARITY_NONE, STOP_BITS_2); set_rcv_rate(62500); set_tra_rate(62500); m_tx_busy = false; m_xmit_read = m_xmit_write = 0; m_bCalibSecondByte = false; m_bButtonLightSecondByte = false; }
void serial_terminal_device::device_start() { int baud = clock(); if(!baud) baud = 9600; m_owner = dynamic_cast<serial_port_device *>(owner()); m_out_tx_func.resolve(m_out_tx_cb, *this); m_slot = m_owner && 1; m_timer = timer_alloc(); set_rcv_rate(baud); set_tra_rate(baud); set_data_frame(8, 1, PARITY_NONE, false); }
void wangpc_keyboard_device::device_start() { m_txd_handler.resolve_safe(); set_data_frame(1, 8, PARITY_NONE, STOP_BITS_2); set_rcv_rate(62500); //set_tra_rate(62500); save_item(NAME(m_keylatch)); save_item(NAME(m_rxd)); }
void z80sti_device::device_start() { // resolve callbacks m_in_gpio_func.resolve(m_in_gpio_cb, *this); m_out_gpio_func.resolve(m_out_gpio_cb, *this); m_in_si_func.resolve(m_in_si_cb, *this); m_out_so_func.resolve(m_out_so_cb, *this); m_out_timer_func[TIMER_A].resolve(m_out_tao_cb, *this); m_out_timer_func[TIMER_B].resolve(m_out_tbo_cb, *this); m_out_timer_func[TIMER_C].resolve(m_out_tco_cb, *this); m_out_timer_func[TIMER_D].resolve(m_out_tdo_cb, *this); m_out_int_func.resolve(m_out_int_cb, *this); // create the counter timers m_timer[TIMER_A] = timer_alloc(TIMER_A); m_timer[TIMER_B] = timer_alloc(TIMER_B); m_timer[TIMER_C] = timer_alloc(TIMER_C); m_timer[TIMER_D] = timer_alloc(TIMER_D); // create serial receive clock timer if (m_rx_clock > 0) { set_rcv_rate(m_rx_clock); } // create serial transmit clock timer if (m_tx_clock > 0) { set_tra_rate(m_tx_clock); } // state saving save_item(NAME(m_gpip)); save_item(NAME(m_aer)); save_item(NAME(m_ddr)); save_item(NAME(m_ier)); save_item(NAME(m_ipr)); save_item(NAME(m_isr)); save_item(NAME(m_imr)); save_item(NAME(m_pvr)); save_item(NAME(m_int_state)); save_item(NAME(m_tabc)); save_item(NAME(m_tcdc)); save_item(NAME(m_tdr)); save_item(NAME(m_tmc)); save_item(NAME(m_to)); save_item(NAME(m_scr)); save_item(NAME(m_ucr)); save_item(NAME(m_rsr)); save_item(NAME(m_tsr)); save_item(NAME(m_udr)); }
void apricot_keyboard_hle_device::device_reset() { clear_fifo(); receive_register_reset(); transmit_register_reset(); set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_rcv_rate(7800); set_tra_rate(7800); reset_key_state(); start_processing(attotime::from_hz(7800)); }
void snes_miracle_device::device_reset() { m_strobe_on = 0; m_sent_bits = 0; m_strobe_clock = 0; m_midi_mode = MIRACLE_MIDI_WAITING; // set standard MIDI parameters set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1); set_rcv_rate(31250); set_tra_rate(31250); m_xmit_read = m_xmit_write = 0; m_recv_read = m_recv_write = 0; m_read_status = m_status_bit = false; m_tx_busy = false; }
void im6402_device::device_start() { // resolve callbacks m_write_tro.resolve_safe(); m_write_dr.resolve_safe(); m_write_tbre.resolve_safe(); m_write_tre.resolve_safe(); // create the timers if (m_rrc > 0) { set_rcv_rate(m_rrc/16); } if (m_trc > 0) { set_tra_rate(m_trc/16); } // state saving save_item(NAME(m_dr)); save_item(NAME(m_tbre)); save_item(NAME(m_tre)); save_item(NAME(m_pe)); save_item(NAME(m_fe)); save_item(NAME(m_oe)); save_item(NAME(m_cls1)); save_item(NAME(m_cls2)); save_item(NAME(m_sbs)); save_item(NAME(m_sfd)); save_item(NAME(m_epe)); save_item(NAME(m_pi)); save_item(NAME(m_rbr)); save_item(NAME(m_rrc_count)); save_item(NAME(m_tbr)); save_item(NAME(m_trc_count)); }
//------------------------------------------------- // update_serial - //------------------------------------------------- void z80sio_channel::update_serial() { int data_bit_count = get_rx_word_length(); stop_bits_t stop_bits = get_stop_bits(); parity_t parity; LOG("%s\n", FUNCNAME); if (m_wr4 & WR4_PARITY_ENABLE) { LOG("- Parity enabled\n"); if (m_wr4 & WR4_PARITY_EVEN) parity = PARITY_EVEN; else parity = PARITY_ODD; } else parity = PARITY_NONE; set_data_frame(1, data_bit_count, parity, stop_bits); int clocks = get_clock_mode(); if (m_rxc > 0) { LOG("- RxC:%d/%d = %d\n", m_rxc, clocks, m_rxc / clocks); set_rcv_rate(m_rxc / clocks); } if (m_txc > 0) { LOG("- TxC:%d/%d = %d\n", m_txc, clocks, m_txc / clocks); set_tra_rate(m_txc / clocks); } receive_register_reset(); // if stop bits is changed from 0, receive register has to be reset }
void mc6852_device::device_start() { // resolve callbacks m_write_tx_data.resolve_safe(); m_write_irq.resolve_safe(); m_write_sm_dtr.resolve_safe(); m_write_tuf.resolve_safe(); set_rcv_rate(m_rx_clock); set_tra_rate(m_tx_clock); // register for state saving save_item(NAME(m_status)); save_item(NAME(m_cr)); save_item(NAME(m_scr)); save_item(NAME(m_tdr)); save_item(NAME(m_tsr)); save_item(NAME(m_rdr)); save_item(NAME(m_rsr)); save_item(NAME(m_cts)); save_item(NAME(m_dcd)); save_item(NAME(m_sm_dtr)); save_item(NAME(m_tuf)); }
void qx10_keyboard_device::device_start() { serial_keyboard_device::device_start(); memset(m_state, '\0', sizeof(m_state)); set_rcv_rate(1200); }
void x68k_keyboard_device::device_start() { serial_keyboard_device::device_start(); set_rcv_rate(38400); // TODO: Should be 2400 but MC68901 doesn't support divide by 16 }