PDA

Просмотр полной версии : Аппаратный терминал VT52/15ИЭ-00-013 на FPGA



forth32
07.11.2020, 20:11
Решил поделиться с общественностью одной своей полезной наработкой.

Поскольку благодаря трудам уважаемого 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ИЭ, в строку состояния выводится текущая скорость последовательного интерфейса и время, прошедшее с момента включения терминала. Выглядит это примерно так:
https://i.imgur.com/ksZPZQL.jpg
Терминал поддерживает все используемые в таких терминалах кодировки:
- ASCII, как оригинальный VT52 - большие и малые латинские буквы. Она же - КОИ7 Н0
- КОИ7 Н1, большие и малые русские буквы
- КОИ7 Н2, только большие латинские и русские буквы. Эта кодировка обычно использовалась при работе с СМ ЭВМ, она поддерживается и СМ7209, и 15ИЭ.

Переключение между кодировками Н0/Н1 производится управляющими кодами, а кодировка Н2 включается клавишей F11. На экран, естественно, можно выводить смесь символов разных кодировок. Кроме этого, поддерживается режим отображения служебных кодов мигающими буквами, как в СМ7209 и 15ИЭ. Пример работы с русскоязычной программой в кодировке КОИ7 Н2:https://i.imgur.com/UPTtKfo.jpg
вот еще примеры разных режимов работы терминала:
https://i.imgur.com/h5I7WDf.jpg
https://i.imgur.com/5Ky1haI.jpg
https://i.imgur.com/ycJlRq4.jpg
https://i.imgur.com/5yOu7qn.jpg

Имеется автономный режим работы (локальная петля), который можно использовать для тестирования терминала и клавиатуры, включается клавишей F10. Терминал поддерживает скорости обмена от 1200 до 115200, которые можно менять с клавиатуры (клавиши F5/F6). Курсор может иметь 2 формы на выбор - подчеркивание и блок, может быть мигающим и немигающим.

Для отображения знаков используется знакоместо 8*12 (а не 8*8, как в древних терминалах). Шрифт я в основном выдрал из какого-то досовского русификатора - там линии двойной толщины, смотрится достаточно разборчиво на любом мониторе. Для сравнения я добавил в дерево проекта шрифт, вынутый из платы КСМ - насколько я помню, он такой же, как и в терминале 15ИЭ. Можно собрать прошивку с этим шрифтом и получить точный вид экрана 15ИЭ:
https://i.imgur.com/ZzgDri6.jpg

Основа проекта - модуль 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 с портами проекта, собрать прошивку и залить ее в конфигурационную память платы.

Проект живет в этом репозитории на гитхабе. (http://github.com/forth32/vt52)
В каталоге DOC лежит файл terminal.pdf, содержащий подробную информацию, в том числе о назначении управляющих клавиш и формате строки состояния. Рекомендую ознакомиться - изучать терминал методом тыка не так-то просто.

Для тех, кому лень связываться с гитом, вот здесь (https://yadi.sk/d/9QEectJxRXz5kg) лежит текущий срез репозитория. Обновляться он не будет, поэтому все же советую пользоваться репозиторием.

Hunta
07.11.2020, 20:44
Крутяк!

- - - Добавлено - - -


В режиме Н2 эксплуатация оригинальных ОС от DEC невозможна, ибо все сообщения выводятся в искаженном виде (и множеством его клонов), а также с 15ИЭ-знаменитое IНЖАЛИД ДЕЖИЦЕ)

Ну эт ты погорячился - не представляешь, сколько проработал в этом режиме :):):)

- - - Добавлено - - -


а также написанный мной преобразователь объектных модулей RT-реализацией текстового терминала,11 в абсолютный бинарный файл (и множеством его клонов), а также с 15ИЭ-такой типа компоновщик). Компиляцию программы можно осуществить, используя скрипт compile.sh. Результатом работы скрипта будет файл формата mif, пригодный для загрузки в память FPGA.
Я написал скрипт на powershell, который берёт листинг от Macro-11, а на выходе выдаёт mif файл, в котором будут не только данные, но и листинг - как коменты. Типа вот такого:



WIDTH=16;
DEPTH=269;

ADDRESS_RADIX=UNS;
DATA_RADIX=OCT;

