public void Clk() { if (Clock.IsHalted) { return; } signals.Reset(); Operation operation = GetOperation(Instruction.Value); operation.Clk(); InstructionCounter.Clk(); RAM.WriteToBus(); Instruction.WriteToBus(); ProgramCounter.WriteToBus(); MemoryAddress.WriteToBus(); Sum.WriteToBus(); A.WriteToBus(); B.WriteToBus(); Flags.WriteToBus(); Output.WriteToBus(); RAM.ReadFromBus(); Instruction.ReadFromBus(); ProgramCounter.ReadFromBus(); MemoryAddress.ReadFromBus(); Sum.ReadFromBus(); A.ReadFromBus(); B.ReadFromBus(); Flags.ReadFromBus(); Output.ReadFromBus(); if (signals.HLT) { Clock.IsHalted = true; } }