Von Nand nach Tetris - bauen Sie einen modernen Computer

Dieses Repo bezieht sich auf zwei Kurse, die in Coursera verfügbar sind:
- Erstellen Sie einen modernen Computer aus den ersten Prinzipien: von Nand bis Tetris (Teil I).
- Bauen Sie einen modernen Computer aus den ersten Prinzipien: Nand bis Tetris Teil II
Sie werden sich selbst durch den Bau eines Computers von Grund auf aufbauen, beginnend mit Booleschen Algebra und Logiktoren und einem voll funktionsfähigen allgemeinen Computer. Sie erfahren über Hardwareabstraktionen, implementieren sie selbst und erleben letztendlich den Nervenkitzel, ein komplexes System aufzubauen. Jeder Ordner enthält meine eigenen Lösungen für die Aufgaben und meine persönlichen Notizen:
- Projekt 1: Erstellen grundlegender Logik -Tore wie und, oder nicht und Multiplexor
- Projekt 2: Erstellen einer Reihe von Adder -Chips und einer arithmetischen Logikeinheit (ALU)
- Projekt 3: Erstellen von Registern, Speichereinheiten und einem Zufallszugriffsspeicher (RAM)
- Projekt 4: Erlernen einer Maschinensprache und Schreiben von Programmen auf niedriger Ebene
- Projekt 5: Verwenden des Chipsatzes von Projekten 1-3 zum Erstellen einer Central Processing Unit (CPU) und einer Hardwareplattform, die Programme in der Maschinensprache aus Projekt 4 ausführen kann
- Projekt 6: Entwicklung eines Assemblers zur Übersetzung von Programmen in symbolischer Maschinensprache in Binärcode.
- Projekt 7: In diesem Modul beginnen wir mit dem Erstellen einer virtuellen Maschine auf Stapelbasis. Nachdem wir die Architektur der virtuellen Maschine und ihre VM -Sprache (ähnlich wie Javas Bytecode ) präsentiert haben, entwickeln wir einen grundlegenden VM -Übersetzer (ähnlich wie JVAs JVM ), mit dem VM -Programme in die Sprache der Hack -Maschine übersetzt wurden.
- Projekt 8: Im vorherigen Modul haben wir eine Abstraktion mit virtueller Maschine vorgestellt und einen grundlegenden VM -Übersetzer entwickelt, der die Arithmetik- und Speicherzugriffsbefehle der VM -Sprache implementiert. In diesem Modul vervollständigen wir den VM-Übersetzer, indem wir die Verzweigungs- und Funktionsbefehle der verbleibenden VM-Sprache implementieren.
- Projekt 9: In diesem Modul stellen wir die Jack -Sprache sowie die Jack -Programmierung vor. Das Modul gipfelt in einem Projekt, in dem Sie mit Jack eine einfache interaktive Anwendung Ihrer Wahl entwickeln.
- Projekt 10: Die Übersetzung eines hochrangigen Programms in eine Sprache auf niedrigerer Ebene besteht aus zwei gut definierten und mehr oder weniger unabhängigen Stadien: Syntaxanalyse und Codegenerierung .Syntaxanalyse-das Thema dieses Moduls-besteht aus zwei Unterstadien: lexikalische Analyse (auch als Tokens bezeichnet) und Parsing . Das resultierende Projekt wird ein Jack -Analysator sein - ein Programm, das die Syntax von Jack -Programmen enthüllt, ohne ausführbare Code zu generieren.
- Projekt 11: Im vorherigen Projekt haben wir einen Syntaxanalysator für die Jack -Sprache erstellt. Darin werden wir diesen Analysator in einen vollwertigen Jack-Compiler verwandeln. Dies führt zu einer Änderung der Logik des Analysators, die XML -Code in Logik generiert, die ausführbare VM -Code generiert.
- Projekt 12: Ein Betriebssystem ist eine Sammlung von Softwarediensten, die Lücken zwischen hochrangigen Programmen und der zugrunde liegenden Hardware, auf der sie ausgeführt werden, geschlossen werden. Moderne Sprachen wie Java und Python werden zusammen mit standardmäßigen Klassenbibliotheken bereitgestellt, die viele solche OS -Dienste implementieren. In diesem Projekt entwickeln wir ein Basic -Betriebssystem, das in einem ähnlichen Satz von Klassenbibliotheken verpackt wird. Das Betriebssystem wird in Jack mit einer Bootstrapping -Strategie entwickelt, ähnlich wie bei der Entwicklung von Linux in C.