/Nand2Tetris

This repo contains my solutions for Nand2Tetris course projects.

Primary LanguageHack

Nand to tetris - Coursera - The Hebrew University of Jerusalem

Professors Shimon Schocken and Noam Nisan

This repo contain my solutions for the assignments and projects of this course.

ABOUT/SOBRE

In this project-centered course* you will build a modern computer system, from the ground up. We’ll divide this fascinating journey into six hands-on projects that will take you from constructing elementary logic gates all the way through creating a fully functioning general purpose computer. In the process, you will learn - in the most direct and constructive way - how computers work, and how they are designed.

O curso tem o objetivo de construir um computador completo, desde as portas lógicas até o sistema operacional, através de projetos que o aluno deve construir. A primeira parte é focada no hardware do computador Hack, e na segunda parte é implementado um sistema operacional para esse computador.

Links

  1. Course Website
  2. On coursera: Part I and Part II
  3. Start writing in assembly
  4. Magic in software development
  5. Neonand homebrew computer

Assignments

Week 1 and 2

  • Key concepts: Boolean algebra, Boolean functions, gate logic, elementary logic gates, Hardware Description Language (HDL), hardware simulation, binary numbers, binary addition, the two's complement method, half-adders, full-adders, n-bit adders, counters, Arithmetic Logic Unit (ALU), combinational logic.

Week 3

  • Key concepts : combinational vs sequential logic, clocks and cycles, flip-flops, registers, RAM units, counters.

Week 4

  • Key concepts: op codes, mnemonics, binary machine language, symbolic machine language, assembly, low-level arithmetic, logical, addressing, branching, and I/O commands, CPU emulation, low-level programming.

Week 5

  • Key concepts: Von Neumann and Harvard architectures, the stored program concept, fetch-execute cycle, data bus, instruction bus, CPU, computer design.

Week 6

  • Key concepts: Binary and symbolic machine languages, parsing, symbol tables, code generation, cross assembler, assembler implementation.

Week 7

  • Key concepts: two-tier compilation (overview), virtualization, virtual machines, VM abstraction, stack processing, pointers, VM implementation, VM translators.

Week 8

  • Key concepts: branching, functions, function call-and-return, dynamic memory management, stack processing, pointers, standard mapping, VM implementation.

Week 9

  • Key concepts: procedural programming, object-based programming, classes, methods, functions, constructors, list processing, recursion, developing interactive applications, graphics optimization.

Week 10

  • Key concepts: tokenizing, grammars, parsing, parse trees, XML / mark-up, compilation.

Week 11

  • Key concepts: compiling procedural code, compiling the construction and manipulation of arrays and objects, code generation techniques, recursive compilation engine, symbol tables, memory management.

Week 12

  • Key concepts: running-time analysis, resource allocation, heap management, input handling, vector graphics, fonts, textual outputs, type conversions, string processing, booting, OS implementation issues.