De Nand à Tetris - construire un ordinateur moderne

Ce repo fait référence à deux cours disponibles sur Coursera:
- Construisez un ordinateur moderne à partir des premiers principes: de Nand à Tetris (partie I).
- Construisez un ordinateur moderne à partir des premiers principes: NAND à Tetris Part II
Vous allez faire un voyage à votre rythme à travers la construction d'un ordinateur à partir de zéro, en commençant par l'algèbre booléenne et les portes logiques et se terminant par un ordinateur à usage général entièrement fonctionnel. Vous découvrirez les abstractions matérielles, les implémenterez vous-même et vous découvrirez le plaisir de construire un système complexe. Chaque dossier contient mes propres solutions aux affectations et mes notes personnelles:
- Projet 1: Construire des portes logiques de base comme et, ou, non, et le multiplexeur
- Projet 2: Construire une gamme de puces additionnelles et une unité logique arithmétique (ALU)
- Projet 3: Construire des registres, des unités de mémoire et une mémoire d'accès aléatoire (RAM)
- Projet 4: Apprendre une langue de machine et écrire des programmes de bas niveau
- Projet 5: Utilisation du chipset des projets 1-3 pour construire une unité de traitement centrale (CPU) et une plate-forme matérielle capable d'exécuter des programmes dans la langue de la machine à partir du projet 4
- Projet 6: Développer un assembleur pour traduire des programmes écrits en langage de machine symbolique en code binaire.
- Projet 7: Dans ce module, nous commençons à construire une machine virtuelle basée sur une pile. Après avoir présenté l'architecture de la machine virtuelle et son langage VM (qui est similaire à Bytecode de Java), nous développons un traducteur de base de base de base (similaire à JVM de Java), conçu pour traduire les programmes de machine virtuelle dans le langage de la machine hack.
- Projet 8: Dans le module précédent, nous avons présenté une abstraction de la machine virtuelle et développé un traducteur de base de données de base qui implémente les commandes arithmétiques et d'accès à la mémoire du langage VM. Dans ce module, nous terminerons le traducteur VM en implémentant les commandes de branchement et d'appel des fonctions du langage VM restantes.
- Projet 9: Dans ce module, nous présentons le langage Jack, ainsi que la programmation Jack. Le module culmine dans un projet dans lequel vous développerez une application interactive simple de votre choix, en utilisant Jack.
- Projet 10: La traduction d'un programme de haut niveau en un langage de niveau inférieur se compose de deux étapes bien définies et plus ou moins indépendantes: analyse de syntaxe et génération de code .Syntax Analyse - le sujet de ce module - se compose de deux sous-étapes: analyse lexicale (également appelée tokenising ) et analyse . Le projet résultant sera un analyseur Jack - un programme qui dévoile la syntaxe des programmes Jack sans générer du code exécutable.
- Projet 11: Dans le projet précédent, nous avons construit un analyseur de syntaxe pour la langue Jack. En cela, nous allons transformer cet analyseur en un compilateur Jack à grande échelle. Cela impliquera de modifier la logique de l'analyseur qui génère du code XML en logique qui génère du code VM exécutable.
- Projet 12: Un système d'exploitation est une collection de services logiciels conçus pour combler les lacunes entre les programmes de haut niveau et le matériel sous-jacent sur lequel ils fonctionnent. Des langues modernes comme Java et Python sont déployées avec des bibliothèques de classe standard qui implémentent de nombreux services de système d'exploitation. Dans ce projet, nous développerons un système d'exploitation de base qui sera emballé dans un ensemble similaire de bibliothèques de classe. Le système d'exploitation sera développé dans Jack, en utilisant une stratégie d'amorçage, similaire à la façon dont Linux a été développé dans C.