public CrystalTimer(Quartz32768HzCrystal master, Scheduler scheduler, int timerNumber) { switch (timerNumber) { case 1: InterruptId = Calculator.InterruptId.CrystalTimer1; break; case 2: InterruptId = Calculator.InterruptId.CrystalTimer2; break; case 3: InterruptId = Calculator.InterruptId.CrystalTimer3; break; default: throw new ArgumentOutOfRangeException("timerNumber must be between 1 and 3"); } TimerNumber = timerNumber; MasterTimer = master; //Oscillation = new EventHandler(DoTick); Scheduler = scheduler; NextWtIncrement = new Scheduler.WallTimeEvent(); NextWtIncrement.Tag = "Crystal timer " + timerNumber.ToString() + " wall-time tick"; NextWtIncrement.Handler = new EventHandler <Scheduler.WallTimeEvent>(DoTickWt); NextScIncrement = new Scheduler.SystemClockEvent(); NextScIncrement.Tag = "Crystal timer " + timerNumber.ToString() + " clock-time tick"; NextScIncrement.Handler = new EventHandler <Scheduler.SystemClockEvent>(DoTickSc); //Scheduler.EnqueueRelativeEvent(NextWtIncrement, 1.0 / 32768); }
public Ti84PlusCSe() { Flash = new Flash4096K(); Ram = new Ram128K(); MemoryMapper = new MemoryMapperSE(); MemoryMapper.Cpu = Cpu; MemoryMapper.Flash = Flash; MemoryMapper.Ram = Ram; (Mapper).Master = this; Cpu.MemoryRead = new Z80Core.Z80Cpu.BusRead(MemoryMapper.BusRead); Cpu.MemoryWrite = new Z80Core.Z80Cpu.BusWrite(MemoryMapper.BusWrite); Cpu.IoPortRead = new Z80Core.Z80Cpu.BusRead(ReadPort); Cpu.IoPortWrite = new Z80Core.Z80Cpu.BusWrite(WritePort); Crystal = new Quartz32768HzCrystal(this); DBus = new DBusDummy(); CrystalTimer1 = new CrystalTimer(Crystal, Scheduler, 1); CrystalTimer2 = new CrystalTimer(Crystal, Scheduler, 2); CrystalTimer3 = new CrystalTimer(Crystal, Scheduler, 3); Apd = new ApdTimerSe(Scheduler, InterruptId.ApdTimer1, this, 1.0 / 512); PApd = new ApdTimerSe(Scheduler, InterruptId.ApdTimer2, this, 1.0 / 1024); }