mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-03 22:33:29 +00:00
Provide a volume to the SCSI card if one is received.
This commit is contained in:
parent
ea4bf5f31a
commit
6010c971a1
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user