fixed 16bit playback. DMA page reg expects the page unshifted
[dos_auplay] / src / dma.c
index 56ec5d9..3ff5fd0 100644 (file)
--- a/src/dma.c
+++ b/src/dma.c
@@ -42,6 +42,7 @@ void dma_in(int chan, uint32_t phyaddr, int size, unsigned int flags)
 static void dma_io(int chan, uint32_t phyaddr, int size, unsigned int flags, unsigned int dir)\r
 {\r
        unsigned int mode;\r
+       unsigned char page;\r
 \r
        mask(chan);\r
        outp(clrff_port[chan], 0);\r
@@ -52,6 +53,8 @@ static void dma_io(int chan, uint32_t phyaddr, int size, unsigned int flags, uns
        if(flags & DMA_AUTO) mode |= MODE_AUTO;\r
        outp(mode_port[chan], mode);\r
 \r
+       page = (phyaddr >> 16) & 0xff;\r
+\r
        if(IS_16BIT(chan)) {\r
                phyaddr >>= 1;\r
                size >>= 1;\r
@@ -59,7 +62,7 @@ static void dma_io(int chan, uint32_t phyaddr, int size, unsigned int flags, uns
 \r
        outp(addr_port[chan], phyaddr & 0xff);\r
        outp(addr_port[chan], (phyaddr >> 8) & 0xff);\r
-       outp(page_port[chan], (phyaddr >> 16) & 0xff);\r
+       outp(page_port[chan], page);\r
 \r
        size--;\r
        outp(count_port[chan], size & 0xff);\r