Not16.hdl
/**
* 16-bit Not:
* for i=0..15: out[i] = not in[i]
*/
CHIP Not16 {
IN in[16];
OUT out[16];
PARTS:
Not(in=in[0],out=out[0]);
Not(in=in[1],out=out[1]);
Not(in=in[2],out=out[2]);
Not(in=in[3],out=out[3]);
Not(in=in[4],out=out[4]);
Not(in=in[5],out=out[5]);
Not(in=in[6],out=out[6]);
Not(in=in[7],out=out[7]);
Not(in=in[8],out=out[8]);
Not(in=in[9],out=out[9]);
Not(in=in[10],out=out[10]);
Not(in=in[11],out=out[11]);
Not(in=in[12],out=out[12]);
Not(in=in[13],out=out[13]);
Not(in=in[14],out=out[14]);
Not(in=in[15],out=out[15]);
}
Or16.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Or16.hdl
/**
* 16-bit bitwise Or:
* for i = 0..15 out[i] = (a[i] or b[i])
*/
CHIP Or16 {
IN a[16], b[16];
OUT out[16];
PARTS:
Or(a=a[0],b=b[0],out=out[0]);
Or(a=a[1],b=b[1],out=out[1]);
Or(a=a[2],b=b[2],out=out[2]);
Or(a=a[3],b=b[3],out=out[3]);
Or(a=a[4],b=b[4],out=out[4]);
Or(a=a[5],b=b[5],out=out[5]);
Or(a=a[6],b=b[6],out=out[6]);
Or(a=a[7],b=b[7],out=out[7]);
Or(a=a[8],b=b[8],out=out[8]);
Or(a=a[9],b=b[9],out=out[9]);
Or(a=a[10],b=b[10],out=out[10]);
Or(a=a[11],b=b[11],out=out[11]);
Or(a=a[12],b=b[12],out=out[12]);
Or(a=a[13],b=b[13],out=out[13]);
Or(a=a[14],b=b[14],out=out[14]);
Or(a=a[15],b=b[15],out=out[15]);
}
And16.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/And16.hdl
/**
* 16-bit bitwise And:
* for i = 0..15: out[i] = (a[i] and b[i])
*/
CHIP And16 {
IN a[16], b[16];
OUT out[16];
PARTS:
Nand(a=a[0],b=b[0],out=x0);
Not(in=x0,out=out[0]);
Nand(a=a[1],b=b[1],out=x1);
Not(in=x1,out=out[1]);
Nand(a=a[2],b=b[2],out=x2);
Not(in=x2,out=out[2]);
Nand(a=a[3],b=b[3],out=x3);
Not(in=x3,out=out[3]);
Nand(a=a[4],b=b[4],out=x4);
Not(in=x4,out=out[4]);
Nand(a=a[5],b=b[5],out=x5);
Not(in=x5,out=out[5]]);
Nand(a=a[6],b=b[6],out=x6);
Not(in=x6,out=out[6]);
Nand(a=a[7],b=b[7],out=x7);
Not(in=x7,out=out[7]);
Nand(a=a[8],b=b[8],out=x8);
Not(in=x8,out=out[8]);
Nand(a=a[9],b=b[9],out=x9);
Not(in=x1,out=out[9]);
Nand(a=a[10],b=b[10],out=x10);
Not(in=x10,out=out[10]);
Nand(a=a[11],b=b[11],out=x11);
Not(in=x11,out=out[11]);
Nand(a=a[12],b=b[12],out=x12);
Not(in=x12,out=out[12]);
Nand(a=a[13],b=b[13],out=x13);
Not(in=x13,out=out[13]]);
Nand(a=a[14],b=b[14],out=x14);
Not(in=x14,out=out[14]);
Nand(a=a[15],b=b[15],out=x15);
Not(in=x15,out=out[15]);
}
DMux.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/DMux.hdl
/**
* Demultiplexor:
* {a, b} = {in, 0} if sel == 0
* {0, in} if sel == 1
*/
CHIP DMux {
IN in, sel;
OUT a, b;
PARTS:
Not(in=sel,out=notsel);
And(a=in,b=notsel,out=a);
And(a=in,b=sel,out=b);
}
Mux.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Mux.hdl
/**
* Multiplexor:
* out = a if sel == 0
* b otherwise
*/
CHIP Mux {
IN a, b, sel;
OUT out;
PARTS:
Not(in=sel,out=notsel);
And(a=a,b=notsel,out=x);
And(a=b,b=sel,out=y);
Or(a=x,b=y,out=out);
}
Xor.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Xor.hdl
/**
* Exclusive-or gate:
* out = not (a == b)
*/
CHIP Xor {
IN a, b;
OUT out;
PARTS:
Or(a=a,b=b,out=aorb);
Not(in=a, out=nota);
Not(in=b, out=notb);
Or(a=nota,b=notb,out=x);
And(a=aorb,b=x, out=out);
}
Or.hdl
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Or.hdl
/**
* Or gate:
* out = 1 if (a == 1 or b == 1)
* 0 otherwise
*/
CHIP Or {
IN a, b;
OUT out;
PARTS:
Not(in=a, out=nota);
Not(in=b, out=notb);
And(a=nota, b=notb, out=x);
Not(in=x, out=out);
}