summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/im6402.c
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2012-05-29 06:44:54 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2012-05-29 06:44:54 +0000
commit400e51198b763d3e57ea8e7240a71f90b8809619 (patch)
treea0c96b749f029be4ba18e9f7b46220e0f9e6ccbb /src/emu/machine/im6402.c
parent12d971880664f0d76d465c5b1ae8876bc76627d8 (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.c40
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;
}