public override PCInstruction Execute()
        {
            var pos = firstArg.GetValue(Chip);

            if (pos > 2 || pos < 0)
            {
                return(PCInstruction.INCREMENT);
            }

            pos = 2 - pos;
            var acc        = Chip.ReadPort(Register.ACC);
            var isNegative = acc < 0;
            var accStr     = Math.Abs(acc).ToString();
            var newValue   = (secondArg.GetValue(Chip) % 10).ToString();

            accStr = accStr.PadLeft(3, '0');

            acc = int.Parse(accStr.Remove(pos, 1).Insert(pos, newValue));
            if (isNegative)
            {
                acc *= -1;
            }

            Chip.WritePort(Register.ACC, acc);
            return(PCInstruction.INCREMENT);
        }
Example #2
0
        public override PCInstruction Execute()
        {
            var acc = Chip.ReadPort(Register.ACC);

            Chip.WritePort(Register.ACC, acc * arg.GetValue(Chip));
            return(PCInstruction.INCREMENT);
        }
        public override PCInstruction Execute()
        {
            var val1 = firstArg.GetValue(Chip);
            var val2 = secondArg.GetValue(Chip);

            Chip.SetTestOutcome(val1 < val2 ? TestPrefix.POSITIVE : TestPrefix.NEGATIVE);
            return(PCInstruction.INCREMENT);
        }
Example #4
0
        public override PCInstruction Execute()
        {
            var pos = arg.GetValue(Chip);
            var acc = Chip.ReadPort(Register.ACC);

            if (pos < 3 || pos > -1)
            {
                Chip.WritePort(Register.ACC, (int)(acc / Math.Pow(10, pos) % 10));
            }
            return(PCInstruction.INCREMENT);
        }
        public override PCInstruction Execute()
        {
            var val1 = firstArg.GetValue(Chip);
            var val2 = secondArg.GetValue(Chip);

            if (val1 > val2)
            {
                Chip.SetTestOutcome(TestPrefix.POSITIVE);
            }
            else if (val1 < val2)
            {
                Chip.SetTestOutcome(TestPrefix.NEGATIVE);
            }
            else
            {
                Chip.SetTestOutcome(TestPrefix.NONE);
            }
            return(PCInstruction.INCREMENT);
        }
Example #6
0
        public override PCInstruction Execute()
        {
            if (!_initialized)
            {
                _sleepTime   = arg.GetValue(Chip);
                _initialized = true;
            }

            if (_sleepTime > 0)
            {
                _sleepTime--;
                Chip.IsSleeping = true;
                return(PCInstruction.NOTHING);
            }

            Chip.IsSleeping = false;
            _initialized    = false;
            return(PCInstruction.INCREMENT);
        }
        public override PCInstruction Execute()
        {
            if (cachedVal == -1000)
            {
                var val = src.GetValue(Chip);

                if (val == -1000)
                {
                    return(PCInstruction.NOTHING);
                }
                cachedVal = val;
            }


            var writeResponse = Chip.WritePort(dst.Register, cachedVal);

            if (writeResponse == WritePortResponse.WAITING || writeResponse == WritePortResponse.REGISTERED)
            {
                return(PCInstruction.NOTHING);
            }

            cachedVal = -1000;
            return(PCInstruction.INCREMENT);
        }