|
|
| version 1.8, 2004/08/11 16:09:04 | version 1.9, 2004/08/14 12:16:18 |
|---|---|
| Line 32 void z80dmap(void) { | Line 32 void z80dmap(void) { |
| } | } |
| do { // dma_lp | do { // dma_lp |
| if (dma.increment) { | |
| if (!(flag1 & 0x20)) { | |
| *off1 += (flag1 & 0x10)?1:-1; | |
| } | |
| if (!(flag2 & 0x20)) { | |
| *off2 += (flag2 & 0x10)?1:-1; | |
| } | |
| } | |
| dma.increment = 1; | |
| addr = *off1; | addr = *off1; |
| if (flag1 & 8) { | if (flag1 & 8) { |
| dat = iocore_inp(addr); | dat = iocore_inp(addr); |
| } | } |
| else { | else { |
| dat = mem_read8(addr); | dat = z80mem_read8(addr); |
| } | } |
| if (dma.cmd & 1) { | if (dma.cmd & 1) { |
| addr = *off2; | addr = *off2; |
| Line 45 void z80dmap(void) { | Line 54 void z80dmap(void) { |
| iocore_out(addr, dat); | iocore_out(addr, dat); |
| } | } |
| else { | else { |
| mem_write8(addr, dat); | TRACEOUT(("dma->%.4x", addr)); |
| z80mem_write8(addr, dat); | |
| } | } |
| } | } |
| if (dma.cmd & 2) { | if (dma.cmd & 2) { |
| Line 54 void z80dmap(void) { | Line 64 void z80dmap(void) { |
| dma.MACH_FLG = 1; | dma.MACH_FLG = 1; |
| } | } |
| } | } |
| if (dma.mode != 1) { | |
| dma.DMA_STOP = (dma.WR[5] ^ dma.ready) & 8; | |
| if (dma.DMA_STOP) { | |
| dma.working = FALSE; // 既にセットされてる筈だが | |
| goto dma_stop; | |
| } | |
| } | |
| if (!(flag1 & 0x20)) { | |
| *off1 += (flag1 & 0x10)?1:-1; | |
| } | |
| if (!(flag2 & 0x20)) { | |
| *off2 += (flag2 & 0x10)?1:-1; | |
| } | |
| dma_stop: | |
| dma.BYT_N.w++; | dma.BYT_N.w++; |
| if (dma.BYT_N.w == 0) { | if (dma.BYT_N.w == 0) { |
| dma.working = FALSE; | dma.working = FALSE; |
| Line 81 dma_stop: | Line 77 dma_stop: |
| goto intr; | goto intr; |
| } | } |
| if (!dma.working) { | if (!dma.working) { |
| goto intr; | return; |
| } | } |
| } while(dma.mode); | } while(dma.mode); |
| return; | return; |