// // MacintoshDoubleDensityDrive.hpp // Clock Signal // // Created by Thomas Harte on 10/07/2019. // Copyright © 2019 Thomas Harte. All rights reserved. // #ifndef MacintoshDoubleDensityDrive_hpp #define MacintoshDoubleDensityDrive_hpp #include "IWM.hpp" namespace Apple { namespace Macintosh { class DoubleDensityDrive: public IWMDrive { public: DoubleDensityDrive(int input_clock_rate, bool is_800k); /*! @returns @c true if this is an 800kb drive; @c false otherwise. */ bool is_800k() const { return is_800k_; } /*! Sets the current rotation speed of this drive only if it is a 400kb drive. 800kb drives select their own rotation speed based on head position, and ignore this input. */ void set_rotation_speed(float revolutions_per_minute); private: void set_enabled(bool) final; void set_control_lines(int) final; bool read() final; // To receive the proper notifications from Storage::Disk::Drive. void did_step(Storage::Disk::HeadPosition to_position) final; void did_set_disk(bool) final; const bool is_800k_; bool has_new_disk_ = false; int control_state_ = 0; int step_direction_ = 1; }; } } #endif /* MacintoshDoubleDensityDrive_hpp */