diff --git a/Machines/Apple/Macintosh/Macintosh.cpp b/Machines/Apple/Macintosh/Macintosh.cpp index e426ac4f9..a7d37d024 100644 --- a/Machines/Apple/Macintosh/Macintosh.cpp +++ b/Machines/Apple/Macintosh/Macintosh.cpp @@ -504,6 +504,7 @@ template class ConcreteMachin private: void set_component_prefers_clocking(ClockingHint::Source *component, ClockingHint::Preference clocking) override { scsi_is_clocked_ = scsi_.preferred_clocking() != ClockingHint::Preference::None; + scsi_bus_is_clocked_ = scsi_bus_.preferred_clocking() != ClockingHint::Preference::None; } void drive_speed_accumulator_set_drive_speed(DriveSpeedAccumulator *, float speed) override { @@ -595,8 +596,9 @@ template class ConcreteMachin } // Update the SCSI if currently active. - if(model == Analyser::Static::Macintosh::Target::Model::MacPlus && scsi_is_clocked_) { - scsi_.run_for(Cycles(duration.as_int())); + if(model == Analyser::Static::Macintosh::Target::Model::MacPlus) { + if(scsi_is_clocked_) scsi_.run_for(Cycles(duration.as_int())); + if(scsi_bus_is_clocked_) scsi_bus_.run_for(duration); } } @@ -741,6 +743,7 @@ template class ConcreteMachin NCR::NCR5380::NCR5380 scsi_; SCSI::Target::Target hard_drive_; bool scsi_is_clocked_ = false; + bool scsi_bus_is_clocked_ = false; HalfCycles via_clock_; HalfCycles real_time_clock_; diff --git a/Storage/MassStorage/SCSI/SCSI.cpp b/Storage/MassStorage/SCSI/SCSI.cpp index 9b3b9da64..8c947c1eb 100644 --- a/Storage/MassStorage/SCSI/SCSI.cpp +++ b/Storage/MassStorage/SCSI/SCSI.cpp @@ -73,16 +73,16 @@ void Bus::add_observer(Observer *observer) { } ClockingHint::Preference Bus::preferred_clocking() { - return (dispatch_index_ < sizeof(dispatch_times_)) ? ClockingHint::Preference::RealTime : ClockingHint::Preference::None; + return (dispatch_index_ < dispatch_times_.size()) ? ClockingHint::Preference::RealTime : ClockingHint::Preference::None; } void Bus::run_for(HalfCycles time) { - if(dispatch_index_ < sizeof(dispatch_times_)) { + if(dispatch_index_ < dispatch_times_.size()) { time_in_state_ += time; const auto old_index = dispatch_index_; const auto time_as_int = time_in_state_.as_int(); - while(time_as_int >= dispatch_times_[dispatch_index_] && dispatch_index_ < sizeof(dispatch_times_)) { + while(time_as_int >= dispatch_times_[dispatch_index_] && dispatch_index_ < dispatch_times_.size()) { ++dispatch_index_; } diff --git a/Storage/MassStorage/SCSI/SCSI.hpp b/Storage/MassStorage/SCSI/SCSI.hpp index d1d0415bc..9325eaf92 100644 --- a/Storage/MassStorage/SCSI/SCSI.hpp +++ b/Storage/MassStorage/SCSI/SCSI.hpp @@ -9,6 +9,7 @@ #ifndef SCSI_hpp #define SCSI_hpp +#include #include #include @@ -138,7 +139,7 @@ class Bus: public ClockingHint::Source { HalfCycles time_in_state_; double cycles_to_time_ = 1.0; size_t dispatch_index_ = 0; - int dispatch_times_[8]; + std::array dispatch_times_; std::vector device_states_; BusState state_ = DefaultBusState;