De Nand a Tetris - Construa um computador moderno

Este repo refere -se a dois cursos disponíveis no Coursera:
- Construa um computador moderno a partir dos primeiros princípios: de Nand a Tetris (Parte I).
- Construa um computador moderno a partir dos primeiros princípios: Nand a Tetris Parte II
Você fará uma jornada de ritmo próprio através da construção de um computador desde o início, começando com álgebra booleana e portões lógicos e terminando com um computador de uso geral totalmente funcional. Você aprenderá sobre abstrações de hardware, implementará você mesmo e, finalmente, experimentará a emoção de construir um sistema complexo. Cada pasta contém minhas próprias soluções para as tarefas e minhas anotações pessoais:
- Projeto 1: Construindo portões lógicos básicos como e, ou não, e multiplexor
- Projeto 2: Construindo uma variedade de chips de adder e uma unidade lógica aritmética (ALU)
- Projeto 3: Registros de construção, unidades de memória e uma memória de acesso aleatório (RAM)
- Projeto 4: Aprender uma linguagem de máquina e escrever programas de baixo nível
- Projeto 5: Usando o chipset dos projetos 1-3 para construir uma unidade central de processamento (CPU) e uma plataforma de hardware capaz de executar programas na linguagem da máquina do Projeto 4
- Projeto 6: Desenvolvendo um assembler para traduzir programas escritos em linguagem de máquina simbólica em código binário.
- Projeto 7: Neste módulo, começamos a criar uma máquina virtual baseada em pilha. Depois de apresentar a arquitetura da máquina virtual e sua linguagem VM (que é semelhante ao bytecode do Java), desenvolvemos um tradutor básico de VM (semelhante ao JVM da Java), projetado para traduzir programas de VM na linguagem da máquina de hackear.
- Projeto 8: No módulo anterior, apresentamos uma abstração da máquina virtual e desenvolvemos um tradutor básico de VM que implementa os comandos aritméticos e de acesso à memória da linguagem VM. Neste módulo, concluiremos o tradutor da VM implementando os comandos de ramificação e chamada de função restantes da VM.
- Projeto 9: Neste módulo, apresentamos a linguagem Jack, bem como a programação Jack. O módulo culmina em um projeto no qual você desenvolverá um aplicativo interativo simples de sua escolha, usando Jack.
- Projeto 10: A tradução de um programa de alto nível em uma linguagem de nível inferior consiste em dois estágios bem definidos e mais ou menos independentes: análise de sintaxe e geração de código . Syntax Análise-o assunto deste módulo-consiste em dois sub-estágios: análise lexical (também chamada de tokenizing ) e parsejamento . O projeto resultante será um analisador Jack - um programa que revela a sintaxe dos programas Jack sem gerar código executável.
- Projeto 11: No projeto anterior, construímos um analisador de sintaxe para o idioma Jack. Nisso, transformaremos esse analisador em um compilador Jack em larga escala. Isso implicará modificar a lógica do analisador que gera código XML na lógica que gera código VM executável.
- Projeto 12: Um sistema operacional é uma coleção de serviços de software projetados para fechar lacunas entre os programas de alto nível e o hardware subjacente em que eles executam. Línguas modernas como Java e Python são implantadas juntamente com bibliotecas de classes padrão que implementam muitos desses serviços do sistema operacional. Neste projeto, desenvolveremos um sistema operacional básico que será embalado em um conjunto semelhante de bibliotecas de classes. O sistema operacional será desenvolvido em Jack, usando uma estratégia de bootstrapping, semelhante a como o Linux foi desenvolvido em C.