upd71071: disable channel at tc (nw)

fmtowns: rerevise brandish cp (nw)
This commit is contained in:
cracyc 2018-02-11 22:03:18 -06:00
parent 74ba02e0d1
commit 9512e9be9b
2 changed files with 14 additions and 2 deletions

View File

@ -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">

View File

@ -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;
}