/* index pulses at rpm/60 Hz, and stays high for ~2ms at 300rpm */ void floppy_image_device::index_resync() { if(revolution_start_time.is_never()) { if(idx) { idx = 0; if (!cur_index_pulse_cb.isnull()) cur_index_pulse_cb(this, idx); } return; } attotime delta = machine().time() - revolution_start_time; while(delta >= rev_time) { delta -= rev_time; revolution_start_time += rev_time; revolution_count++; } int position = (delta*(rpm/300)).as_ticks(1000000000); int new_idx = position <= 20000; if(new_idx) { attotime index_up_time = attotime::from_nsec(2000000*300.0/rpm+0.5); index_timer->adjust(index_up_time - delta); } else index_timer->adjust(rev_time - delta); if(new_idx != idx) { idx = new_idx; if (!cur_index_pulse_cb.isnull()) cur_index_pulse_cb(this, idx); } }
/* index pulses at rpm/60 Hz, and stays high for ~2ms at 300rpm */ void floppy_image_device::index_resync() { if(revolution_start_time.is_never()) { if(idx) { idx = 0; if (!cur_index_pulse_cb.isnull()) cur_index_pulse_cb(this, idx); } return; } attotime delta = machine().time() - revolution_start_time; while(delta >= rev_time) { delta -= rev_time; revolution_start_time += rev_time; revolution_count++; } int position = (delta*floppy_ratio_1).as_ticks(1000000000/1000); int new_idx = position < 20000; if(new_idx) { attotime index_up_time = attotime::from_nsec((2000000*1000)/floppy_ratio_1); index_timer->adjust(index_up_time - delta); } else index_timer->adjust(rev_time - delta); if(new_idx != idx) { idx = new_idx; if(idx && ready) { ready_counter--; if(!ready_counter) { ready = false; if(!cur_ready_cb.isnull()) cur_ready_cb(this, ready); } } if (!cur_index_pulse_cb.isnull()) cur_index_pulse_cb(this, idx); } }