summaryrefslogtreecommitdiff
path: root/projects/01
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2022-08-16 11:54:23 +0800
committerFrederick Yin <fkfd@fkfd.me>2022-08-16 11:54:23 +0800
commit9542deeb483a00b6fabed7574720926ce97d7511 (patch)
tree0f2c1f72c03dd4693fd59df67544d2a4dddc5494 /projects/01
parent9c0cb1d1c32724fc95ac9548e4f8d873d3adaccc (diff)
Projects, 01-06 completed
Diffstat (limited to 'projects/01')
-rw-r--r--projects/01/And.cmp5
-rw-r--r--projects/01/And.hdl19
-rw-r--r--projects/01/And.out5
-rw-r--r--projects/01/And.tst29
-rw-r--r--projects/01/And16.cmp7
-rw-r--r--projects/01/And16.hdl32
-rw-r--r--projects/01/And16.tst39
-rw-r--r--projects/01/DMux.cmp5
-rw-r--r--projects/01/DMux.hdl20
-rw-r--r--projects/01/DMux.out5
-rw-r--r--projects/01/DMux.tst27
-rw-r--r--projects/01/DMux4Way.cmp9
-rw-r--r--projects/01/DMux4Way.hdl22
-rw-r--r--projects/01/DMux4Way.out9
-rw-r--r--projects/01/DMux4Way.tst43
-rw-r--r--projects/01/DMux8Way.cmp17
-rw-r--r--projects/01/DMux8Way.hdl26
-rw-r--r--projects/01/DMux8Way.out17
-rw-r--r--projects/01/DMux8Way.tst75
-rw-r--r--projects/01/Mux.cmp9
-rw-r--r--projects/01/Mux.hdl21
-rw-r--r--projects/01/Mux.out9
-rw-r--r--projects/01/Mux.tst49
-rw-r--r--projects/01/Mux16.cmp9
-rw-r--r--projects/01/Mux16.hdl33
-rw-r--r--projects/01/Mux16.out9
-rw-r--r--projects/01/Mux16.tst49
-rw-r--r--projects/01/Mux4Way16.cmp9
-rw-r--r--projects/01/Mux4Way16.hdl22
-rw-r--r--projects/01/Mux4Way16.out9
-rw-r--r--projects/01/Mux4Way16.tst49
-rw-r--r--projects/01/Mux8Way16.cmp17
-rw-r--r--projects/01/Mux8Way16.hdl28
-rw-r--r--projects/01/Mux8Way16.out17
-rw-r--r--projects/01/Mux8Way16.tst89
-rw-r--r--projects/01/Not.cmp3
-rw-r--r--projects/01/Not.hdl17
-rw-r--r--projects/01/Not.out0
-rw-r--r--projects/01/Not.tst17
-rw-r--r--projects/01/Not16.cmp6
-rw-r--r--projects/01/Not16.hdl33
-rw-r--r--projects/01/Not16.out6
-rw-r--r--projects/01/Not16.tst29
-rw-r--r--projects/01/Or.cmp5
-rw-r--r--projects/01/Or.hdl20
-rw-r--r--projects/01/Or.out5
-rw-r--r--projects/01/Or.tst29
-rw-r--r--projects/01/Or16.cmp7
-rw-r--r--projects/01/Or16.hdl32
-rw-r--r--projects/01/Or16.tst39
-rw-r--r--projects/01/Or8Way.cmp6
-rw-r--r--projects/01/Or8Way.hdl23
-rw-r--r--projects/01/Or8Way.out6
-rw-r--r--projects/01/Or8Way.tst29
-rw-r--r--projects/01/Xor.cmp5
-rw-r--r--projects/01/Xor.hdl21
-rw-r--r--projects/01/Xor.out5
-rw-r--r--projects/01/Xor.tst29
58 files changed, 1211 insertions, 0 deletions
diff --git a/projects/01/And.cmp b/projects/01/And.cmp
new file mode 100644
index 0000000..75e709a
--- /dev/null
+++ b/projects/01/And.cmp
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 0 |
+| 1 | 0 | 0 |
+| 1 | 1 | 1 |
diff --git a/projects/01/And.hdl b/projects/01/And.hdl
new file mode 100644
index 0000000..9b27f31
--- /dev/null
+++ b/projects/01/And.hdl
@@ -0,0 +1,19 @@
+// 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/And.hdl
+
+/**
+ * And gate:
+ * out = 1 if (a == 1 and b == 1)
+ * 0 otherwise
+ */
+
+CHIP And {
+ IN a, b;
+ OUT out;
+
+ PARTS:
+ Nand(a=a, b=b, out=nout);
+ Not(in=nout, out=out);
+}
diff --git a/projects/01/And.out b/projects/01/And.out
new file mode 100644
index 0000000..8199ca5
--- /dev/null
+++ b/projects/01/And.out
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 0 |
+| 1 | 0 | 0 |
+| 1 | 1 | 1 |
diff --git a/projects/01/And.tst b/projects/01/And.tst
new file mode 100644
index 0000000..7ace19d
--- /dev/null
+++ b/projects/01/And.tst
@@ -0,0 +1,29 @@
+// 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/And.tst
+
+load And.hdl,
+output-file And.out,
+compare-to And.cmp,
+output-list a%B3.1.3 b%B3.1.3 out%B3.1.3;
+
+set a 0,
+set b 0,
+eval,
+output;
+
+set a 0,
+set b 1,
+eval,
+output;
+
+set a 1,
+set b 0,
+eval,
+output;
+
+set a 1,
+set b 1,
+eval,
+output;
diff --git a/projects/01/And16.cmp b/projects/01/And16.cmp
new file mode 100644
index 0000000..32c8648
--- /dev/null
+++ b/projects/01/And16.cmp
@@ -0,0 +1,7 @@
+| a | b | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 |
+| 0000000000000000 | 1111111111111111 | 0000000000000000 |
+| 1111111111111111 | 1111111111111111 | 1111111111111111 |
+| 1010101010101010 | 0101010101010101 | 0000000000000000 |
+| 0011110011000011 | 0000111111110000 | 0000110011000000 |
+| 0001001000110100 | 1001100001110110 | 0001000000110100 |
diff --git a/projects/01/And16.hdl b/projects/01/And16.hdl
new file mode 100644
index 0000000..d5f3145
--- /dev/null
+++ b/projects/01/And16.hdl
@@ -0,0 +1,32 @@
+// 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:
+ And(a=a[0], b=b[0], out=out[0]);
+ And(a=a[1], b=b[1], out=out[1]);
+ And(a=a[2], b=b[2], out=out[2]);
+ And(a=a[3], b=b[3], out=out[3]);
+ And(a=a[4], b=b[4], out=out[4]);
+ And(a=a[5], b=b[5], out=out[5]);
+ And(a=a[6], b=b[6], out=out[6]);
+ And(a=a[7], b=b[7], out=out[7]);
+ And(a=a[8], b=b[8], out=out[8]);
+ And(a=a[9], b=b[9], out=out[9]);
+ And(a=a[10], b=b[10], out=out[10]);
+ And(a=a[11], b=b[11], out=out[11]);
+ And(a=a[12], b=b[12], out=out[12]);
+ And(a=a[13], b=b[13], out=out[13]);
+ And(a=a[14], b=b[14], out=out[14]);
+ And(a=a[15], b=b[15], out=out[15]);
+}
diff --git a/projects/01/And16.tst b/projects/01/And16.tst
new file mode 100644
index 0000000..c8921e7
--- /dev/null
+++ b/projects/01/And16.tst
@@ -0,0 +1,39 @@
+// 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.tst
+
+load And16.hdl,
+output-file And16.out,
+compare-to And16.cmp,
+output-list a%B1.16.1 b%B1.16.1 out%B1.16.1;
+
+set a %B0000000000000000,
+set b %B0000000000000000,
+eval,
+output;
+
+set a %B0000000000000000,
+set b %B1111111111111111,
+eval,
+output;
+
+set a %B1111111111111111,
+set b %B1111111111111111,
+eval,
+output;
+
+set a %B1010101010101010,
+set b %B0101010101010101,
+eval,
+output;
+
+set a %B0011110011000011,
+set b %B0000111111110000,
+eval,
+output;
+
+set a %B0001001000110100,
+set b %B1001100001110110,
+eval,
+output; \ No newline at end of file
diff --git a/projects/01/DMux.cmp b/projects/01/DMux.cmp
new file mode 100644
index 0000000..6982094
--- /dev/null
+++ b/projects/01/DMux.cmp
@@ -0,0 +1,5 @@
+| in | sel | a | b |
+| 0 | 0 | 0 | 0 |
+| 0 | 1 | 0 | 0 |
+| 1 | 0 | 1 | 0 |
+| 1 | 1 | 0 | 1 |
diff --git a/projects/01/DMux.hdl b/projects/01/DMux.hdl
new file mode 100644
index 0000000..9f49ec2
--- /dev/null
+++ b/projects/01/DMux.hdl
@@ -0,0 +1,20 @@
+// 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);
+}
diff --git a/projects/01/DMux.out b/projects/01/DMux.out
new file mode 100644
index 0000000..9a92ec0
--- /dev/null
+++ b/projects/01/DMux.out
@@ -0,0 +1,5 @@
+| in | sel | a | b |
+| 0 | 0 | 0 | 0 |
+| 0 | 1 | 0 | 0 |
+| 1 | 0 | 1 | 0 |
+| 1 | 1 | 0 | 1 |
diff --git a/projects/01/DMux.tst b/projects/01/DMux.tst
new file mode 100644
index 0000000..4adbc43
--- /dev/null
+++ b/projects/01/DMux.tst
@@ -0,0 +1,27 @@
+// 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.tst
+
+load DMux.hdl,
+output-file DMux.out,
+compare-to DMux.cmp,
+output-list in%B3.1.3 sel%B3.1.3 a%B3.1.3 b%B3.1.3;
+
+set in 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set in 1,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
diff --git a/projects/01/DMux4Way.cmp b/projects/01/DMux4Way.cmp
new file mode 100644
index 0000000..eac35c4
--- /dev/null
+++ b/projects/01/DMux4Way.cmp
@@ -0,0 +1,9 @@
+| in | sel | a | b | c | d |
+| 0 | 00 | 0 | 0 | 0 | 0 |
+| 0 | 01 | 0 | 0 | 0 | 0 |
+| 0 | 10 | 0 | 0 | 0 | 0 |
+| 0 | 11 | 0 | 0 | 0 | 0 |
+| 1 | 00 | 1 | 0 | 0 | 0 |
+| 1 | 01 | 0 | 1 | 0 | 0 |
+| 1 | 10 | 0 | 0 | 1 | 0 |
+| 1 | 11 | 0 | 0 | 0 | 1 |
diff --git a/projects/01/DMux4Way.hdl b/projects/01/DMux4Way.hdl
new file mode 100644
index 0000000..208c008
--- /dev/null
+++ b/projects/01/DMux4Way.hdl
@@ -0,0 +1,22 @@
+// 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/DMux4Way.hdl
+
+/**
+ * 4-way demultiplexor:
+ * {a, b, c, d} = {in, 0, 0, 0} if sel == 00
+ * {0, in, 0, 0} if sel == 01
+ * {0, 0, in, 0} if sel == 10
+ * {0, 0, 0, in} if sel == 11
+ */
+
+CHIP DMux4Way {
+ IN in, sel[2];
+ OUT a, b, c, d;
+
+ PARTS:
+ DMux(in=in, sel=sel[1], a=ab, b=cd);
+ DMux(in=ab, sel=sel[0], a=a, b=b);
+ DMux(in=cd, sel=sel[0], a=c, b=d);
+}
diff --git a/projects/01/DMux4Way.out b/projects/01/DMux4Way.out
new file mode 100644
index 0000000..9dd708f
--- /dev/null
+++ b/projects/01/DMux4Way.out
@@ -0,0 +1,9 @@
+| in | sel | a | b | c | d |
+| 0 | 00 | 0 | 0 | 0 | 0 |
+| 0 | 01 | 0 | 0 | 0 | 0 |
+| 0 | 10 | 0 | 0 | 0 | 0 |
+| 0 | 11 | 0 | 0 | 0 | 0 |
+| 1 | 00 | 1 | 0 | 0 | 0 |
+| 1 | 01 | 0 | 1 | 0 | 0 |
+| 1 | 10 | 0 | 0 | 1 | 0 |
+| 1 | 11 | 0 | 0 | 0 | 1 |
diff --git a/projects/01/DMux4Way.tst b/projects/01/DMux4Way.tst
new file mode 100644
index 0000000..6fbbb56
--- /dev/null
+++ b/projects/01/DMux4Way.tst
@@ -0,0 +1,43 @@
+// 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/DMux4Way.tst
+
+load DMux4Way.hdl,
+output-file DMux4Way.out,
+compare-to DMux4Way.cmp,
+output-list in%B2.1.2 sel%B2.2.2 a%B2.1.2 b%B2.1.2 c%B2.1.2 d%B2.1.2;
+
+set in 0,
+set sel %B00,
+eval,
+output;
+
+set sel %B01,
+eval,
+output;
+
+set sel %B10,
+eval,
+output;
+
+set sel %B11,
+eval,
+output;
+
+set in 1,
+set sel %B00,
+eval,
+output;
+
+set sel %B01,
+eval,
+output;
+
+set sel %B10,
+eval,
+output;
+
+set sel %B11,
+eval,
+output;
diff --git a/projects/01/DMux8Way.cmp b/projects/01/DMux8Way.cmp
new file mode 100644
index 0000000..375d44a
--- /dev/null
+++ b/projects/01/DMux8Way.cmp
@@ -0,0 +1,17 @@
+| in | sel | a | b | c | d | e | f | g | h |
+| 0 | 000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 101 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 000 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 001 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 010 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 011 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
+| 1 | 100 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
+| 1 | 101 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
+| 1 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
+| 1 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
diff --git a/projects/01/DMux8Way.hdl b/projects/01/DMux8Way.hdl
new file mode 100644
index 0000000..fd46745
--- /dev/null
+++ b/projects/01/DMux8Way.hdl
@@ -0,0 +1,26 @@
+// 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/DMux8Way.hdl
+
+/**
+ * 8-way demultiplexor:
+ * {a, b, c, d, e, f, g, h} = {in, 0, 0, 0, 0, 0, 0, 0} if sel == 000
+ * {0, in, 0, 0, 0, 0, 0, 0} if sel == 001
+ * etc.
+ * {0, 0, 0, 0, 0, 0, 0, in} if sel == 111
+ */
+
+CHIP DMux8Way {
+ IN in, sel[3];
+ OUT a, b, c, d, e, f, g, h;
+
+ PARTS:
+ DMux(in=in, sel=sel[2], a=ad, b=eh);
+ DMux(in=ad, sel=sel[1], a=ab, b=cd);
+ DMux(in=eh, sel=sel[1], a=ef, b=gh);
+ DMux(in=ab, sel=sel[0], a=a, b=b);
+ DMux(in=cd, sel=sel[0], a=c, b=d);
+ DMux(in=ef, sel=sel[0], a=e, b=f);
+ DMux(in=gh, sel=sel[0], a=g, b=h);
+}
diff --git a/projects/01/DMux8Way.out b/projects/01/DMux8Way.out
new file mode 100644
index 0000000..ebf9304
--- /dev/null
+++ b/projects/01/DMux8Way.out
@@ -0,0 +1,17 @@
+| in | sel | a | b | c | d | e | f | g | h |
+| 0 | 000 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 001 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 100 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 101 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 0 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 000 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 001 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 010 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
+| 1 | 011 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
+| 1 | 100 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
+| 1 | 101 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
+| 1 | 110 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
+| 1 | 111 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
diff --git a/projects/01/DMux8Way.tst b/projects/01/DMux8Way.tst
new file mode 100644
index 0000000..56d827e
--- /dev/null
+++ b/projects/01/DMux8Way.tst
@@ -0,0 +1,75 @@
+// 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/DMux8Way.tst
+
+load DMux8Way.hdl,
+output-file DMux8Way.out,
+compare-to DMux8Way.cmp,
+output-list in%B2.1.2 sel%B2.3.2 a%B2.1.2 b%B2.1.2 c%B2.1.2 d%B2.1.2 e%B2.1.2 f%B2.1.2 g%B2.1.2 h%B2.1.2;
+
+set in 0,
+set sel %B000,
+eval,
+output;
+
+set sel %B001,
+eval,
+output;
+
+set sel %B010,
+eval,
+output;
+
+set sel %B011,
+eval,
+output;
+
+set sel %B100,
+eval,
+output;
+
+set sel %B101,
+eval,
+output;
+
+set sel %B110,
+eval,
+output;
+
+set sel %B111,
+eval,
+output;
+
+set in 1,
+set sel %B000,
+eval,
+output;
+
+set sel %B001,
+eval,
+output;
+
+set sel %B010,
+eval,
+output;
+
+set sel %B011,
+eval,
+output;
+
+set sel %B100,
+eval,
+output;
+
+set sel %B101,
+eval,
+output;
+
+set sel %B110,
+eval,
+output;
+
+set sel %B111,
+eval,
+output;
diff --git a/projects/01/Mux.cmp b/projects/01/Mux.cmp
new file mode 100644
index 0000000..7a5cc5b
--- /dev/null
+++ b/projects/01/Mux.cmp
@@ -0,0 +1,9 @@
+| a | b | sel | out |
+| 0 | 0 | 0 | 0 |
+| 0 | 0 | 1 | 0 |
+| 0 | 1 | 0 | 0 |
+| 0 | 1 | 1 | 1 |
+| 1 | 0 | 0 | 1 |
+| 1 | 0 | 1 | 0 |
+| 1 | 1 | 0 | 1 |
+| 1 | 1 | 1 | 1 |
diff --git a/projects/01/Mux.hdl b/projects/01/Mux.hdl
new file mode 100644
index 0000000..7a27aa9
--- /dev/null
+++ b/projects/01/Mux.hdl
@@ -0,0 +1,21 @@
+// 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=maska);
+ And(a=b, b=sel, out=maskb);
+ Or(a=maska, b=maskb, out=out);
+}
diff --git a/projects/01/Mux.out b/projects/01/Mux.out
new file mode 100644
index 0000000..e4b51c6
--- /dev/null
+++ b/projects/01/Mux.out
@@ -0,0 +1,9 @@
+| a | b | sel | out |
+| 0 | 0 | 0 | 0 |
+| 0 | 0 | 1 | 0 |
+| 0 | 1 | 0 | 0 |
+| 0 | 1 | 1 | 1 |
+| 1 | 0 | 0 | 1 |
+| 1 | 0 | 1 | 0 |
+| 1 | 1 | 0 | 1 |
+| 1 | 1 | 1 | 1 |
diff --git a/projects/01/Mux.tst b/projects/01/Mux.tst
new file mode 100644
index 0000000..9b7afd9
--- /dev/null
+++ b/projects/01/Mux.tst
@@ -0,0 +1,49 @@
+// 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.tst
+
+load Mux.hdl,
+output-file Mux.out,
+compare-to Mux.cmp,
+output-list a%B3.1.3 b%B3.1.3 sel%B3.1.3 out%B3.1.3;
+
+set a 0,
+set b 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a 0,
+set b 1,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a 1,
+set b 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a 1,
+set b 1,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
diff --git a/projects/01/Mux16.cmp b/projects/01/Mux16.cmp
new file mode 100644
index 0000000..661ee67
--- /dev/null
+++ b/projects/01/Mux16.cmp
@@ -0,0 +1,9 @@
+| a | b | sel | out |
+| 0000000000000000 | 0000000000000000 | 0 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 1 | 0000000000000000 |
+| 0000000000000000 | 0001001000110100 | 0 | 0000000000000000 |
+| 0000000000000000 | 0001001000110100 | 1 | 0001001000110100 |
+| 1001100001110110 | 0000000000000000 | 0 | 1001100001110110 |
+| 1001100001110110 | 0000000000000000 | 1 | 0000000000000000 |
+| 1010101010101010 | 0101010101010101 | 0 | 1010101010101010 |
+| 1010101010101010 | 0101010101010101 | 1 | 0101010101010101 |
diff --git a/projects/01/Mux16.hdl b/projects/01/Mux16.hdl
new file mode 100644
index 0000000..f40906e
--- /dev/null
+++ b/projects/01/Mux16.hdl
@@ -0,0 +1,33 @@
+// 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/Mux16.hdl
+
+/**
+ * 16-bit multiplexor:
+ * for i = 0..15 out[i] = a[i] if sel == 0
+ * b[i] if sel == 1
+ */
+
+CHIP Mux16 {
+ IN a[16], b[16], sel;
+ OUT out[16];
+
+ PARTS:
+ Mux(a=a[0], b=b[0], sel=sel, out=out[0]);
+ Mux(a=a[1], b=b[1], sel=sel, out=out[1]);
+ Mux(a=a[2], b=b[2], sel=sel, out=out[2]);
+ Mux(a=a[3], b=b[3], sel=sel, out=out[3]);
+ Mux(a=a[4], b=b[4], sel=sel, out=out[4]);
+ Mux(a=a[5], b=b[5], sel=sel, out=out[5]);
+ Mux(a=a[6], b=b[6], sel=sel, out=out[6]);
+ Mux(a=a[7], b=b[7], sel=sel, out=out[7]);
+ Mux(a=a[8], b=b[8], sel=sel, out=out[8]);
+ Mux(a=a[9], b=b[9], sel=sel, out=out[9]);
+ Mux(a=a[10], b=b[10], sel=sel, out=out[10]);
+ Mux(a=a[11], b=b[11], sel=sel, out=out[11]);
+ Mux(a=a[12], b=b[12], sel=sel, out=out[12]);
+ Mux(a=a[13], b=b[13], sel=sel, out=out[13]);
+ Mux(a=a[14], b=b[14], sel=sel, out=out[14]);
+ Mux(a=a[15], b=b[15], sel=sel, out=out[15]);
+}
diff --git a/projects/01/Mux16.out b/projects/01/Mux16.out
new file mode 100644
index 0000000..d2e472e
--- /dev/null
+++ b/projects/01/Mux16.out
@@ -0,0 +1,9 @@
+| a | b | sel | out |
+| 0000000000000000 | 0000000000000000 | 0 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 1 | 0000000000000000 |
+| 0000000000000000 | 0001001000110100 | 0 | 0000000000000000 |
+| 0000000000000000 | 0001001000110100 | 1 | 0001001000110100 |
+| 1001100001110110 | 0000000000000000 | 0 | 1001100001110110 |
+| 1001100001110110 | 0000000000000000 | 1 | 0000000000000000 |
+| 1010101010101010 | 0101010101010101 | 0 | 1010101010101010 |
+| 1010101010101010 | 0101010101010101 | 1 | 0101010101010101 |
diff --git a/projects/01/Mux16.tst b/projects/01/Mux16.tst
new file mode 100644
index 0000000..cf34155
--- /dev/null
+++ b/projects/01/Mux16.tst
@@ -0,0 +1,49 @@
+// 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/Mux16.tst
+
+load Mux16.hdl,
+output-file Mux16.out,
+compare-to Mux16.cmp,
+output-list a%B1.16.1 b%B1.16.1 sel%D2.1.2 out%B1.16.1;
+
+set a 0,
+set b 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a %B0000000000000000,
+set b %B0001001000110100,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a %B1001100001110110,
+set b %B0000000000000000,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set a %B1010101010101010,
+set b %B0101010101010101,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output; \ No newline at end of file
diff --git a/projects/01/Mux4Way16.cmp b/projects/01/Mux4Way16.cmp
new file mode 100644
index 0000000..8704e79
--- /dev/null
+++ b/projects/01/Mux4Way16.cmp
@@ -0,0 +1,9 @@
+| a | b | c | d | sel | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 00 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 01 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 10 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 11 | 0000000000000000 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 00 | 0001001000110100 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 01 | 1001100001110110 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 10 | 1010101010101010 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 11 | 0101010101010101 |
diff --git a/projects/01/Mux4Way16.hdl b/projects/01/Mux4Way16.hdl
new file mode 100644
index 0000000..b6be968
--- /dev/null
+++ b/projects/01/Mux4Way16.hdl
@@ -0,0 +1,22 @@
+// 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/Mux4Way16.hdl
+
+/**
+ * 4-way 16-bit multiplexor:
+ * out = a if sel == 00
+ * b if sel == 01
+ * c if sel == 10
+ * d if sel == 11
+ */
+
+CHIP Mux4Way16 {
+ IN a[16], b[16], c[16], d[16], sel[2];
+ OUT out[16];
+
+ PARTS:
+ Mux16(a=a, b=b, sel=sel[0], out=ab);
+ Mux16(a=c, b=d, sel=sel[0], out=cd);
+ Mux16(a=ab, b=cd, sel=sel[1], out=out);
+}
diff --git a/projects/01/Mux4Way16.out b/projects/01/Mux4Way16.out
new file mode 100644
index 0000000..659176d
--- /dev/null
+++ b/projects/01/Mux4Way16.out
@@ -0,0 +1,9 @@
+| a | b | c | d | sel | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 00 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 01 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 10 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 11 | 0000000000000000 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 00 | 0001001000110100 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 01 | 1001100001110110 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 10 | 1010101010101010 |
+| 0001001000110100 | 1001100001110110 | 1010101010101010 | 0101010101010101 | 11 | 0101010101010101 |
diff --git a/projects/01/Mux4Way16.tst b/projects/01/Mux4Way16.tst
new file mode 100644
index 0000000..3f4efa3
--- /dev/null
+++ b/projects/01/Mux4Way16.tst
@@ -0,0 +1,49 @@
+// 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/Mux4Way16.tst
+
+load Mux4Way16.hdl,
+output-file Mux4Way16.out,
+compare-to Mux4Way16.cmp,
+output-list a%B1.16.1 b%B1.16.1 c%B1.16.1 d%B1.16.1 sel%B2.2.2 out%B1.16.1;
+
+set a 0,
+set b 0,
+set c 0,
+set d 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set sel 2,
+eval,
+output;
+
+set sel 3,
+eval,
+output;
+
+set a %B0001001000110100,
+set b %B1001100001110110,
+set c %B1010101010101010,
+set d %B0101010101010101,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set sel 2,
+eval,
+output;
+
+set sel 3,
+eval,
+output;
diff --git a/projects/01/Mux8Way16.cmp b/projects/01/Mux8Way16.cmp
new file mode 100644
index 0000000..1484e0a
--- /dev/null
+++ b/projects/01/Mux8Way16.cmp
@@ -0,0 +1,17 @@
+| a | b | c | d | e | f | g | h | sel | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 000 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 001 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 010 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 011 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 100 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 101 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 110 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 111 | 0000000000000000 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 000 | 0001001000110100 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 001 | 0010001101000101 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 010 | 0011010001010110 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 011 | 0100010101100111 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 100 | 0101011001111000 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 101 | 0110011110001001 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 110 | 0111100010011010 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 111 | 1000100110101011 |
diff --git a/projects/01/Mux8Way16.hdl b/projects/01/Mux8Way16.hdl
new file mode 100644
index 0000000..d20fe8b
--- /dev/null
+++ b/projects/01/Mux8Way16.hdl
@@ -0,0 +1,28 @@
+// 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/Mux8Way16.hdl
+
+/**
+ * 8-way 16-bit multiplexor:
+ * out = a if sel == 000
+ * b if sel == 001
+ * etc.
+ * h if sel == 111
+ */
+
+CHIP Mux8Way16 {
+ IN a[16], b[16], c[16], d[16],
+ e[16], f[16], g[16], h[16],
+ sel[3];
+ OUT out[16];
+
+ PARTS:
+ Mux16(a=a, b=b, sel=sel[0], out=ab);
+ Mux16(a=c, b=d, sel=sel[0], out=cd);
+ Mux16(a=e, b=f, sel=sel[0], out=ef);
+ Mux16(a=g, b=h, sel=sel[0], out=gh);
+ Mux16(a=ab, b=cd, sel=sel[1], out=ad);
+ Mux16(a=ef, b=gh, sel=sel[1], out=eh);
+ Mux16(a=ad, b=eh, sel=sel[2], out=out);
+}
diff --git a/projects/01/Mux8Way16.out b/projects/01/Mux8Way16.out
new file mode 100644
index 0000000..11ff518
--- /dev/null
+++ b/projects/01/Mux8Way16.out
@@ -0,0 +1,17 @@
+| a | b | c | d | e | f | g | h | sel | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 000 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 001 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 010 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 011 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 100 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 101 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 110 | 0000000000000000 |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 0000000000000000 | 111 | 0000000000000000 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 000 | 0001001000110100 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 001 | 0010001101000101 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 010 | 0011010001010110 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 011 | 0100010101100111 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 100 | 0101011001111000 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 101 | 0110011110001001 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 110 | 0111100010011010 |
+| 0001001000110100 | 0010001101000101 | 0011010001010110 | 0100010101100111 | 0101011001111000 | 0110011110001001 | 0111100010011010 | 1000100110101011 | 111 | 1000100110101011 |
diff --git a/projects/01/Mux8Way16.tst b/projects/01/Mux8Way16.tst
new file mode 100644
index 0000000..59bb41c
--- /dev/null
+++ b/projects/01/Mux8Way16.tst
@@ -0,0 +1,89 @@
+// 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/Mux8Way16.tst
+
+load Mux8Way16.hdl,
+output-file Mux8Way16.out,
+compare-to Mux8Way16.cmp,
+output-list a%B1.16.1 b%B1.16.1 c%B1.16.1 d%B1.16.1 e%B1.16.1 f%B1.16.1 g%B1.16.1 h%B1.16.1 sel%B2.3.2 out%B1.16.1;
+
+set a 0,
+set b 0,
+set c 0,
+set d 0,
+set e 0,
+set f 0,
+set g 0,
+set h 0,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set sel 2,
+eval,
+output;
+
+set sel 3,
+eval,
+output;
+
+set sel 4,
+eval,
+output;
+
+set sel 5,
+eval,
+output;
+
+set sel 6,
+eval,
+output;
+
+set sel 7,
+eval,
+output;
+
+set a %B0001001000110100,
+set b %B0010001101000101,
+set c %B0011010001010110,
+set d %B0100010101100111,
+set e %B0101011001111000,
+set f %B0110011110001001,
+set g %B0111100010011010,
+set h %B1000100110101011,
+set sel 0,
+eval,
+output;
+
+set sel 1,
+eval,
+output;
+
+set sel 2,
+eval,
+output;
+
+set sel 3,
+eval,
+output;
+
+set sel 4,
+eval,
+output;
+
+set sel 5,
+eval,
+output;
+
+set sel 6,
+eval,
+output;
+
+set sel 7,
+eval,
+output;
diff --git a/projects/01/Not.cmp b/projects/01/Not.cmp
new file mode 100644
index 0000000..e8c1191
--- /dev/null
+++ b/projects/01/Not.cmp
@@ -0,0 +1,3 @@
+| in | out |
+| 0 | 1 |
+| 1 | 0 |
diff --git a/projects/01/Not.hdl b/projects/01/Not.hdl
new file mode 100644
index 0000000..4723bf1
--- /dev/null
+++ b/projects/01/Not.hdl
@@ -0,0 +1,17 @@
+// 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/Not.hdl
+
+/**
+ * Not gate:
+ * out = not in
+ */
+
+CHIP Not {
+ IN in;
+ OUT out;
+
+ PARTS:
+ Nand(a=in, b=in, out=out);
+}
diff --git a/projects/01/Not.out b/projects/01/Not.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/projects/01/Not.out
diff --git a/projects/01/Not.tst b/projects/01/Not.tst
new file mode 100644
index 0000000..1e3bbe7
--- /dev/null
+++ b/projects/01/Not.tst
@@ -0,0 +1,17 @@
+// 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/Not.tst
+
+load Not.hdl,
+output-file Not.out,
+compare-to Not.cmp,
+output-list in%B3.1.3 out%B3.1.3;
+
+set in 0,
+eval,
+output;
+
+set in 1,
+eval,
+output;
diff --git a/projects/01/Not16.cmp b/projects/01/Not16.cmp
new file mode 100644
index 0000000..68a5512
--- /dev/null
+++ b/projects/01/Not16.cmp
@@ -0,0 +1,6 @@
+| in | out |
+| 0000000000000000 | 1111111111111111 |
+| 1111111111111111 | 0000000000000000 |
+| 1010101010101010 | 0101010101010101 |
+| 0011110011000011 | 1100001100111100 |
+| 0001001000110100 | 1110110111001011 |
diff --git a/projects/01/Not16.hdl b/projects/01/Not16.hdl
new file mode 100644
index 0000000..3bf26a8
--- /dev/null
+++ b/projects/01/Not16.hdl
@@ -0,0 +1,33 @@
+// 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/Not16.hdl
+
+/**
+ * 16-bit Not:
+ * for i=0..15: out[i] = not in[i]
+ */
+
+CHIP Not16 {
+ IN in[16];
+ OUT out[16];
+
+ PARTS:
+ // Put your code here:
+ 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]);
+}
diff --git a/projects/01/Not16.out b/projects/01/Not16.out
new file mode 100644
index 0000000..ae2ad1d
--- /dev/null
+++ b/projects/01/Not16.out
@@ -0,0 +1,6 @@
+| in | out |
+| 0000000000000000 | 1111111111111111 |
+| 1111111111111111 | 0000000000000000 |
+| 1010101010101010 | 0101010101010101 |
+| 0011110011000011 | 1100001100111100 |
+| 0001001000110100 | 1110110111001011 |
diff --git a/projects/01/Not16.tst b/projects/01/Not16.tst
new file mode 100644
index 0000000..e7e2c3b
--- /dev/null
+++ b/projects/01/Not16.tst
@@ -0,0 +1,29 @@
+// 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/Not16.tst
+
+load Not16.hdl,
+output-file Not16.out,
+compare-to Not16.cmp,
+output-list in%B1.16.1 out%B1.16.1;
+
+set in %B0000000000000000,
+eval,
+output;
+
+set in %B1111111111111111,
+eval,
+output;
+
+set in %B1010101010101010,
+eval,
+output;
+
+set in %B0011110011000011,
+eval,
+output;
+
+set in %B0001001000110100,
+eval,
+output; \ No newline at end of file
diff --git a/projects/01/Or.cmp b/projects/01/Or.cmp
new file mode 100644
index 0000000..dab924c
--- /dev/null
+++ b/projects/01/Or.cmp
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 1 |
+| 1 | 0 | 1 |
+| 1 | 1 | 1 |
diff --git a/projects/01/Or.hdl b/projects/01/Or.hdl
new file mode 100644
index 0000000..4f8463e
--- /dev/null
+++ b/projects/01/Or.hdl
@@ -0,0 +1,20 @@
+// 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=na);
+ Not(in=b, out=nb);
+ Nand(a=na, b=nb, out=out);
+}
diff --git a/projects/01/Or.out b/projects/01/Or.out
new file mode 100644
index 0000000..8010688
--- /dev/null
+++ b/projects/01/Or.out
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 1 |
+| 1 | 0 | 1 |
+| 1 | 1 | 1 |
diff --git a/projects/01/Or.tst b/projects/01/Or.tst
new file mode 100644
index 0000000..948b6b3
--- /dev/null
+++ b/projects/01/Or.tst
@@ -0,0 +1,29 @@
+// 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.tst
+
+load Or.hdl,
+output-file Or.out,
+compare-to Or.cmp,
+output-list a%B3.1.3 b%B3.1.3 out%B3.1.3;
+
+set a 0,
+set b 0,
+eval,
+output;
+
+set a 0,
+set b 1,
+eval,
+output;
+
+set a 1,
+set b 0,
+eval,
+output;
+
+set a 1,
+set b 1,
+eval,
+output;
diff --git a/projects/01/Or16.cmp b/projects/01/Or16.cmp
new file mode 100644
index 0000000..e2c3a30
--- /dev/null
+++ b/projects/01/Or16.cmp
@@ -0,0 +1,7 @@
+| a | b | out |
+| 0000000000000000 | 0000000000000000 | 0000000000000000 |
+| 0000000000000000 | 1111111111111111 | 1111111111111111 |
+| 1111111111111111 | 1111111111111111 | 1111111111111111 |
+| 1010101010101010 | 0101010101010101 | 1111111111111111 |
+| 0011110011000011 | 0000111111110000 | 0011111111110011 |
+| 0001001000110100 | 1001100001110110 | 1001101001110110 |
diff --git a/projects/01/Or16.hdl b/projects/01/Or16.hdl
new file mode 100644
index 0000000..e129636
--- /dev/null
+++ b/projects/01/Or16.hdl
@@ -0,0 +1,32 @@
+// 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]);
+}
diff --git a/projects/01/Or16.tst b/projects/01/Or16.tst
new file mode 100644
index 0000000..ea7b944
--- /dev/null
+++ b/projects/01/Or16.tst
@@ -0,0 +1,39 @@
+// 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.tst
+
+load Or16.hdl,
+output-file Or16.out,
+compare-to Or16.cmp,
+output-list a%B1.16.1 b%B1.16.1 out%B1.16.1;
+
+set a %B0000000000000000,
+set b %B0000000000000000,
+eval,
+output;
+
+set a %B0000000000000000,
+set b %B1111111111111111,
+eval,
+output;
+
+set a %B1111111111111111,
+set b %B1111111111111111,
+eval,
+output;
+
+set a %B1010101010101010,
+set b %B0101010101010101,
+eval,
+output;
+
+set a %B0011110011000011,
+set b %B0000111111110000,
+eval,
+output;
+
+set a %B0001001000110100,
+set b %B1001100001110110,
+eval,
+output; \ No newline at end of file
diff --git a/projects/01/Or8Way.cmp b/projects/01/Or8Way.cmp
new file mode 100644
index 0000000..3f9fd54
--- /dev/null
+++ b/projects/01/Or8Way.cmp
@@ -0,0 +1,6 @@
+| in | out |
+| 00000000 | 0 |
+| 11111111 | 1 |
+| 00010000 | 1 |
+| 00000001 | 1 |
+| 00100110 | 1 |
diff --git a/projects/01/Or8Way.hdl b/projects/01/Or8Way.hdl
new file mode 100644
index 0000000..14b0783
--- /dev/null
+++ b/projects/01/Or8Way.hdl
@@ -0,0 +1,23 @@
+// 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/Or8Way.hdl
+
+/**
+ * 8-way Or:
+ * out = (in[0] or in[1] or ... or in[7])
+ */
+
+CHIP Or8Way {
+ IN in[8];
+ OUT out;
+
+ PARTS:
+ Or(a=in[0], b=in[1], out=four0);
+ Or(a=in[2], b=in[3], out=four1);
+ Or(a=in[4], b=in[5], out=four2);
+ Or(a=in[6], b=in[7], out=four3);
+ Or(a=four0, b=four1, out=two0);
+ Or(a=four2, b=four3, out=two1);
+ Or(a=two0, b=two1, out=out);
+}
diff --git a/projects/01/Or8Way.out b/projects/01/Or8Way.out
new file mode 100644
index 0000000..b9f8d99
--- /dev/null
+++ b/projects/01/Or8Way.out
@@ -0,0 +1,6 @@
+| in | out |
+| 00000000 | 0 |
+| 11111111 | 1 |
+| 00010000 | 1 |
+| 00000001 | 1 |
+| 00100110 | 1 |
diff --git a/projects/01/Or8Way.tst b/projects/01/Or8Way.tst
new file mode 100644
index 0000000..e6fbba7
--- /dev/null
+++ b/projects/01/Or8Way.tst
@@ -0,0 +1,29 @@
+// 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/Or8Way.tst
+
+load Or8Way.hdl,
+output-file Or8Way.out,
+compare-to Or8Way.cmp,
+output-list in%B2.8.2 out%B2.1.2;
+
+set in %B00000000,
+eval,
+output;
+
+set in %B11111111,
+eval,
+output;
+
+set in %B00010000,
+eval,
+output;
+
+set in %B00000001,
+eval,
+output;
+
+set in %B00100110,
+eval,
+output; \ No newline at end of file
diff --git a/projects/01/Xor.cmp b/projects/01/Xor.cmp
new file mode 100644
index 0000000..a1e07b2
--- /dev/null
+++ b/projects/01/Xor.cmp
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 1 |
+| 1 | 0 | 1 |
+| 1 | 1 | 0 |
diff --git a/projects/01/Xor.hdl b/projects/01/Xor.hdl
new file mode 100644
index 0000000..e13b4fb
--- /dev/null
+++ b/projects/01/Xor.hdl
@@ -0,0 +1,21 @@
+// 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:
+ Not(in=a, out=na);
+ Not(in=b, out=nb);
+ Nand(a=a, b=nb, out=c);
+ Nand(a=na, b=b, out=d);
+ Nand(a=c, b=d, out=out);
+}
diff --git a/projects/01/Xor.out b/projects/01/Xor.out
new file mode 100644
index 0000000..73a8d0c
--- /dev/null
+++ b/projects/01/Xor.out
@@ -0,0 +1,5 @@
+| a | b | out |
+| 0 | 0 | 0 |
+| 0 | 1 | 1 |
+| 1 | 0 | 1 |
+| 1 | 1 | 0 |
diff --git a/projects/01/Xor.tst b/projects/01/Xor.tst
new file mode 100644
index 0000000..658cbe5
--- /dev/null
+++ b/projects/01/Xor.tst
@@ -0,0 +1,29 @@
+// 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.tst
+
+load Xor.hdl,
+output-file Xor.out,
+compare-to Xor.cmp,
+output-list a%B3.1.3 b%B3.1.3 out%B3.1.3;
+
+set a 0,
+set b 0,
+eval,
+output;
+
+set a 0,
+set b 1,
+eval,
+output;
+
+set a 1,
+set b 0,
+eval,
+output;
+
+set a 1,
+set b 1,
+eval,
+output;