summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m68000/tmp68301.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m68000/tmp68301.cpp')
-rw-r--r--src/devices/cpu/m68000/tmp68301.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/devices/cpu/m68000/tmp68301.cpp b/src/devices/cpu/m68000/tmp68301.cpp
index 03d9d417cdf..20813bb9dbd 100644
--- a/src/devices/cpu/m68000/tmp68301.cpp
+++ b/src/devices/cpu/m68000/tmp68301.cpp
@@ -513,11 +513,6 @@ void tmp68301_device::ieir_w(u8 data)
}
-u32 tmp68301_device::execute_input_lines() const noexcept
-{
- return 10;
-}
-
void tmp68301_device::execute_set_input(int inputnum, int state)
{
int prev_state = (m_external_interrupt_state >> inputnum) & 1;
@@ -688,7 +683,7 @@ void tmp68301_device::pmr_w(u8 data)
u16 tmp68301_device::pdr_r()
{
- if(m_parallel_mode == 0) {
+ if(m_parallel_mode == 0 || m_parallel_mode == 1) {
if(m_pdir == 0xffff)
return m_pdr;
return (m_pdr & m_pdir) | (m_parallel_r_cb() & ~m_pdir);
@@ -704,7 +699,7 @@ void tmp68301_device::pdr_w(offs_t, u16 data, u16 mem_mask)
if(m_pdr == old)
return;
// logerror("parallel data %04x\n", m_pdr);
- if(m_parallel_mode == 0) {
+ if(m_parallel_mode == 0 || m_parallel_mode == 1) {
if(m_pdir == 0x0000)
return;
m_parallel_w_cb(m_pdr & m_pdir);
@@ -1099,8 +1094,15 @@ void tmp68301_device::serial_tx_update(int ch)
nstate = m_smr[ch] & SMR_PEN ? SR_PARITY : SR_STOP;
break;
- case SR_PARITY:
- abort();
+ case SR_PARITY: {
+ u32 parity = m_smr[ch] & SMR_PEO ? 0 : 1;
+ for(u32 i = 0; i != 5 + ((m_smr[ch] >> SMR_CL_SFT) & 3); i++)
+ if((m_serial_tx[ch] >> i) & 1)
+ parity = parity ^ 1;
+ m_tx_cb[ch](parity);
+ nstate = SR_STOP;
+ break;
+ }
case SR_STOP:
m_tx_cb[ch](1);