commit 3be216074be3c1c038699a9743c0793014727821 Author: Jonas A. Date: Sat Jan 10 07:00:38 2026 +0100 first commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..b0b31c0 Binary files /dev/null and b/.DS_Store differ diff --git a/The Elements of Computing Systems.pdf b/The Elements of Computing Systems.pdf new file mode 100644 index 0000000..791e817 Binary files /dev/null and b/The Elements of Computing Systems.pdf differ diff --git a/appendix-2.pdf b/appendix-2.pdf new file mode 100644 index 0000000..42edc17 Binary files /dev/null and b/appendix-2.pdf differ diff --git a/project-1-boolean-logic/01.zip b/project-1-boolean-logic/01.zip new file mode 100644 index 0000000..0947f37 Binary files /dev/null and b/project-1-boolean-logic/01.zip differ diff --git a/project-1-boolean-logic/01/And.hdl b/project-1-boolean-logic/01/And.hdl new file mode 100755 index 0000000..c469e5f --- /dev/null +++ b/project-1-boolean-logic/01/And.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/1/And.hdl +/** + * And gate: + * if (a and b) out = 1, else out = 0 + */ +CHIP And { + IN a, b; + OUT out; + + PARTS: + // Reverse the Nand Gate with the newly created Not chip/gate + Nand(a=a, b=b, out=notOut); + Not(in= notOut, out= out); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/And16.hdl b/project-1-boolean-logic/01/And16.hdl new file mode 100755 index 0000000..a5399f9 --- /dev/null +++ b/project-1-boolean-logic/01/And16.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/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: + + 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]); + +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/DMux.hdl b/project-1-boolean-logic/01/DMux.hdl new file mode 100755 index 0000000..3faf1d6 --- /dev/null +++ b/project-1-boolean-logic/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/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: + + Not(in=sel,out=notSel); + And(a=in,b=notSel,out=a); + And(a=in,b=sel,out=b); + +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/DMux4Way.hdl b/project-1-boolean-logic/01/DMux4Way.hdl new file mode 100755 index 0000000..730f9e8 --- /dev/null +++ b/project-1-boolean-logic/01/DMux4Way.hdl @@ -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/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=topHalf , b=botHalf ); + + DMux(in= topHalf, sel=sel[0] , a=a , b=b ); + DMux(in= botHalf, sel=sel[0] , a=c , b=d ); + + + +} + +/** +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); + +} +*/ \ No newline at end of file diff --git a/project-1-boolean-logic/01/DMux8Way.hdl b/project-1-boolean-logic/01/DMux8Way.hdl new file mode 100755 index 0000000..eb8f5f9 --- /dev/null +++ b/project-1-boolean-logic/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/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: + + DMux(in= in, sel=sel[2] , a=topHalf , b=botHalf ); + + DMux4Way(in=topHalf , sel=sel[0..1] , a=a , b=b , c=c , d=d ); + DMux4Way(in=botHalf , sel=sel[0..1] , a=e , b=f , c=g , d=h ); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Mux.hdl b/project-1-boolean-logic/01/Mux.hdl new file mode 100755 index 0000000..72eb136 --- /dev/null +++ b/project-1-boolean-logic/01/Mux.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/1/Mux.hdl +/** + * Multiplexor: + * if (sel = 0) out = a, else out = b + */ +CHIP Mux { + IN a, b, sel; + OUT out; + + PARTS: + + Not(in=sel,out=notSel); + And(a= a, b= notSel, out= andA); + And(a= b, b= sel, out= andB); + Xor(a= andA , b= andB, out=out ); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Mux16.hdl b/project-1-boolean-logic/01/Mux16.hdl new file mode 100755 index 0000000..29259cb --- /dev/null +++ b/project-1-boolean-logic/01/Mux16.hdl @@ -0,0 +1,35 @@ +// 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: + + 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]); + + + +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Mux4Way16.hdl b/project-1-boolean-logic/01/Mux4Way16.hdl new file mode 100755 index 0000000..fdf371e --- /dev/null +++ b/project-1-boolean-logic/01/Mux4Way16.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/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=mux1); + Mux16(a=c,b=d,sel=sel[0],out=mux2); + + Mux16(a=mux1,b=mux2,sel=sel[1],out=out); + + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Mux8Way16.hdl b/project-1-boolean-logic/01/Mux8Way16.hdl new file mode 100755 index 0000000..ee71590 --- /dev/null +++ b/project-1-boolean-logic/01/Mux8Way16.hdl @@ -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/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: + Mux4Way16(a=a, b=b, c=c , d=d , sel=sel[0..1] , out=muxabcd ); + Mux4Way16(a=e , b=f , c=g , d=h , sel=sel[0..1] , out=muxefgh ); + + Mux16(a=muxabcd , b=muxefgh , sel=sel[2] , out=out ); + + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Not.hdl b/project-1-boolean-logic/01/Not.hdl new file mode 100755 index 0000000..61bc6ea --- /dev/null +++ b/project-1-boolean-logic/01/Not.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/Not.hdl +/** + * Not gate: + * if (in) out = 0, else out = 1 + */ +CHIP Not { + IN in; + OUT out; + PARTS: + // nand = 1 + 1 = 0 + // 0 + 0 = 1 + Nand(a=in, b=in, out=out); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Not16.hdl b/project-1-boolean-logic/01/Not16.hdl new file mode 100755 index 0000000..6bdb038 --- /dev/null +++ b/project-1-boolean-logic/01/Not16.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/Not16.hdl +/** + * 16-bit Not gate: + * for i = 0, ..., 15: + * out[i] = Not(a[i]) + */ +CHIP Not16 { + IN in[16]; + OUT out[16]; + + PARTS: + + Not(in=in[0],out=out[0]); + Not(in=in[1],out=out[1]); + Not(in=in[2],out=out[2]); + Not(in=in[3],out=out[3]); + Not(in=in[4],out=out[4]); + Not(in=in[5],out=out[5]); + Not(in=in[6],out=out[6]); + Not(in=in[7],out=out[7]); + Not(in=in[8],out=out[8]); + Not(in=in[9],out=out[9]); + Not(in=in[10],out=out[10]); + Not(in=in[11],out=out[11]); + Not(in=in[12],out=out[12]); + Not(in=in[13],out=out[13]); + Not(in=in[14],out=out[14]); + Not(in=in[15],out=out[15]); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Or.hdl b/project-1-boolean-logic/01/Or.hdl new file mode 100755 index 0000000..bf52e71 --- /dev/null +++ b/project-1-boolean-logic/01/Or.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/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. + Nand(a=a, b=a, out=nanda); + Nand(a=b, b=b, out=nandb); + Nand(a=nanda , b=nandb , out=out); + +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Or16.hdl b/project-1-boolean-logic/01/Or16.hdl new file mode 100755 index 0000000..4b8f2b7 --- /dev/null +++ b/project-1-boolean-logic/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/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: + + 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]); +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Or8Way.hdl b/project-1-boolean-logic/01/Or8Way.hdl new file mode 100755 index 0000000..8d2f1d8 --- /dev/null +++ b/project-1-boolean-logic/01/Or8Way.hdl @@ -0,0 +1,25 @@ +// 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: + + Or(a= in[0], b=in[1] , out=out00 ); + Or(a= in[2], b=in[3] , out=out01 ); + Or(a= in[4], b=in[5] , out=out02 ); + Or(a= in[6], b=in[7] , out=out03 ); + + Or(a= out00 , b= out01 , out= out0001 ); + Or(a= out02, b=out03 , out=out0203 ); + + Or(a=out0001 , b=out0203 , out= out ); + +} \ No newline at end of file diff --git a/project-1-boolean-logic/01/Xor.hdl b/project-1-boolean-logic/01/Xor.hdl new file mode 100755 index 0000000..c9b6107 --- /dev/null +++ b/project-1-boolean-logic/01/Xor.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/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: + + Not(in=a , out=nota ); + Not(in=b , out=notb ); + + And(a= a, b= notb , out= aAndNotB ); + And(a= b, b= nota, out= bAndNotA ); + + Or(a= aAndNotB, b=bAndNotA , out= out); + + //// Replace this comment with your code. +} \ No newline at end of file diff --git a/project-1-boolean-logic/boolean_logic.pdf b/project-1-boolean-logic/boolean_logic.pdf new file mode 100644 index 0000000..872d99d Binary files /dev/null and b/project-1-boolean-logic/boolean_logic.pdf differ diff --git a/project-1-boolean-logic/project_1.pdf b/project-1-boolean-logic/project_1.pdf new file mode 100644 index 0000000..67a798d Binary files /dev/null and b/project-1-boolean-logic/project_1.pdf differ