diff --git a/Analyser/Static/Thomson/StaticAnalyser.cpp b/Analyser/Static/Thomson/StaticAnalyser.cpp index 194a350b1..28abce04a 100644 --- a/Analyser/Static/Thomson/StaticAnalyser.cpp +++ b/Analyser/Static/Thomson/StaticAnalyser.cpp @@ -58,6 +58,8 @@ CartridgeList validated(const CartridgeList &cartridges) { return result; } +static constexpr bool DefaultMO6 = true; + } Analyser::Static::TargetList Analyser::Static::Thomson::GetTargets( @@ -71,6 +73,10 @@ Analyser::Static::TargetList Analyser::Static::Thomson::GetTargets( TargetList destination; auto target = std::make_unique(); + if(DefaultMO6) { + target->model = MOTarget::Model::MO6v3; + } + if(!media.tapes.empty()) { Storage::Tape::Thomson::MO::Parser parser; auto &tape = media.tapes.front(); @@ -85,10 +91,18 @@ Analyser::Static::TargetList Analyser::Static::Thomson::GetTargets( // in ->data. static constexpr size_t TypeOffset = 0xb; if(!first->type && first->data.size() > TypeOffset) { - if(!first->data[TypeOffset]) { // File type; 0 = BASIC, 1 = DATA; 2 = binary. - target->loading_command = L"RUN\"\n"; + const auto command = [&]() -> std::wstring { + if(!first->data[TypeOffset]) { // File type; 0 = BASIC, 1 = DATA; 2 = binary. + return L"RUN\""; + } else { + return L"LOADM\"\",,R"; + } + }; + + if(DefaultMO6) { + target->loading_command = std::wstring(L"1 ") + command() + L"\n"; } else { - target->loading_command = L"LOADM\"\",,R\n"; + target->loading_command = command() + L"\n"; } } } @@ -98,10 +112,19 @@ Analyser::Static::TargetList Analyser::Static::Thomson::GetTargets( if(!media.disks.empty()) { target->floppy = MOTarget::Floppy::CD90_640; target->media.disks = media.disks; + if(DefaultMO6) { + target->loading_command = L"1"; + } } if(!media.cartridges.empty()) { target->media.cartridges = is_confident ? media.cartridges : validated(media.cartridges); + + // Upon survey, it seemed that there are no catridges that require or that do anything additional on an MO6. + // So switch to an MO5 for faster launch. + if(!target->media.cartridges.empty()) { + target->model = MOTarget::Model::MO5v11; + } } if(!target->media.empty()) { diff --git a/Analyser/Static/Thomson/Target.hpp b/Analyser/Static/Thomson/Target.hpp index 4b71be833..4bce370ab 100644 --- a/Analyser/Static/Thomson/Target.hpp +++ b/Analyser/Static/Thomson/Target.hpp @@ -22,7 +22,7 @@ struct MOTarget: public Analyser::Static::Target, public Reflection::StructImpl< Floppy floppy = Floppy::None; ReflectableEnum(Model, MO5v1, MO5v11, MO6v1, MO6v2, MO6v3, Prodest128); - Model model = Model::MO5v11; + Model model = Model::MO6v3; MOTarget() : Analyser::Static::Target(Machine::ThomsonMO) {} diff --git a/Machines/Thomson/MO/MO.cpp b/Machines/Thomson/MO/MO.cpp index a95f7d1cc..04d3d6139 100644 --- a/Machines/Thomson/MO/MO.cpp +++ b/Machines/Thomson/MO/MO.cpp @@ -664,7 +664,7 @@ private: HalfCycles typer_delay(const std::wstring &) const final { if(m6809_.template get()) { - return Cycles(1'000'000); + return is_mo6 ? Cycles(1'750'000) : Cycles(1'000'000); } else { return Cycles(0); }