From 015f692bd3561072587b2fb7a30585dd6afa4a97 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 22 May 2018 19:51:39 -0400 Subject: [PATCH] The Disk II card now commutes Disk II sleep activity to select constraints. --- Machines/AppleII/DiskIICard.cpp | 7 +++++++ Machines/AppleII/DiskIICard.hpp | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Machines/AppleII/DiskIICard.cpp b/Machines/AppleII/DiskIICard.cpp index b2dd411ba..159c062ed 100644 --- a/Machines/AppleII/DiskIICard.cpp +++ b/Machines/AppleII/DiskIICard.cpp @@ -20,6 +20,7 @@ DiskIICard::DiskIICard(const ROMMachine::ROMFetcher &rom_fetcher, bool is_16_sec boot_ = std::move(*roms[0]); diskii_.set_state_machine(*roms[1]); set_select_constraints(None); + diskii_.set_sleep_observer(this); } void DiskIICard::perform_bus_operation(Select select, bool is_read, uint16_t address, uint8_t *value) { @@ -40,6 +41,7 @@ void DiskIICard::perform_bus_operation(Select select, bool is_read, uint16_t add } void DiskIICard::run_for(Cycles cycles, int stretches) { + if(diskii_is_sleeping_) return; diskii_.run_for(Cycles(cycles.as_int() * 2)); } @@ -50,3 +52,8 @@ void DiskIICard::set_disk(const std::shared_ptr &disk, int void DiskIICard::set_activity_observer(Activity::Observer *observer) { diskii_.set_activity_observer(observer); } + +void DiskIICard::set_component_is_sleeping(Sleeper *component, bool is_sleeping) { + diskii_is_sleeping_ = is_sleeping; + set_select_constraints(is_sleeping ? (IO | Device) : 0); +} diff --git a/Machines/AppleII/DiskIICard.hpp b/Machines/AppleII/DiskIICard.hpp index 48d30d021..9d5eaa8ec 100644 --- a/Machines/AppleII/DiskIICard.hpp +++ b/Machines/AppleII/DiskIICard.hpp @@ -22,7 +22,7 @@ namespace AppleII { -class DiskIICard: public Card { +class DiskIICard: public Card, public Sleeper::SleepObserver { public: DiskIICard(const ROMMachine::ROMFetcher &rom_fetcher, bool is_16_sector); @@ -34,8 +34,10 @@ class DiskIICard: public Card { void set_disk(const std::shared_ptr &disk, int drive); private: + void set_component_is_sleeping(Sleeper *component, bool is_sleeping) override; std::vector boot_; Apple::DiskII diskii_; + bool diskii_is_sleeping_ = false; }; }