X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dos_auplay;a=blobdiff_plain;f=src%2Fdma.c;fp=src%2Fdma.c;h=3ff5fd0293ae4c63b513dca3f01bf0b210f8d28d;hp=56ec5d91c350310c0cc491455f08dab3a2ff1164;hb=2d7c576f4ab90819ca1bd05e92375a00804fdfd7;hpb=de258a48248718966db128978096931c52f6e203 diff --git a/src/dma.c b/src/dma.c index 56ec5d9..3ff5fd0 100644 --- 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) { unsigned int mode; + unsigned char page; mask(chan); outp(clrff_port[chan], 0); @@ -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; outp(mode_port[chan], mode); + page = (phyaddr >> 16) & 0xff; + if(IS_16BIT(chan)) { phyaddr >>= 1; size >>= 1; @@ -59,7 +62,7 @@ static void dma_io(int chan, uint32_t phyaddr, int size, unsigned int flags, uns outp(addr_port[chan], phyaddr & 0xff); outp(addr_port[chan], (phyaddr >> 8) & 0xff); - outp(page_port[chan], (phyaddr >> 16) & 0xff); + outp(page_port[chan], page); size--; outp(count_port[chan], size & 0xff);