De Nand a Tetris - Construye una computadora moderna

Este repositorio se refiere a dos cursos disponibles en Coursera:
- Construya una computadora moderna a partir de los primeros principios: de Nand a Tetris (Parte I).
- Construya una computadora moderna a partir de los primeros principios: Nand a Tetris Parte II
Realizará un viaje a sí mismo a través de la construcción de una computadora desde cero, comenzando con álgebra booleana y puertas lógicas y terminando con una computadora de uso general totalmente funcional. Aprenderá sobre las abstracciones de hardware, las implementará tú mismo y, en última instancia, experimentará la emoción de construir un sistema complejo. Cada carpeta contiene mis propias soluciones a las tareas y mis notas personales:
- Proyecto 1: Construyendo puertas lógicas básicas como y, o, no, y multiplexor
- Proyecto 2: Construir una variedad de chips de adder y una unidad lógica aritmética (ALU)
- Proyecto 3: Registros de construcción, unidades de memoria y una memoria de acceso aleatorio (RAM)
- Proyecto 4: Aprender un idioma de máquina y escribir programas de bajo nivel
- Proyecto 5: Uso del chipset de los proyectos 1-3 para construir una unidad de procesamiento central (CPU) y una plataforma de hardware capaz de ejecutar programas en el lenguaje de la máquina del Proyecto 4
- Proyecto 6: Desarrollar un ensamblador para traducir programas escritos en lenguaje de máquina simbólica en código binario.
- Proyecto 7: En este módulo comenzamos a construir una máquina virtual basada en pila. Después de presentar la arquitectura de la máquina virtual y su lenguaje VM (que es similar al Bytecode de Java), desarrollamos un traductor de VM básico (similar a JVM de Java), diseñado para traducir los programas VM en el lenguaje Hack Machine.
- Proyecto 8: En el módulo anterior presentamos una abstracción de la máquina virtual y desarrollamos un traductor de VM básico que implementa los comandos de acceso aritmético y de memoria del lenguaje VM. En este módulo, completaremos el traductor de VM implementando los comandos de ramificación y llamada de funciones del lenguaje VM restante.
- Proyecto 9: En este módulo presentamos el lenguaje Jack, así como la programación de Jack. El módulo culmina en un proyecto en el que desarrollará una aplicación interactiva simple de su elección, usando Jack.
- Proyecto 10: La traducción de un programa de alto nivel a un lenguaje de nivel inferior consta de dos etapas bien definidas y más o menos independientes: análisis de sintaxis y análisis de generación de códigos .Syntax, el sujeto de este módulo, consta de dos sub-etapas: análisis léxico (también llamado tokenizing ) y parsing . El proyecto resultante será un analizador de Jack , un programa que presenta la sintaxis de los programas de Jack sin generar código ejecutable.
- Proyecto 11: En el proyecto anterior hemos creado un analizador de sintaxis para el lenguaje Jack. En esto, transformaremos este analizador en un compilador de gato a gran escala. Esto implicará modificar la lógica del analizador que genera código XML en lógica que genera código VM ejecutable.
- Proyecto 12: Un sistema operativo es una colección de servicios de software diseñados para cerrar brechas entre los programas de alto nivel y el hardware subyacente en el que se ejecutan. Los idiomas modernos como Java y Python se implementan junto con una bibliotecas de clase estándar que implementan muchos de estos servicios del sistema operativo. En este proyecto, desarrollaremos un sistema operativo básico que se empaquetará en un conjunto similar de bibliotecas de clase. El sistema operativo se desarrollará en Jack, utilizando una estrategia de arranque, similar a la forma en que se desarrolló Linux en C.