--- np2/io/dmac.c 2004/03/06 18:25:36 1.9 +++ np2/io/dmac.c 2005/02/07 14:46:11 1.12 @@ -1,4 +1,5 @@ #include "compiler.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" #include "sound.h" @@ -32,7 +33,11 @@ static const DMAPROC dmaproc[] = { {dma_dummyout, dma_dummyin, dma_dummyproc}, // SASI #endif {dma_dummyout, dma_dummyin, dma_dummyproc}, // SCSI +#if !defined(DISABLE_SOUND) {dma_dummyout, dma_dummyin, cs4231dmafunc}, // CS4231 +#else + {dma_dummyout, dma_dummyin, dma_dummyproc}, // SASI +#endif }; @@ -52,7 +57,7 @@ void dmac_check(void) { if (!(dmac.work & bit)) { dmac.work |= bit; if (ch->proc.extproc(DMAEXT_START)) { - dmac.stat &= ~bit; // ver0.27 + dmac.stat &= ~bit; dmac.working |= bit; workchg = TRUE; } @@ -74,6 +79,35 @@ void dmac_check(void) { } } +UINT dmac_getdatas(DMACH dmach, UINT8 *buf, UINT size) { + + UINT leng; + UINT32 addr; + UINT i; + + leng = min(dmach->leng.w, size); + if (leng) { + addr = dmach->adrs.d; // + mask + if (!(dmach->mode & 0x20)) { // dir + + for (i=0; iadrs.d += leng; + } + else { // dir - + for (i=0; iadrs.d -= leng; + } + dmach->leng.w -= leng; + if (dmach->leng.w == 0) { + dmach->proc.extproc(DMAEXT_END); + } + } + return(leng); +} + // ---- I/O @@ -252,7 +286,7 @@ static void dmacset(REG8 channel) { } dev++; } - if (dmadev >= sizeof(dmaproc) / sizeof(DMAPROC)) { + if (dmadev >= NELEMENTS(dmaproc)) { dmadev = 0; } // TRACEOUT(("dmac set %d - %d", channel, dmadev)); @@ -272,7 +306,7 @@ void dmac_attach(REG8 device, REG8 chann dmac_detach(device); - if (dmac.devices < (sizeof(dmac.device) / sizeof(DMADEV))) { + if (dmac.devices < NELEMENTS(dmac.device)) { dmac.device[dmac.devices].device = device; dmac.device[dmac.devices].channel = channel; dmac.devices++;