--- np2/i386c/Attic/dmap.c 2004/01/05 09:31:25 1.2 +++ np2/i386c/Attic/dmap.c 2004/03/06 18:25:36 1.3 @@ -5,10 +5,11 @@ #include "dmap.h" -void dmap_i286(void) { +void dmap(void) { DMACH ch; REG8 bit; + UINT32 addr; if (dmac.working) { ch = dmac.dmach; @@ -22,60 +23,24 @@ void dmap_i286(void) { ch->proc.extproc(DMAEXT_END); } ch->leng.w--; - - switch(ch->mode & 0x0c) { - case 0x00: // verifty - ch->proc.inproc(); - break; - - case 0x04: // port->mem - i286_memorywrite(ch->adrs.d, ch->proc.inproc()); - break; - - default: - ch->proc.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; - REG8 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->proc.extproc(DMAEXT_END); - } - ch->leng.w--; - switch(ch->mode & 0x0c) { case 0x00: // verifty ch->proc.inproc(); break; case 0x04: // port->mem - i286_memorywrite(ch->adrs.d, ch->proc.inproc()); + i286_memorywrite(addr, ch->proc.inproc()); break; default: - ch->proc.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;