1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-10-01 13:58:20 +00:00

Provide a volume to the SCSI card if one is received.

This commit is contained in:
Thomas Harte 2022-08-23 15:11:56 -04:00
parent ea4bf5f31a
commit 6010c971a1
3 changed files with 26 additions and 3 deletions

View File

@ -31,6 +31,10 @@
#include "../../../ClockReceiver/ForceInline.hpp"
#include "../../../Configurable/StandardOptions.hpp"
#include "../../../Storage/MassStorage/SCSI/SCSI.hpp"
#include "../../../Storage/MassStorage/SCSI/DirectAccessDevice.hpp"
#include "../../../Storage/MassStorage/Encodings/MacintoshVolume.hpp"
#include <algorithm>
#include <array>
#include <memory>
@ -102,12 +106,13 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
Cycles cycles_since_audio_update_;
// MARK: - Cards
std::array<std::unique_ptr<Apple::II::Card>, 9> cards_; // The final slot is a sentinel.
static constexpr size_t NoActiveCard = 7; // There is no 'card 0' in internal numbering.
size_t active_card_ = NoActiveCard;
std::array<std::unique_ptr<Apple::II::Card>, 8> cards_; // The final slot is a sentinel for 'no active card'.
Cycles cycles_since_card_update_;
std::vector<Apple::II::Card *> every_cycle_cards_;
std::vector<Apple::II::Card *> just_in_time_cards_;
static constexpr size_t NoActiveCard = 8;
size_t active_card_ = NoActiveCard;
int stretched_cycles_since_card_update_ = 0;
@ -147,6 +152,10 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
return dynamic_cast<Apple::II::DiskIICard *>(cards_[5].get());
}
Apple::II::SCSICard *scsi_card() {
return dynamic_cast<Apple::II::SCSICard *>(cards_[6].get());
}
// MARK: - Memory Map.
/*
@ -891,6 +900,12 @@ template <Analyser::Static::AppleII::Target::Model model> class ConcreteMachine:
auto diskii = diskii_card();
if(diskii) diskii->set_disk(media.disks[0], 0);
}
if(!media.mass_storage_devices.empty()) {
auto scsi = scsi_card();
if(scsi) scsi->set_volume(media.mass_storage_devices[0]);
}
return true;
}

View File

@ -131,3 +131,7 @@ void SCSICard::perform_bus_operation(Select select, bool is_read, uint16_t addre
break;
}
}
void SCSICard::set_volume(const std::shared_ptr<Storage::MassStorage::MassStorageDevice> &volume) {
(void)volume;
}

View File

@ -13,8 +13,10 @@
#include "../../ROMMachine.hpp"
#include "../../../Components/5380/ncr5380.hpp"
#include "../../../Storage/MassStorage/MassStorageDevice.hpp"
#include <array>
#include <memory>
namespace Apple {
namespace II {
@ -26,6 +28,8 @@ class SCSICard: public Card {
void perform_bus_operation(Select select, bool is_read, uint16_t address, uint8_t *value) final;
void set_volume(const std::shared_ptr<Storage::MassStorage::MassStorageDevice> &volume);
private:
uint8_t *ram_pointer_ = nullptr;
uint8_t *rom_pointer_ = nullptr;