public bool Evaluate(IConsoleRam ram, EvaluatorContext context) { if (Left == null) { return(false); } if (Right == null) { return(false); } var leftValue = Left.GetValue(ram, context); var rightValue = Right.GetValue(ram, context); if (context.AddValue.HasValue) { leftValue = context.AddValue.Value + leftValue; context.AddValue = null; } return(Operation switch { ConditionCompare.Equals => leftValue == rightValue, ConditionCompare.Greater => leftValue > rightValue, ConditionCompare.GreaterEquals => leftValue >= rightValue, ConditionCompare.Less => leftValue < rightValue, ConditionCompare.LessEquals => leftValue <= rightValue, ConditionCompare.NotEquals => leftValue != rightValue, _ => false });
public override int GetValue(IConsoleRam ram, EvaluatorContext context) { var current = _child.GetValue(ram, context); var result = _previousValue; _previousValue = current; return(result); }
public override int GetValue(IConsoleRam ram, EvaluatorContext context) { var current = _child.GetValue(ram, context); if (_previousValue != current) { _priorValue = _previousValue; } _previousValue = current; return(_priorValue); }
public override int GetValue(IConsoleRam ram, EvaluatorContext context) { return(_constValue); }
public abstract int GetValue(IConsoleRam ram, EvaluatorContext context);
public override int GetValue(IConsoleRam ram, EvaluatorContext context) { var effectiveAddress = Address; if (context.AddAddress.HasValue) { effectiveAddress += context.AddAddress.Value; context.AddAddress = null; } switch (Kind) { case MemoryAddressKind.Bit0: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 0)) >> 0); } case MemoryAddressKind.Bit1: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 1)) >> 1); } case MemoryAddressKind.Bit2: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 2)) >> 2); } case MemoryAddressKind.Bit3: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 3)) >> 3); } case MemoryAddressKind.Bit4: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 4)) >> 4); } case MemoryAddressKind.Bit5: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 5)) >> 5); } case MemoryAddressKind.Bit6: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 6)) >> 6); } case MemoryAddressKind.Bit7: { var value = ram.ReadInt8(effectiveAddress); return((value & (1 << 7)) >> 7); } case MemoryAddressKind.Lower4: { var value = ram.ReadInt8(effectiveAddress); return(value & 0x0F); } case MemoryAddressKind.Upper4: { var value = ram.ReadInt8(effectiveAddress); return((value & 0xF0) >> 4); } case MemoryAddressKind.Int8: { return(ram.ReadInt8(effectiveAddress)); } case MemoryAddressKind.Int16: { return(ram.ReadInt16(effectiveAddress)); } case MemoryAddressKind.Int24: { return((int)ram.ReadUInt24(effectiveAddress)); } case MemoryAddressKind.Int32: { return((int)ram.ReadUInt32(effectiveAddress)); } case MemoryAddressKind.BitCount: { var value = ram.ReadInt8(effectiveAddress); return(BitOperations.PopCount(value)); } default: break; } return(0); }