示例#1
0
        public void Ctor_InstantiatesModelAndCpu()
        {
            var uut = new SimulationModelBuilder();

            uut.Model.Should().NotBeNull();
            uut.Model.Cpu.Should().NotBeNull();
        }
示例#2
0
        public void AddCpuMemoryAndIoSpace_MemoryAndIoSpaceConnectsToCpu()
        {
            var uut = new SimulationModelBuilder();

            uut.AddCpuMemory();
            uut.AddCpuIoSpace();

            uut.Model.Memory.Should().NotBeNull();
            uut.Model.Memory.Address.IsConnected.Should().BeTrue();
            uut.Model.Memory.Data.IsConnected.Should().BeTrue();
            uut.Model.Memory.ChipEnable.IsConnected.Should().BeTrue();
            uut.Model.Memory.OutputEnable.IsConnected.Should().BeTrue();
            uut.Model.Memory.WriteEnable.IsConnected.Should().BeTrue();

            uut.Model.IoSpace.Should().NotBeNull();
            uut.Model.IoSpace.Address.IsConnected.Should().BeTrue();
            uut.Model.IoSpace.Data.IsConnected.Should().BeTrue();
            uut.Model.IoSpace.ChipEnable.IsConnected.Should().BeTrue();
            uut.Model.IoSpace.OutputEnable.IsConnected.Should().BeTrue();
            uut.Model.IoSpace.WriteEnable.IsConnected.Should().BeTrue();

            uut.Model.Cpu.Address.IsConnected.Should().BeTrue();
            uut.Model.Cpu.Data.IsConnected.Should().BeTrue();
            uut.Model.Cpu.IoRequest.IsConnected.Should().BeTrue();
            uut.Model.Cpu.Read.IsConnected.Should().BeTrue();
            uut.Model.Cpu.Write.IsConnected.Should().BeTrue();

            uut.Model.Address.Should().NotBeNull();
            uut.Model.Data.Should().NotBeNull();
        }
示例#3
0
        public void AddCpuClockGen_CpuClock_Connects()
        {
            var uut = new SimulationModelBuilder();

            uut.AddCpuClockGen();

            uut.Model.ClockGen.Should().NotBeNull();
            uut.Model.ClockGen.Output.IsConnected.Should().BeTrue();
            uut.Model.Cpu.Clock.IsConnected.Should().BeTrue();
        }
示例#4
0
        public void AddInputPort_CpuMemory_ConnectedAndAddedToModel()
        {
            var uut = new SimulationModelBuilder();

            uut.AddCpuMemory();
            var inputPort = uut.AddInputPort(0x10, "Test");

            uut.Model.Components.Should().HaveCount(3); // decoder/invertor/or
            uut.Model.InputPorts.Should().HaveCount(1);

            inputPort.Output.IsConnected.Should().BeTrue();
            inputPort.PortEnable.IsConnected.Should().BeTrue();
        }
示例#5
0
        public void AddInputPort_AddedToModel()
        {
            var uut = new SimulationModelBuilder();

            var name = "Test";

            uut.AddInputPort(new InputPort()
            {
                Name = name
            });

            uut.Model.InputPorts.Should().HaveCount(1);
            uut.Model.InputPorts[name].Should().NotBeNull();
        }
示例#6
0
        public void AddComponent_AddedToModel()
        {
            var uut = new SimulationModelBuilder();

            var name = "Test";

            uut.AddComponent(new InvertorGate()
            {
                Name = name
            });

            uut.Model.Components.Should().HaveCount(1);
            uut.Model.Components[name].Should().NotBeNull();
        }
示例#7
0
        protected SimulationModel CreateModel(string file)
        {
            var builder = new SimulationModelBuilder();

            builder.AddCpuClockGen();
            builder.AddCpuMemory();
            builder.AddOutputPort(0x20, "ConsoleOut");
            //builder.AddLogicAnalyzer();

            var bytes = LoadFile(file);

            builder.Model.Memory.Write(bytes);

            return(builder.Model);
        }
示例#8
0
        protected SimulationModelBuilder CreateModelBuilder(string file, ushort bss = 0x1000)
        {
            var builder = new SimulationModelBuilder();

            builder.AddCpuClockGen();
            builder.AddCpuMemory();

            var bytes = LoadFile(file);

            builder.Model.Memory.Write(bytes);

            if (bss > 0)
            {
                builder.Model.Memory.Fill(bss, new BusData8(0), bytes.Length);
            }

            return(builder);
        }
示例#9
0
        public void AddInputPort_InitialState_IsPropegated()
        {
            var uut = new SimulationModelBuilder();

            uut.AddCpuMemory();
            ((IDirectMemoryAccess <BusData8>)uut.Model.Memory)[0] = new BusData8(0); // nop
            uut.AddCpuClockGen();
            var inputPort = uut.AddInputPort(0x10, "Test");

            uut.AddLogicAnalyzer();

            inputPort.DataBuffer.Write(new BusData8(0xFF));

            uut.Model.ClockGen.SquareWave(4);

            Console.WriteLine(uut.Model.LogicAnalyzer.ToWaveJson());

            inputPort.DataBuffer.Read().ToByte().Should().Be(0xFF);
        }
        private SimulationModel ExecuteTest(OpcodeByte ob, Func <Zim80.CpuZ80.CpuZ80, int> preTest)
        {
            var builder = new SimulationModelBuilder();

            builder.AddCpuClockGen();
            builder.AddCpuMemory();
            builder.AddLogicAnalyzer();

            builder.Model.Memory.Write(
                new byte[] { 0xED, ob.Value, 0, 0, Value1, Value2, Value2, Value1, 0, 0, 0, 0, 0, 0, 0, 0 }
                );

            builder.Model.Cpu.FillRegisters();
            int cycles = preTest(builder.Model.Cpu);

            builder.Model.ClockGen.SquareWave(cycles);

            Console.WriteLine(builder.Model.LogicAnalyzer.ToWaveJson());

            return(builder.Model);
        }