aboutsummaryrefslogtreecommitdiff
path: root/projects/01
diff options
context:
space:
mode:
authorYuchen Pei <me@ypei.me>2017-11-29 12:30:41 +0100
committerYuchen Pei <me@ypei.me>2017-11-29 12:30:41 +0100
commita000308104aab27c2dde9a306f1bc654b2db4806 (patch)
treeaecc628e14c1628b5714281437aba18680cdc27b /projects/01
first commit
Diffstat (limited to 'projects/01')
-rw-r--r--projects/01/And.cmp5
-rw-r--r--projects/01/And.hdl20
-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.hdl17
-rw-r--r--projects/01/And16.tst39
-rw-r--r--projects/01/DMux.cmp5
-rw-r--r--projects/01/DMux.hdl21
-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.hdl20
-rw-r--r--projects/01/DMux4Way.tst43
-rw-r--r--projects/01/DMux8Way.cmp17
-rw-r--r--projects/01/DMux8Way.hdl20
-rw-r--r--projects/01/DMux8Way.tst75
-rw-r--r--projects/01/Mux.cmp9
-rw-r--r--projects/01/Mux.hdl22
-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.hdl18
-rw-r--r--projects/01/Mux16.tst49
-rw-r--r--projects/01/Mux4Way16.cmp9
-rw-r--r--projects/01/Mux4Way16.hdl20
-rw-r--r--projects/01/Mux4Way16.tst49
-rw-r--r--projects/01/Mux8Way16.cmp17
-rw-r--r--projects/01/Mux8Way16.hdl22
-rw-r--r--projects/01/Mux8Way16.tst89
-rw-r--r--projects/01/Not.cmp3
-rw-r--r--projects/01/Not.hdl18
-rw-r--r--projects/01/Not.out3
-rw-r--r--projects/01/Not.tst17
-rw-r--r--projects/01/Not16.cmp6
-rw-r--r--projects/01/Not16.hdl17
-rw-r--r--projects/01/Not16.tst29
-rw-r--r--projects/01/Or.cmp5
-rw-r--r--projects/01/Or.hdl21
-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.hdl17
-rw-r--r--projects/01/Or16.tst39
-rw-r--r--projects/01/Or8Way.cmp6
-rw-r--r--projects/01/Or8Way.hdl17
-rw-r--r--projects/01/Or8Way.tst29
-rw-r--r--projects/01/Xor.cmp5
-rw-r--r--projects/01/Xor.hdl22
-rw-r--r--projects/01/Xor.out5
-rw-r--r--projects/01/Xor.tst29
51 files changed, 1064 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..754e54e
--- /dev/null
+++ b/projects/01/And.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/And.hdl
+
+/**
+ * And gate:
+ * out = 1 if (a == 1 and b == 1)
+ * 0 otherwise
+ */
+
+CHIP And {
+ IN a, b;
+ OUT out;
+
+ PARTS:
+ // Put your code here:
+ Nand (a=a, b=b, out=nandab);
+ Not (in=nandab, 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..27fe04a
--- /dev/null
+++ b/projects/01/And16.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..b528313
--- /dev/null
+++ b/projects/01/DMux.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/DMux.hdl
+
+/**
+ * Demultiplexor:
+ * {a, b} = {in, 0} if sel == 0
+ * {0, in} if sel == 1
+ */
+
+CHIP DMux {
+ IN in, sel;
+ OUT a, b;
+
+ PARTS:
+ // Put your code here:
+ 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..24270c0
--- /dev/null
+++ b/projects/01/DMux4Way.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..75714a5
--- /dev/null
+++ b/projects/01/DMux8Way.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..aac2e36
--- /dev/null
+++ b/projects/01/Mux.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/Mux.hdl
+
+/**
+ * Multiplexor:
+ * out = a if sel == 0
+ * b otherwise
+ */
+
+CHIP Mux {
+ IN a, b, sel;
+ OUT out;
+
+ PARTS:
+ // Put your code here:
+ Not (in=sel, out=notsel);
+ And (a=a, b=notsel, out=aandnotsel);
+ And (a=sel, b=b, out=selandb);
+ Or (a=aandnotsel, b=selandb, 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..97dd784
--- /dev/null
+++ b/projects/01/Mux16.hdl
@@ -0,0 +1,18 @@
+// 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:
+ // Put your code here:
+}
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..75baced
--- /dev/null
+++ b/projects/01/Mux4Way16.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..88c791e
--- /dev/null
+++ b/projects/01/Mux8Way16.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..e8aac51
--- /dev/null
+++ b/projects/01/Not.hdl
@@ -0,0 +1,18 @@
+// 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:
+ // Put your code here:
+ 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..7b64092
--- /dev/null
+++ b/projects/01/Not.out
@@ -0,0 +1,3 @@
+| in | out |
+| 0 | 1 |
+| 1 | 0 |
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..3d25bbe
--- /dev/null
+++ b/projects/01/Not16.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/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:
+} \ No newline at end of file
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..f539fbf
--- /dev/null
+++ b/projects/01/Or.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/Or.hdl
+
+ /**
+ * Or gate:
+ * out = 1 if (a == 1 or b == 1)
+ * 0 otherwise
+ */
+
+CHIP Or {
+ IN a, b;
+ OUT out;
+
+ PARTS:
+ // Put your code here:
+ Not (in=a, out=nota);
+ Not (in=b, out=notb);
+ Nand (a=nota, b=notb, 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..0238f05
--- /dev/null
+++ b/projects/01/Or16.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/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:
+ // Put your code here:
+} \ No newline at end of file
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..24c78c4
--- /dev/null
+++ b/projects/01/Or8Way.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/Or8Way.hdl
+
+/**
+ * 8-way Or:
+ * out = (in[0] or in[1] or ... or in[7])
+ */
+
+CHIP Or8Way {
+ IN in[8];
+ OUT out;
+
+ PARTS:
+ // Put your code here:
+} \ No newline at end of file
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..5ec4579
--- /dev/null
+++ b/projects/01/Xor.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/Xor.hdl
+
+/**
+ * Exclusive-or gate:
+ * out = not (a == b)
+ */
+
+CHIP Xor {
+ IN a, b;
+ OUT out;
+
+ PARTS:
+ // Put your code here:
+ Not (in=a, out=nota);
+ Not (in=b, out=notb);
+ And (a=a, b=notb, out=aandnotb);
+ And (a=nota, b=b, out=notaandb);
+ Or (a=aandnotb, b=notaandb, 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;