Working my way through the Nand to Tetris Course
- Download the latest
nand2tetris.zip
from the book website, and overwrite everything in theprojects
andtools
directory. - Remember to run
chmod +X tools/*.sh
if you're on *nix.
- Projects 1-5 as is
- Project 6 (Assembler) done in ruby with a port to Rust in progress
- Project 7-8 (VM) done in PHP
- Project 9 - Wrote a small 2 player Tic Tac Toe game. Plan to upgrade it to Ultimate Tic Tac Toe when I get time.
- Project 10-11 - Writing the compiler in Python
Detailed notes documenting progress updates are in NOTES.md.
Build order as per the website. Cost for each gate in NAND in brackets.
-
Nand
(primitive) -
Not
(1) -
Or
(3) -
Xor
(6, Can be improved) -
And
(2) -
Mux
(8, Took me ages. Can be improved) -
DMux
(5, Super Fun) -
Not16
(16) -
And16
(32) -
Or16
(48) -
Mux16
(113) -
Or8Way
(21) -
Mux4Way16
(339) -
Mux8Way16
(791) -
DMux4Way
(37, Fun) -
DMux8Way
(101)
CHIPs/Gates used in brackets
-
HalfAdder
(Xor+And) -
FullAdder
(2 HalfAdder, 1 Or) -
Add16
(1 HalfAdder, 15 FullAdder) -
Inc16
(1 Add16) -
ALU
(6 Mux16, 3 Not16, 1 Add16, 1 And16, 2 Or8Way, 2 Or, 1 Not)
Make sure you read through the Hardware Simulator Tutorial to understand the clock in the simulator.
-
DFF
(primitive) -
Bit
(1 Mux, 1DFF) -
Register
(16 Bits) -
RAM8
(8 Registers, 1 DMux8Way, 1 Mux8Way16) = 8 registers -
RAM64
(8 RAM8, 1 DMux8Way, 1 Mux8Way16) = 64 registers -
RAM512
(8 RAM64, 1 DMux8Way, 1 Mux8Way16) = 512 registers -
RAM4K
(8 RAM512, 1 DMux8Way, 1 Mux8Way16) = 4096 registers -
RAM16K
(4 RAM4K, 1 DMux4Way, 1 Mux4Way16) = 16384 registers -
PC
(1 Register, 1 Inc16, 1 Or8Way, 1 Mux8Way16)
Counting number of instructions by wc -l $file.hack
- Mult (18)
- Fill (98)
-
Memory.hdl
(2xMux16, 2xNot, 3xAnd 1 RAM16K) -
CPU.hdl
(6 And, 2 Nand, 3 Or, 1 Not, 1 Mux16, 1 Mux16, 2 Register, 1 PC, 1 ALU) -
Computer.hdl
(1 CPU, 1 ROM32K, 1 Memory)
-
Add.hack
-
Max.hack
-
Rect.hack
-
MaxL.asm
-
RectL.asm
-
PongL.asm
-
Add.asm
-
Max.asm
-
Rect.asm
-
Pong.asm
Final hack instruction set count in brackets. Calculated by running:
php file.vm > file.asm
ruby assembler.rb file.vm > file.hack
wc -l file.hack
-
SimpleAdd.vm
(21) -
StackTest.vm
(334)
-
BasicTest.vm
(228) -
PointerTest.vm
(127) -
StackTest.vm
(73)
Final hack instruction set count in brackets as before.
-
BasicLoop.vm
(93) -
Fibonacci.vm
(193)
-
SimpleFunction.vm
(128) -
FibonacciElement
(434) -
NestedCall.vm
(556) -
StaticsTest.vm
(664)
- TicTacToe
- Square
- TestArray
- Square
- ExpressionLessSquare
- TestArray