cpu adder

by Richard Hunter

HTML

based on https://www.youtube.com/watch?v=VBDoT8o4q00

JavaScript

function halfAdder(inputA, inputB) {

    var a = OR(inputA, inputB);
    var b = NAND(inputA, inputB)

    return AND(a, b);
}

function adder(carryOn, inputA, inputB) {

    var a = halfAdder(inputA, inputB);
    var c = AND(inputA, inputB);

    var output = halfAdder(carryOn, a);

    var b = AND(carryOn, a)

    var carryOn = OR(b, c);

    return {
        output: output,
        carryOn: carryOn
    };
}

halfAdder(1, 1);

function AND(inputA, inputB) {
    return +(inputA && inputB);
}

function OR(inputA, inputB) {
    return inputA || inputB;
}

function NOT(input) {
    return !input;
}

function NAND(inputA, inputB) {
    return NOT(AND(inputA, inputB));
}

var operand1 = [1, 1, 0, 1, 1, 0, 1, 1];

var operand2 = [0, 0, 1, 0, 0, 1, 0, 0];

function add(op1, op2) {

    var carryOn = 0;
    var result = [];

    var i = operand1.length;
    while (i--) {
        var inputA = operand1[i];
        var inputB = operand2[i];

        var tempResult = adder(carryOn, inputA, inputB);

        carryOn = tempResult.carryOn;
        result.unshift(tempResult.output);
    }
    return result;

}

console.log(add(operand1, operand2));