summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/fdc_pll.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/fdc_pll.c')
-rw-r--r--src/emu/machine/fdc_pll.c19
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;
+}