コード例 #1
0
ファイル: InvertorGateTest.cs プロジェクト: DualBrain/Zim80
        public void Write_PosEdge_NegEdge()
        {
            var uut    = new InvertorGate();
            var input  = uut.Input.CreateConnection();
            var output = uut.Output.CreateConnection();

            input.Write(DigitalLevel.PosEdge);

            output.Level.Should().Be(DigitalLevel.NegEdge);
        }
コード例 #2
0
ファイル: InvertorGateTest.cs プロジェクト: DualBrain/Zim80
        public void Write_Low_High()
        {
            var uut    = new InvertorGate();
            var input  = uut.Input.CreateConnection();
            var output = uut.Output.CreateConnection();

            input.Write(DigitalLevel.Low);

            output.Level.Should().Be(DigitalLevel.High);
        }
コード例 #3
0
ファイル: LogicTest.cs プロジェクト: obiwanjacobi/Zim80
        public void BusDecoderInvertorOr_DecodeOr_OutputActiveWhenEnabled()
        {
            const byte Value = 0x10;

            var decoder = new BusDecoder("decoder");

            decoder.AddValue(Value);
            decoder.Input.ConnectTo(new Bus <BusData8>("bus"));
            var busInput = decoder.Input.CreateConnection();

            busInput.IsEnabled = true;

            var invertor = new InvertorGate()
            {
                Name = "inv"
            };

            invertor.Input.ConnectTo(decoder.Output);

            var or = new OrGate()
            {
                Name = "or"
            };

            or.AddInput().ConnectTo(invertor.Output);
            var enable = or.AddInput().CreateConnection();

            enable.Write(DigitalLevel.High);

            var output = or.Output.CreateConnection();

            busInput.Write(new BusData8(Value));
            decoder.Output.Level.Should().Be(DigitalLevel.High);
            invertor.Output.Level.Should().Be(DigitalLevel.Low);
            output.DigitalSignal.Level.Should().Be(DigitalLevel.High);

            enable.Write(DigitalLevel.Low);
            output.DigitalSignal.Level.Should().Be(DigitalLevel.Low);
        }
コード例 #4
0
        public InputPort AddInputPort(Bus address, Bus data, ushort ioAddress, string name = null)
        {
            if (name == null)
            {
                name = string.Empty;
            }

            var decoder = new BusDecoder(address, name + "-InputAddressDecoder");

            decoder.AddValue(ioAddress);
            AddComponent(decoder);

            var invertor = new InvertorGate()
            {
                Name = name + "-InAddressDecodeInvertor"
            };

            AddComponent(invertor);
            decoder.Output.ConnectTo(invertor.Input);

            var or = new OrGate()
            {
                Name = name + "-InPortEnableIO"
            };

            or.AddInput().ConnectTo(Model.Cpu.IoRequest);
            or.AddInput().ConnectTo(Model.Cpu.Read);
            or.AddInput().ConnectTo(invertor.Output);
            AddComponent(or);

            var inputPort = new InputPort(data, name);

            AddInputPort(inputPort);
            inputPort.PortEnable.ConnectTo(or.Output);

            return(inputPort);
        }
コード例 #5
0
 public void Invert_Floating_Floating()
 {
     InvertorGate.Invert(DigitalLevel.Floating).Should().Be(DigitalLevel.Floating);
 }
コード例 #6
0
 public void Invert_NegEdge_PosEdge()
 {
     InvertorGate.Invert(DigitalLevel.NegEdge).Should().Be(DigitalLevel.PosEdge);
 }
コード例 #7
0
 public void Invert_Low_High()
 {
     InvertorGate.Invert(DigitalLevel.Low).Should().Be(DigitalLevel.High);
 }
コード例 #8
0
ファイル: NorGate.cs プロジェクト: obiwanjacobi/Zim80
 protected override void OnInputChanged(DigitalSignalConsumer input, DigitalSignalProvider source)
 {
     Output.Write(InvertorGate.Invert(OrFunction()));
 }