summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/fmtowns_flop.xml4
-rw-r--r--src/devices/machine/upd71071.cpp12
2 files changed, 14 insertions, 2 deletions
diff --git a/hash/fmtowns_flop.xml b/hash/fmtowns_flop.xml
index 4cac96609cf..371c485ffc0 100644
--- a/hash/fmtowns_flop.xml
+++ b/hash/fmtowns_flop.xml
@@ -515,8 +515,8 @@ Zurukamashi Ver 2.0 Nikkonren Kikaku
<publisher>日本ファルコム (Nihon Falcom)</publisher>
<info name="release" value="199112xx" />
<part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1284608">
- <rom name="brandish (disk 1).d88" size="1284608" crc="1e661a20" sha1="faa4ae3dad5012cdef1803b9f29e3f2710eea519" offset="0" status="baddump" />
+ <dataarea name="flop" size="1283840">
+ <rom name="brandish (disk 1).d88" size="1283840" crc="1e8181ed" sha1="237d354338d44e199a2f89f15157bafb5c1b31fa" offset="0" status="baddump" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
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;
}