summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/mos6551.c
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2013-02-06 18:57:58 +0000
committer Curt Coder <curtcoder@mail.com>2013-02-06 18:57:58 +0000
commitd9bcbe5a8c23fc65fc1cf36eae2289464fe454f1 (patch)
tree3bf0f6c1a4a48e86de63c9cbeb1f93a7d9d79a68 /src/emu/machine/mos6551.c
parentb9698df878da5dc57c6af82371ea37f7d6d6407c (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.c47
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();
}