На этом видео - демонстрация возможностей терминала VT100 созданного на базе платы Марсоход2 и ее шилда разъемов. Плата Марсоход2 подключена к ноутбуку через USB кабель. Из среды Altera Quartus II я загружаю скомпилированный образ проекта VT100 в ПЛИС Cyclone III платы и после этого подключенный к плате монитор обнаруживает видеосигнал и синхронизируется.
Проект для ПЛИС Cyclone III представляет из себя SoC (System-on-Chip) на базе Amber ARMv2a. Тут я немного поленился и не стал менять загрузчик из ПЗУ проекта - там сейчас простейший монитор, который позволяет загрузить через последовательный порт протоколом XMODEM в ОЗУ платы собственно программу vt100.elf. После загрузки этой программы в память платы и после запуска vt100.elf на экране монитора появляется надпись "Hello VT100 World!" и еще мигает курсор.
Теперь самое интересное. У меня на ноуте стоит виртуальная машина с Ubuntu. Я ее дополнительно сконфигурировал так, что ttyUSB1 будет использоваться как консоль.
В свойствах виртуальной машины есть возможность подсоединенные USB устройства подключить к виртуальной машине.
Виртуальная машина видит плату Марсоход2 как устройство Future Devices Dual RS232-HS. Подключаю плату к машине Ubuntu и вот чудо: через несколько секунд появляется консоль терминала.
На демонстрационном видео видно:
- появляется запрос на ввод логина и пароля Linux - ввожу;
- выполняю простые команды типа "ls" и "ls -l";
- запускаю MidnightCommander, mc и могу выбирать файлы, перемещаться по панелям файлового менеджера;
- аппаратный курсор работает;
- клавиши клавиатуры работают почти все, левый Shift и левый Ctrl. Вот с F клавишами не разобрался. Похоже в стандарте VT100 их просто нет? Но тут могу ошибаться.
Конечно, такой проект, в этом виде, еще очень далек от совершенства, но оно мне в общем и не к чему. Совершенствовать, конечно, можно до бесконечности, там есть что улучшать. Самое главное - нужно совершенствовать ПО терминала VT100 - я использую исходники из https://github.com/JulienPalard/vt100-emulator и пытался их адаптировать к моему проекту.
Многое там мне не очень понятно и кое-что кажется можно сделать лучше. Приятно, что все, что было написано мною на Си и скомпилировано для Amber ARM - работает без проблем в моей системе..
Весь проект можно взять вот здесь:
Еще лучше склонировать проект из GitHub и перейти в бранч vt100:
> git clone https://github.com/marsohod4you/Amber-Marsohod2.git
> cd Amber-Marsohod2
> git checkout amber-soc-vt100-term
Исходники программы терминала в папке sw/vt100. Там же есть и скомпилированный vt100.elf файл.
Исходники SoC в папке hw.
В моей SoC теперь дополнительно еще есть модуль текстового экрана txtscreen, который интегрирует в себя:
- статическую память экрана;
- память шрифта VGA;
- VGA контроллер с разрешением 1440x900 (но отображающий текстовый экран);
- регистры управления аппаратным курсором;
- PS/2 контроллер и его регистры.
Весь модуль txtscreen установлен на системную шину Wishbone BUS в системе на кристалле Amber SoC. Доступ к регистрам модуля осуществляется процессором по адресу 0x17000000 и выше.
Теперь, когда я вдоволь наигрался с VT100 подумалось: а не замахнуться ли на Вильяма Шкспира на графический тонкий клиент? Чтоб, клавиатура, мышь была, чтоб браузер или LibreOffice запустить в терминальной сессии? Только не нужно пытаться делать его стандартным для запуска какого нибудь FreeRDP - так точно не получится, слишком мало ресурсов. Можно попытаться подумать сделать какого нибудь USB тонкого клиента.. Может и сделаю...
Подробнее...