mirror of
https://github.com/StepanovPlaton/Nand2Tetris.git
synced 2026-04-03 12:20:47 +04:00
Complete first project
This commit is contained in:
16
1_Boolean_Arithmetic/And.hdl
Normal file
16
1_Boolean_Arithmetic/And.hdl
Normal file
@@ -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/And.hdl
|
||||||
|
/**
|
||||||
|
* And gate:
|
||||||
|
* if (a and b) out = 1, else out = 0
|
||||||
|
*/
|
||||||
|
CHIP And {
|
||||||
|
IN a, b;
|
||||||
|
OUT out;
|
||||||
|
|
||||||
|
PARTS:
|
||||||
|
Nand(a=a, b=b, out=outn);
|
||||||
|
Not(in=outn, out=out);
|
||||||
|
}
|
||||||
31
1_Boolean_Arithmetic/And16.hdl
Normal file
31
1_Boolean_Arithmetic/And16.hdl
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 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]);
|
||||||
|
}
|
||||||
18
1_Boolean_Arithmetic/DMux.hdl
Normal file
18
1_Boolean_Arithmetic/DMux.hdl
Normal file
@@ -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/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=nsel);
|
||||||
|
And(a=nsel, b=in, out=a);
|
||||||
|
And(a=sel, b=in, out=b);
|
||||||
|
}
|
||||||
20
1_Boolean_Arithmetic/DMux4Way.hdl
Normal file
20
1_Boolean_Arithmetic/DMux4Way.hdl
Normal file
@@ -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/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=x, b=y);
|
||||||
|
DMux(in=x, sel=sel[0], a=a, b=b);
|
||||||
|
DMux(in=y, sel=sel[0], a=c, b=d);
|
||||||
|
}
|
||||||
24
1_Boolean_Arithmetic/DMux8Way.hdl
Normal file
24
1_Boolean_Arithmetic/DMux8Way.hdl
Normal file
@@ -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/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=x, b=y);
|
||||||
|
DMux4Way(in=x, sel=sel[0..1], a=a, b=b, c=c, d=d);
|
||||||
|
DMux4Way(in=y, sel=sel[0..1], a=e, b=f, c=g, d=h);
|
||||||
|
}
|
||||||
18
1_Boolean_Arithmetic/Mux.hdl
Normal file
18
1_Boolean_Arithmetic/Mux.hdl
Normal file
@@ -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/Mux.hdl
|
||||||
|
/**
|
||||||
|
* Multiplexor:
|
||||||
|
* if (sel = 0) out = a, else out = b
|
||||||
|
*/
|
||||||
|
CHIP Mux {
|
||||||
|
IN a, b, sel;
|
||||||
|
OUT out;
|
||||||
|
|
||||||
|
PARTS:
|
||||||
|
Not(in=sel, out=nsel);
|
||||||
|
And(a=nsel, b=a, out=aa);
|
||||||
|
And(a=sel, b=b, out=bb);
|
||||||
|
Or(a=aa, b=bb, out=out);
|
||||||
|
}
|
||||||
31
1_Boolean_Arithmetic/Mux16.hdl
Normal file
31
1_Boolean_Arithmetic/Mux16.hdl
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 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]);
|
||||||
|
}
|
||||||
20
1_Boolean_Arithmetic/Mux4Way16.hdl
Normal file
20
1_Boolean_Arithmetic/Mux4Way16.hdl
Normal file
@@ -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/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=x);
|
||||||
|
Mux16(a=c, b=d, sel=sel[0], out=y);
|
||||||
|
Mux16(a=x, b=y, sel=sel[1], out=out);
|
||||||
|
}
|
||||||
26
1_Boolean_Arithmetic/Mux8Way16.hdl
Normal file
26
1_Boolean_Arithmetic/Mux8Way16.hdl
Normal file
@@ -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/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=x);
|
||||||
|
Mux4Way16(a=e, b=f, c=g, d=h, sel=sel[0..1], out=y);
|
||||||
|
Mux16(a=x, b=y, sel=sel[2], out=out);
|
||||||
|
}
|
||||||
15
1_Boolean_Arithmetic/Not.hdl
Normal file
15
1_Boolean_Arithmetic/Not.hdl
Normal file
@@ -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:
|
||||||
|
Nand(a=in, b=in, out=out);
|
||||||
|
}
|
||||||
31
1_Boolean_Arithmetic/Not16.hdl
Normal file
31
1_Boolean_Arithmetic/Not16.hdl
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 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]);
|
||||||
|
}
|
||||||
17
1_Boolean_Arithmetic/Or.hdl
Normal file
17
1_Boolean_Arithmetic/Or.hdl
Normal file
@@ -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/Or.hdl
|
||||||
|
/**
|
||||||
|
* Or gate:
|
||||||
|
* if (a or b) out = 1, else out = 0
|
||||||
|
*/
|
||||||
|
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);
|
||||||
|
}
|
||||||
31
1_Boolean_Arithmetic/Or16.hdl
Normal file
31
1_Boolean_Arithmetic/Or16.hdl
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// 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]);
|
||||||
|
}
|
||||||
21
1_Boolean_Arithmetic/Or8Way.hdl
Normal file
21
1_Boolean_Arithmetic/Or8Way.hdl
Normal file
@@ -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/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=x1);
|
||||||
|
Or(a=in[2], b=in[3], out=x2);
|
||||||
|
Or(a=in[4], b=in[5], out=x3);
|
||||||
|
Or(a=in[6], b=in[7], out=x4);
|
||||||
|
Or(a=x1, b=x2, out=y1);
|
||||||
|
Or(a=x3, b=x4, out=y2);
|
||||||
|
Or(a=y1, b=y2, out=out);
|
||||||
|
}
|
||||||
17
1_Boolean_Arithmetic/Xor.hdl
Normal file
17
1_Boolean_Arithmetic/Xor.hdl
Normal file
@@ -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/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:
|
||||||
|
Nand(a=a,b=b,out=nab);
|
||||||
|
Or(a=a,b=b,out=orab);
|
||||||
|
And(a=nab, b=orab, out=out);
|
||||||
|
}
|
||||||
17
README.md
Normal file
17
README.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# [Nand2Tetris](https://www.nand2tetris.org)
|
||||||
|
|
||||||
|
From Nand to Tetris
|
||||||
|
Building a Modern Computer From First Principles
|
||||||
|
|
||||||
|
В этом репозитории я сохраняю свои работы в ходе прохождения курса [nand2tetris](https://www.nand2tetris.org)
|
||||||
|
|
||||||
|
Курс состоит из двух частей, в первой части 6 проектов:
|
||||||
|
- [Project 1: Boolean Logic](./1_Boolean_Arithmetic) - создание
|
||||||
|
- Project 2: Boolean Arithmetic
|
||||||
|
- Project 3: Memory
|
||||||
|
- Project 4: Machine Language
|
||||||
|
- Project 5: Computer Architecture
|
||||||
|
- Project 6: Assembler
|
||||||
|
|
||||||
|
## Основная идея курса в коротком видео:
|
||||||
|
[](https://youtu.be/wTl5wRDT0CU)
|
||||||
Reference in New Issue
Block a user