commit beb668806a939abdd01e56f4542217592ecfbc9e Author: Sean O'Connor Date: Wed Aug 27 19:05:53 2025 +0200 Initial commit: Project 0 completed, Project 1 skeleton files diff --git a/00/Off.cmp b/00/Off.cmp new file mode 100755 index 0000000..21c593b --- /dev/null +++ b/00/Off.cmp @@ -0,0 +1,5 @@ +| a | b | out | +| 0 | 0 | 0 | +| 0 | 1 | 0 | +| 1 | 0 | 0 | +| 1 | 1 | 0 | diff --git a/00/Off.hdl b/00/Off.hdl new file mode 100755 index 0000000..9d6b464 --- /dev/null +++ b/00/Off.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/00/Off.hdl + +/** + * Off gate: + * out = false (off) + */ + +CHIP Off { + IN a, b; + OUT out; + + PARTS: + // Put your code here: + // Nand(a=true, b=false, out=out); // old + Nand(a=true, b=true, out=out); +} diff --git a/00/Off.out b/00/Off.out new file mode 100644 index 0000000..df73827 --- /dev/null +++ b/00/Off.out @@ -0,0 +1,2 @@ +| a | b | out | +| 0 | 0 | 1 | diff --git a/00/Off.tst b/00/Off.tst new file mode 100755 index 0000000..0f7d51b --- /dev/null +++ b/00/Off.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/00/Off.tst + +load Off.hdl, +output-file Off.out, +compare-to Off.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/00/index.html b/00/index.html new file mode 100644 index 0000000..f641d0a --- /dev/null +++ b/00/index.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + +

+The Elements of Computing  Systems / +Nisan & Schocken +/ www.idc.ac.il/tecs  
+
+
Project +0: Getting Started

+

Objective: Get the tools downloaded, experiment with the +hardware simulator environment, and upload a file to the gradescope +autograder.

+

Contract: This "project" is a self-study +exercise. You are not actually required to build or hand-in anything, +but rather this is built to let you get setup for the course. +Download all the files, edit a file with a text editor, and upload a +solution to gradescope. +

+

Steps +

+

