diff --git a/Machines/Oric/Microdisc.cpp b/Machines/Oric/Microdisc.cpp index 1e2810db7..79d16ebd4 100644 --- a/Machines/Oric/Microdisc.cpp +++ b/Machines/Oric/Microdisc.cpp @@ -23,8 +23,11 @@ Microdisc::Microdisc() : delegate_(nullptr), paging_flags_(BASICDisable), head_load_request_counter_(-1), - WD1770(P1793) -{} + WD1770(P1793), + last_control_(0) +{ + set_control_register(last_control_, 0xff); +} void Microdisc::set_disk(std::shared_ptr disk, int drive) { @@ -38,18 +41,13 @@ void Microdisc::set_disk(std::shared_ptr disk, int drive) void Microdisc::set_control_register(uint8_t control) { -// printf("control: %d%d%d%d%d%d%d%d\n", -// (control >> 7)&1, -// (control >> 6)&1, -// (control >> 5)&1, -// (control >> 4)&1, -// (control >> 3)&1, -// (control >> 2)&1, -// (control >> 1)&1, -// (control >> 0)&1); uint8_t changes = last_control_ ^ control; last_control_ = control; + set_control_register(control, changes); +} +void Microdisc::set_control_register(uint8_t control, uint8_t changes) +{ // b2: data separator clock rate select (1 = double) [TODO] // b65: drive select diff --git a/Machines/Oric/Microdisc.hpp b/Machines/Oric/Microdisc.hpp index 0b70afbfc..d320c7721 100644 --- a/Machines/Oric/Microdisc.hpp +++ b/Machines/Oric/Microdisc.hpp @@ -39,6 +39,7 @@ class Microdisc: public WD::WD1770 { inline int get_paging_flags() { return paging_flags_; } private: + void set_control_register(uint8_t control, uint8_t changes); void set_head_load_request(bool head_load); bool get_drive_is_ready(); std::shared_ptr drives_[4];