Esempio n. 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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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();
        }
Esempio n. 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);
        }
Esempio n. 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);
        }
Esempio n. 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];
        }
Esempio n. 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();
        }