1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-03-25 21:34:05 +00:00

Merge pull request from TomHarte/SSLandCSL

CPC: implement CSL and SSM to run Shaker tests.
This commit is contained in:
Thomas Harte 2024-08-14 19:55:18 -05:00 committed by GitHub
commit bcd558867d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
38 changed files with 5979 additions and 17 deletions

@ -20,10 +20,18 @@ struct Target: public Analyser::Static::Target, public Reflection::StructImpl<Ta
Model model = Model::CPC464;
std::string loading_command;
ReflectableEnum(CRTCType, Type0, Type1, Type2, Type3);
CRTCType crtc_type = CRTCType::Type2;
// This is used internally for testing; it therefore isn't exposed reflectively.
bool catch_ssm_codes = false;
Target() : Analyser::Static::Target(Machine::AmstradCPC) {
if(needs_declare()) {
DeclareField(model);
DeclareField(crtc_type);
AnnounceEnum(Model);
AnnounceEnum(CRTCType);
}
}
};

@ -301,17 +301,17 @@ template <class BusHandlerT, Personality personality, CursorType cursor_type> cl
}
} else {
line_counter_ = (line_counter_ + 1) & 0x7f;
}
// Check for start of vertical sync.
if(line_counter_ == layout_.vertical.start_sync) {
bus_state_.vsync = true;
vsync_counter_ = 0;
}
// Check for start of vertical sync.
if(line_counter_ == layout_.vertical.start_sync) {
bus_state_.vsync = true;
vsync_counter_ = 0;
}
// Check for end of visible lines.
if(line_counter_ == layout_.vertical.displayed) {
line_is_visible_ = false;
}
// Check for end of visible lines.
if(line_counter_ == layout_.vertical.displayed) {
line_is_visible_ = false;
}
} else {
bus_state_.row_address = (bus_state_.row_address + 1) & 0x1f;

@ -752,7 +752,8 @@ class i8255PortHandler : public Intel::i8255::PortHandler {
/*!
The actual Amstrad CPC implementation; tying the 8255, 6845 and AY to the Z80.
*/
template <bool has_fdc> class ConcreteMachine:
template <bool has_fdc, bool catches_ssm>
class ConcreteMachine:
public MachineTypes::ScanProducer,
public MachineTypes::AudioProducer,
public MachineTypes::TimedMachine,
@ -942,6 +943,39 @@ template <bool has_fdc> class ConcreteMachine:
*cycle.value = 0xc9;
break;
}
if constexpr (catches_ssm) {
ssm_code_ = (ssm_code_ << 8) | read_pointers_[address >> 14][address & 16383];
if(ssm_delegate_) {
if((ssm_code_ & 0xff00ff00) == 0xed00ed00) {
const auto code = uint16_t(
((ssm_code_ << 8) & 0xff00) | ((ssm_code_ >> 16) & 0x00ff)
);
const auto is_valid = [](uint8_t digit) {
return
(digit <= 0x3f) ||
(digit >= 0x7f && digit <= 0x9f) ||
(digit >= 0xa4 && digit <= 0xa7) ||
(digit >= 0xac && digit <= 0xaf) ||
(digit >= 0xb4 && digit <= 0xb7) ||
(digit >= 0xbc && digit <= 0xbf) ||
(digit >= 0xc0 && digit <= 0xfd);
};
if(
is_valid(static_cast<uint8_t>(code)) && is_valid(static_cast<uint8_t>(code >> 8))
) {
ssm_delegate_->perform(code);
ssm_code_ = 0;
}
}
} else if((ssm_code_ & 0xffff) == 0xedfe) {
ssm_delegate_->perform(0xfffe);
} else if((ssm_code_ & 0xffff) == 0xedff) {
ssm_delegate_->perform(0xffff);
}
}
[[fallthrough]];
case CPU::Z80::PartialMachineCycle::Read:
@ -1115,6 +1149,10 @@ template <bool has_fdc> class ConcreteMachine:
tape_player_is_sleeping_ = tape_player_.preferred_clocking() == ClockingHint::Preference::None;
}
void set_ssm_delegate(SSMDelegate *delegate) final {
ssm_delegate_ = delegate;
}
// MARK: - Keyboard
void type_string(const std::string &string) final {
Utility::TypeRecipient<CharacterMapper>::add_typer(string);
@ -1276,6 +1314,9 @@ template <bool has_fdc> class ConcreteMachine:
KeyboardState key_state_;
AmstradCPC::KeyboardMapper keyboard_mapper_;
SSMDelegate *ssm_delegate_ = nullptr;
uint32_t ssm_code_ = 0;
bool has_run_ = false;
uint8_t ram_[128 * 1024];
};
@ -1284,12 +1325,26 @@ template <bool has_fdc> class ConcreteMachine:
using namespace AmstradCPC;
namespace {
template <bool catch_ssm>
std::unique_ptr<Machine> machine(const Analyser::Static::AmstradCPC::Target &target, const ROMMachine::ROMFetcher &rom_fetcher) {
using Model = Analyser::Static::AmstradCPC::Target::Model;
switch(target.model) {
default: return std::make_unique<AmstradCPC::ConcreteMachine<true, catch_ssm>>(target, rom_fetcher);
case Model::CPC464: return std::make_unique<AmstradCPC::ConcreteMachine<false, catch_ssm>>(target, rom_fetcher);
}
}
}
// See header; constructs and returns an instance of the Amstrad CPC.
std::unique_ptr<Machine> Machine::AmstradCPC(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher) {
using Target = Analyser::Static::AmstradCPC::Target;
const Target *const cpc_target = dynamic_cast<const Target *>(target);
switch(cpc_target->model) {
default: return std::make_unique<AmstradCPC::ConcreteMachine<true>>(*cpc_target, rom_fetcher);
case Target::Model::CPC464: return std::make_unique<AmstradCPC::ConcreteMachine<false>>(*cpc_target, rom_fetcher);
if(cpc_target->catch_ssm_codes) {
return machine<true>(*cpc_target, rom_fetcher);
} else {
return machine<false>(*cpc_target, rom_fetcher);
}
}

@ -25,7 +25,10 @@ class Machine {
virtual ~Machine() = default;
/// Creates and returns an Amstrad CPC.
static std::unique_ptr<Machine> AmstradCPC(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher);
static std::unique_ptr<Machine> AmstradCPC(
const Analyser::Static::Target *target,
const ROMMachine::ROMFetcher &rom_fetcher
);
/// Defines the runtime options available for an Amstrad CPC.
class Options:
@ -47,6 +50,11 @@ class Machine {
}
}
};
struct SSMDelegate {
virtual void perform(uint16_t) = 0;
};
virtual void set_ssm_delegate(SSMDelegate *) = 0;
};
}

