Ejemplo n.º 1
0
        public void TestJZZeroEnabled()
        {
            SignalBus     signals = new SignalBus();
            FlagBus       flagBus = new FlagBus();
            FlagsRegister flags   = new FlagsRegister(null, signals, flagBus);

            flags.Value = FlagsRegister.ZERO;
            Operation op = new JZ(null, signals, flags);

            signals.Reset();
            op.Step0();
            Assert.IsTrue(signals.MI);
            Assert.IsTrue(signals.CO);

            signals.Reset();
            op.Step1();
            Assert.IsTrue(signals.RO);
            Assert.IsTrue(signals.II);
            Assert.IsTrue(signals.CE);

            signals.Reset();
            op.Step2();
            Assert.IsTrue(signals.IO);
            Assert.IsTrue(signals.J);
        }
Ejemplo n.º 2
0
        public void StoresFlags()
        {
            SignalBus signals = new SignalBus();
            FlagBus   flagBus = new FlagBus();

            FlagsRegister flagsRegister = new FlagsRegister(null, signals, flagBus);

            flagBus.Carry = true;
            flagBus.Zero  = true;
            signals.FI    = true;

            flagsRegister.ReadFromBus();

            Assert.AreEqual(3, flagsRegister.Value);
        }
Ejemplo n.º 3
0
        public void FlagsRegisterInputs()
        {
            DataBus   bus     = new DataBus();
            FlagBus   flagBus = new FlagBus();
            SignalBus signals = new SignalBus();

            Register flags = new FlagsRegister(bus, signals, flagBus);

            flagBus.Carry = true;
            flagBus.Zero  = true;
            signals.FI    = true;

            flags.ReadFromBus();
            Assert.AreEqual(FlagsRegister.CARRY + FlagsRegister.ZERO, flags.Value);
        }
Ejemplo n.º 4
0
        public void SumRegisterOutputsSumOfAAndB()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();
            FlagBus   flagBus = new FlagBus();

            Register a   = new ARegister(bus, signals);
            Register b   = new BRegister(bus, signals);
            Register sum = new SumRegister(a, b, bus, signals, flagBus);

            a.Value = 200;
            b.Value = 100;

            signals.EO = true;
            sum.WriteToBus();

            Assert.AreEqual(44, bus.Value);
            Assert.IsTrue(flagBus.Carry);
        }
Ejemplo n.º 5
0
        public void SumRegisterOutputsSubstractionOfAAndB()
        {
            DataBus   bus     = new DataBus();
            SignalBus signals = new SignalBus();
            FlagBus   flagBus = new FlagBus();

            Register a   = new ARegister(bus, signals);
            Register b   = new BRegister(bus, signals);
            Register sum = new SumRegister(a, b, bus, signals, flagBus);

            a.Value = 166;
            b.Value = 166;

            signals.EO = true;
            signals.SU = true;
            sum.WriteToBus();

            Assert.AreEqual(0, bus.Value);
            Assert.IsTrue(flagBus.Zero);
        }
Ejemplo n.º 6
0
 public FlagsRegister(DataBus bus, SignalBus signals, FlagBus flagBus) : base(bus, signals)
 {
     this.flagBus = flagBus;
 }
Ejemplo n.º 7
0
 public SumRegister(Register aRegister, Register bRegister, DataBus bus, SignalBus signals, FlagBus flagBus) : base(bus, signals)
 {
     this.aRegister = aRegister;
     this.bRegister = bRegister;
     this.flagBus   = flagBus;
 }