public static Byte2 Subtract(Byte2 a, Byte2 b) { var inverted = Gates.Invert16(b); var incremented = Increment(inverted); return(AddByte2(a, incremented, false).Low); }
public static Byte2 Do(bool zero, bool negate, Byte2 data) { var selectZero = Select16.Do(zero, new Byte2(0), data); var selectNegate = Select16.Do(negate, Gates.Invert16(selectZero), selectZero); return(selectNegate); }
public static Byte2 Do(InstructionDecoder.Operation operation, Byte2 dataX, Byte2 dataY) { var transformedDataX = UnaryArithmeticLogicUnit.Do(operation.zx, operation.nx, dataX); var transformedDataY = UnaryArithmeticLogicUnit.Do(operation.zy, operation.ny, dataY); var and = Gates.And16(transformedDataX, transformedDataY); var add = Arithmetics.AddByte2(transformedDataX, transformedDataY, false); var selected = Select16.Do(operation.Function, add.Low, and); var inverted = Gates.Invert16(selected); var output = Select16.Do(operation.NegateOutput, inverted, selected); return(output); }