Конструктор модельных машин
В курсе «Архитектура ЭВМ» есть такая тема: «модельные машины». Учебная трёхадресная машина на (неофициальном) сайте практикума АЯ.
Есть проект Владимира Лютова по написанию эмуляторов УМ, можно начать с него
А на самом деле нужен конструктор, чтобы любые машины проектировать.
«Проект 0»
Написать на Python реализацию всех модельных машин, упомянутых в учебном пособии. Поначалу — без использования GUI.
У УМ3 описана система команд (кажется, не полностью). Остальное надо допридумывать.
Машина должна поддерживать:
- Трассировку выполнения
- Пошаговый проход
На вход машине подаётся образ памяти (бинарный файл). Изготавливается из программы в 16-ричных (?) кодах путём простого перевода (написать программу). Можно упростить жизнь программисту, введя формат как в пособии:
| адрес | ячейка | комментарии | 
Адрес при этом избыточен, зато переход понятно куда писать. А программа для перевода может даже этот адрес проверять.
Впоследствии надо будет сделать ещё и ассемблер.
«Проект 1»
- Глядя на проект 0, переписать код УМ-М таким образом, чтобы все архитектурно различные части (память, процессор, шина, регистры) лежали в отдельных модулях
- Потихоньку добавлять поддержку регистров, сопроцессора, периферии, ещё чего-то в отдельных модулях
Что можно сконструировать
В машине может быть (  TODO: выкинуть действительно лишнее, эшелонировать):
 TODO: выкинуть действительно лишнее, эшелонировать): 
- Память: - Память с абсолютными адресами
- Аппаратный стек с адресацией относительно вершины
 
- Регистры: - Регистры общего назначения - …в т. ч. привязанные к ABI (акккумулятор и прочее)
 
- Вычисляемые регистры (SP, PC, Flags)
 
- Регистры общего назначения 
- Инструкции: - Фиксированной длины с заданным количеством адресов
- Переменной длины
- Автоинкремент/автодекремент
- Обращение к сопроцессору
- Обращение к внешнему устройству
- Прерывания
 
- Способы адресации: - прямая абсолютная
- прямая относительная
- косвенная
- двойная косвенная
 
- Сопроцессор - ABI по хранению FP
 
- Внешние устройства - Печать
- Ввод
- «Медленное» устройство для использования аппаратных прерываний"
- «Быстрое» устройство для использования ПДП
- ПЗУ
 
Реализация
Никакого GUI, всё программируется (например, на Python) с помощью API конструктора. Причём само объектное планирование API воссоздаёт архитектуру ЭВМ, в этом фишка!
Например, могут быть готовые модули, соответствующие подсистемам
- Память - Побайтовая (для команд переменной длины и произвольных данных)
- Пословная (с указанием структуры слова, например, трёхадресное), для машин с данными отдельно, командами отдельно
- Пословная с несколькими вариантами трактовки слова
 
- Регистры (отличаются тем, что их значение может измениться, даже если в команде они явно не заданы)
- Стек
- АЛУ
- Сопроцессор
- Внешние устройства - Шина - ПЗУ
- терминал
 
 
- Шина 
Получится что-то вроде такого myComputer.py:
А вот какой-нибудь myFPU.py:
Означает, что смоделированный сопроцессор не работает с памятью, а работает только с регистрами
 TBC
 TBC 
