コード例 #1
0
        public DirectedGraphNode Add(BusMasterSlave masterSlave, string ownerName = null)
        {
            if (!Visit(masterSlave) ||
                (!masterSlave.IsConnected && !masterSlave.Slave.IsConnected && !DisplayUnconnected))
            {
                return(FindNode(masterSlave));
            }

            var node = AddInternal((BusMaster)masterSlave, ownerName, SafeNetName(masterSlave));

            SetNodeMap(masterSlave, node);

            if (DisplayValues)
            {
                node.Description = masterSlave.Value.ToString() + "/" + masterSlave.Slave.Value.ToString();
            }

            if (masterSlave.Slave.IsConnected)
            {
                var bid = _idBuilder.NewId <Bus>(masterSlave.Slave.Bus.Name);
                _dgmlBuilder.AddLink(node.Id, bid);
            }

            return(node);
        }
コード例 #2
0
ファイル: CpuZ80.cs プロジェクト: DualBrain/Zim80
        public CpuZ80()
        {
            Clock = new DigitalSignalConsumer("CLK");

            Reset                = new DigitalSignalConsumer("RST");
            Interrupt            = new DigitalSignalConsumer("INT");
            NonMaskableInterrupt = new DigitalSignalConsumer("NMI");
            Wait = new DigitalSignalConsumer("WAIT");

            BusRequest     = new DigitalSignalConsumer("BREQ");
            BusAcknowledge = new DigitalSignalProvider("BACK");

            MemoryRequest = new DigitalSignalProvider("MREQ");
            IoRequest     = new DigitalSignalProvider("IORQ");
            Read          = new DigitalSignalProvider("RD");
            Write         = new DigitalSignalProvider("WR");

            MachineCycle1 = new DigitalSignalProvider("M1");
            Refresh       = new DigitalSignalProvider("RFSH");
            Halt          = new DigitalSignalProvider("HALT");

            Address = new BusMaster <BusData16>("Address");
            Data    = new BusMasterSlave <BusData8>("Data");

            // bond wires
            _die = new Die(
                Clock, Reset, Interrupt, NonMaskableInterrupt,
                Wait, BusRequest, BusAcknowledge,
                MemoryRequest, IoRequest, Read, Write,
                MachineCycle1, Refresh, Halt, Address, Data);
        }
コード例 #3
0
ファイル: CpuZ80.cs プロジェクト: obiwanjacobi/Zim80
        public CpuZ80()
        {
            Clock = new DigitalSignalConsumer("CLK");

            Reset                = new DigitalSignalConsumer("RST");
            Interrupt            = new DigitalSignalConsumer("INT");
            NonMaskableInterrupt = new DigitalSignalConsumer("NMI");
            Wait = new DigitalSignalConsumer("WAIT");

            BusRequest     = new DigitalSignalConsumer("BREQ");
            BusAcknowledge = new DigitalSignalProvider("BACK");

            MemoryRequest = new DigitalSignalProvider("MREQ");
            IoRequest     = new DigitalSignalProvider("IORQ");
            Read          = new DigitalSignalProvider("RD");
            Write         = new DigitalSignalProvider("WR");

            MachineCycle1 = new DigitalSignalProvider("M1");
            Refresh       = new DigitalSignalProvider("RFSH");
            Halt          = new DigitalSignalProvider("HALT");

            Address = new BusMaster <BusData16>("Address");
            Data    = new BusMasterSlave <BusData8>("Data");

            _execEngine = new ExecutionEngine(this);
            _registers  = new Registers();
            _alu        = new Alu(_registers);

            Initialize();
        }
コード例 #4
0
        public static Bus <T> CreateConnection <T>(this BusMasterSlave <T> ms1, BusMasterSlave <T> ms2, string busName = null)
            where T : BusData, new()
        {
            var bus = new Bus <T>(busName);

            ms1.ConnectTo(bus);
            ms2.ConnectTo(bus);

            return(bus);
        }
コード例 #5
0
        public void Write_LeftToRight()
        {
            var ms1 = new BusMasterSlave <BusData8>();
            var ms2 = new BusMasterSlave <BusData8>();

            var connection = ms1.CreateConnection(ms2);
            var value      = new BusData8(0x55);

            ms1.IsEnabled = true;
            ms1.Write(value);
            ms2.Slave.Value.Should().Be(value);
        }
コード例 #6
0
        public Memory()
        {
            ChipEnable = new DigitalSignalConsumer("CE");
            Address    = new BusSlave <AddressT>("Address");
            Data       = new BusMasterSlave <DataT>("Data");

            ChipEnable.OnChanged += ChipEnable_OnChanged;
            Address.OnChanged    += Address_OnChanged;
            Data.Slave.OnChanged += DataIn_OnChanged;

            long length = (long)Math.Pow(2, Address.Value.Width);

            _memory = new DataT[length];
        }
コード例 #7
0
        public Die(
            DigitalSignalConsumer clock,
            DigitalSignalConsumer reset,
            DigitalSignalConsumer interrupt,
            DigitalSignalConsumer nonMaskableInterrupt,
            DigitalSignalConsumer wait,
            DigitalSignalConsumer busRequest,
            DigitalSignalProvider busAcknowledge,
            DigitalSignalProvider memoryRequest,
            DigitalSignalProvider ioRequest,
            DigitalSignalProvider read,
            DigitalSignalProvider write,
            DigitalSignalProvider machineCycle1,
            DigitalSignalProvider refresh,
            DigitalSignalProvider halt,
            BusMaster <BusData16> addressBus,
            BusMasterSlave <BusData8> dataBus)
        {
            _clock                = clock;
            _reset                = reset;
            _interrupt            = interrupt;
            _nonMaskableInterrupt = nonMaskableInterrupt;
            _wait           = wait;
            _busRequest     = busRequest;
            _busAcknowledge = busAcknowledge;
            _memoryRequest  = memoryRequest;
            _ioRequest      = ioRequest;
            _read           = read;
            _write          = write;
            _machineCycle1  = machineCycle1;
            _refresh        = refresh;
            _halt           = halt;
            _addressBus     = addressBus;
            _dataBus        = dataBus;

            _execEngine = new ExecutionEngine(this);
            _registers  = new Registers();
            _alu        = new Alu(_registers);

            Initialize();
        }