| 4627 | } |
| 4628 | |
| 4629 | static void DISK_start(void) |
| 4630 | { |
| 4631 | int dr; |
| 4632 | |
| 4633 | if (disk_debug_logging > 1) { |
| 4634 | dumpdisk(_T("DSKLEN")); |
| 4635 | } |
| 4636 | |
| 4637 | for (int i = 0; i < 3; i++) { |
| 4638 | fifo_inuse[i] = false; |
| 4639 | } |
| 4640 | fifo_filled = 0; |
| 4641 | dskpt_start = dskpt; |
| 4642 | |
| 4643 | if (dskdmaen == DSKDMA_WRITE) { |
| 4644 | word = 0; |
| 4645 | dskbytr_val &= ~0x8000; |
| 4646 | } |
| 4647 | |
| 4648 | for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { |
| 4649 | drive *drv = &floppy[dr]; |
| 4650 | if (!((selected | disabled) & (1 << dr))) { |
| 4651 | int tr = drv->cyl * 2 + side; |
| 4652 | trackid *ti = drv->trackdata + tr; |
| 4653 | |
| 4654 | #if DISK_DEBUG_X |
| 4655 | write_log("DMA start %d %08x %08x\n", drv->mfmpos, dskpt, M68K_GETPC); |
| 4656 | #endif |
| 4657 | |
| 4658 | if (drv->dskchange_time == -1) { |
| 4659 | drv->dskchange_time = -2; |
| 4660 | write_log(_T("Accessing state restored non-existing disk '%s'!\n"), drv->newname); |
| 4661 | if (gui_ask_disk(dr, drv->newname)) { |
| 4662 | if (drive_insert(drv, &currprefs, dr, drv->newname, false, false)) { |
| 4663 | write_log(_T("Replacement disk '%s' inserted.\n"), drv->newname); |
| 4664 | drv->dskready_up_time = 0; |
| 4665 | drv->dskchange_time = 0; |
| 4666 | } |
| 4667 | } |
| 4668 | } |
| 4669 | |
| 4670 | if (dskdmaen == DSKDMA_WRITE) { |
| 4671 | drv->tracklen = floppy_writemode > 0 ? FLOPPY_WRITE_MAXLEN : FLOPPY_WRITE_LEN * drv->ddhd * 8 * 2; |
| 4672 | drv->trackspeed = get_floppy_speed(); |
| 4673 | drv->skipoffset = -1; |
| 4674 | updatemfmpos (drv); |
| 4675 | } |
| 4676 | /* Ugh. A nasty hack. Assume ADF_EXT1 tracks are always read |
| 4677 | from the start. */ |
| 4678 | if (ti->type == TRACK_RAW1) { |
| 4679 | drv->mfmpos = 0; |
| 4680 | bitoffset = 0; |
| 4681 | word = 0; |
| 4682 | } |
| 4683 | #ifdef CATWEASEL |
| 4684 | if (drv->catweasel) { |
| 4685 | word = 0; |
| 4686 | drive_fill_bigbuf (drv, side, 1); |
no test coverage detected