summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/ncr5390.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/ncr5390.cpp')
-rw-r--r--src/devices/machine/ncr5390.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/devices/machine/ncr5390.cpp b/src/devices/machine/ncr5390.cpp
index 914a87e4dec..264cbc3fa72 100644
--- a/src/devices/machine/ncr5390.cpp
+++ b/src/devices/machine/ncr5390.cpp
@@ -510,16 +510,16 @@ void ncr5390_device::step(bool timeout)
break;
case INIT_XFR_FUNCTION_COMPLETE:
- // wait for dma transfer to complete
- if (dma_command && !(status & S_TC0))
+ // wait for dma transfer to complete or fifo to drain
+ if (dma_command && !(status & S_TC0) && fifo_pos)
break;
function_complete();
break;
case INIT_XFR_BUS_COMPLETE:
- // wait for dma transfer to complete
- if (dma_command && !(status & S_TC0))
+ // wait for dma transfer to complete or fifo to drain
+ if (dma_command && !(status & S_TC0) && fifo_pos)
break;
bus_complete();
@@ -987,7 +987,7 @@ WRITE8_MEMBER(ncr5390_device::clock_w)
void ncr5390_device::dma_set(int 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();
}