コード例 #1
0
 private void IncrementClock(int clocks = 1)
 {
     for (var i = 0; i < clocks; i++)
     {
         _totalClocks += InstructionSchema.FOUR_CYCLES;
         OnClockTick?.Invoke(InstructionSchema.FOUR_CYCLES);
     }
 }
コード例 #2
0
        private void WaitForNextClockTick()
        {
            if (_running)
            {
                if (_realTime)
                {
                    long currentTicks = _clock.ElapsedTicks;
                    long targetTicks  = currentTicks + _windowsTicksPerZ80Tick;
                    while (_clock.ElapsedTicks < targetTicks)
                    {
                        ;
                    }
                }

                OnClockTick?.Invoke(this, _executingInstructionPackage);
                _emulatedTStates++;
            }
        }
コード例 #3
0
        private bool disposedValue = false; // To detect redundant calls

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    timer.Elapsed -= Timer_Elapsed;
                    timer.Stop();
                    timer.Dispose();

                    foreach (var handler in OnClockTick.GetInvocationList())
                    {
                        OnClockTick -= (ClockTickHandler)handler;
                    }
                }

                disposedValue = true;
            }
        }
コード例 #4
0
 private void Timer_Elapsed(object sender, ElapsedEventArgs e)
 {
     _systemClockCounter++;
     OnClockTick?.Invoke(this, e);
 }
コード例 #5
0
 private async void OnTick(object sender, ElapsedEventArgs e)
 {
     await OnClockTick?.Invoke(e.SignalTime);
 }