Skip to content

Commit

Permalink
hdl and asm codes
Browse files Browse the repository at this point in the history
hdl -- hardware descriptive language. 
asm -- is kind of assembly language.
both language are used to simulate hardware and software interaction via nand2tetris software suite.
  • Loading branch information
ni9999 authored Feb 8, 2022
1 parent 827c50f commit d6bab85
Show file tree
Hide file tree
Showing 30 changed files with 1,005 additions and 0 deletions.
20 changes: 20 additions & 0 deletions nand2tetris/Project01/And.hdl
Original file line number Diff line number Diff line change
@@ -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=nandout);
Not(in=nandout, out=out);
}
33 changes: 33 additions & 0 deletions nand2tetris/Project01/And16.hdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/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:
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]);
}
21 changes: 21 additions & 0 deletions nand2tetris/Project01/DMux.hdl
Original file line number Diff line number Diff line change
@@ -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);
}
24 changes: 24 additions & 0 deletions nand2tetris/Project01/DMux4Way.hdl
Original file line number Diff line number Diff line change
@@ -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/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:
DMux(in=in, sel=sel[0], a=p, b=q);

DMux(in=p, sel=sel[1], a=a, b=c);
DMux(in=q, sel=sel[1], a=b, b=d);
}
29 changes: 29 additions & 0 deletions nand2tetris/Project01/DMux8Way.hdl
Original file line number Diff line number Diff line change
@@ -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/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:
DMux(in=in, sel=sel[0], a=m, b=n); //m-> aceg n-> bdfh

DMux(in=n, sel=sel[1], a=o, b=p); //o-> bf p-> df
DMux(in=m, sel=sel[1], a=q, b=r); //q-> ae r->cg

DMux(in=p, sel=sel[2], a=d, b=h);
DMux(in=o, sel=sel[2], a=b, b=f);
DMux(in=q, sel=sel[2], a=a, b=e);
DMux(in=r, sel=sel[2], a=c, b=g);
}
22 changes: 22 additions & 0 deletions nand2tetris/Project01/Mux.hdl
Original file line number Diff line number Diff line change
@@ -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);
Nand(a=a, b=notsel, out=x);
Nand(a=b, b=sel, out=y);
Nand(a=x, b=y, out=out);
}
34 changes: 34 additions & 0 deletions nand2tetris/Project01/Mux16.hdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// 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:
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]);
}
27 changes: 27 additions & 0 deletions nand2tetris/Project01/Mux4Way16.hdl
Original file line number Diff line number Diff line change
@@ -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/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:
//important: in variable name there cannot be any number or char like _
//indexing is like this: 01011
// ^^^^^
// 43210
Mux16(a=a, b=b, sel=sel[0], out=outselab);
Mux16(a=c, b=d, sel=sel[0], out=outselcd);
Mux16(a=outselab, b=outselcd, sel=sel[1], out=out);
}
31 changes: 31 additions & 0 deletions nand2tetris/Project01/Mux8Way16.hdl
Original file line number Diff line number Diff line change
@@ -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/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:
Mux16(a=a, b=b, sel=sel[0], out=outselab);
Mux16(a=c, b=d, sel=sel[0], out=outselcd);
Mux16(a=outselab, b=outselcd, sel=sel[1], out=outabcd);

Mux16(a=e, b=f, sel=sel[0], out=outselef);
Mux16(a=g, b=h, sel=sel[0], out=outselgh);
Mux16(a=outselef, b=outselgh, sel=sel[1], out=outefgh);

Mux16(a=outabcd, b=outefgh, sel=sel[2], out=out);
}
18 changes: 18 additions & 0 deletions nand2tetris/Project01/Not.hdl
Original file line number Diff line number Diff line change
@@ -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);
}
33 changes: 33 additions & 0 deletions nand2tetris/Project01/Not16.hdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/Not16.hdl

/**
* 16-bit Not:
* for i=0..15: out[i] = not in[i]
*/

CHIP Not16 {
IN in[16];
OUT out[16];

PARTS:
// Put your code here:
Not(in=in[0], out=out[0]);
Not(in=in[1], out=out[1]);
Not(in=in[2], out=out[2]);
Not(in=in[3], out=out[3]);
Not(in=in[4], out=out[4]);
Not(in=in[5], out=out[5]);
Not(in=in[6], out=out[6]);
Not(in=in[7], out=out[7]);
Not(in=in[8], out=out[8]);
Not(in=in[9], out=out[9]);
Not(in=in[10], out=out[10]);
Not(in=in[11], out=out[11]);
Not(in=in[12], out=out[12]);
Not(in=in[13], out=out[13]);
Not(in=in[14], out=out[14]);
Not(in=in[15], out=out[15]);
}
22 changes: 22 additions & 0 deletions nand2tetris/Project01/Or.hdl
Original file line number Diff line number Diff line change
@@ -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/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);

}
33 changes: 33 additions & 0 deletions nand2tetris/Project01/Or16.hdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/01/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:
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]);
}
24 changes: 24 additions & 0 deletions nand2tetris/Project01/Or8Way.hdl
Original file line number Diff line number Diff line change
@@ -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/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:
Or(a=in[0], b=in[1], out=a);
Or(a=a, b=in[2], out=b);
Or(a=b, b=in[3], out=c);
Or(a=c, b=in[4], out=d);
Or(a=d, b=in[5], out=e);
Or(a=e, b=in[6], out=f);
Or(a=f, b=in[7], out=out);
}
Loading

0 comments on commit d6bab85

Please sign in to comment.