diff options
Diffstat (limited to 'src/emu/machine/fdc_pll.c')
-rw-r--r-- | src/emu/machine/fdc_pll.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/emu/machine/fdc_pll.c b/src/emu/machine/fdc_pll.c index ef8b78b8125..80819c16164 100644 --- a/src/emu/machine/fdc_pll.c +++ b/src/emu/machine/fdc_pll.c @@ -22,6 +22,7 @@ void fdc_pll_t::set_clock(const attotime &_period) void fdc_pll_t::reset(const attotime &when) { ctime = when; + write_ctime = when; phase_adjust = attotime::zero; freq_hist = 0; write_position = 0; @@ -65,6 +66,7 @@ int fdc_pll_t::get_next_bit(attotime &tm, floppy_image_device *floppy, const att if(next > limit) return -1; + write_ctime = ctime; ctime = next; tm = next; @@ -130,3 +132,20 @@ bool fdc_pll_t::write_next_bit(bool bit, attotime &tm, floppy_image_device *flop ctime = etime; return false; } + +bool fdc_pll_t::write_next_bit_prev_cell(bool bit, attotime &tm, floppy_image_device *floppy, const attotime &limit) +{ + if(write_start_time.is_never()) { + write_start_time = write_ctime; + write_position = 0; + } + + attotime etime = write_ctime + period; + if(etime > limit) + return true; + + if(bit && write_position < ARRAY_LENGTH(write_buffer)) + write_buffer[write_position++] = write_ctime + period/2; + + return false; +} |