1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-26 10:29:31 +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 SPIN_UP() \
get_drive().set_motor_on(true); \
set_motor_on(true); \
index_hole_count_ = 0; \
index_hole_count_target_ = 6; \
WAIT_FOR_EVENT(Event1770::IndexHoleTarget); \
@ -178,7 +178,7 @@ void WD1770::posit_event(int new_event_type) {
// motor power-down
if(index_hole_count_ == 9 && !status_.busy && has_motor_on_line()) {
get_drive().set_motor_on(false);
set_motor_on(false);
}
// 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_motor_on(bool motor_on) {}
void WD1770::set_head_loaded(bool head_loaded) {
head_is_loaded_ = head_loaded;

View File

@ -76,6 +76,7 @@ class WD1770: public Storage::Disk::MFMController {
protected:
virtual void set_head_load_request(bool head_load);
virtual void set_motor_on(bool motor_on);
void set_head_loaded(bool head_loaded);
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));
}
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];
int selected_drive_ = 0;
uint8_t last_control_ = 0;
void set_motor_on(bool on);
};
}