Silo (Simulated Logic) is a C# framework which allows you to simulate logic systems in code. Silo has many built-in components like gates, ALU's, displays, etc. that will make simulating complex logic systems easier.
using Silo.Components;
using Silo.Gates;
var a = new Switch();
var b = new Switch();
var andGate = new AndGate();
a.AttachTo(andGate, 0);
b.AttachTo(andGate, 1);
a.State = true;
b.State = true;
Console.WriteLine(andGate);
using Silo.Components;
var input = new EightBitInput();
input.State = 200;
Console.WriteLine(input);
using Silo.Components;
using Silo.Devices;
var inputA = new EightBitInput();
var inputB = new EightBitInput();
var adder = new EightBitAdder();
inputA.AttachTo(adder);
inputB.AttachTo(adder, 8);
inputA.State = 10;
inputB.State = 5;
Console.WriteLine(adder);
var display = new EightBitDisplay();
adder.AttachToAll(display);
Console.WriteLine(display);
using Silo.Components;
using Silo.Memory;
using Silo.Util;
var flipFlop = new DFlipFlop();
var val = new Switch();
var clk = new Clock(Frequency.Parse("1 Hz"));
clk.AttachTo(flipFlop, 1);
val.State = true;
Console.WriteLine(flipFlop);
Thread.Sleep(2000);
Console.WriteLine(flipFlop);
val.State = false;
Console.WriteLine(flipFlop);
Thread.Sleep(2000);
Console.WriteLine(flipFlop);
using Silo.Components;
using Silo.Memory;
using Silo.Util;
var ctr = new Counter();
var reset = new Button();
var loadOrCount = new Switch();
var upOrDown = new Switch();
var countToggle = new Switch();
var clock = new Clock(1.kHz());
var input = new EightBitInput();
var display = new EightBitDisplay();
reset.AttachTo(ctr, 0);
loadOrCount.AttachTo(ctr, 1);
upOrDown.AttachTo(ctr, 2);
countToggle.AttachTo(ctr, 3);
clock.AttachTo(ctr, 4);
input.AttachTo(ctr, 5);
ctr.AttachRange(display, 1, 8);
loadOrCount.State = true;
input.State = 50;
Thread.Sleep(100); //Wait for clock to cycle
//Ctr output is now 50
loadOrCount.State = false;
upOrDown.State = true;
countToggle.State = true;
Thread.Sleep(100);
//Ctr output is now ~53
upOrDown.State = false;
Thread.Sleep(100);
//Ctr output is now 50