ncr5390: dma fixes again (nw)
After reversing myself on this several times before, I hope I've now finally got it right. * function/bus complete should proceed when the fifo is empty, to allow devices to send less data than indicated in the transfer count * raise drq when tcounter = 0 (meaning 65536 bytes)
This commit is contained in:
parent
790009096b
commit
391f5c9f90
@ -510,16 +510,16 @@ void ncr5390_device::step(bool timeout)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case INIT_XFR_FUNCTION_COMPLETE:
|
case INIT_XFR_FUNCTION_COMPLETE:
|
||||||
// wait for dma transfer to complete
|
// wait for dma transfer to complete or fifo to drain
|
||||||
if (dma_command && !(status & S_TC0))
|
if (dma_command && !(status & S_TC0) && fifo_pos)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
function_complete();
|
function_complete();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case INIT_XFR_BUS_COMPLETE:
|
case INIT_XFR_BUS_COMPLETE:
|
||||||
// wait for dma transfer to complete
|
// wait for dma transfer to complete or fifo to drain
|
||||||
if (dma_command && !(status & S_TC0))
|
if (dma_command && !(status & S_TC0) && fifo_pos)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
bus_complete();
|
bus_complete();
|
||||||
@ -987,7 +987,7 @@ WRITE8_MEMBER(ncr5390_device::clock_w)
|
|||||||
void ncr5390_device::dma_set(int dir)
|
void ncr5390_device::dma_set(int dir)
|
||||||
{
|
{
|
||||||
dma_dir = dir;
|
dma_dir = dir;
|
||||||
if(dma_dir == DMA_OUT && fifo_pos != 16 && tcounter > fifo_pos)
|
if(dma_dir == DMA_OUT && fifo_pos != 16 && ((tcounter > fifo_pos) || !tcounter))
|
||||||
drq_set();
|
drq_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user