1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-29 00:29:34 +00:00

Adjusts the 1770 not to talk directly to the drive about motor status.

This commit is contained in:
Thomas Harte 2017-09-11 22:10:56 -04:00
parent fb9fd26af7
commit 2f13517f38
4 changed files with 12 additions and 2 deletions

View File

@ -145,7 +145,7 @@ void WD1770::run_for(const Cycles cycles) {
#define LINE_LABEL INDIRECT_CONCATENATE(label, __LINE__) #define LINE_LABEL INDIRECT_CONCATENATE(label, __LINE__)
#define SPIN_UP() \ #define SPIN_UP() \
get_drive().set_motor_on(true); \ set_motor_on(true); \
index_hole_count_ = 0; \ index_hole_count_ = 0; \
index_hole_count_target_ = 6; \ index_hole_count_target_ = 6; \
WAIT_FOR_EVENT(Event1770::IndexHoleTarget); \ WAIT_FOR_EVENT(Event1770::IndexHoleTarget); \
@ -178,7 +178,7 @@ void WD1770::posit_event(int new_event_type) {
// motor power-down // motor power-down
if(index_hole_count_ == 9 && !status_.busy && has_motor_on_line()) { if(index_hole_count_ == 9 && !status_.busy && has_motor_on_line()) {
get_drive().set_motor_on(false); set_motor_on(false);
} }
// head unload // head unload
@ -781,6 +781,7 @@ void WD1770::update_status(std::function<void(Status &)> updater) {
} }
void WD1770::set_head_load_request(bool head_load) {} void WD1770::set_head_load_request(bool head_load) {}
void WD1770::set_motor_on(bool motor_on) {}
void WD1770::set_head_loaded(bool head_loaded) { void WD1770::set_head_loaded(bool head_loaded) {
head_is_loaded_ = head_loaded; head_is_loaded_ = head_loaded;

View File

@ -76,6 +76,7 @@ class WD1770: public Storage::Disk::MFMController {
protected: protected:
virtual void set_head_load_request(bool head_load); virtual void set_head_load_request(bool head_load);
virtual void set_motor_on(bool motor_on);
void set_head_loaded(bool head_loaded); void set_head_loaded(bool head_loaded);
private: private:

View File

@ -47,3 +47,9 @@ void Plus3::set_control_register(uint8_t control, uint8_t changes) {
} }
if(changes & 0x08) set_is_double_density(!(control & 0x08)); if(changes & 0x08) set_is_double_density(!(control & 0x08));
} }
void Plus3::set_motor_on(bool on) {
// TODO: this status should transfer if the selected drive changes. But the same goes for
// writing state, so plenty of work to do in general here.
get_drive().set_motor_on(on);
}

View File

@ -25,6 +25,8 @@ class Plus3 : public WD::WD1770 {
std::shared_ptr<Storage::Disk::Drive> drives_[2]; std::shared_ptr<Storage::Disk::Drive> drives_[2];
int selected_drive_ = 0; int selected_drive_ = 0;
uint8_t last_control_ = 0; uint8_t last_control_ = 0;
void set_motor_on(bool on);
}; };
} }