Skip to content

captn3m0/nand2tetris

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

117 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nand2tetris Status Badge

Working my way through the Nand to Tetris Course

  • Download the latest nand2tetris.zip from the book website, and overwrite everything in the projects and tools directory.
  • Remember to run chmod +X tools/*.sh if you're on *nix.

High level implementation notes

  1. Projects 1-5 as is
  2. Project 6 (Assembler) done in ruby with a port to Rust in progress
  3. Project 7-8 (VM) done in PHP
  4. Project 9 - Wrote a small 2 player Tic Tac Toe game. Plan to upgrade it to Ultimate Tic Tac Toe when I get time.
  5. 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)

Chips

  • 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)

Computer chip tests:

  • Add.hack
  • Max.hack
  • Rect.hack

Without Symbols

  • MaxL.asm
  • RectL.asm
  • PongL.asm
  • Add.asm

Symbolic Programs

  • 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

Arithmetic Commands

  • SimpleAdd.vm (21)
  • StackTest.vm (334)

Memory Access Commands

  • BasicTest.vm (228)
  • PointerTest.vm (127)
  • StackTest.vm (73)

Final hack instruction set count in brackets as before.

Program Flow Commands

  • BasicLoop.vm (93)
  • Fibonacci.vm (193)

Function Calling Commands

  • SimpleFunction.vm (128)
  • FibonacciElement (434)
  • NestedCall.vm (556)
  • StaticsTest.vm (664)
  • TicTacToe

Tokenizer

  • Square
  • TestArray

Parser (Compilation Engine)

  • Square
  • ExpressionLessSquare
  • TestArray

About

The Elements of Computing Systems, My Workbook for the NAND to Tetris course.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors