summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/machine/upd71071.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/devices/machine/upd71071.cpp b/src/devices/machine/upd71071.cpp
index 9ee03b77aac..bbd79dc3f6a 100644
--- a/src/devices/machine/upd71071.cpp
+++ b/src/devices/machine/upd71071.cpp
@@ -35,6 +35,7 @@
But the FM-Towns definitely uses reg 7 as bits 24-31.
The documentation on the V53A manual doesn't show these bits either, maybe it's
an external connection on the FMT? might be worth checking overflow behavior etc.
+ The Towns manual confirms the top 8 bits are external to the DMAC and there's no carry into them.
0x08:
0x09: Device Control register (16-bit)
@@ -195,6 +196,11 @@ TIMER_CALLBACK_MEMBER(upd71071_device::dma_transfer_timer)
m_reg.address_current[channel] = m_reg.address_base[channel];
m_reg.count_current[channel] = m_reg.count_base[channel];
}
+ else
+ {
+ m_timer[channel]->adjust(attotime::never);
+ m_reg.mask |= (0x01 << channel); // END or TC
+ }
// TODO: send terminal count
set_eop(ASSERT_LINE);
m_reg.status |= (0x01 << channel); // END or TC
@@ -234,6 +240,11 @@ TIMER_CALLBACK_MEMBER(upd71071_device::dma_transfer_timer)
m_reg.address_current[channel] = m_reg.address_base[channel];
m_reg.count_current[channel] = m_reg.count_base[channel];
}
+ else
+ {
+ m_timer[channel]->adjust(attotime::never);
+ m_reg.mask |= (0x01 << channel); // END or TC
+ }
// TODO: send terminal count
set_eop(ASSERT_LINE);
m_reg.status |= (0x01 << channel); // END or TC
@@ -295,6 +306,7 @@ int upd71071_device::dmarq(int state, int channel)
{
m_dmarq[channel] = 0; // clear DMARQ line
m_reg.status &= ~(0x10 << channel);
+ m_timer[channel]->adjust(attotime::never);
}
return 0;
}