1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-05 10:28:58 +00:00

Adds route for inserting disks.

This commit is contained in:
Thomas Harte 2021-10-05 16:12:30 -07:00
parent 18631399ad
commit 2253ff656a
3 changed files with 36 additions and 2 deletions

View File

@ -39,6 +39,7 @@ namespace Amiga {
class ConcreteMachine:
public Activity::Source,
public CPU::MC68000::BusHandler,
public MachineTypes::MediaTarget,
public MachineTypes::ScanProducer,
public MachineTypes::TimedMachine,
public Machine {
@ -47,8 +48,6 @@ class ConcreteMachine:
mc68000_(*this),
chipset_(memory_, PALClockRate)
{
(void)target;
// Temporary: use a hard-coded Kickstart selection.
constexpr ROM::Name rom_name = ROM::Name::AmigaA500Kickstart13;
ROM::Request request(rom_name);
@ -58,7 +57,18 @@ class ConcreteMachine:
}
Memory::PackBigEndian16(roms.find(rom_name)->second, memory_.kickstart.data());
// For now, also hard-code assumption of PAL.
// (Assumption is both here and in the video timing of the Chipset).
set_clock_rate(PALClockRate);
// Insert supplied media.
insert_media(target.media);
}
// MARK: - MediaTarget.
bool insert_media(const Analyser::Static::Media &media) final {
return chipset_.insert(media.disks);
}
// MARK: - MC68000::BusHandler.

View File

@ -1125,3 +1125,21 @@ uint8_t Chipset::DiskController::get_rdy_trk0_wpro_chng() {
(drive.get_is_read_only() ? 0x08 : 0x00);
return 0xff & ~active_high;
}
bool Chipset::DiskController::insert(const std::shared_ptr<Storage::Disk::Disk> &disk, size_t drive) {
if(drive >= 4) return false;
get_drive(drive).set_disk(disk);
return true;
}
bool Chipset::insert(const std::vector<std::shared_ptr<Storage::Disk::Disk>> &disks) {
bool inserted = false;
size_t target = 0;
for(const auto &disk: disks) {
inserted |= disk_controller_.insert(disk, target);
++target;
}
return inserted;
}

View File

@ -91,6 +91,10 @@ class Chipset: private ClockingHint::Observer {
return interrupt_level_;
}
/// Inserts the disks provided.
/// @returns @c true if anything was inserted; @c false otherwise.
bool insert(const std::vector<std::shared_ptr<Storage::Disk::Disk>> &disks);
// The standard CRT set.
void set_scan_target(Outputs::Display::ScanTarget *scan_target);
Outputs::Display::ScanStatus get_scaled_scan_status() const;
@ -230,6 +234,8 @@ class Chipset: private ClockingHint::Observer {
Storage::Disk::Controller::run_for(duration);
}
bool insert(const std::shared_ptr<Storage::Disk::Disk> &disk, size_t drive);
private:
void process_input_bit(int value) final;
void process_index_hole() final;