От NAND до Тетрис - Создайте современный компьютер

Это репо относится к двум курсам, доступным на Coursera:
- Создайте современный компьютер из первых принципов: от NAND до Tetris (часть I).
- Создайте современный компьютер от первых принципов: NAND TETRIS, часть II
Вы отправитесь в самостоятельное путешествие по строительству компьютера с нуля, начиная с булевой алгебры и логических ворот и заканчивая полностью функциональным компьютером общего назначения. Вы узнаете об аппаратных абстракциях, реализуете их самостоятельно и в конечном итоге испытаете ощущения от создания сложной системы. Каждая папка содержит мои собственные решения для заданий и мои личные примечания:
- Проект 1: Создание основных логических ворот, таких как и, или, не, и мультиплексор
- Проект 2: Создание ассортимента чипов с аддером и арифметической логики (ALU)
- Проект 3: Регистры здания, единицы памяти и память случайного доступа (ОЗУ)
- Проект 4: Изучение машинного языка и написания программ низкого уровня
- Проект 5: Использование чипсета из проектов 1-3 для создания центрального обработчивого блока (ЦП) и аппаратной платформы, способной запускать программы на машинном языке из проекта 4
- Проект 6: Разработка ассемблера для перевода программ, написанных на символическом машинном языке в двоичный код.
- Проект 7: В этом модуле мы начинаем создавать виртуальную машину на основе стека. После представления архитектуры виртуальной машины и ее языка виртуальной машины (который похож на байт -код Java), мы разрабатываем базовый переводчик виртуальной машины (похожий на JVM Java), предназначенную для перевода программ виртуальной машины на хакерскую машину.
- Проект 8: В предыдущем модуле мы представили абстракцию виртуальной машины и разработали базовый переводчик виртуальной машины, который реализует команды арифметики и доступа к памяти языка виртуальной машины. В этом модуле мы завершим переводчика виртуальной машины, внедрив оставшиеся команды ветвления и выявления функций.
- Проект 9: В этом модуле мы представляем язык Джека, а также программирование JACK. Модуль завершается проектом, в котором вы разработаете простое интерактивное применение по вашему выбору, используя Jack.
- Проект 10: Перевод высокоуровневой программы на язык более низкого уровня состоит из двух четко определенных и более или менее независимых этапов: анализ синтаксиса и генерация кода . Анализ Syntax-предмет этого модуля-состоит из двух подразделений: лексический анализ (также называемый токен ) и парирование . Полученным проектом будет Jack Analyzer - программа, которая представляет синтаксис программ JACK без генерируя исполняемый код.
- Проект 11: В предыдущем проекте мы создали синтаксис -анализатор для языка Джека. В этом мы превратим этот анализатор в полномасштабный компилятор Джека. Это повлияет на изменение логики анализатора, которая генерирует код XML в логику, которая генерирует исполняемый код виртуальной машины.
- Проект 12: Операционная система представляет собой набор программных услуг, предназначенных для закрытия пробелов между программами высокого уровня и базовым оборудованием, на котором они работают. Современные языки, такие как Java и Python, развернуты вместе со стандартными библиотеками классов, которые реализуют многие такие услуги ОС. В этом проекте мы разработаем базовую ОС, которая будет упакована в аналогичный набор библиотек классов. ОС будет разработана в Джеке, используя стратегию начальной загрузки, аналогично тому, как Linux был разработан в C.