/* motor on, active low */ void floppy_image_device::mon_w(int state) { if(mon == state) return; mon = state; /* off -> on */ if (!mon && image) { revolution_start_time = machine().time(); ready_counter = 2; index_resync(); } /* on -> off */ else { if(image_dirty) commit_image(); revolution_start_time = attotime::never; index_timer->adjust(attotime::zero); if(!ready) { ready = true; if(!cur_ready_cb.isnull()) cur_ready_cb(this, ready); } } }
bool floppy_image_device::call_load() { io_generic io; // Do _not_ remove this cast otherwise the pointer will be incorrect when used by the ioprocs. io.file = (device_image_interface *)this; io.procs = &image_ioprocs; io.filler = 0xff; int best = 0; floppy_image_format_t *best_format = 0; for(floppy_image_format_t *format = fif_list; format; format = format->next) { int score = format->identify(&io, form_factor); if(score > best) { best = score; best_format = format; } } if(!best_format) return IMAGE_INIT_FAIL; image = global_alloc(floppy_image(tracks, sides, form_factor)); best_format->load(&io, form_factor, image); revolution_start_time = attotime::never; revolution_count = 0; index_resync(); image_dirty = false; output_format = 0; if (!cur_load_cb.isnull()) return cur_load_cb(this); return IMAGE_INIT_PASS; }
bool floppy_image_device::call_load() { io_generic io; // Do _not_ remove this cast otherwise the pointer will be incorrect when used by the ioprocs. io.file = (device_image_interface *)this; io.procs = &image_ioprocs; io.filler = 0xff; int best = 0; floppy_image_format_t *best_format = 0; for(floppy_image_format_t *format = fif_list; format; format = format->next) { int score = format->identify(&io, form_factor); if(score > best) { best = score; best_format = format; } } if(!best_format) { seterror(IMAGE_ERROR_INVALIDIMAGE, "Unable to identify the image format"); return IMAGE_INIT_FAIL; } image = global_alloc(floppy_image(tracks, sides, form_factor)); best_format->load(&io, form_factor, image); output_format = is_readonly() ? 0 : best_format; revolution_start_time = mon ? attotime::never : machine().time(); revolution_count = 0; index_resync(); image_dirty = false; wpt = 1; // disk sleeve is covering the sensor if (!cur_wpt_cb.isnull()) cur_wpt_cb(this, wpt); wpt = is_readonly() || (output_format == 0); if (!cur_wpt_cb.isnull()) cur_wpt_cb(this, wpt); if (!cur_load_cb.isnull()) return cur_load_cb(this); if(!mon) ready_counter = 2; return IMAGE_INIT_PASS; }
/* motor on, active low */ void floppy_image_device::mon_w(int state) { if(mon == state) return; mon = state; /* off -> on */ if (!mon && image) { revolution_start_time = machine().time(); index_resync(); } /* on -> off */ else { if(image_dirty) commit_image(); revolution_start_time = attotime::never; index_timer->adjust(attotime::zero); } }
void floppy_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { index_resync(); }