void amiga_fdc::dma_check() { bool was_writing = dskbyt & 0x2000; dskbyt &= 0x9fff; if(dma_enabled()) { if(dma_state == IDLE) { dma_state = adkcon & 0x0400 ? DMA_WAIT_START : DMA_RUNNING_BYTE_0; if(dma_state == DMA_RUNNING_BYTE_0) { if(!(dsklen & 0x3fff)) dma_done(); else if(dsklen & 0x4000) { dskbyt |= 0x2000; cur_live.bit_counter = 0; dma_value = dma_read(); } } } else { dskbyt |= 0x4000; if(dsklen & 0x4000) dskbyt |= 0x2000; } } else dma_state = IDLE; if(was_writing && !(dskbyt & 0x2000)) cur_live.pll.stop_writing(floppy, cur_live.tm); if(!was_writing && (dskbyt & 0x2000)) cur_live.pll.start_writing(cur_live.tm); }
void amiga_fdc::dma_check() { if(dma_enabled()) { if(dma_state == IDLE) { dma_state = adkcon & 0x0400 ? DMA_WAIT_START : DMA_RUNNING_BYTE_0; if(dma_state == DMA_RUNNING_BYTE_0 && !(dsklen & 0x3fff)) dma_done(); } } else dma_state = IDLE; }