Example #1
0
        public override bool Verify(string[] lines, TheCpu cpu, out string error)
        {
            if (lines.Length > 0)
            {
                if (lines[0].ToUpper() != "CONSTANT")
                {
                    error = "Невалидна инструкция";
                    return(false);
                }
            }

            if (lines.Length > 1)
            {
                if (!lines[1].EndsWith(","))
                {
                    error = "Липсваща запетайка";
                    return(true);
                }
            }

            if (lines.Length == 3)
            {
                if (cpu.ValidLiteral(lines[2]))
                {
                    // CONSTANT literal, kk
                    var name = lines[1].Remove(lines[1].Length - 1).ToUpper();

                    if (cpu.Literals.ContainsKey(name))
                    {
                        cpu.Literals[name] = cpu.GetLiteral(lines[2]);
                    }
                    else
                    {
                        cpu.Literals.Add(name, cpu.GetLiteral(lines[2]));
                    }

                    error = null;
                    return(true);
                }
                else
                {
                    error = "Вторият аргумент на инструкцията трябва да е литерал";
                    return(true);
                }
            }

            error = "Невалидна инструкция";
            return(false);
        }
Example #2
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var sX = cpu.GetRegister(register);
            var kk = cpu.GetLiteral(literal);

            cpu.WriteRAM(kk, sX);
            cpu.PC++;
        }
Example #3
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var kk = cpu.GetLiteral(literal);

            cpu.SetRegister(register, kk);

            cpu.PC++;
        }
Example #4
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var sX = cpu.GetRegister(register);
            var kk = cpu.GetLiteral(literal);

            var r = (byte)(sX & kk);

            cpu.ZERO  = sX == kk;
            cpu.CARRY = sX > kk;
            cpu.PC++;
        }
Example #5
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var sX = cpu.GetRegister(register);
            var kk = cpu.GetLiteral(literal);

            var r = (byte)((sX - kk) % 256);

            cpu.SetRegister(register, r);
            cpu.ZERO  = ((sX - kk) == 0);
            cpu.CARRY = ((sX - kk) < 0);
            cpu.PC++;
        }
Example #6
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var sX = cpu.GetRegister(register);
            var kk = cpu.GetLiteral(literal);

            var CARRY = (cpu.CARRY ? 1 : 0);
            var r     = (byte)((sX + kk + CARRY) % 256);

            cpu.SetRegister(register, r);
            cpu.ZERO  = (r == 0);
            cpu.CARRY = ((sX + kk + CARRY) > 0xFF);
            cpu.PC++;
        }
Example #7
0
        protected override void ExecuteV2(string register, string literal, TheCpu cpu)
        {
            var sX = cpu.GetRegister(register);
            var kk = cpu.GetLiteral(literal);

            var r = (byte)(sX & kk);

            var bitCount = 0;

            if ((r & 1) == 1)
            {
                bitCount++;
            }
            if ((r & 2) == 2)
            {
                bitCount++;
            }
            if ((r & 4) == 4)
            {
                bitCount++;
            }
            if ((r & 8) == 8)
            {
                bitCount++;
            }
            if ((r & 16) == 16)
            {
                bitCount++;
            }
            if ((r & 32) == 32)
            {
                bitCount++;
            }
            if ((r & 64) == 64)
            {
                bitCount++;
            }
            if ((r & 128) == 128)
            {
                bitCount++;
            }

            cpu.ZERO  = (r == 0);
            cpu.CARRY = (bitCount % 2) == 1;
            cpu.PC++;
        }