1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-08-13 00:25:26 +00:00

Adds the Spectrum side of typing.

The character mapper itself needs some Spectrum logic.
This commit is contained in:
Thomas Harte
2021-03-23 10:44:43 -04:00
parent 4e8f82a39c
commit 465c74ab86

View File

@@ -35,6 +35,7 @@
#include "../../../Analyser/Static/ZXSpectrum/Target.hpp" #include "../../../Analyser/Static/ZXSpectrum/Target.hpp"
#include "../../Utility/MemoryFuzzer.hpp" #include "../../Utility/MemoryFuzzer.hpp"
#include "../../Utility/Typer.hpp"
#include "../../../ClockReceiver/JustInTime.hpp" #include "../../../ClockReceiver/JustInTime.hpp"
@@ -46,18 +47,22 @@ namespace Sinclair {
namespace ZXSpectrum { namespace ZXSpectrum {
using Model = Analyser::Static::ZXSpectrum::Target::Model; using Model = Analyser::Static::ZXSpectrum::Target::Model;
using CharacterMapper = Sinclair::ZX::Keyboard::CharacterMapper;
template<Model model> class ConcreteMachine: template<Model model> class ConcreteMachine:
public Activity::Source, public Activity::Source,
public Configurable::Device, public Configurable::Device,
public CPU::Z80::BusHandler,
public Machine, public Machine,
public MachineTypes::AudioProducer, public MachineTypes::AudioProducer,
public MachineTypes::MappedKeyboardMachine, public MachineTypes::MappedKeyboardMachine,
public MachineTypes::MediaTarget, public MachineTypes::MediaTarget,
public MachineTypes::ScanProducer, public MachineTypes::ScanProducer,
public MachineTypes::TimedMachine, public MachineTypes::TimedMachine,
public CPU::Z80::BusHandler { public Utility::TypeRecipient<CharacterMapper> {
public: public:
ConcreteMachine(const Analyser::Static::ZXSpectrum::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) : ConcreteMachine(const Analyser::Static::ZXSpectrum::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) :
Utility::TypeRecipient<CharacterMapper>(Sinclair::ZX::Keyboard::Machine::ZXSpectrum),
z80_(*this), z80_(*this),
ay_(GI::AY38910::Personality::AY38910, audio_queue_), ay_(GI::AY38910::Personality::AY38910, audio_queue_),
audio_toggle_(audio_queue_), audio_toggle_(audio_queue_),
@@ -360,18 +365,28 @@ template<Model model> class ConcreteMachine:
if constexpr (model == Model::Plus3) { if constexpr (model == Model::Plus3) {
fdc_ += Cycles(duration.as_integral()); fdc_ += Cycles(duration.as_integral());
} }
if(typer_) typer_->run_for(duration);
}
void type_string(const std::string &string) override {
Utility::TypeRecipient<CharacterMapper>::add_typer(string);
}
bool can_type(char c) const override {
return Utility::TypeRecipient<CharacterMapper>::can_type(c);
} }
public: public:
// MARK: - Typer // MARK: - Typer
// HalfCycles get_typer_delay(const std::string &) const final { HalfCycles get_typer_delay(const std::string &) const override {
// return z80_.get_is_resetting() ? Cycles(7'000'000) : Cycles(0); return z80_.get_is_resetting() ? Cycles(7'000'000) : Cycles(0);
// } }
//
// HalfCycles get_typer_frequency() const final { HalfCycles get_typer_frequency() const override{
// return Cycles(146'250); return Cycles(146'250);
// } }
KeyboardMapper *get_keyboard_mapper() override { KeyboardMapper *get_keyboard_mapper() override {
return &keyboard_mapper_; return &keyboard_mapper_;