diff --git a/Storage/Disk/Disk.cpp b/Storage/Disk/Disk.cpp index c6b04e0ee..96953f5bd 100644 --- a/Storage/Disk/Disk.cpp +++ b/Storage/Disk/Disk.cpp @@ -17,7 +17,7 @@ int Disk::get_id_for_track_at_position(unsigned int head, unsigned int position) void Disk::set_track_at_position(unsigned int head, unsigned int position, const std::shared_ptr<Track> &track) { - if(!get_is_read_only()) return; + if(get_is_read_only()) return; int address = get_id_for_track_at_position(head, position); cached_tracks_[address] = track; diff --git a/Storage/Disk/DiskController.cpp b/Storage/Disk/DiskController.cpp index aa9765b81..3aa3fa2cf 100644 --- a/Storage/Disk/DiskController.cpp +++ b/Storage/Disk/DiskController.cpp @@ -20,7 +20,6 @@ Controller::Controller(unsigned int clock_rate, unsigned int clock_rate_multipli motor_is_on_(false), is_reading_(true), - track_is_dirty_(false), TimedEventLoop(clock_rate * clock_rate_multiplier) { @@ -31,13 +30,7 @@ Controller::Controller(unsigned int clock_rate, unsigned int clock_rate_multipli void Controller::setup_track() { - if(patched_track_) - { - drive_->set_track(patched_track_); - } - track_ = drive_->get_track(); - track_is_dirty_ = false; Time offset; Time track_time_now = get_time_into_track(); @@ -154,7 +147,7 @@ void Controller::begin_writing() { is_reading_ = false; - write_segment_.length_of_a_bit = bit_length_ * rotational_multiplier_; + write_segment_.length_of_a_bit = bit_length_ / rotational_multiplier_; write_segment_.data.clear(); write_segment_.number_of_bits = 0; @@ -226,8 +219,8 @@ bool Controller::get_drive_is_read_only() void Controller::step(int direction) { - if(drive_) drive_->step(direction); invalidate_track(); + if(drive_) drive_->step(direction); } void Controller::set_motor_on(bool motor_on) @@ -242,13 +235,18 @@ bool Controller::get_motor_on() void Controller::set_drive(std::shared_ptr<Drive> drive) { - drive_ = drive; invalidate_track(); + drive_ = drive; } void Controller::invalidate_track() { track_ = nullptr; + if(patched_track_) + { + drive_->set_track(patched_track_); + patched_track_ = nullptr; + } } void Controller::process_write_completed() diff --git a/Storage/Disk/DiskController.hpp b/Storage/Disk/DiskController.hpp index 1ab09adde..f309307bc 100644 --- a/Storage/Disk/DiskController.hpp +++ b/Storage/Disk/DiskController.hpp @@ -123,7 +123,6 @@ class Controller: public DigitalPhaseLockedLoop::Delegate, public TimedEventLoop bool motor_is_on_; bool is_reading_; - bool track_is_dirty_; std::shared_ptr<PCMPatchedTrack> patched_track_; PCMSegment write_segment_; Time write_start_time_;