From 169298af42d245b0d16769f0799e67ebf1667074 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 8 Apr 2024 21:15:40 -0400 Subject: [PATCH] Plumb through disk insertion. Surprisingly: some things now load. --- Machines/Acorn/Archimedes/Archimedes.cpp | 17 ++++++++--------- Machines/Acorn/Archimedes/FloppyDisc.hpp | 4 ++++ .../Acorn/Archimedes/InputOutputController.hpp | 4 ++++ Machines/Acorn/Archimedes/MemoryController.hpp | 3 +++ .../xcschemes/Clock Signal.xcscheme | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Machines/Acorn/Archimedes/Archimedes.cpp b/Machines/Acorn/Archimedes/Archimedes.cpp index 8fe046e60..5fc904889 100644 --- a/Machines/Acorn/Archimedes/Archimedes.cpp +++ b/Machines/Acorn/Archimedes/Archimedes.cpp @@ -470,15 +470,14 @@ class ConcreteMachine: void tick_floppy() { executor_.bus.tick_floppy(); } // MARK: - MediaTarget - bool insert_media(const Analyser::Static::Media &) override { -// int c = 0; -// for(auto &disk : media.disks) { -// fdc_.set_disk(disk, c); -// c++; -// if(c == 4) break; -// } -// return true; - return false; + bool insert_media(const Analyser::Static::Media &media) override { + int c = 0; + for(auto &disk : media.disks) { + executor_.bus.set_disk(disk, c); + c++; + if(c == 4) break; + } + return true; } // MARK: - Activity::Source. diff --git a/Machines/Acorn/Archimedes/FloppyDisc.hpp b/Machines/Acorn/Archimedes/FloppyDisc.hpp index 1308bb0d1..7a31076a7 100644 --- a/Machines/Acorn/Archimedes/FloppyDisc.hpp +++ b/Machines/Acorn/Archimedes/FloppyDisc.hpp @@ -37,6 +37,10 @@ public: } void reset() {} + void set_disk(std::shared_ptr disk, size_t drive) { + get_drive(drive).set_disk(disk); + } + private: InterruptObserverT &observer_; }; diff --git a/Machines/Acorn/Archimedes/InputOutputController.hpp b/Machines/Acorn/Archimedes/InputOutputController.hpp index 6454a3a19..9f619bbae 100644 --- a/Machines/Acorn/Archimedes/InputOutputController.hpp +++ b/Machines/Acorn/Archimedes/InputOutputController.hpp @@ -116,6 +116,10 @@ struct InputOutputController { floppy_.run_for(Cycles(1)); } + void set_disk(std::shared_ptr disk, size_t drive) { + floppy_.set_disk(disk, drive); + } + /// Decomposes an Archimedes bus address into bank, offset and type. struct Address { constexpr Address(uint32_t bus_address) noexcept { diff --git a/Machines/Acorn/Archimedes/MemoryController.hpp b/Machines/Acorn/Archimedes/MemoryController.hpp index 261625266..dbb91c511 100644 --- a/Machines/Acorn/Archimedes/MemoryController.hpp +++ b/Machines/Acorn/Archimedes/MemoryController.hpp @@ -199,6 +199,9 @@ struct MemoryController { // void tick_timers() { ioc_.tick_timers(); } void tick_floppy() { ioc_.tick_floppy(); } + void set_disk(std::shared_ptr disk, size_t drive) { + ioc_.set_disk(disk, drive); + } auto &sound() { return ioc_.sound(); } const auto &sound() const { return ioc_.sound(); } diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme index 474fa352e..19b54b90e 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme +++ b/OSBindings/Mac/Clock Signal.xcodeproj/xcshareddata/xcschemes/Clock Signal.xcscheme @@ -62,7 +62,7 @@