Решил поделиться с общественностью одной своей полезной наработкой.
Поскольку благодаря трудам уважаемого Vslav у нас появилось HDL-описание 1801ВМ2, я некоторое время назад сделал FPGA-реплику платы МС1201.02 для замены контроллера, управляющего оборудованием в нашей лаборатории. И возникла одна проблема. Раньше вместе с контроллером у нас стоял терминал СМ7209. Терминал этот необратимо сдох и отправился в помойку, и встала задача найти ему замену. Связка комп+терминалка мне как-то совсем не нравится, тем более что терминалки под Linux, полноценно совместимой с VT52, я не нашел (windows у нас нигде принципиально не используется). Поэтому я сделал терминал на FPGA, и решил им поделиться - возможно, найдутся люди, которым, как и мне, нужен именно аппаратный терминал.
Терминал создан на основе все того же 1801ВМ2 - это вообще очень удобная платформа для всяких разных самоделок. FPGA - любая из серии Altera Cyclone 4. Кроме двух мегафункций altsyncram никаких аппаратных особенностей cyclone 4 не используется, поэтому, при желании, проект легко портировать куда угодно - он занимает всего около 2000 логических ячеек и 21КБайт внутренней памяти. Для вывода информации используется любой монитор с VGA-входом (используется разрешение 640*480), для ввода - PS/2 клавиатура. С ЭВМ терминал обменивается через обычный UART, скорость обмена можно настраивать в процессе работы.
Терминал поддерживает систему команд VT52, а также системы команд 1 и 2 терминала 15ИЭ-00-013 (система команд 2 совпадает с VT52).
Протокол VT52 реализован полностью - в том числе режим Hold Screen и набор псевдографических знаков, как в оригинальном VT52 и СМ7209.
Протокол 15ИЭ также реализован полностью, кроме режима блочного обмена (передать строку и передать страницу) - не вижу ни одного применения для этого режима.
Клавиатура VT52 реализована полностью, а вот часть клавиш клавиатуры 15ввв-97-006 не реализована - уж слишком много на ней кнопок, не под все из них получилось найти эквиваленты на стандартной PS/2 клавиатуре. Переключение между режимами VT52/15ИЭ можно делать вручную клавишей F4, а также автоматически управляющими кодами.
Вверху экрана находится строка состояния, как и в 15ИЭ. Но вместо неинформативных битовых полей туда выводятся текстовые описатели включенных режимов. Кроме того, как и в 15ИЭ, в строку состояния выводится текущая скорость последовательного интерфейса и время, прошедшее с момента включения терминала. Выглядит это примерно так:
Пример экрана терминала
[свернуть]
Терминал поддерживает все используемые в таких терминалах кодировки:
- ASCII, как оригинальный VT52 - большие и малые латинские буквы. Она же - КОИ7 Н0
- КОИ7 Н1, большие и малые русские буквы
- КОИ7 Н2, только большие латинские и русские буквы. Эта кодировка обычно использовалась при работе с СМ ЭВМ, она поддерживается и СМ7209, и 15ИЭ.
Переключение между кодировками Н0/Н1 производится управляющими кодами, а кодировка Н2 включается клавишей F11. На экран, естественно, можно выводить смесь символов разных кодировок. Кроме этого, поддерживается режим отображения служебных кодов мигающими буквами, как в СМ7209 и 15ИЭ. Пример работы с русскоязычной программой в кодировке КОИ7 Н2:Скрытый текст
[свернуть]
вот еще примеры разных режимов работы терминала:
Прямая адресация курсора
[свернуть]
Режим Hold Screen
[свернуть]
Псевдографические символы
[свернуть]
Альтернативный режим клавиатуры
[свернуть]
Имеется автономный режим работы (локальная петля), который можно использовать для тестирования терминала и клавиатуры, включается клавишей F10. Терминал поддерживает скорости обмена от 1200 до 115200, которые можно менять с клавиатуры (клавиши F5/F6). Курсор может иметь 2 формы на выбор - подчеркивание и блок, может быть мигающим и немигающим.
Для отображения знаков используется знакоместо 8*12 (а не 8*8, как в древних терминалах). Шрифт я в основном выдрал из какого-то досовского русификатора - там линии двойной толщины, смотрится достаточно разборчиво на любом мониторе. Для сравнения я добавил в дерево проекта шрифт, вынутый из платы КСМ - насколько я помню, он такой же, как и в терминале 15ИЭ. Можно собрать прошивку с этим шрифтом и получить точный вид экрана 15ИЭ:
Отображение шрифтом 15ИЭ
[свернуть]
Основа проекта - модуль vt52 (лежит в файле vt52.v) - собственно, это и есть сам терминал. К его портам подключается монитор, клавиатура, линии Tx/Rx последовательного порта и тактовая частота 50Мгц. Этот модуль можно использовать не только как законченный аппаратный терминал, но и встраивать в другие проекты, требующие терминального ввода-вывода. Например, я его встроил в FPGA-реплику платы МС1201.02 и получил в результате практически одноплатную ДВК. Все это, кстати, спокойно влезло в самую младшую EP4CE6. Для облегчения встраивания из модуля наружу выходит шина vtspeed, несущая информацию о текущей скорости терминального UART. Эту информацию можно использовать для автоматической настройки скорости сопряженного с терминалом уарта.
В проект также входит модуль terminal - это оболочка, облегчающая адаптацию модуля vt52 к конкретной плате. Он предоставляет схему генерации начального сброса, а также преобразователь цветовых сигналов для плат, имеющих видео-DAC для управления яркостью цвета.
Для сборки терминала можно использовать любую, самую простейшую отладочную плату на EP4CE6, коих продается навалом на алиэкспрессе. К плате нужно будет подключить разъем VGA, разъем PS/2 и преобразователь уровней сигнала последовательного порта. Еще проще купить плату, уже имеющую на себе VGA, PS/2, RS-232 - таких плат тоже продается более чем достаточно. В этом случае ничего паять не потребуется - достаточно описать правильное соответствие номеров ножек FPGA с портами проекта, собрать прошивку и залить ее в конфигурационную память платы.
Проект живет в этом репозитории на гитхабе.
В каталоге DOC лежит файл terminal.pdf, содержащий подробную информацию, в том числе о назначении управляющих клавиш и формате строки состояния. Рекомендую ознакомиться - изучать терминал методом тыка не так-то просто.
Для тех, кому лень связываться с гитом, вот здесь лежит текущий срез репозитория. Обновляться он не будет, поэтому все же советую пользоваться репозиторием.