![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Год назад я закончил разработку процессора микро-БЭСМ. Проект не получил никакого резонанса в социуме, тем не менее надо будет когда-нибудь довести его до реализации в железе. К примеру на плате DE10-Lite с чипом Altera MAX 10. Получится нечто вроде Arduino, но с системой команд типа БЭСМ-6.

Путь долгий, впрочем. Главное препятствие - теговая архитектура памяти, которая плохо ложится на современную шину адрес/данные. Стоит задача переделать архитектуру и перенести нужные биты из тега (на каждое слово) в регистры приписки (на каждую страницу). Совместимость со старым софтом обеспечивать не нужно, ведь его всё равно нету.
План следующий.
1. Создать ассемблер , который бы работал под Линуксом и понимал системы команд 64-битного режима и 48-битного (бэсм6).
2. Переписать имеющийся комплексный тест на новый ассемблер.
3. Разбить огромный комплексный тест на отдельные составляющие, для упрощения тестирования и модификации.
4. Поправить архитектуру: перенести бит режима бэсм6 и биты защиты в таблицу страниц (регистры приписки).
5. Поправить соответствующие тесты.
6. Изменить процессор (RTL) нужным образом.
7. Изменить микрокод. Поправить тесты микрокода.
8. Изменить внешнюю шину (RTL) так, чтобы она стала совместимой с реализацией на FPGA.
9. Добавить интерфейс к внешней памяти RAM. На плате DE10-Lite её как раз 8 мегабайт.
10. Переделать контроллер прерываний.
11. Добавить периферийные устройства: внешние кнопочки, светодиоды и UART.
12. Запустить на реальной плате.
Как заработает, дальше набор внешних устройств можно расширять: SD-карточка, графический дисплей, SPI, PWM и т.д. Параллельно неплохо бы еще сделать софтверный симулятор на основе SIMH: сильно помогает в отладке софта.

Путь долгий, впрочем. Главное препятствие - теговая архитектура памяти, которая плохо ложится на современную шину адрес/данные. Стоит задача переделать архитектуру и перенести нужные биты из тега (на каждое слово) в регистры приписки (на каждую страницу). Совместимость со старым софтом обеспечивать не нужно, ведь его всё равно нету.
План следующий.
1. Создать ассемблер , который бы работал под Линуксом и понимал системы команд 64-битного режима и 48-битного (бэсм6).
2. Переписать имеющийся комплексный тест на новый ассемблер.
3. Разбить огромный комплексный тест на отдельные составляющие, для упрощения тестирования и модификации.
4. Поправить архитектуру: перенести бит режима бэсм6 и биты защиты в таблицу страниц (регистры приписки).
5. Поправить соответствующие тесты.
6. Изменить процессор (RTL) нужным образом.
7. Изменить микрокод. Поправить тесты микрокода.
8. Изменить внешнюю шину (RTL) так, чтобы она стала совместимой с реализацией на FPGA.
9. Добавить интерфейс к внешней памяти RAM. На плате DE10-Lite её как раз 8 мегабайт.
10. Переделать контроллер прерываний.
11. Добавить периферийные устройства: внешние кнопочки, светодиоды и UART.
12. Запустить на реальной плате.
Как заработает, дальше набор внешних устройств можно расширять: SD-карточка, графический дисплей, SPI, PWM и т.д. Параллельно неплохо бы еще сделать софтверный симулятор на основе SIMH: сильно помогает в отладке софта.
no subject
Date: 2018-01-23 19:47 (UTC)Насчёт ассемблера. Диалектов было много, это верно. Я бы взял за основу стиль современного юниксного ассемблера. У меня сохранились исходники ассемблера для Эльбруса-Б, можно начать с него (https://github.com/besm6/micro-besm/blob/master/toolchain/as/as.c). Проще всего выдавать бинарник в формате a.out, и потом отдельно конвертировать его в HEX для загрузки в FPGA. Потом разберёмся. Формат a.out даят возможность приспособить линкер.
Синтаксис примерно такой: https://github.com/besm6/micro-besm/blob/master/toolchain/lib/u_mod_u.s
Можно немного осовременить в мелочах. Переключать в режим бэсм6 и обратно можно псевдокомандами типа ".set besm6" и ".set microbesm". При этом меняется набор доступных машинных команд и разрядность операндов и адреса.
Таблицы машинных команд можно генерить автоматически, из скрипта на питоне. Я подготовил исходные данные в формате JSON: команды бэсм6 (https://github.com/besm6/micro-besm/blob/master/doc/opcodes/besm6.json) и команды 64-битного режима (https://github.com/besm6/micro-besm/blob/master/doc/opcodes/native.json).
Английские мнемоники пошли от автокода MADLEN для той же БЭСМ-6. Подробности есть в мемуарах автора, Анатолия Ивановича Волкова: http://retro.wm.ru/retr2.htm