CONTENT BEGIN
-- 1 .TITLE TESTS
-- 3 000000 .ASECT
-- 5 001000 .=1000
256 : 012706; -- 7 001000 012706 002000 MOV #2000, SP
257 : 002000; -- 001002 002000
258 : 005000; -- 9 001004 005000 CLR R0
259 : 012701; -- 10 001006 012701 177404 MOV #177404, R1
260 : 177404; -- 001010 177404
261 : 012761; -- 12 001012 012761 177400 000002 MOV #177400, 2(R1)
262 : 177400; -- 001014 177400
263 : 000002; -- 001016 000002
264 : 012711; -- 13 001020 012711 000005 MOV #5, (R1)
265 : 000005; -- 001022 000005
-- 14 001024 10$:
266 : 105711; -- 15 001024 105711 TSTB (R1)
267 : 100376; -- 16 001026 100376 BPL 10$
268 : 005007; -- 18 001030 005007 CLR PC
-- 20 000001 .END
-- 000000 001 (RW,I,LCL,REL,CON)
0 : 000001; -- 000000 001 (RW,I,LCL,REL,CON)
END;

никак не пофиксю последнюю строчку - пока просто руками удаляю, если она мешается, но обычно можно забить

forth32
07.11.2020, 21:14
Ну эт ты погорячился - не представляешь, сколько проработал в этом режиме
Примерно представляю. У нас ведь тоже на нашем ВЦ использовались некоторые дековские неадаптированные пакеты. Я вот хорошо помню FMS-11, которую использовал для создания полноэкранных программ - утилиты из этого пакета использовали маленькие буквы, и я год мучался со всякими NУМЕРИЦ ФИЕЛД. Потом догадался почитать доку на СМ7209, и приделал к терминалу тумблер, переключающий знакогенератор между ASCII и КОИ7.
А здесь роль этого тумблера выполняет кнопка F11.



Я написал скрипт на powershell, который берёт листинг от Macro-11, а на выходе выдаёт mif файл
Ну, тут каждый делает как ему удобнее. По мне так формат объектного модуля однозначнее формата листинга, куда компилятор чего только не пихает.
А зачем в миф-файле исходные строки? Я так в миф вообще никогда не заглядываю, при отладке листингом пользуюсь.

Hunta
07.11.2020, 21:35
А зачем в миф-файле исходные строки? Я так в миф вообще никогда не заглядываю, при отладке листингом пользуюсь.
Потому что мои исходники, как правило, выглядят так:


PROCEDURE MAIN
BEGIN
.GTLIN #BUF, #PROMPT

IFB BUF NE #0 THEN
CALL MAKE
ELSE
.PRINT #HELP
END

.EXIT
END MAIN

листинг, для понимания - смесь вызовов макросов и их расширений, но - когда у меня PDP2011 бежит в "пошаговом" режиме - мне как раз удобней то, что я вижу в моём mif файле. Ну и частенько бывает - правлю не исходник, а непосредственно mif файл - когда что то временное и надо по быстрому проверить, не трогая исходников :)

- - - Добавлено - - -

По сути то, что я вижу в mif - это очищенный листинг, в котором оставлено только нужное :)

Vslav
07.11.2020, 22:51
Очень круто, спасибо. А чего на захотели родной КСМ запилить на vm80a? Там и прошивка есть родная, только запилить видео под VGA?

svinka
08.11.2020, 00:01
ананизьмъ

вашу бы энергию в мирное русло....шшш.....

Чем под линукс вас не уст3ил како-йто терминал? А то там столько исходничков!!! хоть под совковый ИЕ правьте!

по цене - ужас!!

- - - Добавлено - - -

тут еще как терминал укнц за 4тыщ просится... или егойная прошивка к живому вм2

svinka
08.11.2020, 00:36
Кого выпустили. Только нафига он тут?
тихо сам с собою теперь не получится....

svinka
08.11.2020, 00:43
запрос послал
жду ценник

forth32
08.11.2020, 08:14
А чего на захотели родной КСМ запилить на vm80a? Там и прошивка есть родная, только запилить видео под VGA?
Была вначале такая мысль. Только повторить я думал не КСМ, а СМ7209 - в отличие от ксм, со схемотехникой этого терминала я хорошо знаком, даже прошивку частично дизассемблировал в свое время.
Но есть несколько причин этого не делать. Главная - прошивка рассчитана на работу с родной клавиатурой. Родную клавиатуру разрабатывали вменяемые люди, и при нажатии пробела она выдает код 40, а не бессмысленный сканкод 51. Под ps/2 придется прошивку переделывать, добавляя таблицу перекодировки сканкодов, причем таблица эта разная в разных режимах (рус, лат, кои7, с шифтом итд). А писать в кодах 8080, да еще всякую адресную арифметику - это проще удавиться...
Так что я решил разработать терминал с нуля, опираясь только на VT52 Decscope user manual и паспорт 15ИЭ-00-013. Я ведь не ставил цель повторить как можно точнее древнюю железяку. Мне просто нужен удобный терминал для работы, с более привычной (теперь) раскладкой QWERTY, а не JCUKEN.

