fixed DMA bug
[dos_sbtest] / src / dma.c
index 92f0a1b..17baead 100644 (file)
--- a/src/dma.c
+++ b/src/dma.c
@@ -100,8 +100,8 @@ static void dma_io(int chan, uint32_t phyaddr, int size, unsigned int flags, uns
        mask(chan);\r
        outp(DMA_CLR_FLIPFLOP(chan), 0);\r
 \r
-       /* single / block / cascade */\r
-       mode = ((flags & 3) << 6) | MODE_CHAN(chan);\r
+       /* first 2 bits of flags correspond to the mode bits 6,7 */\r
+       mode = ((flags & 3) << 6) | dir | MODE_CHAN(chan);\r
        if(flags & DMA_DECR) mode |= MODE_DECR;\r
        if(flags & DMA_AUTO) mode |= MODE_AUTO;\r
        outp(DMA_MODE(chan), mode);\r