From 48f3aaea8b9553cf22d3505e5ff7562b8b022c8b Mon Sep 17 00:00:00 2001 From: klemek Date: Thu, 17 Dec 2020 17:49:28 +0100 Subject: [PATCH] more gates definition --- .../Workspace/Gates/GateDefinitionList.cs | 656 +++++++++++------- Assets/Scripts/Workspace/Gates/GateType.cs | 11 +- 2 files changed, 412 insertions(+), 255 deletions(-) diff --git a/Assets/Scripts/Workspace/Gates/GateDefinitionList.cs b/Assets/Scripts/Workspace/Gates/GateDefinitionList.cs index 2222f42..09c7d81 100755 --- a/Assets/Scripts/Workspace/Gates/GateDefinitionList.cs +++ b/Assets/Scripts/Workspace/Gates/GateDefinitionList.cs @@ -2,299 +2,447 @@ namespace UntitledLogicGame.Workspace.Gates { - #region 000 - Technical + #region 000 - Technical - internal class NoneGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { }; - public override string[] Outputs { get; } = new string[] { }; - internal override Dictionary TruthTable => EmptyTruthTable; - } + internal class NoneGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { }; + public override string[] Outputs { get; } = new string[] { }; + internal override Dictionary TruthTable => EmptyTruthTable; + } - #endregion + #endregion - #region 100 - Special + #region 100 - Special - #endregion + #endregion - #region 200 - Basic + #region 200 - Basic - internal class BufferGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false ), new OutputState( false ) }, - { new InputState( true ), new OutputState( true ) }, - }; - } + internal class BufferGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false ), new OutputState( false ) }, + { new InputState( true ), new OutputState( true ) }, + }; + } - internal class ANDGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( false ) }, - { new InputState( false, true ), new OutputState( false ) }, - { new InputState( true, false ), new OutputState( false ) }, - { new InputState( true, true ), new OutputState( true ) }, - }; - } + internal class ANDGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( false ) }, + { new InputState( false, true ), new OutputState( false ) }, + { new InputState( true, false ), new OutputState( false ) }, + { new InputState( true, true ), new OutputState( true ) }, + }; + } - internal class ORGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( false ) }, - { new InputState( false, true ), new OutputState( true ) }, - { new InputState( true, false ), new OutputState( true ) }, - { new InputState( true, true ), new OutputState( true ) }, - }; - } + internal class ORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( false ) }, + { new InputState( false, true ), new OutputState( true ) }, + { new InputState( true, false ), new OutputState( true ) }, + { new InputState( true, true ), new OutputState( true ) }, + }; + } - internal class XORGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( false ) }, - { new InputState( false, true ), new OutputState( true ) }, - { new InputState( true, false ), new OutputState( true ) }, - { new InputState( true, true ), new OutputState( false ) }, - }; - } + internal class XORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( false ) }, + { new InputState( false, true ), new OutputState( true ) }, + { new InputState( true, false ), new OutputState( true ) }, + { new InputState( true, true ), new OutputState( false ) }, + }; + } - #endregion + #endregion - #region 300 - Inverted Basic + #region 300 - Inverted Basic - internal class NOTGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false ), new OutputState( true ) }, - { new InputState( true ), new OutputState( false ) }, - }; - } + internal class NOTGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false ), new OutputState( true ) }, + { new InputState( true ), new OutputState( false ) }, + }; + } - internal class NANDGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( true ) }, - { new InputState( false, true ), new OutputState( true ) }, - { new InputState( true, false ), new OutputState( true ) }, - { new InputState( true, true ), new OutputState( false ) }, - }; - } + internal class NANDGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( true ) }, + { new InputState( false, true ), new OutputState( true ) }, + { new InputState( true, false ), new OutputState( true ) }, + { new InputState( true, true ), new OutputState( false ) }, + }; + } - internal class NORGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( true ) }, - { new InputState( false, true ), new OutputState( false ) }, - { new InputState( true, false ), new OutputState( false ) }, - { new InputState( true, true ), new OutputState( false ) }, - }; - } + internal class NORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( true ) }, + { new InputState( false, true ), new OutputState( false ) }, + { new InputState( true, false ), new OutputState( false ) }, + { new InputState( true, true ), new OutputState( false ) }, + }; + } - internal class XNORGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "A", "B" }; - public override string[] Outputs { get; } = new string[] { "Q" }; - internal override Dictionary TruthTable { get; } = new Dictionary - { - { new InputState( false, false ), new OutputState( true ) }, - { new InputState( false, true ), new OutputState( false ) }, - { new InputState( true, false ), new OutputState( false ) }, - { new InputState( true, true ), new OutputState( true ) }, - }; - } + internal class XNORGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "Q" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( true ) }, + { new InputState( false, true ), new OutputState( false ) }, + { new InputState( true, false ), new OutputState( false ) }, + { new InputState( true, true ), new OutputState( true ) }, + }; + } - #endregion + #endregion - #region 400 - Latches + #region 400 - Latches - internal class SRLatchGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "S", "R" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "SR Latch"; - public new bool HasState => true; + internal class SRLatchGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "S", "R" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "SR Latch"; + public new bool HasState => true; - private bool _q; + private bool _q; - internal new OutputState Compute(InputState input) - { - var s = input[0]; - var r = input[1]; - if (r) // reset - _q = false; - else if (s) // set - _q = true; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var s = input[0]; + var r = input[1]; + if (r) // reset + _q = false; + else if (s) // set + _q = true; + return new OutputState(_q, !_q); + } + } - internal class JKLatchGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "J", "K" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "JK Latch"; - public new bool HasState => true; + internal class JKLatchGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "J", "K" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "JK Latch"; + public new bool HasState => true; - private bool _q; + private bool _q; - internal new OutputState Compute(InputState input) - { - var j = input[0]; - var k = input[1]; - if (k && j) // flip - _q = !_q; - else if (k) // reset - _q = false; - else if (j) // set - _q = true; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var j = input[0]; + var k = input[1]; + if (k && j) // flip + _q = !_q; + else if (k) // reset + _q = false; + else if (j) // set + _q = true; + return new OutputState(_q, !_q); + } + } - internal class DLatchGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "D", "E" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "D Latch"; - public new bool HasState => true; + internal class DLatchGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "D", "E" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "D Latch"; + public new bool HasState => true; - private bool _q; + private bool _q; - internal new OutputState Compute(InputState input) - { - var d = input[0]; - var e = input[1]; - if (e) // set - _q = d; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var d = input[0]; + var e = input[1]; + if (e) // set + _q = d; + return new OutputState(_q, !_q); + } + } - #endregion + #endregion - #region 500 - Flip-Flops + #region 500 - Flip-Flops - internal class SRFlipFlopGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "S", "R", "CLK" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "SR Flip-Flop"; - public new bool HasState => true; + internal class SRFlipFlopGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "S", "R", "CLK" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "SR Flip-Flop"; + public new bool HasState => true; - private bool _q; - private bool _lastClk; + private bool _q; + private bool _lastClk; - internal new OutputState Compute(InputState input) - { - var s = input[0]; - var r = input[1]; - var clk = input[2]; - if (clk && !_lastClk) // rising edge - if (r) // reset - _q = false; - else if (s) // set - _q = true; - _lastClk = clk; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var s = input[0]; + var r = input[1]; + var clk = input[2]; + if (clk && !_lastClk) // rising edge + if (r) // reset + _q = false; + else if (s) // set + _q = true; + _lastClk = clk; + return new OutputState(_q, !_q); + } + } - internal class JKFlipFlopGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "J", "K", "CLK" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "JK Flip-Flop"; - public new bool HasState => true; + internal class JKFlipFlopGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "J", "K", "CLK" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "JK Flip-Flop"; + public new bool HasState => true; - private bool _q; - private bool _lastClk; + private bool _q; + private bool _lastClk; - internal new OutputState Compute(InputState input) - { - var j = input[0]; - var k = input[1]; - var clk = input[2]; - if (clk && !_lastClk) // rising edge - if (k && j) // flip - _q = !_q; - else if (k) // reset - _q = false; - else if (j) // set - _q = true; - _lastClk = clk; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var j = input[0]; + var k = input[1]; + var clk = input[2]; + if (clk && !_lastClk) // rising edge + if (k && j) // flip + _q = !_q; + else if (k) // reset + _q = false; + else if (j) // set + _q = true; + _lastClk = clk; + return new OutputState(_q, !_q); + } + } - internal class DFlipFlopGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "D", "CLK" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "D Flip-Flop"; - public new bool HasState => true; + internal class DFlipFlopGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "D", "CLK" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "D Flip-Flop"; + public new bool HasState => true; - private bool _q; - private bool _lastClk; + private bool _q; + private bool _lastClk; - internal new OutputState Compute(InputState input) - { - var d = input[0]; - var clk = input[1]; - if (clk && !_lastClk) // rising edge - _q = d; - _lastClk = clk; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var d = input[0]; + var clk = input[1]; + if (clk && !_lastClk) // rising edge + _q = d; + _lastClk = clk; + return new OutputState(_q, !_q); + } + } - internal class TFlipFlopGate : GateDefinition - { - public override string[] Inputs { get; } = new string[] { "T", "CLK" }; - public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; - internal override Dictionary TruthTable => EmptyTruthTable; - public new string Name => "T Flip-Flop"; - public new bool HasState => true; + internal class TFlipFlopGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "T", "CLK" }; + public override string[] Outputs { get; } = new string[] { "Q", "Q̅" }; + internal override Dictionary TruthTable => EmptyTruthTable; + public new string Name => "T Flip-Flop"; + public new bool HasState => true; - private bool _q; - private bool _lastClk; + private bool _q; + private bool _lastClk; - internal new OutputState Compute(InputState input) - { - var t = input[0]; - var clk = input[1]; - if (clk && !_lastClk) // rising edge - if (t) // flip - _q = !_q; - _lastClk = clk; - return new OutputState(_q, !_q); - } - } + internal new OutputState Compute(InputState input) + { + var t = input[0]; + var clk = input[1]; + if (clk && !_lastClk) // rising edge + if (t) // flip + _q = !_q; + _lastClk = clk; + return new OutputState(_q, !_q); + } + } - #endregion + #endregion + + #region 600 - Combinational + + internal class HalfAddGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "S", "C" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( false, false ) }, + { new InputState( false, true ), new OutputState( true, false ) }, + { new InputState( true, false ), new OutputState( true, false ) }, + { new InputState( true, true ), new OutputState( false, true ) }, + }; + public new string Name => "Half Add."; + } + + internal class FullAddGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B", "Cɪ" }; + public override string[] Outputs { get; } = new string[] { "S", "Cᴏ" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false, false ), new OutputState( false, false ) }, + { new InputState( false, false, true ), new OutputState( true, false ) }, + { new InputState( false, true, false ), new OutputState( true, false ) }, + { new InputState( false, true, true ), new OutputState( false, true ) }, + { new InputState( true, false, false ), new OutputState( true, false ) }, + { new InputState( true, false, true ), new OutputState( false, true ) }, + { new InputState( true, true, false ), new OutputState( false, true ) }, + { new InputState( true, true, true ), new OutputState( true, true ) }, + }; + public new string Name => "Full Add."; + } + + internal class HalfSubGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B" }; + public override string[] Outputs { get; } = new string[] { "S", "C" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( false, false ) }, + { new InputState( false, true ), new OutputState( true, true ) }, + { new InputState( true, false ), new OutputState( true, false ) }, + { new InputState( true, true ), new OutputState( false, false ) }, + }; + public new string Name => "Half Sub."; + } + + internal class FullSubGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "A", "B", "Cɪ" }; + public override string[] Outputs { get; } = new string[] { "S", "Cᴏ" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false, false ), new OutputState( false, false ) }, + { new InputState( false, false, true ), new OutputState( true, true ) }, + { new InputState( false, true, false ), new OutputState( true, true ) }, + { new InputState( false, true, true ), new OutputState( false, true ) }, + { new InputState( true, false, false ), new OutputState( true, false ) }, + { new InputState( true, false, true ), new OutputState( false, false ) }, + { new InputState( true, true, false ), new OutputState( false, false ) }, + { new InputState( true, true, true ), new OutputState( true, true ) }, + }; + public new string Name => "Full Add."; + } + + internal class MuxGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "E", "S", "D₀", "D₁" }; + public override string[] Outputs { get; } = new string[] { "Y" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false, false, false ), new OutputState( false ) }, // => E=0 + { new InputState( false, false, false, true ), new OutputState( false ) }, // => E=0 + { new InputState( false, false, true, false ), new OutputState( false ) }, // => E=0 + { new InputState( false, false, true, true ), new OutputState( false ) }, // => E=0 + { new InputState( false, true, false, false ), new OutputState( false ) }, // => E=0 + { new InputState( false, true, false, true ), new OutputState( false ) }, // => E=0 + { new InputState( false, true, true, false ), new OutputState( false ) }, // => E=0 + { new InputState( false, true, true, true ), new OutputState( false ) }, // => E=0 + { new InputState( true, false, false, false ), new OutputState( false ) }, // => S=0 => Y=D₀=0 + { new InputState( true, false, false, true ), new OutputState( false ) }, // => S=0 => Y=D₀=0 + { new InputState( true, false, true, false ), new OutputState( true ) }, // => S=0 => Y=D₀=1 + { new InputState( true, false, true, true ), new OutputState( true ) }, // => S=0 => Y=D₀=1 + { new InputState( true, true, false, false ), new OutputState( false ) }, // => S=1 => Y=D₁=0 + { new InputState( true, true, false, true ), new OutputState( true ) }, // => S=1 => Y=D₁=1 + { new InputState( true, true, true, false ), new OutputState( false ) }, // => S=1 => Y=D₁=0 + { new InputState( true, true, true, true ), new OutputState( true ) }, // => S=1 => Y=D₁=1 + }; + } + + internal class DemuxGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "E", "S", "D" }; + public override string[] Outputs { get; } = new string[] { "Y₀", "Y₁" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false, false ), new OutputState( false, false ) }, // => E=0 + { new InputState( false, false, true ), new OutputState( false, false ) }, // => E=0 + { new InputState( false, true, false ), new OutputState( false, false ) }, // => E=0 + { new InputState( false, true, true ), new OutputState( false, false ) }, // => E=0 + { new InputState( true, false, false ), new OutputState( false, false ) }, // => S=0 => Y₀=D=0 + { new InputState( true, false, true ), new OutputState( true, false ) }, // => S=0 => Y₀=D=1 + { new InputState( true, true, false ), new OutputState( false, false ) }, // => S=1 => Y₁=D=0 + { new InputState( true, true, true ), new OutputState( false, true ) }, // => S=1 => Y₁=D=1 + }; + } + + internal class EncGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "D₀", "D₁" }; + public override string[] Outputs { get; } = new string[] { "Y₀", "Y₁", "Y₂", "Y₃" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false ), new OutputState( true, false, false, false ) }, // D̅₀D̅₁ + { new InputState( false, true ), new OutputState( false, true, false, false ) }, // D₀D̅₁ + { new InputState( true, false ), new OutputState( false, false, true, false ) }, // D̅₀D₁ + { new InputState( true, true ), new OutputState( false, false, false, true ) }, // D₀D₁ + }; + } + + internal class DecGate : GateDefinition + { + public override string[] Inputs { get; } = new string[] { "D₃", "D₂", "D₁", "D₀" }; + public override string[] Outputs { get; } = new string[] { "Y₀", "Y₁" }; + internal override Dictionary TruthTable { get; } = new Dictionary + { + { new InputState( false, false, false, false ), new OutputState( false, false ) }, // XX + { new InputState( false, false, false, true ), new OutputState( false, false ) }, // D̅₀D̅₁ + { new InputState( false, false, true, false ), new OutputState( true, true ) }, // D₀D̅₁ + { new InputState( false, false, true, true ), new OutputState( true, false ) }, // D₀D̅₁ + { new InputState( false, true, false, false ), new OutputState( false, true ) }, // D̅₀D₁ + { new InputState( false, true, false, true ), new OutputState( false, true ) }, // D̅₀D₁ + { new InputState( false, true, true, false ), new OutputState( false, true ) }, // D̅₀D₁ + { new InputState( false, true, true, true ), new OutputState( false, true ) }, // D̅₀D₁ + { new InputState( true, false, false, false ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, false, false, true ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, false, true, false ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, false, true, true ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, true, false, false ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, true, false, true ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, true, true, false ), new OutputState( true, true ) }, // D₀D₁ + { new InputState( true, true, true, true ), new OutputState( true, true ) }, // D₀D₁ + }; + } + + #endregion } diff --git a/Assets/Scripts/Workspace/Gates/GateType.cs b/Assets/Scripts/Workspace/Gates/GateType.cs index e00c8d6..0b0d57a 100755 --- a/Assets/Scripts/Workspace/Gates/GateType.cs +++ b/Assets/Scripts/Workspace/Gates/GateType.cs @@ -25,6 +25,15 @@ SRFlipFlop = 500, JKFlipFlop = 510, DFlipFlop = 520, - TFlipFlop = 530 + TFlipFlop = 530, + // 600 - Combinational + HalfAdd = 600, + FullAdd = 610, + HalSub = 620, + FullSub = 630, + Mux = 740, + Demux = 750, + Enc = 760, + Dec = 770 } }