From 9bbcbd10017e4c7d99512c0187e559bd6d4637a0 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 25 Sep 2016 20:05:56 -0400 Subject: [PATCH] Renamed class, intending to turn a `Disk::Drive` into literally just that, and have a thing with a PLL that consumes events be a `Controller`. --- Components/1770/1770.cpp | 4 +-- Components/1770/1770.hpp | 4 +-- Machines/Commodore/1540/C1540.cpp | 4 +-- Machines/Commodore/1540/C1540.hpp | 4 +-- Machines/Electron/Electron.cpp | 4 +-- .../Clock Signal.xcodeproj/project.pbxproj | 12 ++++----- StaticAnalyser/Acorn/Disk.cpp | 6 ++--- StaticAnalyser/Commodore/Disk.cpp | 6 ++--- .../{DiskDrive.cpp => DiskController.cpp} | 26 +++++++++---------- .../{DiskDrive.hpp => DiskController.hpp} | 10 +++---- 10 files changed, 39 insertions(+), 41 deletions(-) rename Storage/Disk/{DiskDrive.cpp => DiskController.cpp} (82%) rename Storage/Disk/{DiskDrive.hpp => DiskController.hpp} (90%) diff --git a/Components/1770/1770.cpp b/Components/1770/1770.cpp index c3f000aaf..e7442d962 100644 --- a/Components/1770/1770.cpp +++ b/Components/1770/1770.cpp @@ -12,7 +12,7 @@ using namespace WD; WD1770::WD1770() : - Storage::Disk::Drive(8000000, 1, 300), + Storage::Disk::Controller(8000000, 1, 300), status_(0), interesting_event_mask_(Event::Command), resume_point_(0), @@ -60,7 +60,7 @@ uint8_t WD1770::get_register(int address) void WD1770::run_for_cycles(unsigned int number_of_cycles) { - if(status_ & Flag::MotorOn) Storage::Disk::Drive::run_for_cycles((int)number_of_cycles); + if(status_ & Flag::MotorOn) Storage::Disk::Controller::run_for_cycles((int)number_of_cycles); if(delay_time_) { diff --git a/Components/1770/1770.hpp b/Components/1770/1770.hpp index fcf806777..9bd73a50c 100644 --- a/Components/1770/1770.hpp +++ b/Components/1770/1770.hpp @@ -9,11 +9,11 @@ #ifndef _770_hpp #define _770_hpp -#include "../../Storage/Disk/DiskDrive.hpp" +#include "../../Storage/Disk/DiskController.hpp" namespace WD { -class WD1770: public Storage::Disk::Drive { +class WD1770: public Storage::Disk::Controller { public: WD1770(); diff --git a/Machines/Commodore/1540/C1540.cpp b/Machines/Commodore/1540/C1540.cpp index 2756ad058..eee5ffb30 100644 --- a/Machines/Commodore/1540/C1540.cpp +++ b/Machines/Commodore/1540/C1540.cpp @@ -14,7 +14,7 @@ using namespace Commodore::C1540; Machine::Machine() : _shift_register(0), - Storage::Disk::Drive(1000000, 4, 300) + Storage::Disk::Controller(1000000, 4, 300) { // create a serial port and a VIA to run it _serialPortVIA.reset(new SerialPortVIA); @@ -106,7 +106,7 @@ void Machine::run_for_cycles(int number_of_cycles) { CPU6502::Processor::run_for_cycles(number_of_cycles); if(_driveVIA.get_motor_enabled()) // TODO: motor speed up/down - Storage::Disk::Drive::run_for_cycles(number_of_cycles); + Storage::Disk::Controller::run_for_cycles(number_of_cycles); } #pragma mark - 6522 delegate diff --git a/Machines/Commodore/1540/C1540.hpp b/Machines/Commodore/1540/C1540.hpp index 7a1b5e0e4..0311e945a 100644 --- a/Machines/Commodore/1540/C1540.hpp +++ b/Machines/Commodore/1540/C1540.hpp @@ -15,7 +15,7 @@ #include "../SerialBus.hpp" #include "../../../Storage/Disk/Disk.hpp" -#include "../../../Storage/Disk/DiskDrive.hpp" +#include "../../../Storage/Disk/DiskController.hpp" namespace Commodore { namespace C1540 { @@ -216,7 +216,7 @@ class Machine: public CPU6502::Processor, public MOS::MOS6522IRQDelegate::Delegate, public DriveVIA::Delegate, - public Storage::Disk::Drive { + public Storage::Disk::Controller { public: Machine(); diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index 95727d700..c391f83eb 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -318,9 +318,7 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin case 0xfc00: if(_wd1770 && (address&0x00f0) == 0x00c0) { - if(isReadOperation(operation)) - *value = 1; - else + if(!isReadOperation(operation)) { // TODO: // bit 0 => enable or disable drive 1 diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 659c4f7d0..4490fcf2d 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -45,7 +45,7 @@ 4B69FB3D1C4D908A00B5F0AA /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB3B1C4D908A00B5F0AA /* Tape.cpp */; }; 4B69FB441C4D941400B5F0AA /* TapeUEF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B69FB421C4D941400B5F0AA /* TapeUEF.cpp */; }; 4B69FB461C4D950F00B5F0AA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B69FB451C4D950F00B5F0AA /* libz.tbd */; }; - 4B6C73BD1D387AE500AFCFCA /* DiskDrive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6C73BB1D387AE500AFCFCA /* DiskDrive.cpp */; }; + 4B6C73BD1D387AE500AFCFCA /* DiskController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */; }; 4B73C71A1D036BD90074D992 /* Vic20Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B73C7191D036BD90074D992 /* Vic20Document.swift */; }; 4B73C71D1D036C030074D992 /* Vic20Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B73C71B1D036C030074D992 /* Vic20Document.xib */; }; 4B92EACA1B7C112B00246143 /* 6502TimingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */; }; @@ -457,8 +457,8 @@ 4B69FB421C4D941400B5F0AA /* TapeUEF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TapeUEF.cpp; sourceTree = ""; }; 4B69FB431C4D941400B5F0AA /* TapeUEF.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TapeUEF.hpp; sourceTree = ""; }; 4B69FB451C4D950F00B5F0AA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 4B6C73BB1D387AE500AFCFCA /* DiskDrive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiskDrive.cpp; sourceTree = ""; }; - 4B6C73BC1D387AE500AFCFCA /* DiskDrive.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DiskDrive.hpp; sourceTree = ""; }; + 4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DiskController.cpp; sourceTree = ""; }; + 4B6C73BC1D387AE500AFCFCA /* DiskController.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DiskController.hpp; sourceTree = ""; }; 4B73C7191D036BD90074D992 /* Vic20Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Vic20Document.swift; sourceTree = ""; }; 4B73C71C1D036C030074D992 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = "Clock Signal/Base.lproj/Vic20Document.xib"; sourceTree = SOURCE_ROOT; }; 4B92EAC91B7C112B00246143 /* 6502TimingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 6502TimingTests.swift; sourceTree = ""; }; @@ -1115,11 +1115,11 @@ children = ( 4B0BE4261D3481E700D5256B /* DigitalPhaseLockedLoop.cpp */, 4BAB62AB1D3272D200DF5BA0 /* Disk.cpp */, - 4B6C73BB1D387AE500AFCFCA /* DiskDrive.cpp */, + 4B6C73BB1D387AE500AFCFCA /* DiskController.cpp */, 4BAB62B61D3302CA00DF5BA0 /* PCMTrack.cpp */, 4B0BE4271D3481E700D5256B /* DigitalPhaseLockedLoop.hpp */, 4BAB62AC1D3272D200DF5BA0 /* Disk.hpp */, - 4B6C73BC1D387AE500AFCFCA /* DiskDrive.hpp */, + 4B6C73BC1D387AE500AFCFCA /* DiskController.hpp */, 4BAB62B71D3302CA00DF5BA0 /* PCMTrack.hpp */, 4BB697CF1D4BA44900248BDF /* Encodings */, 4BAB62B21D327F7E00DF5BA0 /* Formats */, @@ -2137,7 +2137,7 @@ 4BD468F71D8DF41D0084958B /* 1770.cpp in Sources */, 4BBF99141C8FBA6F0075DAFB /* CRTInputBufferBuilder.cpp in Sources */, 4B2409551C45AB05004DA684 /* Speaker.cpp in Sources */, - 4B6C73BD1D387AE500AFCFCA /* DiskDrive.cpp in Sources */, + 4B6C73BD1D387AE500AFCFCA /* DiskController.cpp in Sources */, 4B643F3A1D77AD1900D431D6 /* CSStaticAnalyser.mm in Sources */, 4B4DC8281D2C2470003C5BF8 /* C1540.cpp in Sources */, 4B1E85751D170228001EF87D /* Typer.cpp in Sources */, diff --git a/StaticAnalyser/Acorn/Disk.cpp b/StaticAnalyser/Acorn/Disk.cpp index 61b078c2a..a3825eeef 100644 --- a/StaticAnalyser/Acorn/Disk.cpp +++ b/StaticAnalyser/Acorn/Disk.cpp @@ -7,17 +7,17 @@ // #include "Disk.hpp" -#include "../../Storage/Disk/DiskDrive.hpp" +#include "../../Storage/Disk/DiskController.hpp" #include "../../Storage/Disk/Encodings/MFM.hpp" #include "../../NumberTheory/CRC.hpp" #include using namespace StaticAnalyser::Acorn; -class FMParser: public Storage::Disk::Drive { +class FMParser: public Storage::Disk::Controller { public: FMParser(bool is_mfm) : - Storage::Disk::Drive(4000000, 1, 300), + Storage::Disk::Controller(4000000, 1, 300), crc_generator_(0x1021, 0xffff), shift_register_(0), track_(0), is_mfm_(is_mfm) { diff --git a/StaticAnalyser/Commodore/Disk.cpp b/StaticAnalyser/Commodore/Disk.cpp index ee7e8b457..969898ac2 100644 --- a/StaticAnalyser/Commodore/Disk.cpp +++ b/StaticAnalyser/Commodore/Disk.cpp @@ -7,7 +7,7 @@ // #include "Disk.hpp" -#include "../../Storage/Disk/DiskDrive.hpp" +#include "../../Storage/Disk/DiskController.hpp" #include "../../Storage/Disk/Encodings/CommodoreGCR.hpp" #include "Utilities.hpp" @@ -17,9 +17,9 @@ using namespace StaticAnalyser::Commodore; -class CommodoreGCRParser: public Storage::Disk::Drive { +class CommodoreGCRParser: public Storage::Disk::Controller { public: - CommodoreGCRParser() : Storage::Disk::Drive(4000000, 1, 300), shift_register_(0), track_(1) + CommodoreGCRParser() : Storage::Disk::Controller(4000000, 1, 300), shift_register_(0), track_(1) { // Make sure this drive really is at track '1'. while(!get_is_track_zero()) step(-1); diff --git a/Storage/Disk/DiskDrive.cpp b/Storage/Disk/DiskController.cpp similarity index 82% rename from Storage/Disk/DiskDrive.cpp rename to Storage/Disk/DiskController.cpp index f69788950..8a7185601 100644 --- a/Storage/Disk/DiskDrive.cpp +++ b/Storage/Disk/DiskController.cpp @@ -1,16 +1,16 @@ // -// DiskDrive.cpp +// DiskController.cpp // Clock Signal // // Created by Thomas Harte on 14/07/2016. // Copyright © 2016 Thomas Harte. All rights reserved. // -#include "DiskDrive.hpp" +#include "DiskController.hpp" using namespace Storage::Disk; -Drive::Drive(unsigned int clock_rate, unsigned int clock_rate_multiplier, unsigned int revolutions_per_minute) : +Controller::Controller(unsigned int clock_rate, unsigned int clock_rate_multiplier, unsigned int revolutions_per_minute) : _clock_rate(clock_rate * clock_rate_multiplier), _clock_rate_multiplier(clock_rate_multiplier), _head_position(0), @@ -22,7 +22,7 @@ Drive::Drive(unsigned int clock_rate, unsigned int clock_rate_multiplier, unsign _rotational_multiplier.simplify(); } -void Drive::set_expected_bit_length(Time bit_length) +void Controller::set_expected_bit_length(Time bit_length) { _bit_length = bit_length; @@ -33,23 +33,23 @@ void Drive::set_expected_bit_length(Time bit_length) _pll->set_delegate(this); } -void Drive::set_disk(std::shared_ptr disk) +void Controller::set_disk(std::shared_ptr disk) { _disk = disk; set_track(Time()); } -bool Drive::has_disk() +bool Controller::has_disk() { return (bool)_disk; } -bool Drive::get_is_track_zero() +bool Controller::get_is_track_zero() { return _head_position == 0; } -void Drive::step(int direction) +void Controller::step(int direction) { _head_position = std::max(_head_position + direction, 0); Time extra_time = get_time_into_next_event() / _rotational_multiplier; @@ -58,7 +58,7 @@ void Drive::step(int direction) set_track(_time_into_track); } -void Drive::set_track(Time initial_offset) +void Controller::set_track(Time initial_offset) { _track = _disk->get_track_at_position(0, (unsigned int)_head_position); // TODO: probably a better implementation of the empty track? @@ -80,7 +80,7 @@ void Drive::set_track(Time initial_offset) reset_timer_to_offset(offset * _rotational_multiplier); } -void Drive::run_for_cycles(int number_of_cycles) +void Controller::run_for_cycles(int number_of_cycles) { if(has_disk()) { @@ -99,7 +99,7 @@ void Drive::run_for_cycles(int number_of_cycles) #pragma mark - Track timed event loop -void Drive::get_next_event() +void Controller::get_next_event() { if(_track) _current_event = _track->get_next_event(); @@ -115,7 +115,7 @@ void Drive::get_next_event() set_next_event_time_interval(_current_event.length * _rotational_multiplier); } -void Drive::process_next_event() +void Controller::process_next_event() { switch(_current_event.type) { @@ -134,7 +134,7 @@ void Drive::process_next_event() #pragma mark - PLL delegate -void Drive::digital_phase_locked_loop_output_bit(int value) +void Controller::digital_phase_locked_loop_output_bit(int value) { process_input_bit(value, _cycles_since_index_hole); } diff --git a/Storage/Disk/DiskDrive.hpp b/Storage/Disk/DiskController.hpp similarity index 90% rename from Storage/Disk/DiskDrive.hpp rename to Storage/Disk/DiskController.hpp index 8c9938d54..f966f8453 100644 --- a/Storage/Disk/DiskDrive.hpp +++ b/Storage/Disk/DiskController.hpp @@ -1,13 +1,13 @@ // -// DiskDrive.hpp +// DiskController.hpp // Clock Signal // // Created by Thomas Harte on 14/07/2016. // Copyright © 2016 Thomas Harte. All rights reserved. // -#ifndef DiskDrive_hpp -#define DiskDrive_hpp +#ifndef Storage_Disk_Controller_hpp +#define Storage_Disk_Controller_hpp #include "Disk.hpp" #include "DigitalPhaseLockedLoop.hpp" @@ -27,13 +27,13 @@ namespace Disk { TODO: double sided disks, communication of head size and permissible stepping extents, appropriate simulation of gain. */ -class Drive: public DigitalPhaseLockedLoop::Delegate, public TimedEventLoop { +class Controller: public DigitalPhaseLockedLoop::Delegate, public TimedEventLoop { public: /*! Constructs a @c DiskDrive that will be run at @c clock_rate and runs its PLL at @c clock_rate*clock_rate_multiplier, spinning inserted disks at @c revolutions_per_minute. */ - Drive(unsigned int clock_rate, unsigned int clock_rate_multiplier, unsigned int revolutions_per_minute); + Controller(unsigned int clock_rate, unsigned int clock_rate_multiplier, unsigned int revolutions_per_minute); /*! Communicates to the PLL the expected length of a bit as a fraction of a second.