0: Download and install the nand2tetris software suite (see +https://www.nand2tetris.org/software) +on your computer or a lab computer. On the Bucknell campus computers, +you will need to install a java runtime and edit your path variable. +Prof Thomas will gladly help you, but checkout the files placed in +Moodle first. I haven’t tested this with the newest image. It is +possible to point to the matlab java environment and run that. I also +have a script setup to add a folder to your path which will come in +handy why you want to use the command line later in the course.

+

1: Chapter 1 of the book. This is available online at: +https://www.nand2tetris.org/course.

+

2. Go through parts I-II-III of the Hardware Simulator Tutorial +(available in the see the https://www.nand2tetris.org/software +Software Section of the nand2tetris web site).

+

3. Create a directory named projects/00 +on your computer, and extract “project +00.zip” [I don’t think this link works, but the zip file is +available on moodle] into it.

+

4. Invoke the hardware simulator (which is now installed on your +computer), load one of the .tst +test scripts listed below, and run/experiment with the chip.

+

Upload +a solution

+

The “goal” of this less is to make a two-input OFF chip. This +chip should always output 0, or false, no matter the input +combination. The tools are there to help you test your chip and play +with inputs, etc. You can upload the provided (incorrect) chip as is +to gradescope and see the results. Then, try fixing the problem, and +uploading to see the correct results. We will make heavy use of this +autograding feature of gradescope in the course. I’ve written quite +a few of these testing schemes, so start early in attempting things, +and PLEASE talk with me if you think something is weird. These have +been refined over a few semesters and are becoming more stable +though.

+ + \ No newline at end of file diff --git a/01/And.cmp b/01/And.cmp new file mode 100644 index 0000000..7a3c7de --- /dev/null +++ b/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/01/And.hdl b/01/And.hdl new file mode 100644 index 0000000..658ff73 --- /dev/null +++ b/01/And.hdl @@ -0,0 +1,15 @@ +// 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/1/And.hdl +/** + * And gate: + * if (a and b) out = 1, else out = 0 + */ +CHIP And { + IN a, b; + OUT out; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/And.tst b/01/And.tst new file mode 100644 index 0000000..92d93ad --- /dev/null +++ b/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/1/And.tst + +load And.hdl, +output-file And.out, +compare-to And.cmp, +output-list a b out; + +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/01/And16.cmp b/01/And16.cmp new file mode 100644 index 0000000..fb8dbfc --- /dev/null +++ b/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/01/And16.hdl b/01/And16.hdl new file mode 100644 index 0000000..dfd56bc --- /dev/null +++ b/01/And16.hdl @@ -0,0 +1,16 @@ +// 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/1/And16.hdl +/** + * 16-bit And gate: + * for i = 0, ..., 15: + * out[i] = a[i] And b[i] + */ +CHIP And16 { + IN a[16], b[16]; + OUT out[16]; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/And16.tst b/01/And16.tst new file mode 100644 index 0000000..52a7884 --- /dev/null +++ b/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/1/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/01/DMux.cmp b/01/DMux.cmp new file mode 100644 index 0000000..5b65adb --- /dev/null +++ b/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/01/DMux.hdl b/01/DMux.hdl new file mode 100644 index 0000000..9dbdfb9 --- /dev/null +++ b/01/DMux.hdl @@ -0,0 +1,16 @@ +// 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/1/DMux.hdl +/** + * Demultiplexor: + * [a, b] = [in, 0] if sel = 0 + * [0, in] if sel = 1 + */ +CHIP DMux { + IN in, sel; + OUT a, b; + + PARTS: + //// Replace this comment with your code. +} diff --git a/01/DMux.tst b/01/DMux.tst new file mode 100644 index 0000000..cebda16 --- /dev/null +++ b/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/1/DMux.tst + +load DMux.hdl, +output-file DMux.out, +compare-to DMux.cmp, +output-list in sel a b; + +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/01/DMux4Way.cmp b/01/DMux4Way.cmp new file mode 100644 index 0000000..7734e2a --- /dev/null +++ b/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/01/DMux4Way.hdl b/01/DMux4Way.hdl new file mode 100644 index 0000000..399729e --- /dev/null +++ b/01/DMux4Way.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/1/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: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/DMux4Way.tst b/01/DMux4Way.tst new file mode 100644 index 0000000..4f5b6a4 --- /dev/null +++ b/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/1/DMux4Way.tst + +load DMux4Way.hdl, +output-file DMux4Way.out, +compare-to DMux4Way.cmp, +output-list in sel%B2.2.2 a b c d; + +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/01/DMux8Way.cmp b/01/DMux8Way.cmp new file mode 100644 index 0000000..e1b2e74 --- /dev/null +++ b/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/01/DMux8Way.hdl b/01/DMux8Way.hdl new file mode 100644 index 0000000..e3d3dca --- /dev/null +++ b/01/DMux8Way.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/1/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 + * [0, 0, in, 0, 0, 0, 0, 0] if sel = 010 + * [0, 0, 0, in, 0, 0, 0, 0] if sel = 011 + * [0, 0, 0, 0, in, 0, 0, 0] if sel = 100 + * [0, 0, 0, 0, 0, in, 0, 0] if sel = 101 + * [0, 0, 0, 0, 0, 0, in, 0] if sel = 110 + * [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: + //// Replace this comment with your code. +} diff --git a/01/DMux8Way.tst b/01/DMux8Way.tst new file mode 100644 index 0000000..ec1fc9b --- /dev/null +++ b/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/1/DMux8Way.tst + +load DMux8Way.hdl, +output-file DMux8Way.out, +compare-to DMux8Way.cmp, +output-list in sel%B2.3.2 a b c d e f g h; + +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/01/Mux.cmp b/01/Mux.cmp new file mode 100644 index 0000000..eb25f2e --- /dev/null +++ b/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/01/Mux.hdl b/01/Mux.hdl new file mode 100644 index 0000000..9f9e720 --- /dev/null +++ b/01/Mux.hdl @@ -0,0 +1,15 @@ +// 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/1/Mux.hdl +/** + * Multiplexor: + * if (sel = 0) out = a, else out = b + */ +CHIP Mux { + IN a, b, sel; + OUT out; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Mux.tst b/01/Mux.tst new file mode 100644 index 0000000..8e5c43e --- /dev/null +++ b/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/1/Mux.tst + +load Mux.hdl, +output-file Mux.out, +compare-to Mux.cmp, +output-list a b sel out; + +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/01/Mux16.cmp b/01/Mux16.cmp new file mode 100644 index 0000000..80b6ece --- /dev/null +++ b/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/01/Mux16.hdl b/01/Mux16.hdl new file mode 100644 index 0000000..3d2bccf --- /dev/null +++ b/01/Mux16.hdl @@ -0,0 +1,16 @@ +// 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/1/Mux16.hdl +/** + * 16-bit multiplexor: + * for i = 0, ..., 15: + * if (sel = 0) out[i] = a[i], else out[i] = b[i] + */ +CHIP Mux16 { + IN a[16], b[16], sel; + OUT out[16]; + + PARTS: + //// Replace this comment with your code. +} diff --git a/01/Mux16.tst b/01/Mux16.tst new file mode 100644 index 0000000..2a1ae88 --- /dev/null +++ b/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/1/Mux16.tst + +load Mux16.hdl, +output-file Mux16.out, +compare-to Mux16.cmp, +output-list a%B1.16.1 b%B1.16.1 sel 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/01/Mux4Way16.cmp b/01/Mux4Way16.cmp new file mode 100644 index 0000000..659176d --- /dev/null +++ b/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/01/Mux4Way16.hdl b/01/Mux4Way16.hdl new file mode 100644 index 0000000..8d6b645 --- /dev/null +++ b/01/Mux4Way16.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/1/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: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Mux4Way16.tst b/01/Mux4Way16.tst new file mode 100644 index 0000000..0ff852f --- /dev/null +++ b/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/1/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/01/Mux8Way16.cmp b/01/Mux8Way16.cmp new file mode 100644 index 0000000..11ff518 --- /dev/null +++ b/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/01/Mux8Way16.hdl b/01/Mux8Way16.hdl new file mode 100644 index 0000000..4fe712e --- /dev/null +++ b/01/Mux8Way16.hdl @@ -0,0 +1,24 @@ +// 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/1/Mux8Way16.hdl +/** + * 8-way 16-bit multiplexor: + * out = a if sel = 000 + * b if sel = 001 + * c if sel = 010 + * d if sel = 011 + * e if sel = 100 + * f if sel = 101 + * g if sel = 110 + * 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: + //// Replace this comment with your code. +} diff --git a/01/Mux8Way16.tst b/01/Mux8Way16.tst new file mode 100644 index 0000000..aced052 --- /dev/null +++ b/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/1/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/01/Not.cmp b/01/Not.cmp new file mode 100644 index 0000000..9b48db2 --- /dev/null +++ b/01/Not.cmp @@ -0,0 +1,3 @@ +|in |out| +| 0 | 1 | +| 1 | 0 | diff --git a/01/Not.hdl b/01/Not.hdl new file mode 100644 index 0000000..9ce0063 --- /dev/null +++ b/01/Not.hdl @@ -0,0 +1,15 @@ +// 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/1/Not.hdl +/** + * Not gate: + * if (in) out = 0, else out = 1 + */ +CHIP Not { + IN in; + OUT out; + + PARTS: + //// Replace this comment with your code. +} diff --git a/01/Not.tst b/01/Not.tst new file mode 100644 index 0000000..ed0c8f9 --- /dev/null +++ b/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/1/Not.tst + +load Not.hdl, +output-file Not.out, +compare-to Not.cmp, +output-list in out; + +set in 0, +eval, +output; + +set in 1, +eval, +output; diff --git a/01/Not16.cmp b/01/Not16.cmp new file mode 100644 index 0000000..ae2ad1d --- /dev/null +++ b/01/Not16.cmp @@ -0,0 +1,6 @@ +| in | out | +| 0000000000000000 | 1111111111111111 | +| 1111111111111111 | 0000000000000000 | +| 1010101010101010 | 0101010101010101 | +| 0011110011000011 | 1100001100111100 | +| 0001001000110100 | 1110110111001011 | diff --git a/01/Not16.hdl b/01/Not16.hdl new file mode 100644 index 0000000..e88babf --- /dev/null +++ b/01/Not16.hdl @@ -0,0 +1,16 @@ +// 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/1/Not16.hdl +/** + * 16-bit Not gate: + * for i = 0, ..., 15: + * out[i] = Not(a[i]) + */ +CHIP Not16 { + IN in[16]; + OUT out[16]; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Not16.tst b/01/Not16.tst new file mode 100644 index 0000000..4bde067 --- /dev/null +++ b/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/1/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/01/Or.cmp b/01/Or.cmp new file mode 100644 index 0000000..11f9d64 --- /dev/null +++ b/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/01/Or.hdl b/01/Or.hdl new file mode 100644 index 0000000..1aa2dd7 --- /dev/null +++ b/01/Or.hdl @@ -0,0 +1,15 @@ +// 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/1/Or.hdl +/** + * Or gate: + * if (a or b) out = 1, else out = 0 + */ +CHIP Or { + IN a, b; + OUT out; + + PARTS: + //// Replace this comment with your code. +} diff --git a/01/Or.tst b/01/Or.tst new file mode 100644 index 0000000..65f07ad --- /dev/null +++ b/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/1/Or.tst + +load Or.hdl, +output-file Or.out, +compare-to Or.cmp, +output-list a b out; + +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/01/Or16.cmp b/01/Or16.cmp new file mode 100644 index 0000000..8664afe --- /dev/null +++ b/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/01/Or16.hdl b/01/Or16.hdl new file mode 100644 index 0000000..4337602 --- /dev/null +++ b/01/Or16.hdl @@ -0,0 +1,16 @@ +// 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/1/Or16.hdl +/** + * 16-bit Or gate: + * for i = 0, ..., 15: + * out[i] = a[i] Or b[i] + */ +CHIP Or16 { + IN a[16], b[16]; + OUT out[16]; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Or16.tst b/01/Or16.tst new file mode 100644 index 0000000..a2e221a --- /dev/null +++ b/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/1/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/01/Or8Way.cmp b/01/Or8Way.cmp new file mode 100644 index 0000000..a1d2c4a --- /dev/null +++ b/01/Or8Way.cmp @@ -0,0 +1,6 @@ +| in |out| +| 00000000 | 0 | +| 11111111 | 1 | +| 00010000 | 1 | +| 00000001 | 1 | +| 00100110 | 1 | diff --git a/01/Or8Way.hdl b/01/Or8Way.hdl new file mode 100644 index 0000000..6eff8a2 --- /dev/null +++ b/01/Or8Way.hdl @@ -0,0 +1,15 @@ +// 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/1/Or8Way.hdl +/** + * 8-way Or gate: + * out = in[0] Or in[1] Or ... Or in[7] + */ +CHIP Or8Way { + IN in[8]; + OUT out; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Or8Way.tst b/01/Or8Way.tst new file mode 100644 index 0000000..e8e7e37 --- /dev/null +++ b/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/1/Or8Way.tst + +load Or8Way.hdl, +output-file Or8Way.out, +compare-to Or8Way.cmp, +output-list in%B2.8.2 out; + +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/01/Readme.txt b/01/Readme.txt new file mode 100644 index 0000000..82b69a6 --- /dev/null +++ b/01/Readme.txt @@ -0,0 +1,17 @@ +Project 1: Elementary Logic Gates + +The description for this project is found at: + +https://www.nand2tetris.org/project01 + +You may _not_ work as pairs on this project. Please work individually. + +NOTES: + +1) Be careful not to make a recursive part declaration. The most common way is accidentally listing the chip that is being implemented in the PARTS list. The second most common way is by using PartA, which uses PartB, which in-turn uses PartA. Oops. Implementing the chips in the recommend order will help ensure this doesn't happen. + +2) The HDL language and format is described in Appendix A. One thing to note early on is that this HDL is case-sensitive. + +3) There is also a HDL survival guide posted at https://www.nand2tetris.org/hdl-survival-guide + +4) The book authors have a distinction between multi-bit and multi-way. Watch out that you are implementing the correct specification for these items. diff --git a/01/Xor.cmp b/01/Xor.cmp new file mode 100644 index 0000000..3737173 --- /dev/null +++ b/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/01/Xor.hdl b/01/Xor.hdl new file mode 100644 index 0000000..c6d90f9 --- /dev/null +++ b/01/Xor.hdl @@ -0,0 +1,15 @@ +// 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/1/Xor.hdl +/** + * Exclusive-or gate: + * if ((a and Not(b)) or (Not(a) and b)) out = 1, else out = 0 + */ +CHIP Xor { + IN a, b; + OUT out; + + PARTS: + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/01/Xor.tst b/01/Xor.tst new file mode 100644 index 0000000..a6af078 --- /dev/null +++ b/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/1/Xor.tst + +load Xor.hdl, +output-file Xor.out, +compare-to Xor.cmp, +output-list a b out; + +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/01/chapter1lecture.pdf b/01/chapter1lecture.pdf new file mode 100644 index 0000000..cf0d9f2 Binary files /dev/null and b/01/chapter1lecture.pdf differ