diff options
-rw-r--r-- | hash/fmtowns_flop.xml | 4 | ||||
-rw-r--r-- | src/devices/machine/upd71071.cpp | 12 |
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; } |