Пример #1
0
        // 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
            };
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        protected async Task StartWithFloppy(string Path, ClockSpeed ClockSpeed)
        {
            InitComputer(true, ClockSpeed);
            computer.LoadFloppy(0, Path);
            await computer.StartAndAwait();

            await computer.Delay(20000);
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        protected void InitComputer(bool EnableFloppyController, ClockSpeed ClockSpeed = ClockSpeed.Unlimited)
        {
            var settings = new Settings()
            {
                ClockSpeed  = ClockSpeed,
                DiskEnabled = EnableFloppyController
            };

            InitComputer(settings);
        }
Пример #6
0
        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);
        }
Пример #7
0
 protected async Task StartToTrsdos(ClockSpeed ClockSpeed)
 {
     await StartWithFloppy(Storage.FILE_NAME_TRSDOS, ClockSpeed);
 }