diff options
author | 2012-05-29 06:44:54 +0000 | |
---|---|---|
committer | 2012-05-29 06:44:54 +0000 | |
commit | 400e51198b763d3e57ea8e7240a71f90b8809619 (patch) | |
tree | a0c96b749f029be4ba18e9f7b46220e0f9e6ccbb /src/emu/machine/im6402.c | |
parent | 12d971880664f0d76d465c5b1ae8876bc76627d8 (diff) |
Sync with MESS, Curt changes related to Wang PC (no whatsnew)
Diffstat (limited to 'src/emu/machine/im6402.c')
-rw-r--r-- | src/emu/machine/im6402.c | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/src/emu/machine/im6402.c b/src/emu/machine/im6402.c index 9e03a188fd8..420cdca9e0e 100644 --- a/src/emu/machine/im6402.c +++ b/src/emu/machine/im6402.c @@ -23,7 +23,7 @@ const device_type IM6402 = &device_creator<im6402_device>; // MACROS / CONSTANTS //************************************************************************** -#define LOG 0 +#define LOG 1 @@ -73,19 +73,27 @@ inline void im6402_device::set_tre(int state) inline void im6402_device::receive() { + int bit = 1; + if (m_in_rri_func.isnull()) { - receive_register_update_bit(get_in_data_bit()); + bit = get_in_data_bit(); } else { - receive_register_update_bit(m_in_rri_func()); + bit = m_in_rri_func(); } +// if (LOG) logerror("IM6402 '%s' Receive Bit %u\n", tag(), bit); + + receive_register_update_bit(bit); + if (is_receive_register_full()) { receive_register_extract(); m_rbr = get_received_char(); + + if (LOG) logerror("IM6402 '%s' Receive Data %02x\n", tag(), m_rbr); if (m_dr) { @@ -105,6 +113,8 @@ inline void im6402_device::transmit() { if (is_transmit_register_empty() && !m_tbre) { + if (LOG) logerror("IM6402 '%s' Transmit Data %02x\n", tag(), m_tbr); + transmit_register_setup(m_tbr); set_tbre(ASSERT_LINE); @@ -113,10 +123,11 @@ inline void im6402_device::transmit() if (!is_transmit_register_empty()) { - int bit = transmit_register_get_data_bit(); + int bit = transmit_register_send_bit(); + + if (LOG) logerror("IM6402 '%s' Transmit Bit %u\n", tag(), bit); m_out_tro_func(bit); - serial_connection_out(); if (is_transmit_register_empty()) { @@ -219,6 +230,9 @@ void im6402_device::device_start() void im6402_device::device_reset() { + transmit_register_reset(); + receive_register_reset(); + m_rrc_count = 0; m_trc_count = 0; @@ -277,6 +291,8 @@ READ8_MEMBER( im6402_device::read ) WRITE8_MEMBER( im6402_device::write ) { + if (LOG) logerror("IM6402 '%s' Transmit Buffer Register %02x\n", tag(), data); + m_tbr = data; set_tbre(CLEAR_LINE); @@ -433,8 +449,10 @@ WRITE_LINE_MEMBER( im6402_device::crl_w ) { if (state) { + if (LOG) logerror("IM6402 '%s' Control Register Load\n", tag()); + int word_length = 5 + ((m_cls2 << 1) | m_cls1); - int stop_bits = 1 + m_sbs ? ((word_length == 5) ? 0.5 : 1) : 0; + int stop_bits = 1 + (m_sbs ? ((word_length == 5) ? 0.5 : 1) : 0); int parity_code; if (m_pi) parity_code = SERIAL_PARITY_NONE; @@ -452,6 +470,8 @@ WRITE_LINE_MEMBER( im6402_device::crl_w ) WRITE_LINE_MEMBER( im6402_device::pi_w ) { + if (LOG) logerror("IM6402 '%s' Parity Inhibit %u\n", tag(), state); + m_pi = state; } @@ -462,6 +482,8 @@ WRITE_LINE_MEMBER( im6402_device::pi_w ) WRITE_LINE_MEMBER( im6402_device::sbs_w ) { + if (LOG) logerror("IM6402 '%s' Stop Bit Select %u\n", tag(), state); + m_sbs = state; } @@ -472,6 +494,8 @@ WRITE_LINE_MEMBER( im6402_device::sbs_w ) WRITE_LINE_MEMBER( im6402_device::cls1_w ) { + if (LOG) logerror("IM6402 '%s' Character Length Select 1 %u\n", tag(), state); + m_cls1 = state; } @@ -482,6 +506,8 @@ WRITE_LINE_MEMBER( im6402_device::cls1_w ) WRITE_LINE_MEMBER( im6402_device::cls2_w ) { + if (LOG) logerror("IM6402 '%s' Character Length Select 2 %u\n", tag(), state); + m_cls2 = state; } @@ -492,5 +518,7 @@ WRITE_LINE_MEMBER( im6402_device::cls2_w ) WRITE_LINE_MEMBER( im6402_device::epe_w ) { + if (LOG) logerror("IM6402 '%s' Even Parity Enable %u\n", tag(), state); + m_epe = state; } |