xolod
18.12.2020, 16:29
forth32, Спасибо за очень интересный проект!
Я его собрал для MIST Cyclone III ну и соответственно Quartus 13.1 запустился сразу, нужно только клавиатуру адаптировать. Но есть у меня и идея по развитию этой штуковины!

forth32
18.12.2020, 17:25
forth32, Спасибо за очень интересный проект!
Я его собрал для MIST Cyclone III ну и соответственно Quartus 13.1 запустился сразу,
Вот и отлично, раз кому-то пригодилась моя разработка.

нужно только клавиатуру адаптировать
А что там адаптировать? Я вроде как нестандартных сканкодов не использовал, должна любая клавиатура ps/2 подойти.

Но есть у меня и идея по развитию этой штуковины!
У меня тоже. В новогодние выходные буду из него VT100 делать. А у вас что за идеи?

Alex
18.12.2020, 18:26
сейчас скажу идею моего извращённого разума, если хочется любую раскладку, то:
можно взять сенсор для дисплеев, есть и на 15 дюймов и более...
Далее в зависимости от настроения, финансирования и прочего, либо под этот сенсор подложить распечатку нужной раскладки, либо Ж/К матрицу на которую выводить раскладку. Далее всё от фантазии зависит :)
Можно любую раскладку эмулировать, любые клавиши, дело только за софтом управляющего микроконтроллера :)
Недостаток - клава-то сенсорная :(

forth32
18.12.2020, 20:06
Далее в зависимости от настроения, финансирования и прочего, либо под этот сенсор подложить распечатку нужной раскладки, либо Ж/К матрицу на которую выводить раскладку.
Можно просто взять сенсорный дисплей нужного размера, их сейчас как грязи. Причем подойдет дисплей любого разрешения.

Недостаток - клава-то сенсорная
Это не просто недостаток, это - фатальный недостаток. Ибо нормально работать с сенсорной клавой - невозможно. Нужны тактильные ощущения от нажатия кнопок, иначе работать с клавой будет так же противно, как с виртуальной клавиатурой на планшете/телефоне.
Я просто взял и наклеил бумажки на все кнопки, делающие не то, что написано на них. Решение конечно так себе, но пока народ не жалуется, а пользуются этой клавиатурой каждый день и подолгу.

svinka
18.12.2020, 21:12
Можно найти неспешно на авито и потом приделать старую клавиатуру от терминала 15ИЭ.... или ту что шла с последовательным интерфейсом к электроника-85 и к поздним двк с терминалами на платах формата МПИ (КСМ КЦГД)

также можно применить Электронику БК с небольшой самописной программой с любым интерфейсом до плис. хоть порт последовательный (программный) хоть параллельный обмен по уп
или просто присоединить матрицу клавиатуры а девборду засунуть в корпус БК.

MM
18.12.2020, 21:29
В БК11М вообще команды дисплея 15-ИЭ-00-013 ( большинство ) реализованы в ЕМТ63 - т.е. программа терминала микроскопическая получается, 80 котов в строке.

svinka
18.12.2020, 21:32
В БК11М вообще команды дисплея 15-ИЭ-00-013 ( большинство ) реализованы в ЕМТ63 - т.е. программа терминала микроскопическая получается, 80 котов в строке. тут ищут клавиатуру так как выход нужен(есть) на VGA а БК к этому пока не готов Ж-)))

forth32
18.12.2020, 22:12
Можно найти неспешно на авито и потом приделать старую клавиатуру от терминала 15ИЭ
Это только так кажется, что авито завален такими клавиатурами. Я в свое время поискал и нашел только одну, ободранную, с несколькими поломанными кнопками, и при этом за 5000р примерно - то есть дороже самой платы с FPGA. Если уж на то пошло, у меня валяется клавиатура от сдохшего СМ7209,можно было бы и ее использовать, но есть ряд факторов:
- такие клавиатуры подходят для единичного изделия. Мне же нужна была легко воспроизводимая конструкция, которую можно потом применить и на производстве, в разных самоделках, в том же PDP2011 например. Клавиатур PS/2 пока еще в природе достаточно, на мой век хватит.
- самое главное, что все эти старые клавиатуры имеют раскладку JCUKEN. А все мы за десятки лет уже отвыкли от этой раскладки, пальцы хотят QWERTY, и потому работа на старых клавиатурах превращается в сущее мучение.
Ну а клавиатура БК0010 - это вообще ***** еще то, на ней и раньше работать было проблематично. Все это старье подходит, если надо воссоздать как можно точнее ЭВМ той древней эпохи. А для реальной работы не годится вообще. Я же создавал терминал в первую очередь именно для реальной повседневной работы у нас в лаборатории, а не для поиграться в старое железо.

