1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-04 18:29:40 +00:00

Accept and keep hold of disk images.

This commit is contained in:
Thomas Harte 2023-11-29 15:20:14 -05:00
parent ddf38595ff
commit 05504c8389

View File

@ -32,6 +32,7 @@
#include "../AudioProducer.hpp" #include "../AudioProducer.hpp"
#include "../KeyboardMachine.hpp" #include "../KeyboardMachine.hpp"
#include "../MediaTarget.hpp"
#include "../ScanProducer.hpp" #include "../ScanProducer.hpp"
#include "../TimedMachine.hpp" #include "../TimedMachine.hpp"
@ -192,6 +193,10 @@ class FloppyController {
} }
} }
void set_disk(std::shared_ptr<Storage::Disk::Disk> disk, int drive) {
drives_[drive].disk = disk;
}
private: private:
void reset() { void reset() {
printf("FDC reset\n"); printf("FDC reset\n");
@ -230,6 +235,8 @@ class FloppyController {
bool side = false; bool side = false;
bool motor = false; bool motor = false;
bool exists = true; bool exists = true;
std::shared_ptr<Storage::Disk::Disk> disk;
} drives_[4]; } drives_[4];
std::string drive_name(int c) const { std::string drive_name(int c) const {
@ -1088,8 +1095,9 @@ class ConcreteMachine:
public Machine, public Machine,
public MachineTypes::TimedMachine, public MachineTypes::TimedMachine,
public MachineTypes::AudioProducer, public MachineTypes::AudioProducer,
public MachineTypes::ScanProducer,
public MachineTypes::MappedKeyboardMachine, public MachineTypes::MappedKeyboardMachine,
public MachineTypes::MediaTarget,
public MachineTypes::ScanProducer,
public Activity::Source public Activity::Source
{ {
public: public:
@ -1126,6 +1134,9 @@ class ConcreteMachine:
// Give the MDA something to read from. // Give the MDA something to read from.
const auto &font_contents = roms.find(font)->second; const auto &font_contents = roms.find(font)->second;
mda_.set_source(context.memory.at(0xb'0000), font_contents); mda_.set_source(context.memory.at(0xb'0000), font_contents);
// ... and insert media.
insert_media(target.media);
} }
~ConcreteMachine() { ~ConcreteMachine() {
@ -1238,6 +1249,17 @@ class ConcreteMachine:
} }
} }
// MARK: - MediaTarget
bool insert_media(const Analyser::Static::Media &media) override {
int c = 0;
for(auto &disk : media.disks) {
fdc_.set_disk(disk, c);
c++;
if(c == 4) break;
}
return true;
}
// MARK: - MappedKeyboardMachine. // MARK: - MappedKeyboardMachine.
MappedKeyboardMachine::KeyboardMapper *get_keyboard_mapper() override { MappedKeyboardMachine::KeyboardMapper *get_keyboard_mapper() override {
return &keyboard_mapper_; return &keyboard_mapper_;