mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-19 23:29:05 +00:00
Adjusts the 1770 not to talk directly to the drive about motor status.
This commit is contained in:
parent
fb9fd26af7
commit
2f13517f38
@ -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;
|
||||||
|
@ -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:
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user