From 90151e209492d4ab28c5be9c8f60866be69e5134 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Wed, 28 Dec 2016 18:49:32 -0500 Subject: [PATCH] Fixed to ensure a known initial control register value, which has taken effect. --- Machines/Oric/Microdisc.cpp | 20 +++++++++----------- Machines/Oric/Microdisc.hpp | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) 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];