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); }
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++; }
protected override void ExecuteV2(string register, string literal, TheCpu cpu) { var kk = cpu.GetLiteral(literal); cpu.SetRegister(register, kk); cpu.PC++; }
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++; }
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++; }
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++; }
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++; }