summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/floppy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/imagedev/floppy.cpp')
-rw-r--r--src/devices/imagedev/floppy.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp
index b44ec0c52e5..eb46cc14e8b 100644
--- a/src/devices/imagedev/floppy.cpp
+++ b/src/devices/imagedev/floppy.cpp
@@ -195,7 +195,7 @@ floppy_image_device::floppy_image_device(const machine_config &mconfig, device_t
dir(0), stp(0), wtg(0), mon(0), ss(0), ds(-1), idx(0), wpt(0), rdy(0), dskchg(0),
ready(false),
rpm(0),
- floppy_ratio_1(0),
+ angular_speed(0),
revolution_count(0),
cyl(0),
subcyl(0),
@@ -288,7 +288,7 @@ void floppy_image_device::set_rpm(float _rpm)
rpm = _rpm;
rev_time = attotime::from_double(60/rpm);
- floppy_ratio_1 = int(1000.0f*rpm/300.0f+0.5f);
+ angular_speed = rpm/300.0*2e8;
}
void floppy_image_device::setup_write(floppy_image_format_t *_output_format)
@@ -364,7 +364,7 @@ void floppy_image_device::device_start()
save_item(NAME(dskchg));
save_item(NAME(ready));
save_item(NAME(rpm));
- save_item(NAME(floppy_ratio_1));
+ save_item(NAME(angular_speed));
save_item(NAME(revolution_start_time));
save_item(NAME(rev_time));
save_item(NAME(revolution_count));
@@ -626,12 +626,12 @@ void floppy_image_device::index_resync()
revolution_start_time += rev_time;
revolution_count++;
}
- int position = (delta*floppy_ratio_1).as_ticks(1000000000/1000);
+ int position = int(delta.as_double()*angular_speed + 0.5);
int new_idx = position < 20000;
if(new_idx) {
- attotime index_up_time = attotime::from_nsec((2000000*1000)/floppy_ratio_1);
+ attotime index_up_time = attotime::from_double(20000/angular_speed);
index_timer->adjust(index_up_time - delta);
} else
index_timer->adjust(rev_time - delta);
@@ -813,7 +813,7 @@ uint32_t floppy_image_device::find_position(attotime &base, const attotime &when
base -= rev_time;
}
- uint32_t res = (delta*floppy_ratio_1).as_ticks(1000000000/1000);
+ uint32_t res = uint32_t(delta.as_double()*angular_speed+0.5);
if (res >= 200000000) {
// Due to rounding errors in the previous operation,
// 'res' sometimes overflows 2E+8
@@ -830,7 +830,7 @@ bool floppy_image_device::test_track_last_entry_warps(const std::vector<uint32_t
attotime floppy_image_device::position_to_time(const attotime &base, int position) const
{
- return base + attotime::from_nsec((int64_t(position)*2000/floppy_ratio_1+1)/2);
+ return base + attotime::from_double(position/angular_speed);
}
void floppy_image_device::cache_fill_index(const std::vector<uint32_t> &buf, int &index, attotime &base)
@@ -952,6 +952,7 @@ void floppy_image_device::write_flux(const attotime &start, const attotime &end,
if(!image || mon)
return;
image_dirty = true;
+ cache_clear();
attotime base;
int start_pos = find_position(base, start);