mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-22 11:29:20 +00:00
'Clock' the SCSI bus (i.e. make it aware of passing time).
This commit is contained in:
parent
f50ce7f137
commit
7996fe6dab
@ -494,7 +494,10 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
|
|||||||
|
|
||||||
if(has_scsi_card) {
|
if(has_scsi_card) {
|
||||||
// Install the SCSI card in slot 7, to one-up any connected Disk II.
|
// Install the SCSI card in slot 7, to one-up any connected Disk II.
|
||||||
install_card(7, new Apple::II::SCSICard(roms));
|
//
|
||||||
|
// Rounding the clock rate slightly shouldn't matter, but:
|
||||||
|
// TODO: be [slightly] more honest about clock rate.
|
||||||
|
install_card(7, new Apple::II::SCSICard(roms, int(master_clock / 14.0f)));
|
||||||
}
|
}
|
||||||
|
|
||||||
rom_ = std::move(roms.find(system)->second);
|
rom_ = std::move(roms.find(system)->second);
|
||||||
|
@ -58,7 +58,7 @@ class Card {
|
|||||||
no constraints, that want to be informed of every machine cycle, will receive
|
no constraints, that want to be informed of every machine cycle, will receive
|
||||||
a call to perform_bus_operation every cycle and should use that for time keeping.
|
a call to perform_bus_operation every cycle and should use that for time keeping.
|
||||||
*/
|
*/
|
||||||
virtual void run_for([[maybe_unused]] Cycles half_cycles, [[maybe_unused]] int stretches) {}
|
virtual void run_for([[maybe_unused]] Cycles cycles, [[maybe_unused]] int stretches) {}
|
||||||
|
|
||||||
/// Requests a flush of any pending audio or video output.
|
/// Requests a flush of any pending audio or video output.
|
||||||
virtual void flush() {}
|
virtual void flush() {}
|
||||||
|
@ -58,9 +58,9 @@ ROM::Request SCSICard::rom_request() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: accept and supply real clock rate.
|
// TODO: accept and supply real clock rate.
|
||||||
SCSICard::SCSICard(ROM::Map &map) :
|
SCSICard::SCSICard(ROM::Map &map, int clock_rate) :
|
||||||
scsi_bus_(1),
|
scsi_bus_(clock_rate),
|
||||||
ncr5380_(scsi_bus_, 1),
|
ncr5380_(scsi_bus_, clock_rate),
|
||||||
storage_(scsi_bus_, 6)
|
storage_(scsi_bus_, 6)
|
||||||
{
|
{
|
||||||
// Grab a copy of the SCSI ROM.
|
// Grab a copy of the SCSI ROM.
|
||||||
|
@ -27,12 +27,16 @@ namespace II {
|
|||||||
class SCSICard: public Card {
|
class SCSICard: public Card {
|
||||||
public:
|
public:
|
||||||
static ROM::Request rom_request();
|
static ROM::Request rom_request();
|
||||||
SCSICard(ROM::Map &);
|
SCSICard(ROM::Map &, int clock_rate);
|
||||||
|
|
||||||
void perform_bus_operation(Select select, bool is_read, uint16_t address, uint8_t *value) final;
|
void perform_bus_operation(Select select, bool is_read, uint16_t address, uint8_t *value) final;
|
||||||
|
|
||||||
void set_storage_device(const std::shared_ptr<Storage::MassStorage::MassStorageDevice> &device);
|
void set_storage_device(const std::shared_ptr<Storage::MassStorage::MassStorageDevice> &device);
|
||||||
|
|
||||||
|
void run_for([[maybe_unused]] Cycles cycles, [[maybe_unused]] int stretches) final {
|
||||||
|
scsi_bus_.run_for(cycles);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t *ram_pointer_ = nullptr;
|
uint8_t *ram_pointer_ = nullptr;
|
||||||
uint8_t *rom_pointer_ = nullptr;
|
uint8_t *rom_pointer_ = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user