# The Elements of Computing Systems: Building a Modern Computer from First Principles

All Hacker News 25
This Year Stack Overflow 2
This Month Stack Overflow 1

Check out the following:

The Elements of Computing Systems: Building a Modern Computer from First Principles

https://www.amazon.com/Elements-Computing-Systems-Building-P...

There is a book "The Elements of Computing Systems: Building a Modern Computer from First Principles"[0] that is often called "From NAND to Tetris". This has you building a computer simulator from the ground up (NAND to Tetris). There is a website[1] and a Cousera course[2]. And a TED talk[3].

[1] http://nand2tetris.org/

[2] https://www.coursera.org/learn/build-a-computer

[3] https://www.ted.com/talks/shimon_schocken_the_self_organizin...

There are no arrays in HDL. In section 1.3 of the nand2tetris companion book, he says

Since we already know how to implement the elementary versions of these gates, the implementation of their n-ary versions is simply a matter of constructing arrays of n elementary gates, having each gate operate separately on its bits. This implementation task is rather boring, but it will carry its weight when these multi-bit gates are used in more complex chips, as described in subsequent chapters.

So besides writing a trivial script in Python to avoid all that typing, you're not missing anything.

There's a 10 minute introduction on YouTube and a 1 hour Google TechTalk on Google Video, both by the author himself.

The official companion web site is http://nand2tetris.org/

Don't let the title "Computer Construction" fool you. By "computer", the author does not just mean the rectangular plastic box on your desk, he means the entire computing system, from the individual logic gates up to highest-level application programming.

The book/course teaches you

• how to create your own individual logic gates
• how to build your own logic circuits
• how to build your own CPU
• how to program in machine code directly
• how to program in your own assembler (which you wrote in machine code)
• how to write your own virtual machine
• how to design, implement and program in your own high-level language (which you wrote in assembler)
• how to write a bootloader
• how to write an operating system
• and ultimately how to write a simple game
I highly recommend https://www.amazon.com/Elements-Computing-Systems-Building-P...
>"Part 2 didn't exist when I worked through the book and watched the Part 1 lectures a couple years ago, so presumably this is new."

Thanks for the confirmaton, I didn't remember seeing this either.

"The book, btw, is a masterpiece ..."

Agreed. The paper back is a nice format and reasonably priced for a technical book as well:

https://www.amazon.com/Elements-Computing-Systems-Building-P...

I think Implementing a 6502 is a good example for an architecture implementation. Since it has already been done in numerous NES emulation projects, A lot of us have a good understanding of the CPU. Plus it is the part of a history which many kids could relate to. The video game era and genesis of personal computing era was almost entirely based off of this single CPU. It isnt small but definitely a stepping stone towards understanding a modern CPU. anything lesser makes it just a toy. For a toy, I like the one described in "Elements of Computign systems" here https://www.amazon.com/Elements-Computing-Systems-Building-P...
Are you thinking of "The Elements of Computing Systems: Building a Modern Computer from First Principles" <http://www.amazon.com/Elements-Computing-Systems-Building-Pr... by Noam Nisan and Shimon Schocken?
I recommend the associated book[0] to everyone who asks me about programming book recommendations. The book arrives, and you are shocked at how small it is, just a few hundred pages. If you follow all of the exercises, you get an understanding of how logic works inside of processors (logic gates, adders, etc.), how machine code drives them, how assembly maps to machine code, how a basic virtual machine language (like the JVM) can compile to assembly, then how a higher level language is designed and compiled to the VM.

After doing all of this, you make Tetris in the high level language. It's a badass book, super well-written, and what I consider an essential text.

This is really neat! Also if you want to learn to build a computer from scratch without hardware, just to learn how computers work, The Elements of Computing Systems is a great book to check out. It's used as a text in some CS programs but it is very readable and easy to follow and the software is free and online.

https://www.amazon.com/Elements-Computing-Systems-Building-P...

http://www.nand2tetris.org/ is the website for it.