Skip to content

Latest commit

 

History

History
239 lines (177 loc) · 9.37 KB

README.md

File metadata and controls

239 lines (177 loc) · 9.37 KB

Build a Modern Computer from First Principles: From Nand to Tetris

Table of Contents

Course One Overview

What you’ll achieve: 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.

What you’ll need: This is a self-contained course: all the knowledge necessary to succeed in the course and build the computer system will be given as part of the learning experience. Therefore, we assume no previous computer science or engineering knowledge, and all learners are welcome aboard. You will need no physical materials, since you will build the computer on your own PC, using a software-based hardware simulator, just like real computers are designed by computer engineers in the field. The hardware simulator, as well as other software tools, will be supplied freely after you enroll in the course.

Course format: The course consists of six modules, each comprising a series of video lectures, and a project. You will need about 2-3 hours to watch each module's lectures, and about 5-10 hours to complete each one of the six projects. The course can be completed in six weeks, but you are welcome to take it at your own pace. You can watch a TED talk about this course by Googling "nand2tetris TED talk".

About Project-Centered Courses: Project-centered courses are designed to help you complete a personally meaningful real-world project, with your instructor and a community of learners with similar goals providing guidance and suggestions along the way. By actively applying new concepts as you learn, you’ll master the course content more efficiently; you’ll also get a head start on using the skills you gain to make positive changes in your life and career. When you complete the course, you’ll have a finished project that you’ll be proud to use and share.

The Course Instructors are Noam Nisan and Shimon Schocken.

Resources

Course One Certificate

From_Nand_to_Tetris_I.png

My Course One Notes

Week1

  • Overview
    • Introduction
      • Introduction
    • Boolean Functions and Gate Logic
      • Boolean Function Synthesis
      • Logic Gates
      • Hardware Description Language
      • Hardware Simulation
      • Multi-Bit Buses
      • Project 1 Overview
  • Note
  • Slides
  • Projects
  • Attachments

Week2

Week3

Week4

  • Overview
    • Basic elements
    • The Hack computer and machine language
    • The Hack language specification
    • Input / Output
    • Hack programming
    • Project 4 overview
  • Note
  • Slides
  • Projects
  • Attachments

Week5

Week6

  • Overview
    • Hack language specification
      • A-instruction
      • C-instruction
      • Symbols(Pre-defined symbols)
      • A translator’s perspective
    • The assembly process: instructions
    • The assembly process: symbols
    • Symbol table
    • The assembly process
  • Note
  • Slides
  • Projects
  • Attachments

Course Two Overview

What you’ll achieve: In this project-centered course you will build a modern software hierarchy, designed to enable the translation and execution of object-based, high-level languages on a bare-bone computer hardware platform. In particular, you will implement a virtual machine and a compiler for a simple, Java-like programming language, and you will develop a basic operating system that closes gaps between the high-level language and the underlying hardware platform. In the process, you will gain a deep, hands-on understanding of numerous topics in applied computer science, e.g. stack processing, parsing, code generation, and classical algorithms and data structures for memory management, vector graphics, input-output handling, and various other topics that lie at the very core of every modern computer system.

What you’ll need: This is a self-contained course: all the knowledge necessary to succeed in the course and build the various systems will be given as part of the learning experience. The only prerequisite is knowledge of programming at the level acquired in introduction to computer science courses. All the software tools and materials that are necessary to complete the course will be supplied freely after you enrol in the course.

Course format: This course is accompanied by the textbook "The Elements of Computing Systems" (Nisan and Schocken, MIT Press). While not required for taking the course, the book provides a convenient coverage of all the course topics. The book is available in either hardcopy or ebook form, and MIT Press is offering a 30% discount off the cover price by using the discount code MNTT30 at https://mitpress.mit.edu/books/elements-computing-systems. The course consists of six modules, each comprising a series of video lectures, and a project. You will need about 2-3 hours to watch each module's lectures, and about 15 hours to complete each one of the six projects. The course can be completed in six weeks, but you are welcome to take it at your own pace. You can watch a TED talk about this course by Googling "nand2tetris TED talk".

About Project-Centered Courses: Project-centered courses are designed to help you complete a personally meaningful real-world project, with your instructor and a community of learners with similar goals providing guidance and suggestions along the way. By actively applying new concepts as you learn, you’ll master the course content more efficiently; you’ll also get a head start on using the skills you gain to make positive changes in your life and career. When you complete the course, you’ll have a finished project that you’ll be proud to use and share.

Resources

Course Two Certificate

My Course Two Notes

Week7

Week8

Week9

Week10

Week11

Week12

Week13