// CONSTRUCTOR internal Clock(Computer Computer, Z80.Z80 Cpu, ITimer Timer, InterruptManager InterruptManager, ulong TicksPerSoundSample, Action SoundCallback) { InitTickMeasurement(Timer.TicksPerSecond); TickCount = 0; computer = Computer; cpu = Cpu; timer = Timer; intMgr = InterruptManager; ticksPerSoundSample = TicksPerSoundSample; soundCallback = SoundCallback; clockSpeed = ClockSpeed.Normal; nextRtcIrqTick = TICKS_PER_IRQ; ResetTriggers(); waitTrigger = new Trigger(null, null, TriggerLock: false, CanLatchBeforeEnabled: false) { Enabled = true }; }
/// <summary> /// Overwrite the clockspeed (see Settings.ClockSpeed for details) /// </summary> /// <param name="clockSpeed"></param> private void WriteClockSpeed(ClockSpeed clockSpeed) { byte speed; switch (clockSpeed) { default: case ClockSpeed.Default: speed = 3; break; case ClockSpeed.Slow: speed = 2; break; case ClockSpeed.Fast: speed = 6; break; case ClockSpeed.VeryFast: speed = 9; break; case ClockSpeed.SuperFast: speed = 18; break; } var addr = 0x00BC66D4; uint val = 0x240B0000 + (uint)speed; ReadWriteUtils.WriteToROM(addr, val); }
protected async Task StartWithFloppy(string Path, ClockSpeed ClockSpeed) { InitComputer(true, ClockSpeed); computer.LoadFloppy(0, Path); await computer.StartAndAwait(); await computer.Delay(20000); }
/// <summary> /// Overwrite the clockspeed (see Settings.ClockSpeed for details) /// </summary> /// <param name="clockSpeed"></param> private void WriteClockSpeed(ClockSpeed clockSpeed) { byte speed; short invertedModifier; switch (clockSpeed) { default: case ClockSpeed.Default: speed = 3; invertedModifier = -2; break; case ClockSpeed.VerySlow: speed = 1; invertedModifier = 0; break; case ClockSpeed.Slow: speed = 2; invertedModifier = -1; break; case ClockSpeed.Fast: speed = 6; invertedModifier = -4; break; case ClockSpeed.VeryFast: speed = 9; invertedModifier = -6; break; case ClockSpeed.SuperFast: speed = 18; invertedModifier = -12; break; } ResourceUtils.ApplyHack(Values.ModsDirectory + "fix-clock-speed"); var codeFileAddress = 0xB3C000; var hackAddressOffset = 0x8A674; var modificationOffset = 0x1B; ReadWriteUtils.WriteToROM(codeFileAddress + hackAddressOffset + modificationOffset, speed); var invertedModifierOffsets = new List <int> { 0xB1B8E, 0x7405E }; foreach (var offset in invertedModifierOffsets) { ReadWriteUtils.WriteToROM(codeFileAddress + offset, (ushort)invertedModifier); } }
protected void InitComputer(bool EnableFloppyController, ClockSpeed ClockSpeed = ClockSpeed.Unlimited) { var settings = new Settings() { ClockSpeed = ClockSpeed, DiskEnabled = EnableFloppyController }; InitComputer(settings); }
protected async Task StartToBasic(ClockSpeed ClockSpeed = ClockSpeed.Unlimited, bool HighSpeedTape = true) { InitComputer(false, ClockSpeed.Unlimited); await computer.StartAndAwait(); await computer.Delay(500); if (!HighSpeedTape) { await KeyPress(KeyCode.L, false, 500, 500); } else { await KeyPress(KeyCode.Return, false, 500, 500); } await KeyPress(KeyCode.Return, false, 500, 500); await computer.Delay(2000); }
protected async Task StartToTrsdos(ClockSpeed ClockSpeed) { await StartWithFloppy(Storage.FILE_NAME_TRSDOS, ClockSpeed); }