From 9c0cb1d1c32724fc95ac9548e4f8d873d3adaccc Mon Sep 17 00:00:00 2001 From: Frederick Yin Date: Tue, 16 Aug 2022 11:53:39 +0800 Subject: nand2tetris software suite --- tools/builtInChips/ALU.class | Bin 0 -> 1754 bytes tools/builtInChips/ALU.hdl | 55 +++++++++++++++++++++++++++++++ tools/builtInChips/ARegister.class | Bin 0 -> 337 bytes tools/builtInChips/ARegister.hdl | 24 ++++++++++++++ tools/builtInChips/Add16.class | Bin 0 -> 343 bytes tools/builtInChips/Add16.hdl | 18 ++++++++++ tools/builtInChips/And.class | Bin 0 -> 341 bytes tools/builtInChips/And.hdl | 16 +++++++++ tools/builtInChips/And16.hdl | 17 ++++++++++ tools/builtInChips/Bit.class | Bin 0 -> 416 bytes tools/builtInChips/Bit.hdl | 19 +++++++++++ tools/builtInChips/DFF.class | Bin 0 -> 401 bytes tools/builtInChips/DFF.hdl | 18 ++++++++++ tools/builtInChips/DMux.class | Bin 0 -> 365 bytes tools/builtInChips/DMux.hdl | 20 +++++++++++ tools/builtInChips/DMux4Way.class | Bin 0 -> 408 bytes tools/builtInChips/DMux4Way.hdl | 22 +++++++++++++ tools/builtInChips/DMux8Way.class | Bin 0 -> 488 bytes tools/builtInChips/DMux8Way.hdl | 22 +++++++++++++ tools/builtInChips/DRegister.class | Bin 0 -> 339 bytes tools/builtInChips/DRegister.hdl | 24 ++++++++++++++ tools/builtInChips/FullAdder.class | Bin 0 -> 380 bytes tools/builtInChips/FullAdder.hdl | 19 +++++++++++ tools/builtInChips/HalfAdder.class | Bin 0 -> 360 bytes tools/builtInChips/HalfAdder.hdl | 18 ++++++++++ tools/builtInChips/Inc16.class | Bin 0 -> 333 bytes tools/builtInChips/Inc16.hdl | 18 ++++++++++ tools/builtInChips/Keyboard.class | Bin 0 -> 1709 bytes tools/builtInChips/Keyboard.hdl | 23 +++++++++++++ tools/builtInChips/Mux.class | Bin 0 -> 356 bytes tools/builtInChips/Mux.hdl | 16 +++++++++ tools/builtInChips/Mux16.hdl | 16 +++++++++ tools/builtInChips/Mux4Way16.class | Bin 0 -> 435 bytes tools/builtInChips/Mux4Way16.hdl | 21 ++++++++++++ tools/builtInChips/Mux8Way16.class | Bin 0 -> 527 bytes tools/builtInChips/Mux8Way16.hdl | 24 ++++++++++++++ tools/builtInChips/Nand.class | Bin 0 -> 344 bytes tools/builtInChips/Nand.hdl | 16 +++++++++ tools/builtInChips/Not.class | Bin 0 -> 331 bytes tools/builtInChips/Not.hdl | 16 +++++++++ tools/builtInChips/Not16.class | Bin 0 -> 327 bytes tools/builtInChips/Not16.hdl | 16 +++++++++ tools/builtInChips/Or.class | Bin 0 -> 340 bytes tools/builtInChips/Or.hdl | 16 +++++++++ tools/builtInChips/Or16.hdl | 16 +++++++++ tools/builtInChips/Or8Way.class | Bin 0 -> 340 bytes tools/builtInChips/Or8Way.hdl | 16 +++++++++ tools/builtInChips/PC.class | Bin 0 -> 1899 bytes tools/builtInChips/PC.hdl | 22 +++++++++++++ tools/builtInChips/RAM.class | Bin 0 -> 1928 bytes tools/builtInChips/RAM16K.class | Bin 0 -> 390 bytes tools/builtInChips/RAM16K.hdl | 24 ++++++++++++++ tools/builtInChips/RAM4K.class | Bin 0 -> 309 bytes tools/builtInChips/RAM4K.hdl | 24 ++++++++++++++ tools/builtInChips/RAM512.class | Bin 0 -> 311 bytes tools/builtInChips/RAM512.hdl | 24 ++++++++++++++ tools/builtInChips/RAM64.class | Bin 0 -> 308 bytes tools/builtInChips/RAM64.hdl | 24 ++++++++++++++ tools/builtInChips/RAM8.class | Bin 0 -> 306 bytes tools/builtInChips/RAM8.hdl | 24 ++++++++++++++ tools/builtInChips/ROM32K.class | Bin 0 -> 3469 bytes tools/builtInChips/ROM32K.hdl | 30 +++++++++++++++++ tools/builtInChips/Register.class | Bin 0 -> 423 bytes tools/builtInChips/Register.hdl | 19 +++++++++++ tools/builtInChips/RegisterWithGUI.class | Bin 0 -> 1769 bytes tools/builtInChips/Screen.class | Bin 0 -> 1322 bytes tools/builtInChips/Screen.hdl | 35 ++++++++++++++++++++ tools/builtInChips/Xor.class | Bin 0 -> 341 bytes tools/builtInChips/Xor.hdl | 16 +++++++++ 69 files changed, 748 insertions(+) create mode 100644 tools/builtInChips/ALU.class create mode 100644 tools/builtInChips/ALU.hdl create mode 100644 tools/builtInChips/ARegister.class create mode 100644 tools/builtInChips/ARegister.hdl create mode 100644 tools/builtInChips/Add16.class create mode 100644 tools/builtInChips/Add16.hdl create mode 100644 tools/builtInChips/And.class create mode 100644 tools/builtInChips/And.hdl create mode 100644 tools/builtInChips/And16.hdl create mode 100644 tools/builtInChips/Bit.class create mode 100644 tools/builtInChips/Bit.hdl create mode 100644 tools/builtInChips/DFF.class create mode 100644 tools/builtInChips/DFF.hdl create mode 100644 tools/builtInChips/DMux.class create mode 100644 tools/builtInChips/DMux.hdl create mode 100644 tools/builtInChips/DMux4Way.class create mode 100644 tools/builtInChips/DMux4Way.hdl create mode 100644 tools/builtInChips/DMux8Way.class create mode 100644 tools/builtInChips/DMux8Way.hdl create mode 100644 tools/builtInChips/DRegister.class create mode 100644 tools/builtInChips/DRegister.hdl create mode 100644 tools/builtInChips/FullAdder.class create mode 100644 tools/builtInChips/FullAdder.hdl create mode 100644 tools/builtInChips/HalfAdder.class create mode 100644 tools/builtInChips/HalfAdder.hdl create mode 100644 tools/builtInChips/Inc16.class create mode 100644 tools/builtInChips/Inc16.hdl create mode 100644 tools/builtInChips/Keyboard.class create mode 100644 tools/builtInChips/Keyboard.hdl create mode 100644 tools/builtInChips/Mux.class create mode 100644 tools/builtInChips/Mux.hdl create mode 100644 tools/builtInChips/Mux16.hdl create mode 100644 tools/builtInChips/Mux4Way16.class create mode 100644 tools/builtInChips/Mux4Way16.hdl create mode 100644 tools/builtInChips/Mux8Way16.class create mode 100644 tools/builtInChips/Mux8Way16.hdl create mode 100644 tools/builtInChips/Nand.class create mode 100644 tools/builtInChips/Nand.hdl create mode 100644 tools/builtInChips/Not.class create mode 100644 tools/builtInChips/Not.hdl create mode 100644 tools/builtInChips/Not16.class create mode 100644 tools/builtInChips/Not16.hdl create mode 100644 tools/builtInChips/Or.class create mode 100644 tools/builtInChips/Or.hdl create mode 100644 tools/builtInChips/Or16.hdl create mode 100644 tools/builtInChips/Or8Way.class create mode 100644 tools/builtInChips/Or8Way.hdl create mode 100644 tools/builtInChips/PC.class create mode 100644 tools/builtInChips/PC.hdl create mode 100644 tools/builtInChips/RAM.class create mode 100644 tools/builtInChips/RAM16K.class create mode 100644 tools/builtInChips/RAM16K.hdl create mode 100644 tools/builtInChips/RAM4K.class create mode 100644 tools/builtInChips/RAM4K.hdl create mode 100644 tools/builtInChips/RAM512.class create mode 100644 tools/builtInChips/RAM512.hdl create mode 100644 tools/builtInChips/RAM64.class create mode 100644 tools/builtInChips/RAM64.hdl create mode 100644 tools/builtInChips/RAM8.class create mode 100644 tools/builtInChips/RAM8.hdl create mode 100644 tools/builtInChips/ROM32K.class create mode 100644 tools/builtInChips/ROM32K.hdl create mode 100644 tools/builtInChips/Register.class create mode 100644 tools/builtInChips/Register.hdl create mode 100644 tools/builtInChips/RegisterWithGUI.class create mode 100644 tools/builtInChips/Screen.class create mode 100644 tools/builtInChips/Screen.hdl create mode 100644 tools/builtInChips/Xor.class create mode 100644 tools/builtInChips/Xor.hdl (limited to 'tools/builtInChips') diff --git a/tools/builtInChips/ALU.class b/tools/builtInChips/ALU.class new file mode 100644 index 0000000..03f95dc Binary files /dev/null and b/tools/builtInChips/ALU.class differ diff --git a/tools/builtInChips/ALU.hdl b/tools/builtInChips/ALU.hdl new file mode 100644 index 0000000..e5fd1f0 --- /dev/null +++ b/tools/builtInChips/ALU.hdl @@ -0,0 +1,55 @@ +// This file is part of www.nand2tetris.org +// and the book "The Elements of Computing Systems" +// by Nisan and Schocken, MIT Press. +// File name: tools/builtIn/ALU.hdl + +/** + * The ALU. Computes one of the following functions: + * x+y, x-y, y–x, 0, 1, -1, x, y, -x, -y, !x, !y, + * x+1, y+1, x-1, y-1, x&y, x|y on two 16-bit inputs. + * Which function to compute is determined by 6 input bits + * denoted zx, nx, zy, ny, f, no. + * The computed function's value is called "out". + * In addition to computing out, the ALU computes two + * 1-bit outputs called zr and ng: + * if out == 0, zr = 1; otherwise zr = 0; + * If out < 0, ng = 1; otherwise ng = 0. + * The 6-bit combinations (zx,nx,zy,ny,f,no) and + * their effect are documented in the book. + */ + +// Implementation: the ALU manipulates the x and y +// inputs and then operates on the resulting values, +// as follows: +// if (zx == 1) sets x = 0 // 16-bit constant +// if (nx == 1) sets x = ~x // bitwise "not" +// if (zy == 1) sets y = 0 // 16-bit constant +// if (ny == 1) sets y = ~y // bitwise "not" +// if (f == 1) sets out = x + y // integer 2's-complement addition +// if (f == 0) sets out = x & y // bitwise And +// if (no == 1) sets out = ~out // bitwise Not +// if (out == 0) sets zr = 1 +// if (out < 0) sets ng = 1 + + +CHIP ALU { + + IN // 16-bit inputs: + x[16], y[16], + // Control bits: + zx, // Zero the x input + nx, // Negate the x input + zy, // Zero the y input + ny, // Negate the y input + f, // Function code: 1 for add, 0 for and + no; // Negate the out output + + OUT // 16-bit output + out[16], + + // ALU output flags + zr, // 1 if out=0, 0 otherwise + ng; // 1 if out<0, 0 otherwise + + BUILTIN ALU; +} diff --git a/tools/builtInChips/ARegister.class b/tools/builtInChips/ARegister.class new file mode 100644 index 0000000..ab9aadc Binary files /dev/null and b/tools/builtInChips/ARegister.class differ diff --git a/tools/builtInChips/ARegister.hdl b/tools/builtInChips/ARegister.hdl new file mode 100644 index 0000000..23aee73 --- /dev/null +++ b/tools/builtInChips/ARegister.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: tools/builtIn/ARegister.hdl + +/** + * A 16-Bit register called "A Register". + * If load[t-1]=1 then out[t] = in[t-1] + * else out does not change (out[t] = out[t-1]) + * + * This built-in chip implementation has the side effect of + * providing a GUI representation of a 16-bit register + * called "A register" (typically used to store an address). + */ + +CHIP ARegister { + + IN in[16], load; + OUT out[16]; + + BUILTIN ARegister; + CLOCKED in, load; +} + diff --git a/tools/builtInChips/Add16.class b/tools/builtInChips/Add16.class new file mode 100644 index 0000000..c3754ce Binary files /dev/null and b/tools/builtInChips/Add16.class differ diff --git a/tools/builtInChips/Add16.hdl b/tools/builtInChips/Add16.hdl new file mode 100644 index 0000000..a494af4 --- /dev/null +++ b/tools/builtInChips/Add16.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: tools/builtIn/Add16.hdl + +/* + * Adds two 16-bit values. + * The most significant carry bit is ignored. + */ + +CHIP Add16 { + + IN a[16], b[16]; + OUT out[16]; + + BUILTIN Add16; +} + diff --git a/tools/builtInChips/And.class b/tools/builtInChips/And.class new file mode 100644 index 0000000..2c7492b Binary files /dev/null and b/tools/builtInChips/And.class differ diff --git a/tools/builtInChips/And.hdl b/tools/builtInChips/And.hdl new file mode 100644 index 0000000..d2c48b5 --- /dev/null +++ b/tools/builtInChips/And.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: tools/builtIn/And.hdl + +/** + * And gate: out = 1 if {a == 1 and b == 1}, 0 otherwise + */ + +CHIP And { + + IN a, b; + OUT out; + + BUILTIN And; +} diff --git a/tools/builtInChips/And16.hdl b/tools/builtInChips/And16.hdl new file mode 100644 index 0000000..4c71874 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/And16.hdl + +/** + * 16-bit-wise And gate: for i = 0..15: out[i] = a[i] and b[i] + */ + +CHIP And16 { + + IN a[16], b[16]; + OUT out[16]; + + BUILTIN And; +} + diff --git a/tools/builtInChips/Bit.class b/tools/builtInChips/Bit.class new file mode 100644 index 0000000..1e5a3c4 Binary files /dev/null and b/tools/builtInChips/Bit.class differ diff --git a/tools/builtInChips/Bit.hdl b/tools/builtInChips/Bit.hdl new file mode 100644 index 0000000..a0a76bb --- /dev/null +++ b/tools/builtInChips/Bit.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: tools/builtIn/Bit.hdl + +/** + * 1-bit register. + * If load[t] == 1 then out[t+1] = in[t] + * else out[t+1] = out[t] (no change) + */ + +CHIP Bit { + + IN in, load; + OUT out; + + BUILTIN Bit; + CLOCKED in, load; +} diff --git a/tools/builtInChips/DFF.class b/tools/builtInChips/DFF.class new file mode 100644 index 0000000..49efcf1 Binary files /dev/null and b/tools/builtInChips/DFF.class differ diff --git a/tools/builtInChips/DFF.hdl b/tools/builtInChips/DFF.hdl new file mode 100644 index 0000000..c66b796 --- /dev/null +++ b/tools/builtInChips/DFF.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: tools/builtIn/DFF.hdl + +/** + * Data Flip-flop: out(t) = in(t-1) + * where t is the current time unit, or clock cycle. + */ + +CHIP DFF { + + IN in; + OUT out; + + BUILTIN DFF; + CLOCKED in; +} diff --git a/tools/builtInChips/DMux.class b/tools/builtInChips/DMux.class new file mode 100644 index 0000000..8cf4e0b Binary files /dev/null and b/tools/builtInChips/DMux.class differ diff --git a/tools/builtInChips/DMux.hdl b/tools/builtInChips/DMux.hdl new file mode 100644 index 0000000..80153d7 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/DMux.hdl + +/** + * Dmultiplexor. + * {a,b} = {in,0} if sel == 0 + * {0,in} if sel == 1 + */ + + +CHIP DMux { + + IN in, sel; + OUT a, b; + + BUILTIN DMux; +} + diff --git a/tools/builtInChips/DMux4Way.class b/tools/builtInChips/DMux4Way.class new file mode 100644 index 0000000..ab72a17 Binary files /dev/null and b/tools/builtInChips/DMux4Way.class differ diff --git a/tools/builtInChips/DMux4Way.hdl b/tools/builtInChips/DMux4Way.hdl new file mode 100644 index 0000000..110bb4e --- /dev/null +++ b/tools/builtInChips/DMux4Way.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: tools/builtIn/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; + + BUILTIN DMux4Way; +} + diff --git a/tools/builtInChips/DMux8Way.class b/tools/builtInChips/DMux8Way.class new file mode 100644 index 0000000..80e7437 Binary files /dev/null and b/tools/builtInChips/DMux8Way.class differ diff --git a/tools/builtInChips/DMux8Way.hdl b/tools/builtInChips/DMux8Way.hdl new file mode 100644 index 0000000..c5536b8 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/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; + + BUILTIN DMux8Way; +} + diff --git a/tools/builtInChips/DRegister.class b/tools/builtInChips/DRegister.class new file mode 100644 index 0000000..74a713d Binary files /dev/null and b/tools/builtInChips/DRegister.class differ diff --git a/tools/builtInChips/DRegister.hdl b/tools/builtInChips/DRegister.hdl new file mode 100644 index 0000000..6c9a254 --- /dev/null +++ b/tools/builtInChips/DRegister.hdl @@ -0,0 +1,24 @@ +// This file is part of the materials accompanying the book +// "The Elements of Computing Systems" by Nisan and Schocken, +// MIT Press. Book site: www.idc.ac.il/tecs +// File name: tools/builtIn/DRegister.hdl + +/** + * A 16-Bit register called "D Register". + * If load[t-1]=1 then out[t] = in[t-1] + * else out does not change (out[t] = out[t-1]) + * + * This built-in chip implementation has the side effect of + * providing a GUI representation of a 16-bit register + * called "D register" (typically used to store data). + */ + +CHIP DRegister { + + IN in[16], load; + OUT out[16]; + + BUILTIN DRegister; + CLOCKED in, load; +} + diff --git a/tools/builtInChips/FullAdder.class b/tools/builtInChips/FullAdder.class new file mode 100644 index 0000000..2ed9ead Binary files /dev/null and b/tools/builtInChips/FullAdder.class differ diff --git a/tools/builtInChips/FullAdder.hdl b/tools/builtInChips/FullAdder.hdl new file mode 100644 index 0000000..a4caa56 --- /dev/null +++ b/tools/builtInChips/FullAdder.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: tools/builtIn/FullAdder.hdl + +/** + * Full adder. Computes sum, the least significant bit of + * a + b + c, and carry, the most significant bit of a + b + c. + */ + +CHIP FullAdder { + + IN a, b, c; + OUT sum, // LSB of a + b + c + carry; // MSB of a + b + c + + BUILTIN FullAdder; +} + diff --git a/tools/builtInChips/HalfAdder.class b/tools/builtInChips/HalfAdder.class new file mode 100644 index 0000000..e7741ed Binary files /dev/null and b/tools/builtInChips/HalfAdder.class differ diff --git a/tools/builtInChips/HalfAdder.hdl b/tools/builtInChips/HalfAdder.hdl new file mode 100644 index 0000000..1591b96 --- /dev/null +++ b/tools/builtInChips/HalfAdder.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: tools/builtIn/HalfAdder.hdl + +/** + * Half adder. Computes sum, the least significnat bit of a + b, + * and carry, the most significnat bit of a + b. + */ + +CHIP HalfAdder { + + IN a, b; + OUT sum, // LSB of a + b + carry; // MSB of a + b + + BUILTIN HalfAdder; +} diff --git a/tools/builtInChips/Inc16.class b/tools/builtInChips/Inc16.class new file mode 100644 index 0000000..b5b2aeb Binary files /dev/null and b/tools/builtInChips/Inc16.class differ diff --git a/tools/builtInChips/Inc16.hdl b/tools/builtInChips/Inc16.hdl new file mode 100644 index 0000000..9d2d49b --- /dev/null +++ b/tools/builtInChips/Inc16.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: tools/builtIn/Inc16.hdl + +/** + * 16-bit incrementer. out = in + 1 (16-bit addition). + * Overflow is neither detected nor handled. + */ + +CHIP Inc16 { + + IN in[16]; + OUT out[16]; + + BUILTIN Inc16; +} + diff --git a/tools/builtInChips/Keyboard.class b/tools/builtInChips/Keyboard.class new file mode 100644 index 0000000..090b7cc Binary files /dev/null and b/tools/builtInChips/Keyboard.class differ diff --git a/tools/builtInChips/Keyboard.hdl b/tools/builtInChips/Keyboard.hdl new file mode 100644 index 0000000..26ca5ed --- /dev/null +++ b/tools/builtInChips/Keyboard.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: tools/builtIn/Keyboard.hdl + +/** + * The keyboard (memory map). + * Outputs the code of the currently pressed key. + * + * The built-in chip implementation has two side effects supplied + * by the simulator. First, the keyboard memory map is continuously + * being refreshed from the physical keyboard unit. Second, it + * displays a keyboard icon and data entry GUI. + */ + +CHIP Keyboard { + + OUT out[16]; // The ASCII code of the pressed key, + // or 0 if no key is currently pressed, + // or one the special codes listed in Figure 5.5. + + BUILTIN Keyboard; +} diff --git a/tools/builtInChips/Mux.class b/tools/builtInChips/Mux.class new file mode 100644 index 0000000..75c6645 Binary files /dev/null and b/tools/builtInChips/Mux.class differ diff --git a/tools/builtInChips/Mux.hdl b/tools/builtInChips/Mux.hdl new file mode 100644 index 0000000..a0eefbc --- /dev/null +++ b/tools/builtInChips/Mux.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: tools/builtIn/Mux.hdl + +/** + * Multiplexor. If sel == 1 then out = b else out = a. + */ + +CHIP Mux { + + IN a, b, sel; + OUT out; + + BUILTIN Mux; +} diff --git a/tools/builtInChips/Mux16.hdl b/tools/builtInChips/Mux16.hdl new file mode 100644 index 0000000..676d1f4 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/Mux16.hdl + +/** + * 16 bit multiplexor. If sel == 1 then out = b else out = a. + */ + +CHIP Mux16 { + + IN a[16], b[16], sel; + OUT out[16]; + + BUILTIN Mux; +} diff --git a/tools/builtInChips/Mux4Way16.class b/tools/builtInChips/Mux4Way16.class new file mode 100644 index 0000000..b2e2ed7 Binary files /dev/null and b/tools/builtInChips/Mux4Way16.class differ diff --git a/tools/builtInChips/Mux4Way16.hdl b/tools/builtInChips/Mux4Way16.hdl new file mode 100644 index 0000000..9929e82 --- /dev/null +++ b/tools/builtInChips/Mux4Way16.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: tools/builtIn/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]; + + BUILTIN Mux4Way16; +} diff --git a/tools/builtInChips/Mux8Way16.class b/tools/builtInChips/Mux8Way16.class new file mode 100644 index 0000000..d8040ef Binary files /dev/null and b/tools/builtInChips/Mux8Way16.class differ diff --git a/tools/builtInChips/Mux8Way16.hdl b/tools/builtInChips/Mux8Way16.hdl new file mode 100644 index 0000000..dc16861 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/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]; + + BUILTIN Mux8Way16; +} \ No newline at end of file diff --git a/tools/builtInChips/Nand.class b/tools/builtInChips/Nand.class new file mode 100644 index 0000000..4b429ba Binary files /dev/null and b/tools/builtInChips/Nand.class differ diff --git a/tools/builtInChips/Nand.hdl b/tools/builtInChips/Nand.hdl new file mode 100644 index 0000000..ae0204e --- /dev/null +++ b/tools/builtInChips/Nand.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: tools/builtIn/Nand.hdl + +/** + * Nand gate: out = a Nand b. + */ + +CHIP Nand { + + IN a, b; + OUT out; + + BUILTIN Nand; +} diff --git a/tools/builtInChips/Not.class b/tools/builtInChips/Not.class new file mode 100644 index 0000000..4726b67 Binary files /dev/null and b/tools/builtInChips/Not.class differ diff --git a/tools/builtInChips/Not.hdl b/tools/builtInChips/Not.hdl new file mode 100644 index 0000000..5b9d897 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/Not.hdl + +/** + * Not gate: out = not in + */ + +CHIP Not { + + IN in; + OUT out; + + BUILTIN Not; +} \ No newline at end of file diff --git a/tools/builtInChips/Not16.class b/tools/builtInChips/Not16.class new file mode 100644 index 0000000..ff3e68f Binary files /dev/null and b/tools/builtInChips/Not16.class differ diff --git a/tools/builtInChips/Not16.hdl b/tools/builtInChips/Not16.hdl new file mode 100644 index 0000000..c50dab9 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/Not16.hdl + +/** + * 16-bit Not gate: for i = 0..15: out[i] = not in[i] + */ + +CHIP Not16 { + + IN in[16]; + OUT out[16]; + + BUILTIN Not16; +} \ No newline at end of file diff --git a/tools/builtInChips/Or.class b/tools/builtInChips/Or.class new file mode 100644 index 0000000..a5b64f9 Binary files /dev/null and b/tools/builtInChips/Or.class differ diff --git a/tools/builtInChips/Or.hdl b/tools/builtInChips/Or.hdl new file mode 100644 index 0000000..4a3f14b --- /dev/null +++ b/tools/builtInChips/Or.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: tools/builtIn/Or.hdl + +/** + * Or gate: out = 1 if {a == 1 or b == 1}, 0 otherwise + */ + +CHIP Or { + + IN a, b; + OUT out; + + BUILTIN Or; +} diff --git a/tools/builtInChips/Or16.hdl b/tools/builtInChips/Or16.hdl new file mode 100644 index 0000000..6c124e8 --- /dev/null +++ b/tools/builtInChips/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: tools/builtIn/Or16.hdl + +/** + * 16-bit bitwise Or gate: for i = 0..15 out[i] = a[i] or b[i]. + */ + +CHIP Or16 { + + IN a[16], b[16]; + OUT out[16]; + + BUILTIN Or; +} diff --git a/tools/builtInChips/Or8Way.class b/tools/builtInChips/Or8Way.class new file mode 100644 index 0000000..104804b Binary files /dev/null and b/tools/builtInChips/Or8Way.class differ diff --git a/tools/builtInChips/Or8Way.hdl b/tools/builtInChips/Or8Way.hdl new file mode 100644 index 0000000..dccd61d --- /dev/null +++ b/tools/builtInChips/Or8Way.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: tools/builtIn/Or8Way.hdl + +/** + * 8-way Or gate: out = in[0] or in[1] or ... or in[7]. + */ + +CHIP Or8Way { + + IN in[8]; + OUT out; + + BUILTIN Or8Way; +} diff --git a/tools/builtInChips/PC.class b/tools/builtInChips/PC.class new file mode 100644 index 0000000..1e6ada1 Binary files /dev/null and b/tools/builtInChips/PC.class differ diff --git a/tools/builtInChips/PC.hdl b/tools/builtInChips/PC.hdl new file mode 100644 index 0000000..f102d99 --- /dev/null +++ b/tools/builtInChips/PC.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: tools/builtIn/PC.hdl + +/** + * 16-bit counter with load and reset controls. + * + * If reset(t-1) then out(t) = 0 + * else if load(t-1) then out(t) = in(t-1) + * else if inc(t-1) then out(t) = out(t-1) + 1 (integer addition) + * else out(t) = out(t-1) + */ + +CHIP PC { + + IN in[16], load, inc, reset; + OUT out[16]; + + BUILTIN PC; + CLOCKED in, load, inc, reset; +} diff --git a/tools/builtInChips/RAM.class b/tools/builtInChips/RAM.class new file mode 100644 index 0000000..e17050f Binary files /dev/null and b/tools/builtInChips/RAM.class differ diff --git a/tools/builtInChips/RAM16K.class b/tools/builtInChips/RAM16K.class new file mode 100644 index 0000000..2f1e3fe Binary files /dev/null and b/tools/builtInChips/RAM16K.class differ diff --git a/tools/builtInChips/RAM16K.hdl b/tools/builtInChips/RAM16K.hdl new file mode 100644 index 0000000..7031bf9 --- /dev/null +++ b/tools/builtInChips/RAM16K.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: tools/builtIn/RAM16K.hdl + +/** + * Memory of 16K registers, each 16-bit wide. + * The chip facilitates read and write operations, as follows: + * Read: out(t) = RAM16K[address(t)](t) + * Write: If load(t-1) then RAM16K[address(t-1)](t) = in(t-1) + * In words: the chip always outputs the value stored at the memory + * location specified by address. If load=1, the in value is loaded + * into the memory location specified by address. This value becomes + * available through the out output starting from the next time step. + */ + +CHIP RAM16K { + + IN in[16], load, address[14]; + OUT out[16]; + + BUILTIN RAM16K; + CLOCKED in, load; +} diff --git a/tools/builtInChips/RAM4K.class b/tools/builtInChips/RAM4K.class new file mode 100644 index 0000000..164ebf8 Binary files /dev/null and b/tools/builtInChips/RAM4K.class differ diff --git a/tools/builtInChips/RAM4K.hdl b/tools/builtInChips/RAM4K.hdl new file mode 100644 index 0000000..8f1b211 --- /dev/null +++ b/tools/builtInChips/RAM4K.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: tools/builtIn/RAM4K.hdl + +/** + * Memory of 4K registers, each 16-bit wide. + * The chip facilitates read and write operations, as follows: + * Read: out(t) = RAM4K[address(t)](t) + * Write: If load(t-1) then RAM4K[address(t-1)](t) = in(t-1) + * In words: the chip always outputs the value stored at the memory + * location specified by address. If load == 1, the in value is loaded + * into the memory location specified by address. This value becomes + * available through the out output starting from the next time step. + */ + +CHIP RAM4K { + + IN in[16], load, address[12]; + OUT out[16]; + + BUILTIN RAM4K; + CLOCKED in, load; +} diff --git a/tools/builtInChips/RAM512.class b/tools/builtInChips/RAM512.class new file mode 100644 index 0000000..69bff7a Binary files /dev/null and b/tools/builtInChips/RAM512.class differ diff --git a/tools/builtInChips/RAM512.hdl b/tools/builtInChips/RAM512.hdl new file mode 100644 index 0000000..2a2f433 --- /dev/null +++ b/tools/builtInChips/RAM512.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: tools/builtIn/RAM512.hdl + +/** + * Memory of 512 registers, each 16-bit wide. + * The chip facilitates read and write operations, as follows: + * Read: out(t) = RAM512[address(t)](t) + * Write: If load(t-1) then RAM512[address(t-1)](t) = in(t-1) + * In words: the chip always outputs the value stored at the memory + * location specified by address. If load == 1, the in value is loaded + * into the memory location specified by address. This value becomes + * available through the out output starting from the next time step. + */ + +CHIP RAM512 { + + IN in[16], load, address[9]; + OUT out[16]; + + BUILTIN RAM512; + CLOCKED in, load; +} diff --git a/tools/builtInChips/RAM64.class b/tools/builtInChips/RAM64.class new file mode 100644 index 0000000..a1fe78a Binary files /dev/null and b/tools/builtInChips/RAM64.class differ diff --git a/tools/builtInChips/RAM64.hdl b/tools/builtInChips/RAM64.hdl new file mode 100644 index 0000000..6f32f47 --- /dev/null +++ b/tools/builtInChips/RAM64.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: tools/builtIn/RAM64.hdl + +/** + * Memory of 64 registers, each 16-bit wide. + * The chip facilitates read and write operations, as follows: + * Read: out(t) = RAM64[address(t)](t) + * Write: If load(t-1) then RAM64[address(t-1)](t) = in(t-1) + * In words: the chip always outputs the value stored at the memory + * location specified by address. If load == 1, the in value is loaded + * into the memory location specified by address. This value becomes + * available through the out output starting from the next time step. + */ + +CHIP RAM64 { + + IN in[16], load, address[6]; + OUT out[16]; + + BUILTIN RAM64; + CLOCKED in, load; +} diff --git a/tools/builtInChips/RAM8.class b/tools/builtInChips/RAM8.class new file mode 100644 index 0000000..88f106e Binary files /dev/null and b/tools/builtInChips/RAM8.class differ diff --git a/tools/builtInChips/RAM8.hdl b/tools/builtInChips/RAM8.hdl new file mode 100644 index 0000000..c08d62c --- /dev/null +++ b/tools/builtInChips/RAM8.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: tools/builtIn/RAM8.hdl + +/** + * Memory of 8 registers, each 16-bit wide. + * The chip facilitates read and write operations, as follows: + * Read: out(t) = RAM8[address(t)](t) + * Write: If load(t-1) then RAM8[address(t-1)](t) = in(t-1) + * In words: the chip always outputs the value stored at the memory + * location specified by address. If load == 1, the in value is loaded + * into the memory location specified by address. This value becomes + * available through the out output starting from the next time step. + */ + +CHIP RAM8 { + + IN in[16], load, address[3]; + OUT out[16]; + + BUILTIN RAM8; + CLOCKED in, load; +} diff --git a/tools/builtInChips/ROM32K.class b/tools/builtInChips/ROM32K.class new file mode 100644 index 0000000..c4320d8 Binary files /dev/null and b/tools/builtInChips/ROM32K.class differ diff --git a/tools/builtInChips/ROM32K.hdl b/tools/builtInChips/ROM32K.hdl new file mode 100644 index 0000000..929f824 --- /dev/null +++ b/tools/builtInChips/ROM32K.hdl @@ -0,0 +1,30 @@ +// This file is part of www.nand2tetris.org +// and the book "The Elements of Computing Systems" +// by Nisan and Schocken, MIT Press. +// File name: tools/builtIn/ROM32K.hdl + +/** + * Read-Only memory (ROM) of 16K registers, each 16-bit wide. + * The chip is designed to facilitate data read, as follows: + * out(t) = ROM32K[address(t)](t) + * In words: the chip always outputs the value stored at the + * memory location specified by address. + * + * The built-in chip implementation has a GUI side-effect, + * showing an array-like component that displays the ROM's + * contents. The ROM32K chip is supposed to be pre-loaded with + * a machine language program. To that end, the built-in chip + * implementation also knows how to handle the "ROM32K load Xxx" + * script command, where Xxx is the name of a text file containing + * a program written in the Hack machine language. When the + * simulator encounters such a command in a test script, the code + * found in the file is loaded into the simulated ROM32K unit. + */ + +CHIP ROM32K { + + IN address[15]; + OUT out[16]; + + BUILTIN ROM32K; +} diff --git a/tools/builtInChips/Register.class b/tools/builtInChips/Register.class new file mode 100644 index 0000000..3958fcd Binary files /dev/null and b/tools/builtInChips/Register.class differ diff --git a/tools/builtInChips/Register.hdl b/tools/builtInChips/Register.hdl new file mode 100644 index 0000000..3b81e46 --- /dev/null +++ b/tools/builtInChips/Register.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: tools/builtIn/Register.hdl + +/** + * 16-Bit register. + * If load[t-1]=1 then out[t] = in[t-1] + * else out does not change (out[t] = out[t-1]) + */ + +CHIP Register { + + IN in[16], load; + OUT out[16]; + + BUILTIN Register; + CLOCKED in, load; +} diff --git a/tools/builtInChips/RegisterWithGUI.class b/tools/builtInChips/RegisterWithGUI.class new file mode 100644 index 0000000..c80208c Binary files /dev/null and b/tools/builtInChips/RegisterWithGUI.class differ diff --git a/tools/builtInChips/Screen.class b/tools/builtInChips/Screen.class new file mode 100644 index 0000000..100ed03 Binary files /dev/null and b/tools/builtInChips/Screen.class differ diff --git a/tools/builtInChips/Screen.hdl b/tools/builtInChips/Screen.hdl new file mode 100644 index 0000000..5e7837b --- /dev/null +++ b/tools/builtInChips/Screen.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: tools/builtIn/Screen.hdl + +/** + * The Screen (memory map). + * Functions exactly like a 16-bit 8K RAM: + * 1. out(t)=Screen[address(t)](t) + * 2. If load(t-1) then Screen[address(t-1)](t)=in(t-1) + * + * The built-in chip implementation has the side effect of continuously + * refreshing a visual 256 by 512 black-and-white screen, simulated + * by the simulator. Each row in the visual screen is represented + * by 32 consecutive 16-bit words, starting at the top left corner + * of the visual screen. Thus the pixel at row r from the top and + * column c from the left (0<=r<=255, 0<=c<=511) reflects the c%16 + * bit (counting from LSB to MSB) of the word found in + * Screen[r*32+c/16]. + */ + +CHIP Screen { + + IN in[16], // what to write + load, // write-enable bit + address[13]; // where to read/write + OUT out[16]; // Screen value at the given address + + BUILTIN Screen; + CLOCKED in, load; +} + + + + \ No newline at end of file diff --git a/tools/builtInChips/Xor.class b/tools/builtInChips/Xor.class new file mode 100644 index 0000000..d99ad18 Binary files /dev/null and b/tools/builtInChips/Xor.class differ diff --git a/tools/builtInChips/Xor.hdl b/tools/builtInChips/Xor.hdl new file mode 100644 index 0000000..8452d73 --- /dev/null +++ b/tools/builtInChips/Xor.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: tools/builtIn/Xor.hdl + +/** + * Exclusive-or gate: out = !(a == b). + */ + +CHIP Xor { + + IN a, b; + OUT out; + + BUILTIN Xor; +} -- cgit v1.2.3