xolod
19.12.2020, 00:39
Вот и отлично, раз кому-то пригодилась моя разработка.

А что там адаптировать? Я вроде как нестандартных сканкодов не использовал, должна любая клавиатура ps/2 подойти.

У меня тоже. В новогодние выходные буду из него VT100 делать. А у вас что за идеи?

В MIST USB клавиатура и она поключена к контролёру на ARM, а от передает уже сканкоды в Cyclone.

Я думаю сделать из него 1201.02. Контролер памяти надо только прикрутить.

forth32
19.12.2020, 06:22
В MIST USB клавиатура и она поключена к контролёру на ARM, а от передает уже сканкоды в Cyclone.

Я думаю сделать из него 1201.02. Контролер памяти надо только прикрутить.

А, ну это я давным-давно уже сделал. На первом скриншоте видно. Прикрутил контроллер DRAM, сделал контроллер ИРПР для принтера, контроллеры дисков RK05 (RK) и диска RD50C (DW, в ДВКшном варианте) на SD-карте. Начал делать контроллер RX02 (DY), но забросил пока из-за нехватки времени. Все это уже полгода работает со стендом у нас в лаборатории без особых проблем.

xolod
20.12.2020, 00:05
Есть прогресс, прикрутить клавиатуру на MIST.

Vslav
20.12.2020, 00:31
контроллеры дисков RK05 (RK) и диска RD50C (DW, в ДВКшном варианте) на SD-карте.
Круто, есть несколько вопросов:
- как поддерживается SD-карта? Есть отдельный процессор чтобы обрабатывать обмен с ней? Cyclone V ?
- не планируете открывать исходники?

forth32
20.12.2020, 06:37
как поддерживается SD-карта? Есть отдельный процессор чтобы обрабатывать обмен с ней?
Я просто выдрал модуль SDSPI из проекта pdp2011 и доработал под свои цели. Там нет никаких процессоров, этот модуль простой как валенок и умеет три базовые вещи - проинициализировать карту, прочитать блок в буфер, записать блок из буфера. Буфера двухпортовые, и снаружи с ними можно работать на полной скорости wishbone-шины, в том числе использовать для DMA в контроллере RK11/RK05.
Псевдодиски RK05 уже полгода трудятся у нас в лаборатории без особых проблем. Остальные - DW и RX02, я делал просто так, для воссоздания полноценного ДВК. Для целей отладки каждый из дисковых контроллеров работает со своей собственной SD-картой. В окончательном варианте они буду использовать одну, разделяемую на всех, как это я делал раньше в самом pdp2011.

не планируете открывать исходники?
Да мне же не жалко, я просто не предполагал, что мои поделия могут заинтересовать кого-то кроме меня самого. Если действительно кому-то это надо, то я в новогодние праздники все это причешу в человеческий вид и выложу всю плату МС1201.02 со всеми модулями - оттуда каждый навыдирает все, что нужно для собственных проектов.

xolod
20.12.2020, 08:13
Да мне же не жалко, я просто не предполагал, что мои поделия могут заинтересовать кого-то кроме меня самого. Если действительно кому-то это надо, то я в новогодние праздники все это причешу в человеческий вид и выложу всю плату МС1201.02 со всеми модулями - оттуда каждый навыдирает все, что нужно для собственных проектов.
Конечно надо!
Я попробую перенести ваш проект по MIST.

Vslav
20.12.2020, 12:19
Да мне же не жалко, я просто не предполагал, что мои поделия могут заинтересовать кого-то кроме меня самого. Если действительно кому-то это надо
Да, было бы интересно посмотреть и попробовать.

xolod
23.12.2020, 19:42
Первое приближение 1201.02 на MiST. Нужно сделать диски которые будут монтироваться на файлы образов на SD-Card. И со стабильность еще нужно будет поработать.
https://i.ibb.co/VxsddhP/20201223-192741-1.jpg (https://ibb.co/tz9SSNW)https://i.ibb.co/hg7QRMC/20201223-192849-1.jpg (https://ibb.co/tHmjMh3)
https://i.ibb.co/JHXV9nL/20201223-192800-1.jpg (https://ibb.co/QMsL49B)

sharklodon
28.02.2025, 10:39
Xolod, поздравляю!!! Отличная работа!!! Я тоже пытаюсь портировать на BigMiST. Но знаешь, сейчас у меня много проблем с модулем sdspi.

Shark,