--- np2/i386c/Attic/dmap.c 2003/12/08 00:55:31 1.1 +++ np2/i386c/Attic/dmap.c 2004/03/07 01:23:14 1.4 @@ -1,14 +1,15 @@ #include "compiler.h" -#include "memory.h" +#include "cpucore.h" #include "pccore.h" #include "iocore.h" #include "dmap.h" -void dmap_i286(void) { +void dmap(void) { DMACH ch; - int bit; + REG8 bit; + UINT32 addr; if (dmac.working) { ch = dmac.dmach; @@ -19,63 +20,28 @@ void dmap_i286(void) { if (!ch->leng.w) { dmac.stat |= bit; dmac.working &= ~bit; - ch->extproc(DMAEXT_END); + ch->proc.extproc(DMAEXT_END); } ch->leng.w--; - - switch(ch->mode & 0x0c) { - case 0x00: // verifty - ch->inproc(); - break; - - case 0x04: // port->mem - i286_memorywrite(ch->adrs.d, ch->inproc()); - break; - - default: - ch->outproc(i286_memoryread(ch->adrs.d)); - break; + addr = ch->adrs.d; + if (necio.port0439 & 4) { + addr = ch->adrs.d & 0xffffff; } ch->adrs.d += ((ch->mode & 0x20)?-1:1); - } - ch++; - bit <<= 1; - } while(bit & 0x0f); - } -} - -void dmap_v30(void) { - - DMACH ch; - int bit; - - if (dmac.working) { - ch = dmac.dmach; - bit = 1; - do { - if (dmac.working & bit) { - // DMA working ! - if (!ch->leng.w) { - dmac.stat |= bit; - dmac.working &= ~bit; - ch->extproc(DMAEXT_END); - } - ch->leng.w--; - +// ch->adrs.w[DMA16_LOW] += ((ch->mode & 0x20)?-1:1); switch(ch->mode & 0x0c) { case 0x00: // verifty - ch->inproc(); + ch->proc.inproc(); break; case 0x04: // port->mem - i286_memorywrite(ch->adrs.d, ch->inproc()); + i286_memorywrite(addr, ch->proc.inproc()); break; default: - ch->outproc(i286_memoryread(ch->adrs.d)); + ch->proc.outproc(i286_memoryread(addr)); break; } - ch->adrs.w[DMA16_LOW] += ((ch->mode & 0x20)?-1:1); } ch++; bit <<= 1;