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); }