diff options
author | 2013-02-06 18:57:58 +0000 | |
---|---|---|
committer | 2013-02-06 18:57:58 +0000 | |
commit | d9bcbe5a8c23fc65fc1cf36eae2289464fe454f1 (patch) | |
tree | 3bf0f6c1a4a48e86de63c9cbeb1f93a7d9d79a68 /src/emu/machine/mos6551.c | |
parent | b9698df878da5dc57c6af82371ea37f7d6d6407c (diff) |
(MESS) c64: Added CMD SwiftLink cartridge emulation. [Curt Coder]
Diffstat (limited to 'src/emu/machine/mos6551.c')
-rw-r--r-- | src/emu/machine/mos6551.c | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/src/emu/machine/mos6551.c b/src/emu/machine/mos6551.c index 9f09ebee54b..06c3927c95a 100644 --- a/src/emu/machine/mos6551.c +++ b/src/emu/machine/mos6551.c @@ -7,6 +7,17 @@ **********************************************************************/ +/* + + TODO: + + - receiver disable + - IRQ on DCD/DSR change + - parity + - framing error + +*/ + #include "mos6551.h" @@ -85,16 +96,16 @@ void mos6551_device::device_reset() void mos6551_device::tra_complete() { - if ((m_cmd & CMD_TC_MASK) == CMD_TC_TIE_RTS_LO) - { - m_st |= ST_IRQ; - m_irq_handler(ASSERT_LINE); - } - if (!(m_st & ST_TDRE)) { transmit_register_setup(m_tdr); m_st |= ST_TDRE; + + if ((m_cmd & CMD_TC_MASK) == CMD_TC_TIE_RTS_LO) + { + m_st |= ST_IRQ; + m_irq_handler(ASSERT_LINE); + } } } @@ -109,15 +120,15 @@ void mos6551_device::rcv_complete() { m_st |= ST_OR; } - else - { - m_st |= ST_RDRF; + + m_st &= ~(ST_FE | ST_PE); - if (!(m_cmd & CMD_RIE)) - { - m_st |= ST_IRQ; - m_irq_handler(ASSERT_LINE); - } + m_st |= ST_RDRF; + + if (!(m_cmd & CMD_RIE)) + { + m_st |= ST_IRQ; + m_irq_handler(ASSERT_LINE); } } @@ -244,6 +255,12 @@ WRITE8_MEMBER( mos6551_device::write ) { transmit_register_setup(m_tdr); m_st |= ST_TDRE; + + if ((m_cmd & CMD_TC_MASK) == CMD_TC_TIE_RTS_LO) + { + m_st |= ST_IRQ; + m_irq_handler(ASSERT_LINE); + } } break; @@ -274,4 +291,6 @@ WRITE8_MEMBER( mos6551_device::write ) void mos6551_device::set_rxc(int clock) { m_ext_rxc = clock; + + update_serial(); } |