@ -139,6 +139,83 @@
4B055AEE1FAE9BBF0060FFFF /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B86E2591F8C628F006FAA45 /* Keyboard.cpp */; };
4B055AEF1FAE9BF00060FFFF /* Typer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A471F9B8FA70062DABF /* Typer.cpp */; };
4B055AF21FAE9C1C0060FFFF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B055AF01FAE9C080060FFFF /* OpenGL.framework */; };
4B06AACB2C645ED00034D014 /* AY38910.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4A762E1DB1A3FA007AAE2E /* AY38910.cpp */; };
4B06AACC2C645EDF0034D014 /* Archimedes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB505842B9634F30031C43C /* Archimedes.cpp */; };
4B06AACD2C645EE50034D014 /* Enterprise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B051CA12676F52200CA44E8 /* Enterprise.cpp */; };
4B06AACE2C645EEC0034D014 /* PCCompatible.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 425739372B051EA800B7D1E4 /* PCCompatible.cpp */; };
4B06AACF2C645EF40034D014 /* i8272.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBC951C1F368D83008F4C34 /* i8272.cpp */; };
4B06AAD02C645F0A0034D014 /* EXDos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B051CB42680158600CA44E8 /* EXDos.cpp */; };
4B06AAD12C645F130034D014 /* 1770.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD468F51D8DF41D0084958B /* 1770.cpp */; };
4B06AAD22C645F190034D014 /* I2C.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2A1CD92BA775C5004496CE /* I2C.cpp */; };
4B06AAD32C645F1F0034D014 /* MSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B79A4FF1FC913C900EEDAD5 /* MSX.cpp */; };
4B06AAD42C645F250034D014 /* Oric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCF1FA21DADC3DD0039D2E7 /* Oric.cpp */; };
4B06AAD52C645F290034D014 /* AppleII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE0050227CE8CA000CA200 /* AppleII.cpp */; };
4B06AAD62C645F2D0034D014 /* AtariST.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC0623775819008902D0 /* AtariST.cpp */; };
4B06AAD72C645F330034D014 /* AppleIIgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE21214253FCE9C00435408 /* AppleIIgs.cpp */; };
4B06AAD82C645F370034D014 /* MasterSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B7F188C2154825D00388727 /* MasterSystem.cpp */; };
4B06AAD92C645F5D0034D014 /* SN76489.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB0A6592044FD3000FB3688 /* SN76489.cpp */; };
4B06AADA2C645F650034D014 /* MemorySlotHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF0BC67297108D100CCA2B5 /* MemorySlotHandler.cpp */; };
4B06AADB2C645F6D0034D014 /* DiskROM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEBFB4F2002DB30000708CC /* DiskROM.cpp */; };
4B06AADC2C645F720034D014 /* BD500.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B7BA03523CEB86000B98D9E /* BD500.cpp */; };
4B06AADD2C645F790034D014 /* Microdisc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B5FADBE1DE3BF2B00AEC565 /* Microdisc.cpp */; };
4B06AADE2C645F7E0034D014 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8DF4F7254E36AD00F3433C /* Video.cpp */; };
4B06AADF2C645F830034D014 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB5056F2B962DDF0031C43C /* Video.cpp */; };
4B06AAE02C645F870034D014 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE004D227CE8CA000CA200 /* Video.cpp */; };
4B06AAE12C645F8B0034D014 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2BFDB01DAEF5FF001A68B8 /* Video.cpp */; };
4B06AAE22C645F970034D014 /* PCBooter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 423820422B1A90BE00964EFE /* PCBooter.cpp */; };
4B06AAE32C645F9E0034D014 /* StringSerialiser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B17B58920A8A9D9007CCA8F /* StringSerialiser.cpp */; };
4B06AAE42C645FA50034D014 /* DiskIICard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE004E227CE8CA000CA200 /* DiskIICard.cpp */; };
4B06AAE52C645FAA0034D014 /* SCSICard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4C81C328B3C5CD00F84AE9 /* SCSICard.cpp */; };
4B06AAE62C645FB10034D014 /* ADB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8DF503254E3C9D00F3433C /* ADB.cpp */; };
4B06AAE72C645FBC0034D014 /* DMAController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC0723775819008902D0 /* DMAController.cpp */; };
4B06AAE82C645FCD0034D014 /* RP5C01.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF0BC6F2973318E00CCA2B5 /* RP5C01.cpp */; };
4B06AAE92C645FD30034D014 /* Jasmin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B7BA02E23C2B19B00B98D9E /* Jasmin.cpp */; };
4B06AAEA2C645FDD0034D014 /* Bus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BCE1DEF25D4C3FA00AE7A2B /* Bus.cpp */; };
4B06AAEB2C645FE80034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0C11F8D91CD0050900F /* Keyboard.cpp */; };
4B06AAEC2C645FF50034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E86CD25D8D8C70024F1E9 /* Keyboard.cpp */; };
4B06AAED2C6460040034D014 /* Sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1EC714255398B000A1F44B /* Sound.cpp */; };
4B06AAEE2C64600C0034D014 /* Vic20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4DC81F1D2C2425003C5BF8 /* Vic20.cpp */; };
4B06AAEF2C6460180034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B051CAE267C1CA200CA44E8 /* Keyboard.cpp */; };
4B06AAF02C6460240034D014 /* ReactiveDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E86B525D7490E0024F1E9 /* ReactiveDevice.cpp */; };
4B06AAF12C64602D0034D014 /* 6850.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB307BA235001C300457D33 /* 6850.cpp */; };
4B06AAF22C6460320034D014 /* MFP68901.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B92E268234AE35000CD6D1B /* MFP68901.cpp */; };
4B06AAF32C64603D0034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0C41F8D91D90050900F /* Keyboard.cpp */; };
4B06AAF42C6460430034D014 /* ZX8081.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F1BCC2602F17B00B85C66 /* ZX8081.cpp */; };
4B06AAF52C6460600034D014 /* Mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2E86BC25D74F160024F1E9 /* Mouse.cpp */; };
4B06AAF62C6460670034D014 /* DiskIIDrive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B80CD6D2568A82600176FCC /* DiskIIDrive.cpp */; };
4B06AAF72C64606E0034D014 /* DiskII.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B302183208A550100773308 /* DiskII.cpp */; };
4B06AAF82C6460760034D014 /* IntelligentKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC0923775819008902D0 /* IntelligentKeyboard.cpp */; };
4B06AAF92C64607C0034D014 /* AudioToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B595FAC2086DFBA0083CAA8 /* AudioToggle.cpp */; };
4B06AAFA2C6460800034D014 /* KonamiSCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4B1A3A200198C900A0F866 /* KonamiSCC.cpp */; };
4B06AAFB2C6460920034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B54C0BD1F8D8F450050900F /* Keyboard.cpp */; };
4B06AAFC2C6460970034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B12C0EB1FCFA98D005BFD93 /* Keyboard.cpp */; };
4B06AAFD2C64609D0034D014 /* IMD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42EB81262B23AAC300429AF4 /* IMD.cpp */; };
4B06AAFE2C6460A40034D014 /* ConfidenceSummary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8944E8201967B4007DE474 /* ConfidenceSummary.cpp */; };
4B06AAFF2C6460A80034D014 /* ConfidenceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8944E6201967B4007DE474 /* ConfidenceCounter.cpp */; };
4B06AB002C6460B70034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F1C1B2604EA1000B85C66 /* Keyboard.cpp */; };
4B06AB012C6460C30034D014 /* Video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F1BCD2602F17B00B85C66 /* Video.cpp */; };
4B06AB022C6460CB0034D014 /* Typer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2B3A471F9B8FA70062DABF /* Typer.cpp */; };
4B06AB032C6460D00034D014 /* OPLL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC23A2B2467600E001A6030 /* OPLL.cpp */; };
4B06AB042C6460D60034D014 /* 6560.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BC9DF4D1D04691600F44158 /* 6560.cpp */; };
4B06AB052C6460EC0034D014 /* ZXSpectrum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F1BFA260300D900B85C66 /* ZXSpectrum.cpp */; };
4B06AB062C6460F40034D014 /* Atari2600.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC2223775819008902D0 /* Atari2600.cpp */; };
4B06AB072C6461160034D014 /* StaticAnalyser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 429B135F2B1F7BDA006BB4CB /* StaticAnalyser.cpp */; };
4B06AB082C64611F0034D014 /* ColecoVision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B7A90E42041097C008514A2 /* ColecoVision.cpp */; };
4B06AB092C64612C0034D014 /* TIA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC1D23775819008902D0 /* TIA.cpp */; };
4B06AB0A2C6461350034D014 /* TIASound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ACC2123775819008902D0 /* TIASound.cpp */; };
4B06AB0B2C64614B0034D014 /* Electron.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB5056E2B962DDF0031C43C /* Electron.cpp */; };
4B06AB0C2C6461590034D014 /* StaticAnalyser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 423820102B17CBC800964EFE /* StaticAnalyser.cpp */; };
4B06AB0D2C6461610034D014 /* MultiMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3FCC3F201EC24200960631 /* MultiMachine.cpp */; };
4B06AB0E2C6461700034D014 /* MultiMediaTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB70A3202011C2002FE009 /* MultiMediaTarget.cpp */; };
4B06AB0F2C6461780034D014 /* MultiProducer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBB70A6202014E2002FE009 /* MultiProducer.cpp */; };
4B06AB102C6461810034D014 /* SoundGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB5056B2B962DDF0031C43C /* SoundGenerator.cpp */; };
4B06AB112C64618B0034D014 /* Tape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB505732B962DDF0031C43C /* Tape.cpp */; };
4B06AB122C6461910034D014 /* Plus3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB505752B962DDF0031C43C /* Plus3.cpp */; };
4B06AB132C6461970034D014 /* MultiConfigurable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1B88BE202E3DB200B67DFF /* MultiConfigurable.cpp */; };
4B06AB142C64619E0034D014 /* MultiJoystickMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1B88C6202E469300B67DFF /* MultiJoystickMachine.cpp */; };
4B06AB152C6461A20034D014 /* MultiKeyboardMachine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1B88B9202E2EC100B67DFF /* MultiKeyboardMachine.cpp */; };
4B06AB162C6461AB0034D014 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BB505762B962DDF0031C43C /* Keyboard.cpp */; };
4B06AB172C6461B30034D014 /* MultiSpeaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9BE3FE203A0C0600FFAE60 /* MultiSpeaker.cpp */; };
4B08A2751EE35D56008B7065 /* Z80InterruptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B08A2741EE35D56008B7065 /* Z80InterruptTests.swift */; };
4B08A2781EE39306008B7065 /* TestMachine.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B08A2771EE39306008B7065 /* TestMachine.mm */; };
4B08A56920D72BEF0016CE5A /* Activity.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B08A56720D72BEF0016CE5A /* Activity.xib */; };
@ -180,6 +257,9 @@
4B0F1C242605996900B85C66 /* ZXSpectrumTAP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F1C212605996900B85C66 /* ZXSpectrumTAP.cpp */; };
4B0F94FE208C1A1600FE41D9 /* NIB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F94FC208C1A1600FE41D9 /* NIB.cpp */; };
4B0F94FF208C1A1600FE41D9 /* NIB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0F94FC208C1A1600FE41D9 /* NIB.cpp */; };
4B1082C32C1A87CA00B07C5D /* CSL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1082C02C1A87CA00B07C5D /* CSL.cpp */; };
4B1082C42C1F5E7D00B07C5D /* CSL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1082C02C1A87CA00B07C5D /* CSL.cpp */; };
4B1082C52C1F60A900B07C5D /* CSL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1082C02C1A87CA00B07C5D /* CSL.cpp */; };
4B121F9B1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B121F9A1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm */; };
4B12C0ED1FCFA98D005BFD93 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B12C0EB1FCFA98D005BFD93 /* Keyboard.cpp */; };
4B12C0EE1FCFAD1A005BFD93 /* Keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B12C0EB1FCFA98D005BFD93 /* Keyboard.cpp */; };
@ -537,6 +617,10 @@
4B8805F41DCFD22A003085B1 /* Commodore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8805F21DCFD22A003085B1 /* Commodore.cpp */; };
4B8805F71DCFF6C9003085B1 /* Commodore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8805F51DCFF6C9003085B1 /* Commodore.cpp */; };
4B8805FB1DCFF807003085B1 /* Oric.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8805F91DCFF807003085B1 /* Oric.cpp */; };
4B882F592C2F9C6A00D84031 /* CPCShakerTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B882F582C2F9C6900D84031 /* CPCShakerTests.mm */; };
4B882F5B2C2F9C7700D84031 /* Shaker in Resources */ = {isa = PBXBuildFile; fileRef = 4B882F5A2C2F9C7700D84031 /* Shaker */; };
4B882F5C2C32199400D84031 /* MachineForTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B055ABE1FAE98000060FFFF /* MachineForTarget.cpp */; };
4B882F5D2C3219A400D84031 /* AmstradCPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */; };
4B89449520194CB3007DE474 /* MachineForTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B055ABE1FAE98000060FFFF /* MachineForTarget.cpp */; };
4B894518201967B4007DE474 /* ConfidenceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8944E6201967B4007DE474 /* ConfidenceCounter.cpp */; };
4B894519201967B4007DE474 /* ConfidenceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B8944E6201967B4007DE474 /* ConfidenceCounter.cpp */; };
@ -1305,6 +1389,8 @@
4B0F94FC208C1A1600FE41D9 /* NIB.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NIB.cpp; sourceTree = "<group>"; };
4B0F94FD208C1A1600FE41D9 /* NIB.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = NIB.hpp; sourceTree = "<group>"; };
4B0F9500208C42A300FE41D9 /* Target.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = Target.hpp; path = AppleII/Target.hpp; sourceTree = "<group>"; };
4B1082C02C1A87CA00B07C5D /* CSL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSL.cpp; sourceTree = "<group>"; };
4B1082C12C1A87CA00B07C5D /* CSL.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CSL.hpp; sourceTree = "<group>"; };
4B121F9A1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PCMSegmentEventSourceTests.mm; sourceTree = "<group>"; };
4B12C0EB1FCFA98D005BFD93 /* Keyboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Keyboard.cpp; sourceTree = "<group>"; };
4B12C0EC1FCFA98D005BFD93 /* Keyboard.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Keyboard.hpp; sourceTree = "<group>"; };
@ -1644,6 +1730,8 @@
4B8805F61DCFF6C9003085B1 /* Commodore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Commodore.hpp; sourceTree = "<group>"; };
4B8805F91DCFF807003085B1 /* Oric.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Oric.cpp; path = Parsers/Oric.cpp; sourceTree = "<group>"; };
4B8805FA1DCFF807003085B1 /* Oric.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Oric.hpp; path = Parsers/Oric.hpp; sourceTree = "<group>"; };
4B882F582C2F9C6900D84031 /* CPCShakerTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CPCShakerTests.mm; sourceTree = "<group>"; };
4B882F5A2C2F9C7700D84031 /* Shaker */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Shaker; sourceTree = "<group>"; };
4B89449220194A47007DE474 /* CSStaticAnalyser+TargetVector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "CSStaticAnalyser+TargetVector.h"; path = "StaticAnalyser/CSStaticAnalyser+TargetVector.h"; sourceTree = "<group>"; };
4B8944E4201967B4007DE474 /* ConfidenceSummary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ConfidenceSummary.hpp; sourceTree = "<group>"; };
4B8944E5201967B4007DE474 /* ConfidenceSource.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ConfidenceSource.hpp; sourceTree = "<group>"; };
@ -2688,6 +2776,15 @@
path = Keyboard;
sourceTree = "<group>";
};
4B1082C22C1A87CA00B07C5D /* Automation */ = {
isa = PBXGroup;
children = (
4B1082C02C1A87CA00B07C5D /* CSL.cpp */,
4B1082C12C1A87CA00B07C5D /* CSL.hpp */,
);
path = Automation;
sourceTree = "<group>";
};
4B1414561B58879D00E04248 /* 6502 */ = {
isa = PBXGroup;
children = (
@ -2702,7 +2799,6 @@
4B1414631B588A1100E04248 /* Test Binaries */ = {
isa = PBXGroup;
children = (
4BB505882B9C0E6F0031C43C /* Messy ARM */,
4B680CE323A555CA00451D43 /* 68000 Comparative Tests */,
4B75F97A280D7C7700121055 /* 68000 Decoding */,
4B683B002727BE6F0043E541 /* Amiga Blitter Tests */,
@ -2711,7 +2807,9 @@
4BB0CAB127E51D2A00672A88 /* dingusdev PowerPC tests */,
4B7C7A06282C3DED002D6C0B /* flamewing 68000 BCD tests */,
4BBB77DC2867EBB300D335A1 /* IIgs Memory Map */,
4BB505882B9C0E6F0031C43C /* Messy ARM */,
4B98A1CD1FFADEC400ADF63B /* MSX ROMs */,
4B882F5A2C2F9C7700D84031 /* Shaker */,
4B018B88211930DE002A3937 /* 65C02_extended_opcodes_test.bin */,
4BE211DD253E4E4800435408 /* 65C02_no_Rockwell_test.bin */,
4B44EBF61DC9883B00A7820C /* 6502_functional_test.bin */,
@ -3326,6 +3424,7 @@
4BAB62AE1D32730D00DF5BA0 /* Storage.hpp */,
4BF4A2D91F534DB300B171F4 /* TargetPlatforms.hpp */,
4BB697CA1D4B6D3E00248BDF /* TimedEventLoop.hpp */,
4B1082C22C1A87CA00B07C5D /* Automation */,
4BEE0A691D72496600532C7B /* Cartridge */,
4B8805F81DCFF6CD003085B1 /* Data */,
4BAB62AA1D3272D200DF5BA0 /* Disk */,
@ -4554,6 +4653,7 @@
4B2005422B804D6400420C5C /* ARMDecoderTests.mm */,
4B924E981E74D22700B76AF1 /* AtariStaticAnalyserTests.mm */,
4BE34437238389E10058E78F /* AtariSTVideoTests.mm */,
4B882F582C2F9C6900D84031 /* CPCShakerTests.mm */,
4BB2A9AE1E13367E001A5C23 /* CRCTests.mm */,
4BB0CAA627E51B6300672A88 /* DingusdevPowerPCTests.mm */,
428168392A37AFB4008ECD27 /* DispatcherTests.mm */,
@ -5497,6 +5597,7 @@
4BB298FE1B587D8400A49093 /* anday in Resources */,
4BB299141B587D8400A49093 /* axsz in Resources */,
4BB2991D1B587D8400A49093 /* bplr in Resources */,
4B882F5B2C2F9C7700D84031 /* Shaker in Resources */,
4BB298FB1B587D8400A49093 /* ancb in Resources */,
4BB299431B587D8400A49093 /* dcma in Resources */,
4BB298FD1B587D8400A49093 /* andax in Resources */,
@ -5918,6 +6019,7 @@
4B055AAC1FAE85FD0060FFFF /* PCMSegment.cpp in Sources */,
4BB307BC235001C300457D33 /* 6850.cpp in Sources */,
4B055AB31FAE860F0060FFFF /* CSW.cpp in Sources */,
4B1082C52C1F60A900B07C5D /* CSL.cpp in Sources */,
4B89451D201967B4007DE474 /* Disk.cpp in Sources */,
4BFEA2F02682A7B900EBF94C /* Dave.cpp in Sources */,
4B4C81C628B3C5CD00F84AE9 /* SCSICard.cpp in Sources */,
@ -6084,6 +6186,7 @@
4BAF2B4E2004580C00480230 /* DMK.cpp in Sources */,
4BB697CE1D4BA44400248BDF /* CommodoreGCR.cpp in Sources */,
4B5B37312777C7FC0047F238 /* IPF.cpp in Sources */,
4B1082C42C1F5E7D00B07C5D /* CSL.cpp in Sources */,
4B0ACC3023775819008902D0 /* TIASound.cpp in Sources */,
4B7136861F78724F008B8ED9 /* Encoder.cpp in Sources */,
4B0E04EA1FC9E5DA00F43484 /* CAS.cpp in Sources */,
@ -6340,6 +6443,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4B06AAEA2C645FDD0034D014 /* Bus.cpp in Sources */,
4B778EF623A5EB600000D260 /* WOZ.cpp in Sources */,
42EB812F2B4700B800429AF4 /* MemoryMap.cpp in Sources */,
4B778F1423A5EC960000D260 /* Z80Storage.cpp in Sources */,
@ -6347,12 +6451,16 @@
4B778F1523A5EC980000D260 /* PartialMachineCycle.cpp in Sources */,
4BEDA43125B3C700000C2DBD /* Executor.cpp in Sources */,
4B778F6123A5F3560000D260 /* Disk.cpp in Sources */,
4B06AAF82C6460760034D014 /* IntelligentKeyboard.cpp in Sources */,
4B7752B628217EE70073E2C5 /* DSK.cpp in Sources */,
4B06AAD12C645F130034D014 /* 1770.cpp in Sources */,
4B778F2523A5EDF40000D260 /* Encoder.cpp in Sources */,
4B778F4223A5F1A70000D260 /* MemoryFuzzer.cpp in Sources */,
4B778F0123A5EBA00000D260 /* MacintoshIMG.cpp in Sources */,
4B7752AD28217E770073E2C5 /* AmigaADF.cpp in Sources */,
4B06AAEB2C645FE80034D014 /* Keyboard.cpp in Sources */,
4BFF1D3D2235C3C100838EA1 /* EmuTOSTests.mm in Sources */,
4B06AB052C6460EC0034D014 /* ZXSpectrum.cpp in Sources */,
4B3F76B925A1635300178AEC /* PowerPCDecoderTests.mm in Sources */,
4B778F0A23A5EC150000D260 /* TapePRG.cpp in Sources */,
4B778F0823A5EC150000D260 /* CSW.cpp in Sources */,
@ -6362,6 +6470,7 @@
4B7752BA28217F160073E2C5 /* Bitplanes.cpp in Sources */,
4BDDBA991EF3451200347E61 /* Z80MachineCycleTests.swift in Sources */,
4B778F4E23A5F2160000D260 /* StaticAnalyser.cpp in Sources */,
4B06AAFF2C6460A80034D014 /* ConfidenceCounter.cpp in Sources */,
4B778F5523A5F2A70000D260 /* Keyboard.cpp in Sources */,
4B778F5D23A5F3230000D260 /* Commodore.cpp in Sources */,
4B98A05F1FFAD62400ADF63B /* CSROMFetcher.mm in Sources */,
@ -6372,20 +6481,29 @@
4B778F4A23A5F1FB0000D260 /* StaticAnalyser.cpp in Sources */,
4B7752AB28217E560073E2C5 /* SZX.cpp in Sources */,
4BD91D772401C2B8007BDC91 /* PatrikRakTests.swift in Sources */,
4B06AAE22C645F970034D014 /* PCBooter.cpp in Sources */,
4B1082C32C1A87CA00B07C5D /* CSL.cpp in Sources */,
4B680CE223A5553100451D43 /* 68000ComparativeTests.mm in Sources */,
4B778F3723A5F11C0000D260 /* Parser.cpp in Sources */,
4B06AAE32C645F9E0034D014 /* StringSerialiser.cpp in Sources */,
4B06AADB2C645F6D0034D014 /* DiskROM.cpp in Sources */,
4B778F4523A5F1CD0000D260 /* SegmentParser.cpp in Sources */,
4B90467422C6FADD000E2074 /* 68000BitwiseTests.mm in Sources */,
4B06AAD42C645F250034D014 /* Oric.cpp in Sources */,
4B7962A12819681F008130F9 /* Decoder.cpp in Sources */,
4B7752BB28217F1A0073E2C5 /* Copper.cpp in Sources */,
4B778F1D23A5ED470000D260 /* DiskController.cpp in Sources */,
4B778F0023A5EB990000D260 /* G64.cpp in Sources */,
4B778F4B23A5F2030000D260 /* StaticAnalyser.cpp in Sources */,
4B778F5023A5F2230000D260 /* StaticAnalyser.cpp in Sources */,
4B06AACB2C645ED00034D014 /* AY38910.cpp in Sources */,
4B06AB172C6461B30034D014 /* MultiSpeaker.cpp in Sources */,
4B06AADE2C645F7E0034D014 /* Video.cpp in Sources */,
4B924E991E74D22700B76AF1 /* AtariStaticAnalyserTests.mm in Sources */,
4B90467622C6FD6E000E2074 /* 68000ArithmeticTests.mm in Sources */,
4B778F3423A5F1040000D260 /* DirectAccessDevice.cpp in Sources */,
4B7BC7F51F58F27800D1B1B4 /* 6502AllRAM.cpp in Sources */,
4B06AAD82C645F370034D014 /* MasterSystem.cpp in Sources */,
4BC5C3E022C994CD00795658 /* 68000MoveTests.mm in Sources */,
4B778F5923A5F2D00000D260 /* Z80.cpp in Sources */,
4BD971392BFC3D9D00C907AA /* ArchimedesStaticAnalyserTests.mm in Sources */,
@ -6393,48 +6511,66 @@
4B778F0E23A5EC4F0000D260 /* Tape.cpp in Sources */,
4B778F2D23A5EF190000D260 /* MFMDiskController.cpp in Sources */,
4B7752C228217F5C0073E2C5 /* Spectrum.cpp in Sources */,
4B06AAD92C645F5D0034D014 /* SN76489.cpp in Sources */,
423BDC4A2AB24699008E37B6 /* 8088Tests.mm in Sources */,
4B778F2723A5EEF60000D260 /* BinaryDump.cpp in Sources */,
4BFCA1241ECBDCB400AC40C1 /* AllRAMProcessor.cpp in Sources */,
4B06AB042C6460D60034D014 /* 6560.cpp in Sources */,
4B06AB002C6460B70034D014 /* Keyboard.cpp in Sources */,
4B778F5223A5F22F0000D260 /* StaticAnalyser.cpp in Sources */,
4B778F4923A5F1F40000D260 /* StaticAnalyser.cpp in Sources */,
4BBF49AF1ED2880200AB3669 /* FUSETests.swift in Sources */,
4B778F4D23A5F20F0000D260 /* StaticAnalyser.cpp in Sources */,
4B06AAD72C645F330034D014 /* AppleIIgs.cpp in Sources */,
4B06AB082C64611F0034D014 /* ColecoVision.cpp in Sources */,
4B778F0423A5EBB00000D260 /* OricMFMDSK.cpp in Sources */,
4B7752BE28217F220073E2C5 /* MouseJoystick.cpp in Sources */,
4B8DF4D825465B7500F3433C /* IIgsMemoryMapTests.mm in Sources */,
4B3BA0CE1D318B44005DD7A7 /* C1540Bridge.mm in Sources */,
4B4F477C253530B7004245B8 /* Jeek816Tests.swift in Sources */,
4B06AB062C6460F40034D014 /* Atari2600.cpp in Sources */,
4B7752B928217F140073E2C5 /* Audio.cpp in Sources */,
4B778F0F23A5EC560000D260 /* PCMTrack.cpp in Sources */,
4B778F1123A5EC650000D260 /* FileHolder.cpp in Sources */,
4B778EFC23A5EB8B0000D260 /* AcornADF.cpp in Sources */,
4B06AB122C6461910034D014 /* Plus3.cpp in Sources */,
4B778F2023A5EDCE0000D260 /* HFV.cpp in Sources */,
4B778F3323A5F0FB0000D260 /* MassStorageDevice.cpp in Sources */,
4B75F979280D7C5100121055 /* 68000DecoderTests.mm in Sources */,
4B778F2C23A5EF0F0000D260 /* ZX8081.cpp in Sources */,
4B778F3023A5F0C50000D260 /* Macintosh.cpp in Sources */,
4B882F5C2C32199400D84031 /* MachineForTarget.cpp in Sources */,
4B06AAD32C645F1F0034D014 /* MSX.cpp in Sources */,
4B06AAD02C645F0A0034D014 /* EXDos.cpp in Sources */,
4B3BA0D11D318B44005DD7A7 /* TestMachine6502.mm in Sources */,
4B778F4623A5F1D80000D260 /* StaticAnalyser.cpp in Sources */,
4B778F1323A5EC890000D260 /* Z80Base.cpp in Sources */,
4B778F2923A5EF030000D260 /* CommodoreROM.cpp in Sources */,
4B06AADC2C645F720034D014 /* BD500.cpp in Sources */,
4B778F4823A5F1E70000D260 /* StaticAnalyser.cpp in Sources */,
4B92EACA1B7C112B00246143 /* 6502TimingTests.swift in Sources */,
4B778F2823A5EEF80000D260 /* Cartridge.cpp in Sources */,
4B06AAED2C6460040034D014 /* Sound.cpp in Sources */,
4B06AAF12C64602D0034D014 /* 6850.cpp in Sources */,
4B06AAF22C6460320034D014 /* MFP68901.cpp in Sources */,
4B7752B528217ED30073E2C5 /* SNA.cpp in Sources */,
4BEDA3C025B25563000C2DBD /* Decoder.cpp in Sources */,
4B2005432B804D6400420C5C /* ARMDecoderTests.mm in Sources */,
4B778F4C23A5F2090000D260 /* StaticAnalyser.cpp in Sources */,
4B778F2623A5EE350000D260 /* Acorn.cpp in Sources */,
4B7752C128217F490073E2C5 /* FAT.cpp in Sources */,
4B06AAFE2C6460A40034D014 /* ConfidenceSummary.cpp in Sources */,
4B778F5B23A5F2DE0000D260 /* Tape.cpp in Sources */,
4BB73EB71B587A5100552FC2 /* AllSuiteATests.swift in Sources */,
4B7752B228217EAE0073E2C5 /* StaticAnalyser.cpp in Sources */,
4B7752BC28217F1D0073E2C5 /* Disk.cpp in Sources */,
4B06AAE42C645FA50034D014 /* DiskIICard.cpp in Sources */,
4B04C899285E3DC800AA8FD6 /* 65816ComparativeTests.mm in Sources */,
4B06AAF92C64607C0034D014 /* AudioToggle.cpp in Sources */,
4B01A6881F22F0DB001FD6E3 /* Z80MemptrTests.swift in Sources */,
4B778EFA23A5EB790000D260 /* DMK.cpp in Sources */,
4BEE1EC122B5E2FD000A26A6 /* Encoder.cpp in Sources */,
4B06AACD2C645EE50034D014 /* Enterprise.cpp in Sources */,
4B7752AF28217E890073E2C5 /* DAT.cpp in Sources */,
4B121F9B1E06293F00BFDA12 /* PCMSegmentEventSourceTests.mm in Sources */,
4B778EFF23A5EB940000D260 /* D64.cpp in Sources */,
@ -6442,78 +6578,111 @@
4B778F2423A5EDEE0000D260 /* PRG.cpp in Sources */,
4B778F5A23A5F2D50000D260 /* 6502.cpp in Sources */,
4B778F6223A5F35F0000D260 /* File.cpp in Sources */,
4B06AB0F2C6461780034D014 /* MultiProducer.cpp in Sources */,
4B778F3523A5F1040000D260 /* SCSI.cpp in Sources */,
4BD388882239E198002D14B5 /* 68000Tests.mm in Sources */,
4B8DF5142550D62A00F3433C /* 65816kromTests.swift in Sources */,
4B06AB022C6460CB0034D014 /* Typer.cpp in Sources */,
4BA91E1D216D85BA00F79557 /* MasterSystemVDPTests.mm in Sources */,
4B98A0611FFADCDE00ADF63B /* MSXStaticAnalyserTests.mm in Sources */,
4BE34438238389E10058E78F /* AtariSTVideoTests.mm in Sources */,
4BEF6AAC1D35D1C400E73575 /* DPLLTests.swift in Sources */,
4BE76CF922641ED400ACD6FA /* QLTests.mm in Sources */,
4B06AB0C2C6461590034D014 /* StaticAnalyser.cpp in Sources */,
4B43983A29620FC8006B0BFC /* 9918.cpp in Sources */,
4B778F0923A5EC150000D260 /* OricTAP.cpp in Sources */,
4B3BA0CF1D318B44005DD7A7 /* MOS6522Bridge.mm in Sources */,
4B778F6023A5F3460000D260 /* Disk.cpp in Sources */,
4B06AB142C64619E0034D014 /* MultiJoystickMachine.cpp in Sources */,
4B778F5C23A5F3070000D260 /* MSX.cpp in Sources */,
4B7752AA28217E370073E2C5 /* ROMCatalogue.cpp in Sources */,
4B778F0323A5EBB00000D260 /* FAT12.cpp in Sources */,
4B778F4023A5F1910000D260 /* z8530.cpp in Sources */,
4B778EFD23A5EB8E0000D260 /* AppleDSK.cpp in Sources */,
4B7752B728217EF40073E2C5 /* Chipset.cpp in Sources */,
4B06AAF72C64606E0034D014 /* DiskII.cpp in Sources */,
4B778EFB23A5EB7E0000D260 /* HFE.cpp in Sources */,
4BC751B21D157E61006C31D9 /* 6522Tests.swift in Sources */,
4B0DA67D282DCDF300C12F17 /* Instruction.cpp in Sources */,
4B06AAE12C645F8B0034D014 /* Video.cpp in Sources */,
4BFCA12B1ECBE7C400AC40C1 /* ZexallTests.swift in Sources */,
4B06AAD62C645F2D0034D014 /* AtariST.cpp in Sources */,
4B06AB132C6461970034D014 /* MultiConfigurable.cpp in Sources */,
4B778F2223A5EDDD0000D260 /* PulseQueuedTape.cpp in Sources */,
4B06AB112C64618B0034D014 /* Tape.cpp in Sources */,
4B051CB3267D3FF800CA44E8 /* EnterpriseNickTests.mm in Sources */,
4B9D0C4D22C7DA1A00DE1AD3 /* 68000ControlFlowTests.mm in Sources */,
4BB2A9AF1E13367E001A5C23 /* CRCTests.mm in Sources */,
4B06AAEE2C64600C0034D014 /* Vic20.cpp in Sources */,
4B06AB0A2C6461350034D014 /* TIASound.cpp in Sources */,
4BB0CAA727E51B6300672A88 /* DingusdevPowerPCTests.mm in Sources */,
4B06AACC2C645EDF0034D014 /* Archimedes.cpp in Sources */,
4B778F5623A5F2AF0000D260 /* CPM.cpp in Sources */,
4B778F1C23A5ED3F0000D260 /* TimedEventLoop.cpp in Sources */,
4B06AAFA2C6460800034D014 /* KonamiSCC.cpp in Sources */,
4B47770D26900685005C2340 /* EnterpriseDaveTests.mm in Sources */,
4B3BA0D01D318B44005DD7A7 /* MOS6532Bridge.mm in Sources */,
4B778F3823A5F11C0000D260 /* SegmentParser.cpp in Sources */,
4B778F0723A5EC150000D260 /* CommodoreTAP.cpp in Sources */,
4281683A2A37AFB4008ECD27 /* DispatcherTests.mm in Sources */,
4B06AAE52C645FAA0034D014 /* SCSICard.cpp in Sources */,
4B778F4123A5F19A0000D260 /* MemoryPacker.cpp in Sources */,
4B06AAE02C645F870034D014 /* Video.cpp in Sources */,
4B778F4423A5F1BE0000D260 /* CommodoreGCR.cpp in Sources */,
4B778EF923A5EB740000D260 /* MSA.cpp in Sources */,
4B4DEC07252BFA56004583AC /* 65816Base.cpp in Sources */,
4B7752A628217DF80073E2C5 /* Dave.cpp in Sources */,
4B778F2323A5EDE40000D260 /* Tape.cpp in Sources */,
4B7752A728217E060073E2C5 /* Blitter.cpp in Sources */,
4B06AAD22C645F190034D014 /* I2C.cpp in Sources */,
4B778F4F23A5F21C0000D260 /* StaticAnalyser.cpp in Sources */,
4B06AAE72C645FBC0034D014 /* DMAController.cpp in Sources */,
4B8DD3682633B2D400B3C866 /* SpectrumVideoContentionTests.mm in Sources */,
4B06AB162C6461AB0034D014 /* Keyboard.cpp in Sources */,
4B7752A928217E200073E2C5 /* 65816Storage.cpp in Sources */,
4B06AAFB2C6460920034D014 /* Keyboard.cpp in Sources */,
4BC62FF228A149300036AE59 /* NSData+dataWithContentsOfGZippedFile.m in Sources */,
4B06AB152C6461A20034D014 /* MultiKeyboardMachine.cpp in Sources */,
4B7752AC28217E6E0073E2C5 /* StaticAnalyser.cpp in Sources */,
4B778F1223A5EC720000D260 /* CRT.cpp in Sources */,
4B778EF423A5DB3A0000D260 /* C1540.cpp in Sources */,
4B778F3C23A5F16F0000D260 /* FIRFilter.cpp in Sources */,
4B06AB092C64612C0034D014 /* TIA.cpp in Sources */,
4B778F5423A5F2600000D260 /* UnformattedTrack.cpp in Sources */,
4B7752B028217E9A0073E2C5 /* StaticAnalyser.cpp in Sources */,
4B06AADA2C645F650034D014 /* MemorySlotHandler.cpp in Sources */,
4B778EF823A5EB6E0000D260 /* NIB.cpp in Sources */,
4B9D0C4B22C7D70A00DE1AD3 /* 68000BCDTests.mm in Sources */,
4B778F5E23A5F3230000D260 /* Oric.cpp in Sources */,
4B7752B828217F110073E2C5 /* Amiga.cpp in Sources */,
4B06AAEF2C6460180034D014 /* Keyboard.cpp in Sources */,
4B3BA0C31D318AEC005DD7A7 /* C1540Tests.swift in Sources */,
4BDA8235261E8E000021AA19 /* Z80ContentionTests.mm in Sources */,
4B882F592C2F9C6A00D84031 /* CPCShakerTests.mm in Sources */,
4B7752C328217F720073E2C5 /* Z80.cpp in Sources */,
4B06AACE2C645EEC0034D014 /* PCCompatible.cpp in Sources */,
4B06AB072C6461160034D014 /* StaticAnalyser.cpp in Sources */,
4B778F1A23A5ED320000D260 /* Video.cpp in Sources */,
4B778F3B23A5F1650000D260 /* KeyboardMachine.cpp in Sources */,
4B5D497C28513F870076E2F9 /* IPF.cpp in Sources */,
4B06AAF32C64603D0034D014 /* Keyboard.cpp in Sources */,
4B778F2E23A5F09E0000D260 /* IRQDelegatePortHandler.cpp in Sources */,
4B778EF323A5DB230000D260 /* PCMSegment.cpp in Sources */,
4B06AB0D2C6461610034D014 /* MultiMachine.cpp in Sources */,
4B06AAD52C645F290034D014 /* AppleII.cpp in Sources */,
4B06AAFC2C6460970034D014 /* Keyboard.cpp in Sources */,
4B778F0D23A5EC150000D260 /* ZX80O81P.cpp in Sources */,
4B1414621B58888700E04248 /* KlausDormannTests.swift in Sources */,
4B778EFE23A5EB910000D260 /* CPCDSK.cpp in Sources */,
4B778F5823A5F2C60000D260 /* Tape.cpp in Sources */,
4B7752B328217EB90073E2C5 /* State.cpp in Sources */,
4B06AB032C6460D00034D014 /* OPLL.cpp in Sources */,
4B06AAFD2C64609D0034D014 /* IMD.cpp in Sources */,
4B1414601B58885000E04248 /* WolfgangLorenzTests.swift in Sources */,
4BD4A8D01E077FD20020D856 /* PCMTrackTests.mm in Sources */,
4B778F2123A5EDD50000D260 /* TrackSerialiser.cpp in Sources */,
4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */,
4B06AADF2C645F830034D014 /* Video.cpp in Sources */,
4BC6237226F94BCB00F83DFE /* MintermTests.mm in Sources */,
4B7752BF28217F250073E2C5 /* Sprites.cpp in Sources */,
4B778F3923A5F11C0000D260 /* Shifter.cpp in Sources */,
@ -6521,10 +6690,14 @@
4B778F3623A5F1040000D260 /* Target.cpp in Sources */,
4B1D08061E0F7A1100763741 /* TimeTests.mm in Sources */,
4B75EBFE28FF9CA20088AB22 /* MacintoshVolume.cpp in Sources */,
4B06AB0B2C64614B0034D014 /* Electron.cpp in Sources */,
4B06AAF52C6460600034D014 /* Mouse.cpp in Sources */,
4B778F3D23A5F1750000D260 /* ncr5380.cpp in Sources */,
4BF701A026FFD32300996424 /* AmigaBlitterTests.mm in Sources */,
4B7752B428217ECB0073E2C5 /* ZXSpectrumTAP.cpp in Sources */,
4B778F6323A5F3630000D260 /* Tape.cpp in Sources */,
4B06AB012C6460C30034D014 /* Video.cpp in Sources */,
4B06AADD2C645F790034D014 /* Microdisc.cpp in Sources */,
4B778EF523A5DB440000D260 /* StaticAnalyser.cpp in Sources */,
4BEE1EC022B5E236000A26A6 /* MacGCRTests.mm in Sources */,
4B778F0623A5EC150000D260 /* CAS.cpp in Sources */,
@ -6532,10 +6705,13 @@
4B778F3F23A5F1890000D260 /* MacintoshDoubleDensityDrive.cpp in Sources */,
4B778F1623A5ECA00000D260 /* Z80AllRAM.cpp in Sources */,
4BEDA40D25B2844B000C2DBD /* Decoder.cpp in Sources */,
4B06AAE62C645FB10034D014 /* ADB.cpp in Sources */,
4B778EF723A5EB670000D260 /* SSD.cpp in Sources */,
4BDA7F8329C4EA28007A10A5 /* 6809OperationMapperTests.mm in Sources */,
4B778F5723A5F2BB0000D260 /* ZX8081.cpp in Sources */,
4B06AACF2C645EF40034D014 /* i8272.cpp in Sources */,
4B778F2F23A5F0B10000D260 /* ScanTarget.cpp in Sources */,
4B882F5D2C3219A400D84031 /* AmstradCPC.cpp in Sources */,
4B69DEB72AB79E4F0055B217 /* Instruction.cpp in Sources */,
4BE90FFD22D5864800FB464D /* MacintoshVideoTests.mm in Sources */,
4B4F478A25367EDC004245B8 /* 65816AddressingTests.swift in Sources */,
@ -6543,16 +6719,23 @@
4B778F0C23A5EC150000D260 /* TZX.cpp in Sources */,
4B778F1B23A5ED380000D260 /* Video.cpp in Sources */,
4B778F4723A5F1DD0000D260 /* StaticAnalyser.cpp in Sources */,
4B06AAF62C6460670034D014 /* DiskIIDrive.cpp in Sources */,
4B778F1923A5ED1B0000D260 /* 6502Storage.cpp in Sources */,
4B7752A828217E110073E2C5 /* Nick.cpp in Sources */,
42A5E80C2ABBE04600A0DD5D /* NeskellTests.swift in Sources */,
4B06AAE92C645FD30034D014 /* Jasmin.cpp in Sources */,
4B7752AE28217E830073E2C5 /* 2MG.cpp in Sources */,
4B06AB102C6461810034D014 /* SoundGenerator.cpp in Sources */,
4B08A2781EE39306008B7065 /* TestMachine.mm in Sources */,
4B778F1E23A5EDC00000D260 /* DriveSpeedAccumulator.cpp in Sources */,
4B778F4323A5F1B00000D260 /* ImplicitSectors.cpp in Sources */,
4B7752B128217EA30073E2C5 /* StaticAnalyser.cpp in Sources */,
4B778F5123A5F2290000D260 /* StaticAnalyser.cpp in Sources */,
4B06AB0E2C6461700034D014 /* MultiMediaTarget.cpp in Sources */,
42437B332AC70833006DFED1 /* HDV.cpp in Sources */,
4B06AAE82C645FCD0034D014 /* RP5C01.cpp in Sources */,
4B06AAEC2C645FF50034D014 /* Keyboard.cpp in Sources */,
4B06AAF02C6460240034D014 /* ReactiveDevice.cpp in Sources */,
4B7752C028217F3D0073E2C5 /* Line.cpp in Sources */,
4B7C7A00282C3BCA002D6C0B /* 68000flamewingTests.mm in Sources */,
4B778F0223A5EBA40000D260 /* MFMSectorDump.cpp in Sources */,
@ -6561,6 +6744,7 @@
4B778F3E23A5F17C0000D260 /* IWM.cpp in Sources */,
4BD91D732401960C007BDC91 /* STX.cpp in Sources */,
4B778F1023A5EC5D0000D260 /* Drive.cpp in Sources */,
4B06AAF42C6460430034D014 /* ZX8081.cpp in Sources */,
4B9D0C4F22C7E0CF00DE1AD3 /* 68000RollShiftTests.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.8">
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">

@ -7,7 +7,7 @@
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">

@ -16,6 +16,7 @@
#include <fstream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "NSData+dataWithContentsOfGZippedFile.h"

@ -15,6 +15,7 @@
#include <map>
#include <sstream>
#include <vector>
using namespace InstructionSet::ARM;

@ -0,0 +1,332 @@
//
// CPCShakerTests.m
// Clock SignalTests
//
// Created by Thomas Harte on 28/06/2024.
// Copyright © 2024 Thomas Harte. All rights reserved.
//
#import <XCTest/XCTest.h>
#include <array>
#include <cassert>
#include "CSL.hpp"
#include "AmstradCPC.hpp"
#include "../../../Analyser/Static/AmstradCPC/Target.hpp"
#include "../../../Machines/AmstradCPC/Keyboard.hpp"
#include "../../../Outputs/ScanTarget.hpp"
#include "CSROMFetcher.hpp"
#include "TimedMachine.hpp"
#include "MediaTarget.hpp"
#include "KeyboardMachine.hpp"
#include "MachineForTarget.hpp"
struct ScanTarget: public Outputs::Display::ScanTarget {
void set_modals(Modals modals) override {
modals_ = modals;
}
Scan *begin_scan() override {
return &scan_;
}
uint8_t *begin_data(size_t, size_t) override {
return data_.data();
}
void end_scan() override {
// Empirical, CPC-specific observation: x positions end up
// being multiplied by 61 compared to a 1:1 pixel sampling at
// the CPC's highest resolution.
const int WidthDivider = 61;
const int src_pixels = scan_.end_points[1].data_offset - scan_.end_points[0].data_offset;
const int dst_pixels = (scan_.end_points[1].x - scan_.end_points[0].x) / WidthDivider;
const int step = (src_pixels << 16) / dst_pixels;
int position = 0;
const auto x1 = scan_.end_points[0].x / WidthDivider;
const auto x2 = scan_.end_points[1].x / WidthDivider;
uint8_t *const line = &raw_image_[line_ * ImageWidth];
if(x_ < x1) {
std::fill(&line[x_], &line[x1], 0);
}
for(int x = x1; x < x2; x++) {
line[x] = data_[position >> 16];
position += step;
}
x_ = x2;
}
void announce(Event event, bool, const Scan::EndPoint &, uint8_t) override {
switch(event) {
case Event::EndHorizontalRetrace: {
if(line_ == ImageHeight - 1) break;
if(x_ < ImageWidth) {
uint8_t *const line = &raw_image_[line_ * ImageWidth];
std::fill(&line[x_], &line[ImageWidth], 0);
}
++line_;
x_ = 0;
} break;
case Event::EndVerticalRetrace:
std::fill(&raw_image_[line_ * ImageWidth], &raw_image_[ImageHeight * ImageWidth], 0);
line_ = 0;
x_ = 0;
break;
default: break;
}
}
NSBitmapImageRep *image_representation() {
NSBitmapImageRep *const result =
[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL
pixelsWide:ImageWidth
pixelsHigh:ImageHeight
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:4 * ImageWidth
bitsPerPixel:0];
uint8_t *const data = result.bitmapData;
for(int c = 0; c < ImageWidth * ImageHeight; c++) {
data[c * 4 + 0] = ((raw_image_[c] >> 4) & 3) * 127;
data[c * 4 + 1] = ((raw_image_[c] >> 2) & 3) * 127;
data[c * 4 + 2] = ((raw_image_[c] >> 0) & 3) * 127;
data[c * 4 + 3] = 0xff;
}
return result;
}
private:
Modals modals_;
Scan scan_;
std::array<uint8_t, 2048> data_;
int line_ = 0;
int x_ = 0;
static constexpr int ImageWidth = 914;
static constexpr int ImageHeight = 312;
std::array<uint8_t, ImageWidth*ImageHeight> raw_image_;
};
struct SSMDelegate: public AmstradCPC::Machine::SSMDelegate {
SSMDelegate(ScanTarget &scan_target) : scan_target_(scan_target) {
temp_dir_ = NSTemporaryDirectory();
NSLog(@"Outputting to %@", temp_dir_);
}
void set_crtc(int number) {
crtc_ = number;
}
void perform(uint16_t code) {
if(!code) {
// A code of 0000 is supposed to end a wait0000 command; at present
// there seem to be no wait0000 commands to unblock.
return;
}
NSData *const data =
[scan_target_.image_representation() representationUsingType:NSPNGFileType properties:@{}];
NSString *const name = [temp_dir_ stringByAppendingPathComponent:[NSString stringWithFormat:@"CLK_%d_%04x.png", crtc_, code]];
[data
writeToFile:name
atomically:NO];
NSLog(@"Wrote %@", name);
}
private:
ScanTarget &scan_target_;
NSString *temp_dir_;
int crtc_ = 0;
};
//
// Runs a local capture of the test cases found at https://shaker.logonsystem.eu
//
@interface CPCShakerTests : XCTestCase
@end
@implementation CPCShakerTests {}
- (void)testCSLPath:(NSString *)path name:(NSString *)name {
using namespace Storage::Automation;
const auto steps = CSL::parse([[path stringByAppendingPathComponent:name] UTF8String]);
ScanTarget scan_target;
SSMDelegate ssm_delegate(scan_target);
std::unique_ptr<Machine::DynamicMachine> lazy_machine;
CSL::KeyDelay key_delay;
using Target = Analyser::Static::AmstradCPC::Target;
Target target;
target.catch_ssm_codes = true;
target.model = Target::Model::CPC6128;
NSString *diskPath;
const auto machine = [&]() -> Machine::DynamicMachine& {
if(!lazy_machine) {
Machine::Error error;
lazy_machine = Machine::MachineForTarget(&target, CSROMFetcher(), error);
static_cast<AmstradCPC::Machine *>(lazy_machine->raw_pointer())
->set_ssm_delegate(&ssm_delegate);
lazy_machine->scan_producer()->set_scan_target(&scan_target);
if(diskPath) {
const auto media = Analyser::Static::GetMedia(diskPath.UTF8String);
lazy_machine->media_target()->insert_media(media);
}
}
return *lazy_machine;
};
const auto delay = [&](uint64_t micros) {
machine().timed_machine()->run_for((double)micros / 1'000'000.0);
};
using Type = CSL::Instruction::Type;
for(const auto &step: steps) {
switch(step.type) {
case Type::Version:
if(std::get<std::string>(step.argument) != "1.0") {
XCTAssert(false, "Unrecognised file version");
}
break;
case Type::CRTCSelect: {
const auto argument = static_cast<int>(std::get<uint64_t>(step.argument));
switch(argument) {
default:
NSLog(@"Unrecognised CRTC type %d", argument);
break;
case 0: target.crtc_type = Target::CRTCType::Type0; break;
case 1: target.crtc_type = Target::CRTCType::Type1; break;
case 2: target.crtc_type = Target::CRTCType::Type2; break;
case 3: target.crtc_type = Target::CRTCType::Type3; break;
}
ssm_delegate.set_crtc(argument);
} break;
case Type::Reset:
lazy_machine.reset();
break;
case Type::Wait:
delay(std::get<uint64_t>(step.argument));
break;
case Type::DiskInsert: {
const auto &disk = std::get<CSL::DiskInsert>(step.argument);
XCTAssertEqual(disk.drive, 0); // Only drive 0 is supported for now.
NSString *diskName = [NSString stringWithUTF8String:disk.file.c_str()];
diskPath =
[[NSBundle bundleForClass:[self class]]
pathForResource:diskName ofType:nil inDirectory:@"Shaker"];
XCTAssertNotNil(diskPath);
if(lazy_machine) {
const auto media = Analyser::Static::GetMedia(diskPath.UTF8String);
machine().media_target()->insert_media(media);
}
} break;
case Type::KeyDelay:
key_delay = std::get<CSL::KeyDelay>(step.argument);
break;
case Type::KeyOutput: {
auto &key_target = *machine().keyboard_machine();
const auto &events = std::get<std::vector<CSL::KeyEvent>>(step.argument);
bool last_down = false;
for(const auto &event: events) {
// Apply the interpress delay before if this is a second consecutive press;
// if this is a release then apply the regular key delay.
if(event.down && !last_down) {
delay(key_delay.interpress_delay);
} else if(!event.down) {
delay(key_delay.press_delay);
}
key_target.set_key_state(event.key, event.down);
last_down = event.down;
// If this was the release of a carriage return, wait some more after release.
if(key_delay.carriage_return_delay && (event.key == AmstradCPC::Key::KeyEnter || event.key == AmstradCPC::Key::KeyReturn)) {
delay(*key_delay.carriage_return_delay);
}
}
} break;
case Type::LoadCSL:
// Quick fix: just recurse.
[self
testCSLPath:path
name:
[NSString stringWithUTF8String:
(std::get<std::string>(step.argument) + ".csl").c_str()
]];
break;
default:
XCTAssert(false, "Unrecognised command: %d", step.type);
break;
}
}
}
- (void)testModulePath:(NSString *)path name:(NSString *)name {
NSString *basePath =
[[NSBundle bundleForClass:[self class]]
pathForResource:@"Shaker"
ofType:nil];
[self testCSLPath:[basePath stringByAppendingPathComponent:path] name:name];
}
- (void)testModuleA {
[self testModulePath:@"MODULE A" name:@"SHAKE26A-0.CSL"];
// [self testModulePath:@"MODULE A" name:@"SHAKE26A-1.CSL"];
// [self testModulePath:@"MODULE A" name:@"SHAKE26A-2.CSL"];
// [self testModulePath:@"MODULE A" name:@"SHAKE26A-3.CSL"];
// [self testModulePath:@"MODULE A" name:@"SHAKE26A-4.CSL"];
}
- (void)testModuleB {
[self testModulePath:@"MODULE B" name:@"SHAKE26B-0.CSL"];
// [self testModulePath:@"MODULE B" name:@"SHAKE26B-1.CSL"];
// [self testModulePath:@"MODULE B" name:@"SHAKE26B-2.CSL"];
// [self testModulePath:@"MODULE B" name:@"SHAKE26B-3.CSL"];
// [self testModulePath:@"MODULE B" name:@"SHAKE26B-4.CSL"];
}
- (void)testModuleC {
[self testModulePath:@"MODULE C" name:@"SHAKE26C-0.CSL"];
// [self testModulePath:@"MODULE C" name:@"SHAKE26C-1.CSL"];
// [self testModulePath:@"MODULE C" name:@"SHAKE26C-2.CSL"];
// [self testModulePath:@"MODULE C" name:@"SHAKE26C-3.CSL"];
// [self testModulePath:@"MODULE C" name:@"SHAKE26C-4.CSL"];
}
- (void)testModuleD {
[self testModulePath:@"MODULE D" name:@"SHAKE26D-0.CSL"];
// [self testModulePath:@"MODULE D" name:@"SHAKE26D-1.CSL"];
// [self testModulePath:@"MODULE D" name:@"SHAKE26D-2.CSL"];
// [self testModulePath:@"MODULE D" name:@"SHAKE26D-3.CSL"];
// [self testModulePath:@"MODULE D" name:@"SHAKE26D-4.CSL"];
}
- (void)testModuleE {
[self testModulePath:@"MODULE E" name:@"SHAKE26E-0.CSL"];
// [self testModulePath:@"MODULE E" name:@"SHAKE26E-1.CSL"];
// [self testModulePath:@"MODULE E" name:@"SHAKE26E-2.CSL"];
// [self testModulePath:@"MODULE E" name:@"SHAKE26E-3.CSL"];
// [self testModulePath:@"MODULE E" name:@"SHAKE26E-4.CSL"];
}
@end

@ -0,0 +1,297 @@
;
; Fichier de script CSL
; Execution du module SHAKE26A du DSK SHAKER26.DSK en CRTC 0
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 0
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26A"\(RET)'
wait 10000000
;
; test 1
key_output '1'
wait 800000 ; fin affichage 1er ecran & ssm 595215
key_output ' '
wait 800000 ; fin affichage 2nd ecran & ssm 659451
key_output ' '
wait 800000 ; fin affichage 3eme ecran & ssm 627963
key_output ' '
wait 800000 ; fin affichage 4eme ecran & ssm 698883
key_output ' '
wait 800000 ; fin affichage 5eme ecran & ssm 551415
key_output ' '
wait 1000000 ; retour menu
;
; test 2
key_output '2'
wait 800000 ; 519961 crt 0 1 ecran
key_output ' '
wait 800000 ; 2 ecrans
wait 800000 ;
key_output ' '
wait 800000 ; 723923
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 1000000 ; retour menu
;
; test 3
key_output '3'
wait 800000 ; 596058
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 730624
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 750685
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 710656
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726016
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726952
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 845824
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 706048
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 730624
wait 800000 ; 698880
key_output ' '
wait 900000 ; 745984
wait 800000 ; 698880
key_output ' '
wait 900000 ; 805888
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 865792
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 10000000
;
key_output '4'
wait 9000000 ; 6743019
key_output ' '
wait 1000000
;
key_output '5'
wait 800000 ; 434016
key_output ' '
wait 800000 ; 547328
key_output ' '
wait 800000 ; 567296
key_output ' '
wait 800000 ; 587264
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 1000000
;
key_output '6'
wait 800000 ; 473960
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 800000 ; 627200
key_output ' '
wait 800000 ; 647168
key_output ' '
wait 800000 ; 667136
key_output ' '
wait 1000000
;
key_output '7'
wait 800000 ; 473957
key_output ' '
wait 800000 ; 667072
key_output ' '
wait 800000 ; 527296
key_output ' '
wait 800000 ; 547264
key_output ' '
wait 800000 ; 567232
key_output ' '
wait 1000000
;
key_output '8'
wait 800000 ; 431083
key_output ' '
wait 1000000
;
key_output '9'
wait 800000 ; 474048
key_output ' '
wait 800000 ; 559104
key_output ' '
wait 800000 ; 598363
key_output ' '
wait 1000000
;
key_output 'E'
wait 800000 ; 514468
key_output ' '
wait 1000000
;
key_output 'R'
wait 800000 ; 592695
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 599040
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 658944
wait 1200000 ; 998400
key_output ' '
wait 1000000
;
key_output 'T'
wait 800000 ; 531832
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 638976
key_output ' '
wait 1000000
;
key_output 'Y'
wait 800000 ; 511931
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; ???
key_output ' '
wait 1000000
;
key_output 'U'
wait 14000000 ; 11803953+1007210
key_output ' '
wait 1000000
;
key_output 'I'
wait 2200000 ; 2013010
key_output ' '
wait 2200000 ; 2315008
key_output ' '
wait 5000000 ; 4233216
key_output ' '
wait 35000000 ; 31301630
key_output ' '
wait 2000000 ; 1557507
key_output ' '
wait 1000000
;
key_output 'O'
wait 800000 ; 576098
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 800000 ; 497671
key_output ' '
wait 800000 ; 469504
key_output ' '
wait 800000 ; 522696
key_output ' '
wait 800000 ; 547978
key_output ' '
wait 800000 ; 579072
; crtc 1
;key_output ' '
;wait 800000 ; 482251
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 519680
key_output ' '
wait 1000000
;
key_output 'P'
wait 450000 ; 427222
wait 5200000 ; 5111808
key_output ' '
wait 800000 ; 529408
key_output ' '
wait 800000 ; 489472
key_output ' '
wait 800000 ; 449536
key_output ' '
wait 800000 ; 509440
key_output ' '
wait 800000 ; 587307
key_output ' '
wait 800000 ; 479104
key_output ' '
wait 800000 ; 479360
key_output ' '
wait 800000 ; 490944
key_output ' '
wait 800000 ; 638464
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 1000000
;
csl_load 'SHAKE26A-1'

@ -0,0 +1,297 @@
;
; Fichier de script CSL
; Execution du module SHAKE26A du DSK SHAKER26.DSK en CRTC 1
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 1
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26A"\(RET)'
wait 10000000
;
; test 1
key_output '1'
wait 800000 ; fin affichage 1er ecran & ssm 595215
key_output ' '
wait 800000 ; fin affichage 2nd ecran & ssm 659451
key_output ' '
wait 800000 ; fin affichage 3eme ecran & ssm 627963
key_output ' '
wait 800000 ; fin affichage 4eme ecran & ssm 698883
key_output ' '
wait 800000 ; fin affichage 5eme ecran & ssm 551415
key_output ' '
wait 1000000 ; retour menu
;
; test 2
key_output '2'
wait 800000 ; 519961 crt 0 1 ecran
wait 800000 ; 2 ecrans
key_output ' '
wait 800000 ;
key_output ' '
wait 800000 ; 723923
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 1000000 ; retour menu
;
; test 3
key_output '3'
wait 800000 ; 596058
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 730624
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 750685
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 710656
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726016
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726952
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 845824
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 706048
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 730624
wait 800000 ; 698880
key_output ' '
wait 900000 ; 745984
wait 800000 ; 698880
key_output ' '
wait 900000 ; 805888
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 865792
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 10000000
;
key_output '4'
wait 8000000 ; 6743019
key_output ' '
wait 1000000
;
key_output '5'
wait 800000 ; 434016
key_output ' '
wait 800000 ; 547328
key_output ' '
wait 800000 ; 567296
key_output ' '
wait 800000 ; 587264
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 1000000
;
key_output '6'
wait 800000 ; 473960
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 800000 ; 627200
key_output ' '
wait 800000 ; 647168
key_output ' '
wait 800000 ; 667136
key_output ' '
wait 1000000
;
key_output '7'
wait 800000 ; 473957
key_output ' '
wait 800000 ; 667072
key_output ' '
wait 800000 ; 527296
key_output ' '
wait 800000 ; 547264
key_output ' '
wait 800000 ; 567232
key_output ' '
wait 1000000
;
key_output '8'
wait 800000 ; 431083
key_output ' '
wait 1000000
;
key_output '9'
wait 800000 ; 474048
key_output ' '
wait 800000 ; 559104
key_output ' '
wait 800000 ; 598363
key_output ' '
wait 1000000
;
key_output 'E'
wait 800000 ; 514468
key_output ' '
wait 1000000
;
key_output 'R'
wait 800000 ; 592695
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 599040
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 658944
wait 1200000 ; 998400
key_output ' '
wait 1000000
;
key_output 'T'
wait 800000 ; 531832
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 638976
key_output ' '
wait 1000000
;
key_output 'Y'
wait 800000 ; 511931
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; ???
key_output ' '
wait 1000000
;
key_output 'U'
wait 14000000 ; 11803953+1007210
key_output ' '
wait 1000000
;
key_output 'I'
wait 2200000 ; 2013010
key_output ' '
wait 2200000 ; 2315008
key_output ' '
wait 5000000 ; 4233216
key_output ' '
wait 35000000 ; 31301630
key_output ' '
wait 2000000 ; 1557507
key_output ' '
wait 1000000
;
key_output 'O'
wait 800000 ; 576098
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 800000 ; 497671
key_output ' '
wait 800000 ; 469504
key_output ' '
wait 800000 ; 522696
key_output ' '
wait 800000 ; 547978
key_output ' '
wait 800000 ; 579072
; crtc 1
;key_output ' '
;wait 800000 ; 482251
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 519680
key_output ' '
wait 1000000
;
key_output 'P'
wait 450000 ; 427222
wait 5200000 ; 5111808
key_output ' '
wait 800000 ; 529408
key_output ' '
wait 800000 ; 489472
key_output ' '
wait 800000 ; 449536
key_output ' '
wait 800000 ; 509440
key_output ' '
wait 800000 ; 587307
key_output ' '
wait 800000 ; 479104
key_output ' '
wait 800000 ; 479360
key_output ' '
wait 800000 ; 490944
key_output ' '
wait 800000 ; 638464
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 1000000
csl_load 'SHAKE26A-2'

@ -0,0 +1,267 @@
;
; Fichier de script CSL
; Execution du module SHAKE26A du DSK SHAKER26.DSK en CRTC 2
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 2
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26A"\(RET)'
wait 10000000
;
; test 1
key_output '1'
wait 800000 ; fin affichage 1er ecran & ssm 595215
key_output ' '
wait 800000 ; fin affichage 2nd ecran & ssm 659451
key_output ' '
wait 800000 ; fin affichage 3eme ecran & ssm 627963
key_output ' '
wait 800000 ; fin affichage 4eme ecran & ssm 698883
key_output ' '
wait 800000 ; fin affichage 5eme ecran & ssm 551415
key_output ' '
wait 1000000 ; retour menu
;
; test 2
key_output '2'
wait 800000 ; 519961 crt 0 1 ecran
key_output ' '
wait 800000 ; 2 ecrans
wait 800000 ;
key_output ' '
wait 800000 ; 723923
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 1000000 ; retour menu
;
; test 3
key_output '3'
wait 800000 ; 596058
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 730624
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 750685
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 710656
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726016
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726952
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 845824
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 706048
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 730624
wait 800000 ; 698880
key_output ' '
wait 900000 ; 745984
wait 800000 ; 698880
key_output ' '
wait 900000 ; 805888
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 865792
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 10000000
;
key_output '4'
wait 8000000 ; 6743019
key_output ' '
wait 1000000
;
key_output '8'
wait 800000 ; 431083
key_output ' '
wait 1000000
;
key_output '9'
wait 800000 ; 474048
key_output ' '
wait 800000 ; 559104
key_output ' '
wait 800000 ; 598363
key_output ' '
wait 1000000
;
key_output 'E'
wait 800000 ; 514468
key_output ' '
wait 1000000
;
key_output 'R'
wait 800000 ; 592695
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 599040
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 658944
wait 1200000 ; 998400
key_output ' '
wait 1000000
;
key_output 'T'
wait 800000 ; 531832
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 638976
key_output ' '
wait 1000000
;
key_output 'Y'
wait 800000 ; 511931
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; ???
key_output ' '
wait 1000000
;
key_output 'U'
wait 14000000 ; 11803953+1007210
key_output ' '
wait 1000000
;
key_output 'I'
wait 2200000 ; 2013010
key_output ' '
wait 2200000 ; 2315008
key_output ' '
wait 5000000 ; 4233216
key_output ' '
wait 35000000 ; 31301630
key_output ' '
wait 2000000 ; 1557507
key_output ' '
wait 1000000
;
key_output 'O'
wait 800000 ; 576098
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 800000 ; 497671
key_output ' '
wait 800000 ; 469504
key_output ' '
wait 800000 ; 522696
key_output ' '
wait 800000 ; 547978
key_output ' '
wait 800000 ; 579072
; crtc 1
;key_output ' '
;wait 800000 ; 482251
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 519680
key_output ' '
wait 1000000
;
key_output 'P'
wait 450000 ; 427222
wait 5200000 ; 5111808
key_output ' '
wait 800000 ; 529408
key_output ' '
wait 800000 ; 489472
key_output ' '
wait 800000 ; 449536
key_output ' '
wait 800000 ; 509440
key_output ' '
wait 800000 ; 587307
key_output ' '
wait 800000 ; 479104
key_output ' '
wait 800000 ; 479360
key_output ' '
wait 800000 ; 490944
key_output ' '
wait 800000 ; 638464
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 1000000
;
; crtc 2
;
key_output '\(COP)'
wait 8500000 ; 8313240
wait 500000 ; 319488
key_output ' '
wait 1000000
;
;
csl_load 'SHAKE26A-4'

@ -0,0 +1,296 @@
;
; Fichier de script CSL
; Execution du module SHAKE26A du DSK SHAKER26.DSK en CRTC 3
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 3
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26A"\(RET)'
wait 10000000
;
; test 1
key_output '1'
wait 800000 ; fin affichage 1er ecran & ssm 595215
key_output ' '
wait 800000 ; fin affichage 2nd ecran & ssm 659451
key_output ' '
wait 800000 ; fin affichage 3eme ecran & ssm 627963
key_output ' '
wait 800000 ; fin affichage 4eme ecran & ssm 698883
key_output ' '
wait 800000 ; fin affichage 5eme ecran & ssm 551415
key_output ' '
wait 1000000 ; retour menu
;
; test 2
key_output '2'
wait 800000 ; 519961 crt 0 1 ecran
key_output ' '
wait 800000 ; 2 ecrans
wait 800000 ;
key_output ' '
wait 800000 ; 723923
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 1000000 ; retour menu
;
; test 3
key_output '3'
wait 800000 ; 596058
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 730624
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 750685
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 710656
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726016
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726952
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 845824
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 706048
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 730624
wait 800000 ; 698880
key_output ' '
wait 900000 ; 745984
wait 800000 ; 698880
key_output ' '
wait 900000 ; 805888
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 865792
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 10000000
;
key_output '4'
wait 8000000 ; 6743019
key_output ' '
wait 1000000
;
key_output '5'
wait 800000 ; 434016
key_output ' '
wait 800000 ; 547328
key_output ' '
wait 800000 ; 567296
key_output ' '
wait 800000 ; 587264
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 1000000
;
key_output '6'
wait 800000 ; 473960
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 800000 ; 627200
key_output ' '
wait 800000 ; 647168
key_output ' '
wait 800000 ; 667136
key_output ' '
wait 1000000
;
key_output '7'
wait 800000 ; 473957
key_output ' '
wait 800000 ; 667072
key_output ' '
wait 800000 ; 527296
key_output ' '
wait 800000 ; 547264
key_output ' '
wait 800000 ; 567232
key_output ' '
wait 1000000
;
key_output '8'
wait 800000 ; 431083
key_output ' '
wait 1000000
;
key_output '9'
wait 800000 ; 474048
key_output ' '
wait 800000 ; 559104
key_output ' '
wait 800000 ; 598363
key_output ' '
wait 1000000
;
key_output 'E'
wait 800000 ; 514468
key_output ' '
wait 1000000
;
key_output 'R'
wait 800000 ; 592695
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 599040
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 658944
wait 1200000 ; 998400
key_output ' '
wait 1000000
;
key_output 'T'
wait 800000 ; 531832
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 638976
key_output ' '
wait 1000000
;
key_output 'Y'
wait 800000 ; 511931
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; ???
key_output ' '
wait 1000000
;
key_output 'U'
wait 14000000 ; 11803953+1007210
key_output ' '
wait 1000000
;
key_output 'I'
wait 2200000 ; 2013010
key_output ' '
wait 2200000 ; 2315008
key_output ' '
wait 5000000 ; 4233216
key_output ' '
wait 35000000 ; 31301630
key_output ' '
wait 2000000 ; 1557507
key_output ' '
wait 1000000
;
key_output 'O'
wait 800000 ; 576098
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 800000 ; 497671
key_output ' '
wait 800000 ; 469504
key_output ' '
wait 800000 ; 522696
key_output ' '
wait 800000 ; 547978
key_output ' '
wait 800000 ; 579072
; crtc 1
;key_output ' '
;wait 800000 ; 482251
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 519680
key_output ' '
wait 1000000
;
key_output 'P'
wait 450000 ; 427222
wait 5200000 ; 5111808
key_output ' '
wait 800000 ; 529408
key_output ' '
wait 800000 ; 489472
key_output ' '
wait 800000 ; 449536
key_output ' '
wait 800000 ; 509440
key_output ' '
wait 800000 ; 587307
key_output ' '
wait 800000 ; 479104
key_output ' '
wait 800000 ; 479360
key_output ' '
wait 800000 ; 490944
key_output ' '
wait 800000 ; 638464
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 1000000
reset

@ -0,0 +1,297 @@
;
; Fichier de script CSL
; Execution du module SHAKE26A du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 4
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26A"\(RET)'
wait 10000000
;
; test 1
key_output '1'
wait 800000 ; fin affichage 1er ecran & ssm 595215
key_output ' '
wait 800000 ; fin affichage 2nd ecran & ssm 659451
key_output ' '
wait 800000 ; fin affichage 3eme ecran & ssm 627963
key_output ' '
wait 800000 ; fin affichage 4eme ecran & ssm 698883
key_output ' '
wait 800000 ; fin affichage 5eme ecran & ssm 551415
key_output ' '
wait 1000000 ; retour menu
;
; test 2
key_output '2'
wait 800000 ; 519961 crt 0 1 ecran
key_output ' '
wait 800000 ; 2 ecrans
wait 800000 ;
key_output ' '
wait 800000 ; 723923
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 1000000 ; retour menu
;
; test 3
key_output '3'
wait 800000 ; 596058
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 730624
wait 1500000 ; 1337856
key_output ' '
wait 800000 ; 750685
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 750592
wait 800000 ; 698880
key_output ' '
wait 800000 ; 710656
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726016
wait 800000 ; 698880
key_output ' '
wait 800000 ; 726952
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 845824
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 666112
wait 800000 ; 698880
key_output ' '
wait 800000 ; 706048
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 610816
wait 800000 ; 698880
key_output ' '
wait 800000 ; 730624
wait 800000 ; 698880
key_output ' '
wait 900000 ; 745984
wait 800000 ; 698880
key_output ' '
wait 900000 ; 805888
wait 800000 ; 698880
key_output ' '
wait 1000000 ; 865792
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 800000 ; 686080
wait 800000 ; 698880
key_output ' '
wait 10000000
;
key_output '4'
wait 12000000 ; 6743019
key_output ' '
wait 1000000
;
key_output '5'
wait 800000 ; 434016
key_output ' '
wait 800000 ; 547328
key_output ' '
wait 800000 ; 567296
key_output ' '
wait 800000 ; 587264
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 1000000
;
key_output '6'
wait 800000 ; 473960
key_output ' '
wait 800000 ; 607232
key_output ' '
wait 800000 ; 627200
key_output ' '
wait 800000 ; 647168
key_output ' '
wait 800000 ; 667136
key_output ' '
wait 1000000
;
key_output '7'
wait 800000 ; 473957
key_output ' '
wait 800000 ; 667072
key_output ' '
wait 800000 ; 527296
key_output ' '
wait 800000 ; 547264
key_output ' '
wait 800000 ; 567232
key_output ' '
wait 1000000
;
key_output '8'
wait 800000 ; 431083
key_output ' '
wait 1000000
;
key_output '9'
wait 800000 ; 474048
key_output ' '
wait 800000 ; 559104
key_output ' '
wait 800000 ; 598363
key_output ' '
wait 1000000
;
key_output 'E'
wait 800000 ; 514468
key_output ' '
wait 1000000
;
key_output 'R'
wait 800000 ; 592695
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 599040
wait 1200000 ; 998400
key_output ' '
wait 800000 ; 658944
wait 1200000 ; 998400
key_output ' '
wait 1000000
;
key_output 'T'
wait 800000 ; 531832
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 579072
key_output ' '
wait 800000 ; 638976
key_output ' '
wait 1000000
;
key_output 'Y'
wait 800000 ; 511931
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 800000 ; ???
key_output ' '
wait 1000000
;
key_output 'U'
wait 14000000 ; 11803953+1007210
key_output ' '
wait 1000000
;
key_output 'I'
wait 2200000 ; 2013010
key_output ' '
wait 2200000 ; 2315008
key_output ' '
wait 5000000 ; 4233216
key_output ' '
wait 35000000 ; 31301630
key_output ' '
wait 2000000 ; 1557507
key_output ' '
wait 1000000
;
key_output 'O'
wait 800000 ; 576098
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 698880
key_output ' '
wait 800000 ; 599040
key_output ' '
wait 800000 ; 497671
key_output ' '
wait 800000 ; 469504
key_output ' '
wait 800000 ; 522696
key_output ' '
wait 800000 ; 547978
key_output ' '
wait 800000 ; 579072
; crtc 1
;key_output ' '
;wait 800000 ; 482251
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 599552
;key_output ' '
;wait 800000 ; 519680
key_output ' '
wait 1000000
;
key_output 'P'
wait 450000 ; 427222
wait 5200000 ; 5111808
key_output ' '
wait 800000 ; 529408
key_output ' '
wait 800000 ; 489472
key_output ' '
wait 800000 ; 449536
key_output ' '
wait 800000 ; 509440
key_output ' '
wait 800000 ; 587307
key_output ' '
wait 800000 ; 479104
key_output ' '
wait 800000 ; 479360
key_output ' '
wait 800000 ; 490944
key_output ' '
wait 800000 ; 638464
key_output ' '
wait 800000 ; 619008
key_output ' '
wait 1000000
csl_load 'SHAKE26A-3'

@ -0,0 +1,390 @@
;
; Fichier de script CSL
; Execution du module SHAKE26B du DSK SHAKER26.DSK en CRTC 0
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 0
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26B"\(RET)'
wait 10000000
;
; test 1 interlace c4/c9 counters R9 base=07 Parity Odd
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
key_output 'Y' ; bascule sur parity Even (R9 Base=7)
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
key_output 'Z' ; Passe sur R9 BASE=6 (parity Even)
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
key_output 'Y' ; bascule sur parity Odd (R9 base=6)
wait 300000
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
; test 9 (garder la foi tu dois, mecreant)
key_output '9' ; En Odd
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output 'Y' ; Repasser en Even
wait 100000
key_output '9' ; En even
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output '0' ; vertical sub pixel scroll
wait 1000000 ; 816677 1/8
key_output ' '
wait 1000000 ; 890842 1/16
key_output ' '
wait 1000000 ; 830950 1/32
key_output ' '
wait 1000000 ; 870899 1/64
key_output ' '
wait 1000000 ; 830965 1/128
key_output ' '
wait 1000000 ; menu
;
;
key_output '4' ;
wait 2000000 ; 1913669
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 1000000 ;
key_output ' '
wait 1000000 ; menu
;
key_output '5' ; rlal crtc 2 (tous crtc)
wait 900000
key_output ' '
wait 2000000
key_output ' ' ; Menu
wait 1000000
;
;
key_output '\(RET)'
wait 800000 ; 632429
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 647344
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 667312
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 1000000
;
;Test Bounga
key_output '\(FN0)'
wait 30000000 ; ???
key_output ' '
wait 1000000
;
; Test RVNI LTD
;
key_output '\(CAP)'
wait 6000000 ; 753563
key_output ' '
wait 6000000 ; 727728
key_output ' '
wait 6000000 ; 728880
key_output ' '
wait 6000000
;
; Shaker Killer Don't be afraid
;
key_output 'R'
wait 5000000 ; 2615301 z80aintb
key_output ' '
wait 6000000 ; 4692484 r52Reset
key_output ' '
wait 9000000 ; 7867387 Inter Test IM1
key_output ' '
wait 9000000 ; 6888966 Inter Test IM2
key_output ' '
wait 3000000 ; 1711766 R52 Incr
key_output ' '
wait 900000 ; 486262 Otir Zone
key_output ' '
wait 1000000 ; menu
;
; R3 JIT
key_output 'I'
wait 1000000 ; 474622
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 499200
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 599040
key_output ' '
wait 1000000 ; Menu
;
; test crtc 0,1 only
;
key_output '\(COP)'
wait 1000000 ; 787700
key_output ' '
wait 1000000 ; 778752
key_output ' '
wait 2000000 ; 702326+19968
key_output ' '
wait 2000000 ; 835656
key_output ' '
wait 2000000 ; 924826
key_output ' '
wait 4000000
;
;
; test crtc 1 , ouvert aux autres CRTCs
;
key_output '6'
wait 10000000 ; 1676617
key_output ' '
wait 1000000
;
; test crtc 0 only
;
key_output '7' ; resultat a verifier
wait 800000 ; 613742
wait 600000 ; 511808
wait 2000000 ; 1277952
wait 5000000 ; 3833856
wait 2000000 ; 1277952
wait 5000000 ; 3833856
wait 2000000 ; 1277952
key_output ' '
wait 800000 ; 533680
wait 6000000 ; 5111808
wait 2000000 ; 1277952
wait 6000000 ; 3833856
wait 2000000 ; 1277952
wait 6000000 ; 3833856
wait 2000000 ; 1277952
key_output ' '
wait 800000 ; 565936
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 2000000 ; 1277952
wait 6000000 ; 3833856
wait 2000000 ; 1277952
key_output ' '
key_output ' '
wait 800000 ; 565936
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 2000000 ; 1277952
wait 6000000 ; 3833856
wait 2000000 ; 1277952
key_output ' '
wait 1000000 ; menu
;
; test crtc 0 only
;
key_output 'U'
wait 1200000 ;
key_output ' ' ; A
wait 1200000 ;
key_output ' ' ; B
wait 1200000 ;
key_output ' ' ; C
wait 1200000 ;
key_output ' ' ; D
wait 1200000 ;
key_output ' ' ; E
wait 1200000 ;
key_output ' ' ; F
wait 1200000 ;
key_output ' ' ; G
wait 1200000 ;
key_output ' ' ; H
wait 1200000 ;
key_output ' ' ; I
wait 1200000 ;
key_output ' ' ; J
wait 1200000 ;
key_output ' ' ; K
wait 1200000 ;
key_output ' ' ; L
wait 1200000 ;
key_output ' ' ; M
wait 1200000 ;
key_output ' ' ; N
wait 1200000 ;
key_output ' ' ; O
wait 1200000 ;
key_output ' ' ; P
wait 1200000 ;
key_output ' ' ; Q
wait 1200000 ;
key_output ' ' ; R
wait 1200000 ;
key_output ' ' ; S
wait 1200000 ;
;
; Test Analyzer des premieres heures
;
key_output 'P'
wait 100000000 ; 12828735+638976
key_output ' '
wait 100000000 ; 5440000+638976
key_output ' '
wait 100000000 ; 11637760+638976
key_output ' '
wait 100000000 ; 13560624+638976
key_output ' '
wait 1000000
csl_load 'SHAKE26B-1'

@ -0,0 +1,278 @@
;
; Fichier de script CSL
; Execution du module SHAKE26B du DSK SHAKER26.DSK en CRTC 1
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 1A
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26B"\(RET)'
wait 10000000
;
; test 1 interlace c4/c9 counters R9 base=07
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
key_output 'Z' ; Passe sur R9 BASE=6
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
; test 9 (garder la foi tu dois, mecreant)
key_output '9'
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output '0' ; vertical sub pixel scroll
wait 1000000 ; 816677 1/8
key_output ' '
wait 1000000 ; 890842 1/16
key_output ' '
wait 1000000 ; 830950 1/32
key_output ' '
wait 1000000 ; 870899 1/64
key_output ' '
wait 1000000 ; 830965 1/128
key_output ' '
wait 1000000 ; menu
;
key_output '4' ;
wait 2000000 ; 1913669
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 1000000 ;
key_output ' '
wait 1000000 ; menu
;
key_output '5' ; rlal crtc 2 (tous crtc)
wait 900000
key_output ' '
wait 2000000
key_output ' ' ; Menu
wait 1000000
;
;
key_output '\(RET)'
wait 800000 ; 632429
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 647344
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 667312
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 1000000
;
;Test Bounga
key_output '\(FN0)'
wait 30000000 ; ???
key_output ' '
wait 1000000
;
; Test RVNI LTD
;
key_output '\(CAP)'
wait 6000000 ; 753563
key_output ' '
wait 6000000 ; 727728
key_output ' '
wait 6000000 ; 728880
key_output ' '
wait 6000000
;
; Shaker Killer Don't be afraid
;
key_output 'R'
wait 5000000 ; 2615301 z80aintb
key_output ' '
wait 6000000 ; 4692484 r52Reset
key_output ' '
wait 9000000 ; 7867387 Inter Test IM1
key_output ' '
wait 9000000 ; 6888966 Inter Test IM2
key_output ' '
wait 3000000 ; 1711766 R52 Incr
key_output ' '
wait 900000 ; 486262 Otir Zone
key_output ' '
wait 1000000 ; menu
;
; R3 JIT
key_output 'I'
wait 1000000 ; 474622
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 499200
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 599040
key_output ' '
wait 1000000 ; Menu
;
; test crtc 0,1 only
;
key_output '\(COP)'
wait 1000000 ; 787700
key_output ' '
wait 1000000 ; 778752
key_output ' '
wait 2000000 ; 702326+19968
key_output ' '
wait 2000000 ; 835656
key_output ' '
wait 2000000 ; 924826
key_output ' '
wait 4000000
;
;
; test crtc 1 , ouvert aux autres CRTCs
;
key_output '6'
wait 10000000 ; 1676617
key_output ' '
wait 1000000
;
; test crtc 1 only : identification crtc 1A/1B
; pour le 1A
key_output 'O'
wait 500000 ; 336980
key_output ' '
wait 1000000
;
;
; test crtc 1 only : BE00 check
;
key_output 'S'
wait 5000000 ; 1976392
key_output ' '
wait 1000000
;
;
; Test Analyzer des premieres heures
;
key_output 'P'
wait 100000000 ; 12828735+638976
key_output ' '
wait 100000000 ; 5440000+638976
key_output ' '
wait 100000000 ; 11637760+638976
key_output ' '
wait 100000000 ; 13560624+638976
key_output ' '
wait 1000000
;
; Test RFD
;
key_output '\(CTR)'
wait 10000000
;
; Si la selection de crtc en cours de route pose prb sortir ce test
;
crtc_select 1B
;
; test crtc 1 only : identification crtc 1A/1B
; pour le 1B
key_output 'E'
wait 500000 ; 336980
key_output ' '
wait 1000000
;
csl_load 'SHAKE26B-2'

@ -0,0 +1,306 @@
;
; Fichier de script CSL
; Execution du module SHAKE26B du DSK SHAKER26.DSK en CRTC 2
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 2
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26B"\(RET)'
wait 10000000
;
; test 1 interlace c4/c9 counters R9 base=07 Parity Odd
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
key_output 'Y' ; bascule sur parity Even (R9 Base=7)
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
key_output 'Z' ; Passe sur R9 BASE=6 (parity Even)
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
key_output 'Y' ; bascule sur parity Odd (R9 base=6)
wait 300000
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
; test 9 (garder la foi tu dois, mecreant)
key_output '9' ; En Odd
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output 'Y' ; Repasser en Even
wait 100000
key_output '9' ; En even
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output '0' ; vertical sub pixel scroll
wait 1000000 ; 816677 1/8
key_output ' '
wait 1000000 ; 890842 1/16
key_output ' '
wait 1000000 ; 830950 1/32
key_output ' '
wait 1000000 ; 870899 1/64
key_output ' '
wait 1000000 ; 830965 1/128
key_output ' '
wait 1000000 ; menu
;
; ** crtc 2 only Even mode 1 ecran
key_output '2' ;
wait 3000000 ; 1245718
key_output ' ' ;
wait 1000000 ; menu
key_output 'Y' ; repasser en Odd
key_output '2'
wait 3000000 ; 1245718
key_output ' ' ;
wait 3000000 ; 1245718 2 ecrans
;
key_output '4' ;
wait 2000000 ; 1913669
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 1000000 ;
key_output ' '
wait 1000000 ; menu
;
key_output '5' ; rlal crtc 2 (tous crtc)
wait 900000
key_output ' '
wait 2000000
key_output ' ' ; Menu
wait 1000000
;
;
key_output '\(RET)'
wait 800000 ; 632429
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 647344
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 667312
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 1000000
;
;Test Bounga
key_output '\(FN0)'
wait 30000000 ; ???
key_output ' '
wait 1000000
;
; Test RVNI LTD
;
key_output '\(CAP)'
wait 6000000 ; 753563
key_output ' '
wait 6000000 ; 727728
key_output ' '
wait 6000000 ; 728880
key_output ' '
wait 6000000
;
; Shaker Killer Don't be afraid
;
key_output 'R'
wait 5000000 ; 2615301 z80aintb
key_output ' '
wait 6000000 ; 4692484 r52Reset
key_output ' '
wait 9000000 ; 7867387 Inter Test IM1
key_output ' '
wait 9000000 ; 6888966 Inter Test IM2
key_output ' '
wait 3000000 ; 1711766 R52 Incr
key_output ' '
wait 900000 ; 486262 Otir Zone
key_output ' '
wait 1000000 ; menu
;
; R3 JIT
key_output 'I'
wait 1000000 ; 474622
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 499200
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 599040
key_output ' '
wait 1000000 ; Menu
;
; test crtc 1 , ouvert aux autres CRTCs
;
key_output '6'
wait 20000000 ; 1676617
key_output ' '
wait 1000000
;
;
; Test Analyzer des premieres heures
;
key_output 'P'
wait 100000000 ; 12828735+638976
key_output ' '
wait 100000000 ; 5440000+638976
key_output ' '
wait 100000000 ; 11637760+638976
key_output ' '
wait 100000000 ; 13560624+638976
key_output ' '
wait 1000000
csl_load 'SHAKE26B-4'

@ -0,0 +1,242 @@
;
; Fichier de script CSL
; Execution du module SHAKE26B du DSK SHAKER26.DSK en CRTC 3
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 3
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26B"\(RET)'
wait 10000000
;
; test 1 interlace c4/c9 counters R9 base=07
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
key_output 'Z' ; Passe sur R9 BASE=6
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
; test 9 (garder la foi tu dois, mecreant)
key_output '9'
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output 'Y' ; Repasser en Even
wait 100000
key_output '9' ; En even
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output '0' ; vertical sub pixel scroll
wait 1000000 ; 816677 1/8
key_output ' '
wait 1000000 ; 890842 1/16
key_output ' '
wait 1000000 ; 830950 1/32
key_output ' '
wait 1000000 ; 870899 1/64
key_output ' '
wait 1000000 ; 830965 1/128
key_output ' '
wait 1000000 ; menu
;
key_output '4' ;
wait 2000000 ; 1913669
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 1000000 ;
key_output ' '
wait 1000000 ; menu
;
key_output '5' ; rlal crtc 2 (tous crtc)
wait 900000
key_output ' '
wait 2000000
key_output ' ' ; Menu
wait 1000000
;
;
key_output '\(RET)'
wait 800000 ; 632429
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 647344
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 667312
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 1000000
;
;Test Bounga
key_output '\(FN0)'
wait 30000000 ; ???
key_output ' '
wait 1000000
;
; Test RVNI LTD
;
key_output '\(CAP)'
wait 6000000 ; 753563
key_output ' '
wait 6000000 ; 727728
key_output ' '
wait 6000000 ; 728880
key_output ' '
wait 6000000
;
; Shaker Killer Don't be afraid
;
key_output 'R'
wait 5000000 ; 2615301 z80aintb
key_output ' '
wait 6000000 ; 4692484 r52Reset
key_output ' '
wait 9000000 ; 7867387 Inter Test IM1
key_output ' '
wait 9000000 ; 6888966 Inter Test IM2
key_output ' '
wait 3000000 ; 1711766 R52 Incr
key_output ' '
wait 900000 ; 486262 Otir Zone
key_output ' '
wait 1000000 ; menu
;
; R3 JIT
key_output 'I'
wait 1000000 ; 474622
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 499200
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 599040
key_output ' '
wait 1000000 ; Menu
;
;
; test crtc 1 , ouvert aux autres CRTCs
;
key_output '6'
wait 2000000 ; 1676617
key_output ' '
wait 1000000
;
; Test Analyzer des premieres heures
;
key_output 'P'
wait 100000000 ; 12828735+638976
key_output ' '
wait 100000000 ; 5440000+638976
key_output ' '
wait 100000000 ; 11637760+638976
key_output ' '
wait 100000000 ; 13560624+638976
key_output ' '
wait 1000000
;
reset
;

@ -0,0 +1,241 @@
;
; Fichier de script CSL
; Execution du module SHAKE26B du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 4
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26B"\(RET)'
wait 10000000
;
; test 1 interlace c4/c9 counters R9 base=06
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
key_output 'X' ; Passe sur R9 BASE=7
wait 300000
;
key_output '1'
wait 5000000 ; Ecran settings, ecran intermediaire
wait 7000000 ; 1er ecran
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; 5251584
key_output ' '
wait 7000000 ; menu
;
; test 9 (garder la foi tu dois, mecreant)
key_output '9'
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output 'Y' ; Repasser en Even
wait 100000
key_output '9' ; En even
wait 20000000 ;
key_output ' '
wait 20000000
key_output ' '
wait 1000000
;
key_output '0' ; vertical sub pixel scroll
wait 1000000 ; 816677 1/8
key_output ' '
wait 1000000 ; 890842 1/16
key_output ' '
wait 1000000 ; 830950 1/32
key_output ' '
wait 1000000 ; 870899 1/64
key_output ' '
wait 1000000 ; 830965 1/128
key_output ' '
wait 1000000 ; menu
;
key_output '4' ;
wait 2000000 ; 1913669
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 900000 ; 730624
key_output ' '
wait 1000000 ;
key_output ' '
wait 1000000 ; menu
;
key_output '5' ; rlal crtc 2 (tous crtc)
wait 900000
key_output ' '
wait 2000000
key_output ' ' ; Menu
wait 1000000
;
;
key_output '\(RET)'
wait 800000 ; 632429
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 647344
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 800000 ; 667312
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
wait 6000000 ; 5111808
key_output ' '
wait 1000000
;
;Test Bounga
key_output '\(FN0)'
wait 50000000 ; ???
key_output ' '
wait 1000000
;
; Test RVNI LTD
;
key_output '\(CAP)'
wait 6000000 ; 753563
key_output ' '
wait 6000000 ; 727728
key_output ' '
wait 6000000 ; 728880
key_output ' '
wait 6000000
;
; Shaker Killer Don't be afraid
;
key_output 'R'
wait 5000000 ; 2615301 z80aintb
key_output ' '
wait 6000000 ; 4692484 r52Reset
key_output ' '
wait 9000000 ; 7867387 Inter Test IM1
key_output ' '
wait 9000000 ; 6888966 Inter Test IM2
key_output ' '
wait 3000000 ; 1711766 R52 Incr
key_output ' '
wait 900000 ; 486262 Otir Zone
key_output ' '
wait 1000000 ; menu
;
; R3 JIT
key_output 'I'
wait 1000000 ; 474622
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 519168
key_output ' '
wait 1000000 ; 499200
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 619008
key_output ' '
wait 1000000 ; 599040
key_output ' '
wait 1000000 ; Menu
;
;
; test crtc 1 , ouvert aux autres CRTCs
;
key_output '6'
wait 12000000 ; 1676617
key_output ' '
wait 1000000
;
; Test Analyzer des premieres heures
;
key_output 'P'
wait 100000000 ; 12828735+638976
key_output ' '
wait 100000000 ; 5440000+638976
key_output ' '
wait 100000000 ; 11637760+638976
key_output ' '
wait 100000000 ; 13560624+638976
key_output ' '
wait 1000000
;
csl_load 'SHAKE26B-3'

@ -0,0 +1,96 @@
;
; Fichier de script CSL
; Execution du module SHAKE26C du DSK SHAKER26.DSK en CRTC 0
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 0
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26C"\(RET)'
wait 10000000
;
; test 5 Parity Check Select CRTC 0, 2
key_output '5'
wait 10000000
key_output ' '
wait 1000000 ; menu
; test prevu pour CRTC 2 mais disp autre crc Last Line cond
key_output '7'
wait 64000000
key_output ' '
wait 1000000 ; menu
; test crtc 2 vma' sur R1=0
key_output 'T'
wait 1100000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1000000 ; menu
; crtc 2 ghost vsync vs Last Line (others crtc welcome)
key_output '\(RET)'
wait 5000000
key_output ' '
wait 2000000
key_output ' '
wait 1000000 ; menu
; Add Line R5 on last line
key_output 'E'
wait 10000000
key_output ' '
wait 5000000
key_output ' '
wait 1000000 ; menu
; Add line R8
key_output 'P'
wait 12000000
key_output ' '
wait 1000000 ; menu
; r5 additional line in interlace mode
key_output 'S'
wait 2000000
key_output ' '
wait 1000000 ; menu
; CRTC 0,3,4 Interlace vsync nightmare (2 1er test uniqu CRTC1)
key_output 'O'
wait 4000000
key_output ' '
wait 6000000
key_output ' '
wait 1000000
wait 8000000
key_output ' '
wait 9000000
key_output ' '
wait 9000000
key_output ' '
wait 10000000
key_output ' '
wait 9000000
key_output ' '
wait 10000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000 ; menu
; R9/R4 UPD LAST LIMIT
key_output 'R'
wait 5000000
key_output ' '
wait 10000000 ; menu
csl_load 'SHAKE26C-1'

@ -0,0 +1,187 @@
;
; Fichier de script CSL
; Execution du module SHAKE26C du DSK SHAKER26.DSK en CRTC 1
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 1
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26C"\(RET)'
wait 10000000
;
; R8 IVM ODD C9
key_output '2'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000 ; menu
; Parity Switch Status
key_output '3'
wait 5000000
key_output ' '
wait 1000000 ; menu
; Ivm On/Off
key_output '4'
wait 800000 ; 23D
key_output ' '
wait 1000000 ; 23E
key_output ' '
wait 1000000 ; 23F
key_output ' '
wait 1000000 ; 27F
key_output ' '
wait 1000000 ; 280
key_output ' '
wait 1000000 ; 281
key_output ' '
wait 1000000 ; 282
key_output ' '
wait 1000000 ; 283
key_output ' '
wait 1000000 ; 284
key_output ' '
wait 1000000 ; 285, 286
key_output ' '
wait 1000000 ; 287, 288
key_output ' '
wait 1000000 ; 289
key_output ' '
wait 1000000 ; 28A
key_output ' '
wait 1000000 ; 28B
key_output ' '
wait 1000000 ; 28c
key_output ' '
wait 1000000 ; 28d
key_output ' '
wait 1000000 ; 28e
key_output ' '
wait 1000000 ; 28f
key_output ' '
wait 1000000 ; 290
key_output ' '
wait 1000000 ; 291
key_output ' '
wait 1000000 ; 292
key_output ' '
wait 1000000 ; 293
key_output ' '
wait 1000000 ; 294
key_output ' '
wait 1000000 ; 295
key_output ' '
wait 1000000 ; 296, 297
key_output ' '
wait 1000000 ; 298, 299
key_output ' '
wait 1000000 ; 29a
key_output ' '
wait 1000000 ; 29b
key_output ' '
wait 1000000 ; 29c
key_output ' '
wait 1000000 ; 29d
key_output ' '
; test prevu pour CRTC 2 mais disp autre crc Last Line cond
key_output '7'
wait 64000000
key_output ' '
wait 1000000 ; menu
; test crtc 2 vma' sur R1=0
key_output 'T'
wait 1100000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1000000 ; menu
; crtc 2 ghost vsync vs Last Line (others crtc welcome)
key_output '\(RET)'
wait 5000000
key_output ' '
wait 2000000
key_output ' '
wait 1000000 ; menu
; Add Line R5 on last line
key_output 'E'
wait 20000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000 ; menu
; Add line R8
key_output 'P'
wait 20000000
key_output ' '
wait 1000000 ; menu
; r5 additional line in interlace mode
key_output 'S'
wait 4000000
key_output ' '
wait 1000000 ; menu
; CRTC 1 Interlace vsync nightmare (2 1er test uniqu CRTC1)
key_output 'O'
wait 12000000 ; cvsct1_a
key_output ' '
wait 6000000 ; cvsct1_b
key_output ' '
wait 3500000 ; cvstot
key_output ' '
wait 2000000 ; parity00
wait 8000000
key_output ' '
wait 6000000 ; cvms_a
key_output ' '
wait 6000000 ; cvms_b
key_output ' '
wait 6000000 ; cvms_b
key_output ' '
wait 6000000 ; cvms_c
key_output ' '
wait 6000000 ; cvms_c
key_output ' '
wait 3000000 ; parity01a
key_output ' '
wait 3000000 ; parity01b
key_output ' '
wait 3000000 ; parity01c
key_output ' '
wait 3000000 ; parity01d
key_output ' '
wait 3000000 ; parity01e
key_output ' '
wait 3000000 ; parity01f
key_output ' '
wait 1000000
csl_load 'SHAKE26C-2'

@ -0,0 +1,154 @@
;
; Fichier de script CSL
; Execution du module SHAKE26C du DSK SHAKER26.DSK en CRTC 2
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 2
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26C"\(RET)'
wait 10000000
;
; test 5 Parity Check Select CRTC 0, 2
key_output '5'
wait 10000000
key_output ' '
wait 1000000 ; menu
; C9 IVM Switch
key_output '6'
wait 1200000 ; 29f
key_output ' '
wait 1200000 ; 2a4
key_output ' '
wait 1200000 ; 2a5
key_output ' '
wait 1200000 ; 2a6
key_output ' '
wait 1200000 ; 2a7
key_output ' '
wait 1200000 ; 2ac
key_output ' '
wait 1200000 ; 2ad
key_output ' '
wait 1200000 ; 2ae
key_output ' '
wait 1200000 ; 2af
key_output ' '
wait 1200000 ; 2b4
key_output ' '
wait 1200000 ; 2b5
key_output ' '
wait 1200000 ; 2b6
key_output ' '
wait 1200000 ; 2b7
key_output ' '
wait 1200000 ; 2bc
key_output ' '
wait 1200000 ; 2bd
key_output ' '
wait 1200000 ; 2be
key_output ' '
wait 1000000 ; menu
; test prevu pour CRTC 2 mais disp autre crc Last Line cond
key_output '7'
wait 64000000
key_output ' '
wait 1000000 ; menu
;
; add line on parity bug
key_output '8'
wait 2000000 ; 2c0
key_output ' '
wait 2000000 ; 2c1
key_output ' '
wait 2000000 ; 2c2
key_output ' '
wait 2000000 ; 2c3
key_output ' '
wait 2000000 ; 2c4
key_output ' '
wait 2000000 ; 2c5
key_output ' '
wait 2000000 ; 2c6
key_output ' '
wait 1000000 ; menu
; add line rq & trigger
key_output '9'
wait 2000000 ; 2c7
key_output ' '
wait 300000000
key_output ' '
; test crtc 2 vma' sur R1=0
key_output 'T'
wait 1100000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1000000 ; menu
; crtc 2 ghost vsync vs Last Line (others crtc welcome)
key_output '\(RET)'
wait 5000000
key_output ' '
wait 2000000
key_output ' '
wait 1000000 ; menu
; Add Line R5 on last line
key_output 'E'
wait 20000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000 ; menu
; Add line R8
key_output 'P'
wait 20000000
key_output ' '
wait 1000000 ; menu
; r5 additional line in interlace mode
key_output 'S'
wait 2000000
key_output ' '
wait 1000000 ; menu
; CRTC 2 Interlace vsync nightmare (2 1er test uniqu CRTC1)
key_output 'O'
wait 6000000 ; cvstot
key_output ' '
wait 2000000 ; parity00 2d8
wait 8000000 ; 2d9
key_output ' '
wait 10000000 ; cvms_a ; 2da
key_output ' '
wait 10000000 ; cvms_b ; 2db
key_output ' '
wait 10000000 ; cvms_b ; 2dc
key_output ' '
wait 10000000 ; cvms_c ; 2dd
key_output ' '
wait 10000000 ; cvms_c ; 2de
key_output ' '
wait 10000000 ; menu
; R9/R4 UPD LAST LIMIT
key_output 'R'
wait 5000000 ; 3ad
key_output ' '
wait 10000000 ; menu
csl_load 'SHAKE26C-4' ; corrected from cls_load

@ -0,0 +1,94 @@
;
; Fichier de script CSL
; Execution du module SHAKE26C du DSK SHAKER26.DSK en CRTC 3
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 3
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26C"\(RET)'
wait 10000000
; test prevu pour CRTC 2 mais disp autre crc Last Line cond
key_output '7'
wait 64000000
key_output ' '
wait 1000000 ; menu
;
; test crtc 2 vma' sur R1=0
key_output 'T'
wait 1100000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1000000 ; menu
; crtc 2 ghost vsync vs Last Line (others crtc welcome)
key_output '\(RET)'
wait 5000000 ; 2cd
key_output ' '
wait 2000000 ; 2ce
key_output ' '
wait 1000000 ; menu
; Add Line R5 on last line
key_output 'E'
wait 10000000 ; 2c9
key_output ' '
wait 5000000 ; 2ca
key_output ' '
wait 1000000 ; menu
; r5 additional line in interlace mode
key_output 'S'
wait 2000000 ; 2d3
key_output ' '
wait 1000000 ; menu
; CRTC 2 Interlace vsync nightmare (2 1er test uniqu CRTC1)
key_output 'O'
wait 6000000 ; cvstot 2d6
key_output ' '
wait 3500000 ; cvstot 2d7
key_output ' '
wait 2000000 ; parity00
wait 8000000
key_output ' '
wait 10000000 ; cvms_a 2d8
key_output ' '
wait 10000000 ; cvms_b
key_output ' '
wait 10000000 ; cvms_b
key_output ' '
wait 10000000 ; cvms_c
key_output ' '
wait 10000000 ; cvms_c
key_output ' '
wait 10000000 ; menu
; Y crtc 3/4 parity
key_output 'Y'
wait 4500000 ; 2df
key_output ' '
wait 1000000 ; 2e0
key_output ' '
wait 1000000 ; 2e1
key_output ' '
wait 1000000 ; 2e2
key_output ' '
wait 10000000 ; menu
; R9/R4 UPD LAST LIMIT
key_output 'R'
wait 5000000
key_output ' '
wait 10000000 ; menu
reset

@ -0,0 +1,94 @@
;
; Fichier de script CSL
; Execution du module SHAKE26C du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 4
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26C"\(RET)'
wait 10000000
; test prevu pour CRTC 2 mais disp autre crc Last Line cond
key_output '7'
wait 64000000
key_output ' '
wait 1000000 ; menu
;
; test crtc 2 vma' sur R1=0
key_output 'T'
wait 1100000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1200000
key_output ' '
wait 1000000 ; menu
; crtc 2 ghost vsync vs Last Line (others crtc welcome)
key_output '\(RET)'
wait 5000000 ; 2cd
key_output ' '
wait 2000000 ; 2ce
key_output ' '
wait 1000000 ; menu
; Add Line R5 on last line
key_output 'E'
wait 10000000 ; 2c9
key_output ' '
wait 5000000 ; 2ca
key_output ' '
wait 1000000 ; menu
; r5 additional line in interlace mode
key_output 'S'
wait 2000000 ; 2d3
key_output ' '
wait 1000000 ; menu
; CRTC 2 Interlace vsync nightmare (2 1er test uniqu CRTC1)
key_output 'O'
wait 6000000 ; cvstot 2d6
key_output ' '
wait 3500000 ; cvstot 2d7
key_output ' '
wait 2000000 ; parity00
wait 8000000
key_output ' '
wait 10000000 ; cvms_a 2d8
key_output ' '
wait 10000000 ; cvms_b
key_output ' '
wait 10000000 ; cvms_b
key_output ' '
wait 10000000 ; cvms_c
key_output ' '
wait 10000000 ; cvms_c
key_output ' '
wait 10000000 ; menu
; Y crtc 3/4 parity
key_output 'Y'
wait 4500000 ; 2df
key_output ' '
wait 1000000 ; 2e0
key_output ' '
wait 1000000 ; 2e1
key_output ' '
wait 1000000 ; 2e2
key_output ' '
wait 10000000 ; menu
; R9/R4 UPD LAST LIMIT
key_output 'R'
wait 5000000
key_output ' '
wait 10000000 ; menu
csl_load 'SHAKE26C-3'

@ -0,0 +1,201 @@
;
; Fichier de script CSL
; Execution du module SHAKE26D du DSK SHAKER26.DSK en CRTC 0
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 0
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26D"\(RET)'
wait 10000000
;
; SHAKER KILLER 2
key_output 'I'
wait 2000000 ; 2e3 ecran bleu
key_output ' '
wait 2000000 ; 2e4
key_output ' '
wait 2000000 ; 2e5
key_output ' '
wait 2000000 ; 2e6
key_output ' '
wait 2000000 ; 2e7
key_output ' '
wait 2000000 ; 2e8
key_output ' '
wait 2000000 ; 2e9
key_output ' '
wait 1000000 ; menu
; VSYNC TORTURE (LOCK MECHANISM)
; Eventuellement ajouter des SS sur les 3 tests desync crtc 0
key_output 'R'
wait 22000000 ; 2ea
key_output ' '
wait 1000000 ; menu
; VSYNC/CSYNC GATE ARRAY
key_output 'T'
wait 800000 ; 2eb
key_output ' '
wait 2000000 ; 2ec
key_output ' '
wait 2000000 ; 2ed
key_output ' '
wait 2000000 ; 2ee
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2f0
key_output ' '
wait 2000000 ; 2f1
key_output ' '
wait 2000000 ; 2f2
key_output ' '
wait 2000000 ; 2f3
key_output ' '
wait 2000000 ; 2f4
key_output ' '
wait 2000000 ; 2f5
key_output ' '
wait 2000000 ; 2fb
key_output ' '
wait 8000000 ; 2fc 2fd
key_output ' '
wait 4000000 ; 2fe
key_output ' '
wait 4000000 ; 2ff
key_output ' '
wait 4000000 ; 300
key_output ' '
wait 4000000 ; 301
key_output ' '
wait 1000000
key_delay 90000
key_output ' '
key_output ' '
wait 1000000 ; menu
; HSYNC CSYNC GATE ARRAY
key_output 'H'
wait 1000000 ; 306
key_output ' '
wait 1200000 ; 307
key_output ' '
wait 1200000 ; 308
key_output ' '
wait 1200000 ; 309
key_output ' '
wait 1200000 ; 30A
key_output ' '
wait 1200000 ; 30B
key_output ' '
wait 1200000 ; 30C
key_output ' '
wait 1200000 ; 30D
key_output ' '
wait 1200000 ; 30E
key_output ' '
wait 1200000 ; 30F
key_output ' '
wait 1000000 ; menu
; CSYNC4 VS 2XCSYNC2
;
key_output '1'
wait 4600000 ; 310
wait 4000000 ; 311
wait 8000000
key_output ' '
wait 1000000 ; menu
; R2JIT >> NO CSYNC UPD
;
key_output '2'
wait 4500000 ; 312
wait 4000000 ; 313
wait 4000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000
; 2 CSYNC RELATIVE;
key_output '3'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
; CSYNC MULTIPLES
key_output '4'
wait 1000000 ; 37f
key_output ' '
wait 3000000 ; 380
key_output ' '
wait 1000000
; Hardware scroll 1 pixel mode 1/0 (no buffering)
key_output '6'
wait 10000000 ; 381
key_output ' '
wait 10000000 ; 382
key_output ' '
wait 1000000
;
; R2 oscillation story;
key_output '7'
wait 10000000 ; 383
key_output ' '
wait 4000000 ; 384
key_output ' '
wait 4000000 ; 385
key_output ' '
wait 4000000 ; 386
key_output ' '
wait 4000000 ; 387
key_output ' '
wait 4000000 ; 388
key_output ' '
wait 4000000 ; 389
key_output ' '
wait 4000000 ; 38a
key_output ' '
wait 4000000 ; 38b
key_output ' '
wait 4000000 ; 38c
key_output ' '
wait 1000000 ; menu
;
; no hsync for xx line
key_output '8'
wait 3000000 ; 38d
key_output ' '
wait 3000000 ; 38e
key_output ' '
wait 3000000 ; 38f
key_output ' '
wait 3000000 ; 390
key_output ' '
wait 3000000 ; 391
key_output ' '
wait 3000000 ; 392
key_output ' '
wait 1000000 ; menu
csl_load 'SHAKE26D-1'

@ -0,0 +1,238 @@
;
; Fichier de script CSL
; Execution du module SHAKE26D du DSK SHAKER26.DSK en CRTC 1
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 1
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26D"\(RET)'
wait 10000000
;
; SHAKER KILLER 2
key_output 'I'
wait 2000000 ; 2e3 ecran bleu
key_output ' '
wait 2000000 ; 2e4
key_output ' '
wait 2000000 ; 2e5
key_output ' '
wait 2000000 ; 2e6
key_output ' '
wait 2000000 ; 2e7
key_output ' '
wait 2000000 ; 2e8
key_output ' '
wait 2000000 ; 2e9
key_output ' '
wait 1000000 ; menu
; VSYNC TORTURE (LOCK MECHANISM)
; Eventuellement ajouter des SS sur les 3 tests desync crtc 0
key_output 'R'
wait 22000000 ; 2ea
key_output ' '
wait 1000000 ; menu
; VSYNC/CSYNC GATE ARRAY
key_output 'T'
wait 800000 ; 2eb
key_output ' '
wait 2000000 ; 2ec
key_output ' '
wait 2000000 ; 2ed
key_output ' '
wait 2000000 ; 2ee
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2f0
key_output ' '
wait 2000000 ; 2f1
key_output ' '
wait 2000000 ; 2f2
key_output ' '
wait 2000000 ; 2f3
key_output ' '
wait 2000000 ; 2f4
key_output ' '
wait 2000000 ; 2f5
key_output ' '
wait 2000000 ; 2fb
key_output ' '
wait 8000000 ; 2fc 2fd
key_output ' '
wait 4000000 ; 2fe
key_output ' '
wait 4000000 ; 2ff
key_output ' '
wait 4000000 ; 300
key_output ' '
wait 4000000 ; 301
key_output ' '
wait 1000000
key_delay 90000
key_output ' '
key_output ' '
wait 1000000 ; menu
; HSYNC CSYNC GATE ARRAY
key_output 'H'
wait 1000000 ; 306
key_output ' '
wait 1200000 ; 307
key_output ' '
wait 1200000 ; 308
key_output ' '
wait 1200000 ; 309
key_output ' '
wait 1200000 ; 30A
key_output ' '
wait 1200000 ; 30B
key_output ' '
wait 1200000 ; 30C
key_output ' '
wait 1200000 ; 30D
key_output ' '
wait 1200000 ; 30E
key_output ' '
wait 1200000 ; 30F
key_output ' '
wait 1000000 ; menu
; CSYNC4 VS 2XCSYNC2
;
key_output '1'
wait 4600000 ; 310
wait 4000000 ; 311
wait 8000000
key_output ' '
wait 1000000 ; menu
; R2JIT >> NO CSYNC UPD
;
key_output '2'
wait 4500000 ; 312
wait 4000000 ; 313
wait 4000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000
; 2 CSYNC RELATIVE;
key_output '3'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
; CSYNC MULTIPLES
key_output '4'
wait 1000000 ; 37f
key_output ' '
wait 3000000 ; 380
key_output ' '
wait 1000000
; Hardware scroll 1 pixel mode 1/0 (no buffering)
key_output '6'
wait 10000000 ; 381
key_output ' '
wait 10000000 ; 382
key_output ' '
wait 1000000
;
; R2 oscillation story;
key_output '7'
wait 10000000 ; 383
key_output ' '
wait 4000000 ; 384
key_output ' '
wait 4000000 ; 385
key_output ' '
wait 4000000 ; 386
key_output ' '
wait 4000000 ; 387
key_output ' '
wait 4000000 ; 388
key_output ' '
wait 4000000 ; 389
key_output ' '
wait 4000000 ; 38a
key_output ' '
wait 4000000 ; 38b
key_output ' '
wait 4000000 ; 38c
key_output ' '
wait 1000000 ; menu
;
; no hsync for xx line
key_output '8'
wait 3000000 ; 38d
key_output ' '
wait 3000000 ; 38e
key_output ' '
wait 3000000 ; 38f
key_output ' '
wait 3000000 ; 390
key_output ' '
wait 3000000 ; 391
key_output ' '
wait 3000000 ; 392
key_output ' '
; rfd round 2
;
key_output '9'
wait 2000000 ; 393, 3f7
key_output ' '
wait 2000000 ; 394, 3f8
key_output ' '
wait 2000000 ; 395, 3f9
key_output ' '
wait 2000000 ; 396
key_output ' '
wait 2000000 ; 397
key_output ' '
wait 2000000 ; 398
key_output ' '
wait 2000000 ; 399
key_output ' '
wait 2000000 ; 39a
key_output ' '
wait 2000000 ; 39b
key_output ' '
wait 1000000 ; menu
; ofs upd in add managment
;
key_output 'E'
wait 1000000 ; 3ae
key_output ' '
wait 1000000 ; 3af
key_output ' '
wait 1000000 ; 3b4
key_output ' '
wait 1000000 ; 3b5
key_output ' '
wait 1000000 ; 3b6
key_output ' '
wait 1000000 ; 3b7
key_output ' '
wait 1000000 ; menu
csl_load 'SHAKE26D-2'

@ -0,0 +1,199 @@
;
; Fichier de script CSL
; Execution du module SHAKE26D du DSK SHAKER26.DSK en CRTC 2
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 2
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26D"\(RET)'
wait 10000000
;
; SHAKER KILLER 2
key_output 'I'
wait 2000000 ; 2e3 ecran bleu
key_output ' '
wait 2000000 ; 2e4
key_output ' '
wait 2000000 ; 2e5
key_output ' '
wait 2000000 ; 2e6
key_output ' '
wait 2000000 ; 2e7
key_output ' '
wait 2000000 ; 2e8
key_output ' '
wait 2000000 ; 2e9
key_output ' '
wait 1000000 ; menu
; VSYNC TORTURE (LOCK MECHANISM)
; Eventuellement ajouter des SS sur les 3 tests desync crtc 0
key_output 'R'
wait 22000000 ; 2ea
key_output ' '
wait 1000000 ; menu
; VSYNC/CSYNC GATE ARRAY
key_output 'T'
wait 800000 ; 2eb
key_output ' '
wait 2000000 ; 2ec
key_output ' '
wait 2000000 ; 2ed
key_output ' '
wait 2000000 ; 2ee
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2f0
key_output ' '
wait 2000000 ; 2f1
key_output ' '
wait 2000000 ; 2f2
key_output ' '
wait 2000000 ; 2f3
key_output ' '
wait 2000000 ; 2f4
key_output ' '
wait 2000000 ; 2f5
key_output ' '
wait 2000000 ; 2fb
key_output ' '
wait 8000000 ; 2fc 2fd
key_output ' '
wait 4000000 ; 2fe
key_output ' '
wait 4000000 ; 2ff
key_output ' '
wait 4000000 ; 300
key_output ' '
wait 4000000 ; 301
key_output ' '
wait 1000000
key_delay 90000
key_output ' '
key_output ' '
wait 1000000 ; menu
; HSYNC CSYNC GATE ARRAY
key_output 'H'
wait 1000000 ; 306
key_output ' '
wait 1200000 ; 307
key_output ' '
wait 1200000 ; 308
key_output ' '
wait 1200000 ; 309
key_output ' '
wait 1200000 ; 30A
key_output ' '
wait 1200000 ; 30B
key_output ' '
wait 1200000 ; 30C
key_output ' '
wait 1200000 ; 30D
key_output ' '
wait 1200000 ; 30E
key_output ' '
wait 1200000 ; 30F
key_output ' '
wait 1000000 ; menu
; CSYNC4 VS 2XCSYNC2
;
key_output '1'
wait 4600000 ; 310
wait 4000000 ; 311
wait 8000000
key_output ' '
wait 1000000 ; menu
; R2JIT >> NO CSYNC UPD
;
key_output '2'
wait 4500000 ; 312
wait 4000000 ; 313
wait 4000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000
; 2 CSYNC RELATIVE;
key_output '3'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
; CSYNC MULTIPLES
key_output '4'
wait 1000000 ; 37f
key_output ' '
wait 3000000 ; 380
key_output ' '
wait 1000000
; Hardware scroll 1 pixel mode 1/0 (no buffering)
key_output '6'
wait 10000000 ; 381
key_output ' '
wait 10000000 ; 382
key_output ' '
wait 1000000
;
; R2 oscillation story;
key_output '7'
wait 10000000 ; 383
key_output ' '
wait 4000000 ; 384
key_output ' '
wait 4000000 ; 385
key_output ' '
wait 4000000 ; 386
key_output ' '
wait 4000000 ; 387
key_output ' '
wait 4000000 ; 388
key_output ' '
wait 4000000 ; 389
key_output ' '
wait 4000000 ; 38a
key_output ' '
wait 4000000 ; 38b
key_output ' '
wait 4000000 ; 38c
key_output ' '
wait 1000000 ; menu
;
; no hsync for xx line
key_output '8'
wait 3000000 ; 38d
key_output ' '
wait 3000000 ; 38e
key_output ' '
wait 3000000 ; 38f
key_output ' '
wait 3000000 ; 390
key_output ' '
wait 3000000 ; 391
key_output ' '
wait 3000000 ; 392
key_output ' '
wait 1000000 ; menu
csl_load 'SHAKE26D-4'

@ -0,0 +1,285 @@
;
; Fichier de script CSL
; Execution du module SHAKE26D du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 3
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26D"\(RET)'
wait 10000000
;
; SHAKER KILLER 2
key_output 'I'
wait 2000000 ; 2e3 ecran bleu
key_output ' '
wait 2000000 ; 2e4
key_output ' '
wait 2000000 ; 2e5
key_output ' '
wait 2000000 ; 2e6
key_output ' '
wait 2000000 ; 2e7
key_output ' '
wait 2000000 ; 2e8
key_output ' '
wait 2000000 ; 2e9
key_output ' '
wait 1000000 ; menu
; VSYNC TORTURE (LOCK MECHANISM)
; Eventuellement ajouter des SS sur les 3 tests desync crtc 0
key_output 'R'
wait 22000000 ; 2ea
key_output ' '
wait 1000000 ; menu
; VSYNC/CSYNC GATE ARRAY
key_output 'T'
wait 800000 ; 2eb
key_output ' '
wait 2000000 ; 2ec
key_output ' '
wait 2000000 ; 2ed
key_output ' '
wait 2000000 ; 2ee
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2f0
key_output ' '
wait 2000000 ; 2f1
key_output ' '
wait 2000000 ; 2f2
key_output ' '
wait 2000000 ; 2f3
key_output ' '
wait 2000000 ; 2f4
key_output ' '
wait 2000000 ; 2f5
key_output ' '
wait 2000000 ; 2fb
key_output ' '
wait 8000000 ; 2fc 2fd
key_output ' '
wait 4000000 ; 2fe
key_output ' '
wait 4000000 ; 2ff
key_output ' '
wait 4000000 ; 300
key_output ' '
wait 4000000 ; 301
key_output ' '
wait 1000000
key_delay 90000
key_output ' '
key_output ' '
wait 1000000 ; menu
; HSYNC CSYNC GATE ARRAY
key_output 'H'
wait 1000000 ; 306
key_output ' '
wait 1200000 ; 307
key_output ' '
wait 1200000 ; 308
key_output ' '
wait 1200000 ; 309
key_output ' '
wait 1200000 ; 30A
key_output ' '
wait 1200000 ; 30B
key_output ' '
wait 1200000 ; 30C
key_output ' '
wait 1200000 ; 30D
key_output ' '
wait 1200000 ; 30E
key_output ' '
wait 1200000 ; 30F
key_output ' '
wait 1000000 ; menu
; CSYNC4 VS 2XCSYNC2
;
key_output '1'
wait 4600000 ; 310
wait 4000000 ; 311
wait 8000000
key_output ' '
wait 1000000 ; menu
; R2JIT >> NO CSYNC UPD
;
key_output '2'
wait 4500000 ; 312
wait 4000000 ; 313
wait 4000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000
; 2 CSYNC RELATIVE;
key_output '3'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
; CSYNC MULTIPLES
key_output '4'
wait 1000000 ; 37f
key_output ' '
wait 3000000 ; 380
key_output ' '
wait 1000000
; Hardware scroll 1 pixel mode 1/0 (no buffering)
key_output '6'
wait 10000000 ; 381
key_output ' '
wait 10000000 ; 382
key_output ' '
wait 1000000
;
; R2 oscillation story;
key_output '7'
wait 10000000 ; 383
key_output ' '
wait 4000000 ; 384
key_output ' '
wait 4000000 ; 385
key_output ' '
wait 4000000 ; 386
key_output ' '
wait 4000000 ; 387
key_output ' '
wait 4000000 ; 388
key_output ' '
wait 4000000 ; 389
key_output ' '
wait 4000000 ; 38a
key_output ' '
wait 4000000 ; 38b
key_output ' '
wait 4000000 ; 38c
key_output ' '
wait 1000000 ; menu
;
; no hsync for xx line
key_output '8'
wait 3000000 ; 38d
key_output ' '
wait 3000000 ; 38e
key_output ' '
wait 3000000 ; 38f
key_output ' '
wait 3000000 ; 390
key_output ' '
wait 3000000 ; 391
key_output ' '
wait 3000000 ; 392
key_output ' '
wait 1000000 ; menu
;
; CRTC 3/4 STATUS
key_output 'U'
wait 10000000 ; 3bc
key_output ' '
wait 10000000 ; 3bd
key_output ' '
wait 10000000 ; 3be
key_output ' '
wait 15000000 ; 3bf
key_output ' '
wait 45000000 ; 3c0
key_output ' '
wait 10000000 ; 3c1
key_output ' '
wait 4000000 ; 3c2
key_output ' '
wait 4000000 ; 3c3
key_output ' '
wait 4000000 ; 3c4
key_output ' '
wait 4000000 ; 3c5
key_output ' '
wait 4000000 ; 3c6
key_output ' '
wait 4000000 ; 3c7
key_output ' '
wait 4000000 ; 3c8
key_output ' '
wait 4000000 ; 3c9
key_output ' '
wait 4000000 ; 3ca
key_output ' '
wait 4000000 ; 3cb
key_output ' '
wait 4000000 ; 3cc
key_output ' '
wait 4000000 ; 3cd
key_output ' '
wait 4000000 ; 3ce
key_output ' '
wait 4000000 ; 3cf
key_output ' '
wait 4000000 ; 3d0
key_output ' '
wait 4000000 ; 3d1
key_output ' '
wait 4000000 ; 3d2
key_output ' '
wait 4000000 ; 3d3
key_output ' '
wait 4000000 ; 3d4
key_output ' '
wait 4000000 ; 3d5
key_output ' '
wait 4000000 ; 3d6
key_output ' '
wait 4000000 ; 3d7
key_output ' '
wait 4000000 ; 3d8
key_output ' '
wait 4000000 ; 3d9
key_output ' '
wait 4000000 ; 3da
key_output ' '
wait 4000000 ; 3db
key_output ' '
wait 4000000 ; 3dc
key_output ' '
wait 4000000 ; 3dd
key_output ' '
wait 4000000 ; 3de
key_output ' '
wait 4000000 ; 3df
key_output ' '
wait 4000000 ; 3e0
key_output ' '
wait 4000000 ; 3e1
key_output ' '
wait 4000000 ; 3e2
key_output ' '
wait 4000000 ; 3e3
key_output ' '
wait 4000000 ; 3e4
key_output ' '
wait 4000000 ; menu
reset

@ -0,0 +1,286 @@
;
; Fichier de script CSL
; Execution du module SHAKE26D du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 4
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26D"\(RET)'
wait 10000000
;
; SHAKER KILLER 2
key_output 'I'
wait 2000000 ; 2e3 ecran bleu
key_output ' '
wait 2000000 ; 2e4
key_output ' '
wait 2000000 ; 2e5
key_output ' '
wait 2000000 ; 2e6
key_output ' '
wait 2000000 ; 2e7
key_output ' '
wait 2000000 ; 2e8
key_output ' '
wait 2000000 ; 2e9
key_output ' '
wait 1000000 ; menu
; VSYNC TORTURE (LOCK MECHANISM)
; Eventuellement ajouter des SS sur les 3 tests desync crtc 0
key_output 'R'
wait 22000000 ; 2ea
key_output ' '
wait 1000000 ; menu
; VSYNC/CSYNC GATE ARRAY
key_output 'T'
wait 800000 ; 2eb
key_output ' '
wait 2000000 ; 2ec
key_output ' '
wait 2000000 ; 2ed
key_output ' '
wait 2000000 ; 2ee
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2ef
key_output ' '
wait 2000000 ; 2f0
key_output ' '
wait 2000000 ; 2f1
key_output ' '
wait 2000000 ; 2f2
key_output ' '
wait 2000000 ; 2f3
key_output ' '
wait 2000000 ; 2f4
key_output ' '
wait 2000000 ; 2f5
key_output ' '
wait 2000000 ; 2fb
key_output ' '
wait 8000000 ; 2fc 2fd
key_output ' '
wait 4000000 ; 2fe
key_output ' '
wait 4000000 ; 2ff
key_output ' '
wait 4000000 ; 300
key_output ' '
wait 4000000 ; 301
key_output ' '
wait 1000000
key_delay 90000
key_output ' '
key_output ' '
wait 1000000 ; menu
; HSYNC CSYNC GATE ARRAY
key_output 'H'
wait 1000000 ; 306
key_output ' '
wait 1200000 ; 307
key_output ' '
wait 1200000 ; 308
key_output ' '
wait 1200000 ; 309
key_output ' '
wait 1200000 ; 30A
key_output ' '
wait 1200000 ; 30B
key_output ' '
wait 1200000 ; 30C
key_output ' '
wait 1200000 ; 30D
key_output ' '
wait 1200000 ; 30E
key_output ' '
wait 1200000 ; 30F
key_output ' '
wait 1000000 ; menu
; CSYNC4 VS 2XCSYNC2
;
key_output '1'
wait 4600000 ; 310
wait 4000000 ; 311
wait 8000000
key_output ' '
wait 1000000 ; menu
; R2JIT >> NO CSYNC UPD
;
key_output '2'
wait 4500000 ; 312
wait 4000000 ; 313
wait 4000000
key_output ' '
wait 10000000
key_output ' '
wait 1000000
; 2 CSYNC RELATIVE;
key_output '3'
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
key_output ' '
wait 1000000
; CSYNC MULTIPLES
key_output '4'
wait 1000000 ; 37f
key_output ' '
wait 3000000 ; 380
key_output ' '
wait 1000000
; Hardware scroll 1 pixel mode 1/0 (no buffering)
key_output '6'
wait 10000000 ; 381
key_output ' '
wait 10000000 ; 382
key_output ' '
wait 1000000
;
; R2 oscillation story;
key_output '7'
wait 10000000 ; 383
key_output ' '
wait 4000000 ; 384
key_output ' '
wait 4000000 ; 385
key_output ' '
wait 4000000 ; 386
key_output ' '
wait 4000000 ; 387
key_output ' '
wait 4000000 ; 388
key_output ' '
wait 4000000 ; 389
key_output ' '
wait 4000000 ; 38a
key_output ' '
wait 4000000 ; 38b
key_output ' '
wait 4000000 ; 38c
key_output ' '
wait 1000000 ; menu
;
; no hsync for xx line
key_output '8'
wait 3000000 ; 38d
key_output ' '
wait 3000000 ; 38e
key_output ' '
wait 3000000 ; 38f
key_output ' '
wait 3000000 ; 390
key_output ' '
wait 3000000 ; 391
key_output ' '
wait 3000000 ; 392
key_output ' '
wait 1000000 ; menu
;
; CRTC 3/4 STATUS
key_output 'U'
wait 10000000 ; 3bc
key_output ' '
wait 10000000 ; 3bd
key_output ' '
wait 10000000 ; 3be
key_output ' '
wait 15000000 ; 3bf
key_output ' '
wait 45000000 ; 3c0
key_output ' '
wait 10000000 ; 3c1
key_output ' '
wait 4000000 ; 3c2
key_output ' '
wait 4000000 ; 3c3
key_output ' '
wait 4000000 ; 3c4
key_output ' '
wait 4000000 ; 3c5
key_output ' '
wait 4000000 ; 3c6
key_output ' '
wait 4000000 ; 3c7
key_output ' '
wait 4000000 ; 3c8
key_output ' '
wait 4000000 ; 3c9
key_output ' '
wait 4000000 ; 3ca
key_output ' '
wait 4000000 ; 3cb
key_output ' '
wait 4000000 ; 3cc
key_output ' '
wait 4000000 ; 3cd
key_output ' '
wait 4000000 ; 3ce
key_output ' '
wait 4000000 ; 3cf
key_output ' '
wait 4000000 ; 3d0
key_output ' '
wait 4000000 ; 3d1
key_output ' '
wait 4000000 ; 3d2
key_output ' '
wait 4000000 ; 3d3
key_output ' '
wait 4000000 ; 3d4
key_output ' '
wait 4000000 ; 3d5
key_output ' '
wait 4000000 ; 3d6
key_output ' '
wait 4000000 ; 3d7
key_output ' '
wait 4000000 ; 3d8
key_output ' '
wait 4000000 ; 3d9
key_output ' '
wait 4000000 ; 3da
key_output ' '
wait 4000000 ; 3db
key_output ' '
wait 4000000 ; 3dc
key_output ' '
wait 4000000 ; 3dd
key_output ' '
wait 4000000 ; 3de
key_output ' '
wait 4000000 ; 3df
key_output ' '
wait 4000000 ; 3e0
key_output ' '
wait 4000000 ; 3e1
key_output ' '
wait 4000000 ; 3e2
key_output ' '
wait 4000000 ; 3e3
key_output ' '
wait 4000000 ; 3e4
key_output ' '
wait 4000000 ; menu
csl_load 'SHAKE26D-3'

@ -0,0 +1,37 @@
;
; Fichier de script CSL
; Execution du module SHAKE26E du DSK SHAKER26.DSK en CRTC 0
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 0
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26E"\(RET)'
wait 10000000
;
; R5 STORIES 2ND ROUND
key_output '1'
wait 2000000 ; 3fa
key_output ' '
wait 2000000 ; 3fb
key_output ' '
wait 2000000 ; 3fc
key_output ' '
wait 2000000 ; 3fd
key_output ' '
;
;
; CRTC 0 : C4/C9 COUNTER LOGIC
key_output '3'
wait 2000000 ; 403
key_output ' '
wait 2000000 ; 404
key_output ' '
wait 2000000 ; 405
key_output ' '
;
;
csl_load 'SHAKE26E-1'

@ -0,0 +1,38 @@
;
; Fichier de script CSL
; Execution du module SHAKE26E du DSK SHAKER26.DSK en CRTC 1
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 1
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26E"\(RET)'
wait 10000000
;
; R5 STORIES 2ND ROUND
key_output '1'
wait 2000000 ; 3fa
key_output ' '
wait 2000000 ; 3fb
key_output ' '
wait 2000000 ; 3fc
key_output ' '
wait 2000000 ; 3fd
key_output ' '
;
;
; CRTC 1 : VMA TRT C4=R4=0 ON ADJ LINE
;
key_output '2'
wait 2000000 ; 400
key_output ' '
wait 2000000 ; 401
key_output ' '
wait 2000000 ; 402
key_output ' '
;
;
csl_load 'SHAKE26E-2'

@ -0,0 +1,28 @@
;
; Fichier de script CSL
; Execution du module SHAKE26E du DSK SHAKER26.DSK en CRTC 2
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 2
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26E"\(RET)'
wait 10000000
;
; R5 STORIES 2ND ROUND
key_output '1'
wait 2000000 ; 3fa
key_output ' '
wait 2000000 ; 3fb
key_output ' '
wait 2000000 ; 3fc
key_output ' '
wait 2000000 ; 3fd
key_output ' '
;
;
;
csl_load 'SHAKE26E-4'

@ -0,0 +1,27 @@
;
; Fichier de script CSL
; Execution du module SHAKE26E du DSK SHAKER26.DSK en CRTC 3
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 3
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26E"\(RET)'
wait 10000000
;
; R5 STORIES 2ND ROUND
key_output '1'
wait 2000000 ; 3fa
key_output ' '
wait 2000000 ; 3fb
key_output ' '
wait 2000000 ; 3fc
key_output ' '
wait 2000000 ; 3fd
key_output ' '
;
;
;

@ -0,0 +1,28 @@
;
; Fichier de script CSL
; Execution du module SHAKE26E du DSK SHAKER26.DSK en CRTC 4
; Le module genere des instructions au format SSM
;
csl_version 1.0
crtc_select 4
reset
wait 3000000
disk_insert 'shaker26.dsk'
key_delay 70000 70000 400000
key_output 'RUN"SHAKE26E"\(RET)'
wait 10000000
;
; R5 STORIES 2ND ROUND
key_output '1'
wait 2000000 ; 3fa
key_output ' '
wait 2000000 ; 3fb
key_output ' '
wait 2000000 ; 3fc
key_output ' '
wait 2000000 ; 3fd
key_output ' '
;
;
;
csl_load 'SHAKE26E-3'

Binary file not shown.

377
Storage/Automation/CSL.cpp Normal file

@ -0,0 +1,377 @@
//
// CSL.cpp
// Clock Signal
//
// Created by Thomas Harte on 12/06/2024.
// Copyright © 2024 Thomas Harte. All rights reserved.
//
#include "CSL.hpp"
#include <cctype>
#include <fstream>
#include <sstream>
#include <unordered_map>
#include <set>
#include "../../Machines/AmstradCPC/Keyboard.hpp"
using namespace Storage::Automation;
namespace {
bool append_typed(std::vector<Storage::Automation::CSL::KeyEvent> &down, std::vector<Storage::Automation::CSL::KeyEvent> &up, std::istringstream &stream) {
const auto press = [&](uint16_t key) {
CSL::KeyEvent event;
event.key = key;
event.down = true;
down.push_back(event);
event.down = false;
up.push_back(event);
};
const auto shift = [&](uint16_t key) {
CSL::KeyEvent event;
event.key = AmstradCPC::Key::KeyShift;
event.down = true;
down.push_back(event);
press(key);
event.down = false;
up.push_back(event);
};
const auto next = stream.get();
if(stream.eof()) return false;
switch(next) {
default: throw CSL::InvalidArgument;
case '\'': return false;
case '}': return false;
case 'A': press(AmstradCPC::Key::KeyA); break;
case 'B': press(AmstradCPC::Key::KeyB); break;
case 'C': press(AmstradCPC::Key::KeyC); break;
case 'D': press(AmstradCPC::Key::KeyD); break;
case 'E': press(AmstradCPC::Key::KeyE); break;
case 'F': press(AmstradCPC::Key::KeyF); break;
case 'G': press(AmstradCPC::Key::KeyG); break;
case 'H': press(AmstradCPC::Key::KeyH); break;
case 'I': press(AmstradCPC::Key::KeyI); break;
case 'J': press(AmstradCPC::Key::KeyJ); break;
case 'K': press(AmstradCPC::Key::KeyK); break;
case 'L': press(AmstradCPC::Key::KeyL); break;
case 'M': press(AmstradCPC::Key::KeyM); break;
case 'N': press(AmstradCPC::Key::KeyN); break;
case 'O': press(AmstradCPC::Key::KeyO); break;
case 'P': press(AmstradCPC::Key::KeyP); break;
case 'Q': press(AmstradCPC::Key::KeyQ); break;
case 'R': press(AmstradCPC::Key::KeyR); break;
case 'S': press(AmstradCPC::Key::KeyS); break;
case 'T': press(AmstradCPC::Key::KeyT); break;
case 'U': press(AmstradCPC::Key::KeyU); break;
case 'V': press(AmstradCPC::Key::KeyV); break;
case 'W': press(AmstradCPC::Key::KeyW); break;
case 'X': press(AmstradCPC::Key::KeyX); break;
case 'Y': press(AmstradCPC::Key::KeyY); break;
case 'Z': press(AmstradCPC::Key::KeyZ); break;
case ' ': press(AmstradCPC::Key::KeySpace); break;
case '0': press(AmstradCPC::Key::Key0); break;
case '1': press(AmstradCPC::Key::Key1); break;
case '2': press(AmstradCPC::Key::Key2); break;
case '3': press(AmstradCPC::Key::Key3); break;
case '4': press(AmstradCPC::Key::Key4); break;
case '5': press(AmstradCPC::Key::Key5); break;
case '6': press(AmstradCPC::Key::Key6); break;
case '7': press(AmstradCPC::Key::Key7); break;
case '8': press(AmstradCPC::Key::Key8); break;
case '9': press(AmstradCPC::Key::Key9); break;
case '"': shift(AmstradCPC::Key::Key2); break;
case '\\': {
if(stream.peek() != '(') {
press(AmstradCPC::Key::KeyBackSlash);
break;
}
stream.get();
std::string name;
while(stream.peek() != ')') {
name.push_back(char(stream.get()));
}
stream.get();
static const std::unordered_map<std::string, uint16_t> names = {
{"ESC", AmstradCPC::Key::KeyEscape},
{"TAB", AmstradCPC::Key::KeyTab},
{"CAP", AmstradCPC::Key::KeyCapsLock},
{"SHI", AmstradCPC::Key::KeyShift},
{"CTR", AmstradCPC::Key::KeyControl},
{"COP", AmstradCPC::Key::KeyCopy},
{"CLR", AmstradCPC::Key::KeyClear},
{"DEL", AmstradCPC::Key::KeyDelete},
{"RET", AmstradCPC::Key::KeyReturn},
{"ENT", AmstradCPC::Key::KeyEnter},
{"ARL", AmstradCPC::Key::KeyLeft},
{"ARR", AmstradCPC::Key::KeyRight},
{"ARU", AmstradCPC::Key::KeyUp},
{"ARD", AmstradCPC::Key::KeyDown},
{"FN0", AmstradCPC::Key::KeyF0},
{"FN1", AmstradCPC::Key::KeyF1},
{"FN2", AmstradCPC::Key::KeyF2},
{"FN3", AmstradCPC::Key::KeyF3},
{"FN4", AmstradCPC::Key::KeyF4},
{"FN5", AmstradCPC::Key::KeyF5},
{"FN6", AmstradCPC::Key::KeyF6},
{"FN7", AmstradCPC::Key::KeyF7},
{"FN8", AmstradCPC::Key::KeyF8},
{"FN9", AmstradCPC::Key::KeyF9},
//TODO: { } \ ' KOF
};
const auto name_pair = names.find(name);
if(name_pair == names.end()) {
throw CSL::InvalidArgument;
}
press(name_pair->second);
} break;
case '{':
while(append_typed(down, up, stream));
break;
}
return true;
}
}
std::vector<CSL::Instruction> CSL::parse(const std::string &file_name) {
std::vector<Instruction> instructions;
std::ifstream file;
file.open(file_name);
using Type = Instruction::Type;
static const std::unordered_map<std::string, Type> keywords = {
{"csl_version", Type::Version},
{"reset", Type::Reset},
{"crtc_select", Type::CRTCSelect},
{"disk_insert", Type::DiskInsert},
{"disk_dir", Type::SetDiskDir},
{"tape_insert", Type::TapeInsert},
{"tape_dir", Type::SetTapeDir},
{"tape_play", Type::TapeInsert},
{"tape_stop", Type::TapeStop},
{"tape_rewind", Type::TapeRewind},
{"snapshot_load", Type::LoadSnapshot},
{"snapshot_dir", Type::SetSnapshotDir},
{"key_delay", Type::KeyDelay},
{"key_output", Type::KeyOutput},
{"key_from_file", Type::KeyFromFile},
{"wait", Type::Wait},
{"wait_driveonoff", Type::WaitDriveOnOff},
{"wait_ssm0000", Type::WaitSSM0000},
{"screenshot_name", Type::SetScreenshotName},
{"screenshot_dir", Type::SetScreenshotDir},
{"screenshot", Type::Screenshot},
{"snapshot_name", Type::SetSnapshotDir},
{"csl_load", Type::LoadCSL},
};
for(std::string line; std::getline(file, line); ) {
// Ignore comments and empty lines.
if(line.empty() || line[0] == ';') {
continue;
}
std::istringstream stream(line);
std::string keyword;
stream >> keyword;
// Second way for a line to be empty: purely whitespace.
if(keyword.empty()) {
continue;
}
const auto key_pair = keywords.find(keyword);
if(key_pair == keywords.end()) {
throw InvalidKeyword;
}
Instruction instruction;
instruction.type = key_pair->second;
// TODO: strings are encoded specially in order to capture whitespace.
// They're surrounded in single quotes with some special keys escaped.
const auto require = [&](auto &&target) {
stream >> target;
if(stream.fail()) {
throw InvalidArgument;
}
};
switch(instruction.type) {
// Keywords with no argument.
case Type::TapePlay:
case Type::TapeStop:
case Type::TapeRewind:
case Type::WaitVsyncOnOff:
case Type::WaitSSM0000:
break;
// Keywords with a single string mandatory argument
// that can be directly captured as a string.
case Type::Version: {
std::string argument;
require(argument);
instruction.argument = argument;
} break;
// Keywords with a single string mandatory argument
// that is within quotes but otherwise directly usable
// as a string.
case Type::LoadCSL:
case Type::SetScreenshotDir:
case Type::SetScreenshotName:
case Type::SetSnapshotDir:
case Type::SetSnapshotName:
case Type::LoadSnapshot:
case Type::SetTapeDir:
case Type::TapeInsert:
case Type::SetDiskDir:
case Type::KeyFromFile: {
std::string argument;
char next;
stream >> next;
if(next != '\'') {
throw InvalidArgument;
}
while(true) {
next = static_cast<char>(stream.get());
if(stream.eof()) break;
// Take a bit of a random guess about what's escaped
// in regular string arguments.
if(next == '\\' && stream.peek() == '(') {
stream.get();
if(stream.peek() != '\'') {
argument.push_back('\\');
argument.push_back('(');
continue;
}
}
if(next == '\'') {
break;
}
argument.push_back(next);
}
instruction.argument = argument;
} break;
// Keywords with a single number mandatory argument.
case Type::WaitDriveOnOff:
case Type::Wait: {
uint64_t argument;
require(argument);
instruction.argument = argument;
} break;
// Miscellaneous:
case Type::Snapshot:
case Type::Screenshot: {
std::string vsync;
stream >> vsync;
if(stream.fail()) {
instruction.argument = ScreenshotOrSnapshot::Now;
break;
}
if(vsync != "vsync") {
throw InvalidArgument;
}
instruction.argument = ScreenshotOrSnapshot::WaitForVSync;
} break;
case Type::Reset: {
std::string type;
stream >> type;
if(!stream.fail()) {
if(type != "soft" && type != "hard") {
throw InvalidArgument;
}
instruction.argument = (type == "soft") ? Reset::Soft : Reset::Hard;
}
} break;
case Type::CRTCSelect: {
std::string type;
require(type);
static const std::set<std::string> allowed_types = {
"0", "1", "1A", "1B", "2", "3", "4",
};
if(allowed_types.find(type) == allowed_types.end()) {
throw InvalidArgument;
}
instruction.argument = static_cast<uint64_t>(std::stoi(type));
} break;
case Type::DiskInsert: {
std::string name;
require(name);
// Crop the assumed opening and closing quotes.
name.erase(name.end() - 1);
name.erase(name.begin());
DiskInsert argument;
if(name.size() == 1) {
argument.drive = toupper(name[0]) - 'A';
require(name);
}
argument.file = name;
instruction.argument = argument;
} break;
case Type::KeyOutput: {
std::vector<KeyEvent> argument;
char next;
stream >> next;
if(next != '\'') {
throw InvalidArgument;
}
std::vector<KeyEvent> down;
std::vector<KeyEvent> up;
while(append_typed(down, up, stream)) {
std::copy(down.begin(), down.end(), std::back_inserter(argument));
std::copy(up.begin(), up.end(), std::back_inserter(argument));
down.clear();
up.clear();
}
instruction.argument = argument;
} break;
case Type::KeyDelay: {
KeyDelay argument;
require(argument.press_delay);
require(argument.interpress_delay);
uint64_t carriage_return_delay;
stream >> carriage_return_delay;
if(!stream.fail()) {
argument.carriage_return_delay = carriage_return_delay;
}
instruction.argument = argument;
} break;
}
instructions.push_back(std::move(instruction));
}
return instructions;
}

@ -0,0 +1,93 @@
//
// CSL.hpp
// Clock Signal
//
// Created by Thomas Harte on 12/06/2024.
// Copyright © 2024 Thomas Harte. All rights reserved.
//
#pragma once
#include <cstdint>
#include <optional>
#include <string>
#include <variant>
#include <vector>
namespace Storage::Automation::CSL {
enum Reset {
Hard, Soft
};
struct DiskInsert {
int drive = 0;
std::string file;
};
enum ScreenshotOrSnapshot {
WaitForVSync, Now,
};
struct KeyDelay {
uint64_t press_delay;
uint64_t interpress_delay;
std::optional<uint64_t> carriage_return_delay;
};
struct KeyEvent {
bool down;
uint16_t key;
};
struct Instruction {
enum class Type {
Version,
Reset,
CRTCSelect,
LoadCSL,
DiskInsert,
SetDiskDir,
TapeInsert,
SetTapeDir,
TapePlay,
TapeStop,
TapeRewind,
SetSnapshotDir,
LoadSnapshot,
SetSnapshotName,
Snapshot,
KeyDelay,
KeyOutput,
KeyFromFile,
Wait,
WaitDriveOnOff,
WaitVsyncOnOff,
WaitSSM0000,
SetScreenshotName,
SetScreenshotDir,
Screenshot,
} type;
std::variant<
std::monostate,
DiskInsert,
Reset,
ScreenshotOrSnapshot,
KeyDelay,
std::string,
std::vector<KeyEvent>,
uint64_t
> argument;
};
enum Errors {
InvalidKeyword,
InvalidArgument,
};
std::vector<Instruction> parse(const std::string &file_name);
}