Building a Computer From Ground Up, nand2Tetris tutorial (sort of.)
I. Introduction
So recently, I've stumbled across a very cool open-source project, called nand2tetris.
When it comes to computers, we interact with them at a high level (GUI and programming languages) only, so in this course, they teach us about computer from ground up, literally from hardware up to the software hierarchy. Along the way, the projects will be we write codes to build each part of the computer, then put them into a software simulator to test, and at the end, we have completed building a virtual computer called Jack, running a homemade operating system called Hack, and is ready to use! People can actually write a Tetris game on this computer, that's why the project is called from NAND (the simplest logic gate, more on this later) to Tetris (a fully function, high-level game). Sounds pretty cool, right?
So far, according to my personal experience, even though it says that no experience is required, it can be pretty challenging if you are a complete beginner without any experience in discrete math and programming. They also require people to download some third-party software and zip, and I must admit, their GUI is not very user-friendly. So I think it would be a good idea to share with you guys about this project, as well as post my logic explanations of each project. There are also other resources to use, I recommend the QnA section on their official course website, as well as Github of others who have completed this project.
Before using my solutions, I encourage you to read all the materials and lecture slides from their website first, they go quite deep, and also, they have online lectures available on Coursera, but not as deep as the slides. So read them first, try to write and draw some diagrams, then if you are stuck, go out and find solutions later.
Unfortunately, I cannot directly help with the technical aspects of the course (download and install software simulator, etc), but you can always post comments under the discussion, and I'll see what I can do. This one will only focus on the logical explanation of the projects.
I haven't finished every project yet, and am still very much learning, cause computer science and computer systems are like drowning in a rabbit hole. Writing this article and posting my solutions also helps me to keep grinding and not giving up, LOL. For all the curious minds, computer science majors, and nerds out there, I swear, this is one of the coolest educational projects I've ever seen! Have fun.