МАРСОХОД

Open Source Hardware Project

Об усовершенствовании терминала

vt100term

Прошу совета.
После последнего моего проекта "Простой текстовый терминал" пришла в голову мысль сделать настоящий терминал вроде какого нибудь стандартного терминала VT100.

Эта задача мне сначала показалась весьма простой: текстовый видеоадаптер у меня уже есть из предыдущего проекта и его можно попробовать подключить к системе на кристалле Амбер с процессором ARMv2a. Еще останется добавить в систему модуль PS/2 клавиатуры, написать саму программу терминала VT100 - там должно быть простой протокол, думал я.

В результате я втянулся в эту "авантюру" и конца края её пока не видно..

Да уж.. Прошли времена простых проектов марсохода типа "проект выходного дня". Никак не ожидал сколько подводных камней, сколько неожиданных трудностей.

Как ни кажется странным, собственно с ПЛИС и проектом системы на кристалле у меня почти не было проблем. А вот с программой терминала VT100, с его подключением к Линуксу - проблем много.

Вот, например, такая совершенно странная проблема. Плата Марсоход2 при подключении к ПК опознается как последовательные порты - там ведь у нас микросжема FTDI стоит на плате. Собственно через последовательный порт мой VT100 в плате Марсоход2 и должен работать. Я думал, что достаточно сконфигурировать Linux использовать мой последовательный порт для дополнительной консоли - и все само собой получится. Я добавил такой файл /etc/init/tty7.conf в мою Ubuntu:


# tty7 - getty
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345] and (
            not-container or
            container CONTAINER=lxc or
            container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn
exec /sbin/getty -8 115200 ttyUSB1


Ну как добавил - скопировал из имеющегося tty6.conf и отредактировал последнюю строку: задал скорость 115200 и ttyUSB1.

Ну думаю, сейчас буду получать какие-то символы, esc-последовательности протокола VT100. А вот и нет. Приходит в мой терминал какая-то белиберда. Главное что если подключаю не к Ubuntu а просто к программе терминала TeraTerm - нормально символы приходят в мой терминал, в подключаю к Ubuntu - просто белиберда. Довольно долго отчего-то не мог понять что происходит. Потом дошло - видимо скорость передачи последовательного порта из Ubuntu совсем не 115200. Оказалось - 57600 и приходят какие-то странные команды мне в терминал вроде AT+GCAP... Это совсем на протокол VT100 не похоже.
Оказалось, что кроме getty последовательным портом хочет завладеть другой процесс /usr/sbin/modem-manager. Этот процесс при подключении COM-порта думает, что там модем и пытается его свойства прочитать. Как это фишку отключить в Ubuntu я так и не понял. Просто переименовал этот модем-manager, как бы удалил. Только тогда как-то заработало..

Вот еше проблема.
Я думал протокол VT100 простой. Я даже начал писать программу терминала для него на языке С. В моей системе на кристалле процессор ARMv2, компилятор Си у меня есть. Начал делать программу. Чем больше вникаешь, тем больше понимаешь, что не все так просто - очень много ньюансов. В конце концов решил поискать какие-то сторонние исходники терминала.

Нашел на GitHub то, что мне показалось наиболее подходящим: https://github.com/JulienPalard/vt100-emulator. Вот эти исходники взял за основу, но конечно пришлось их перерабатывать для себя. Этот терминал не поддерживал цветные режимы, а у меня ведь текстовый экран цветной. Сделал. Потом оказалось, что Ubuntu посылает не ASCII символы в терминал, а UTF-8. Русские буквы приходят в виде двух байтов. Нужно как-то перекодировать. Это я сделал частично - буква Ё будет не правильно показываться. Псевдографика приходит тремя байтами - то же нужно перекодировать - пока толком не доделал.

В целом и общем сейчас работает вот что:

  1. терминал VT100 на базе платы Марсоход2 (плюс VGA монитор и PS2 клвиатура) при подключении к Ubuntu показывает диалог входа: нужно ввести логин и пароль;
  2. после успешного логина можно пользоваться почти полноценной консолью Ubuntu Linux - вводить всякие команды типа ls, cd, mkdir, cat - ну в общем почти вся консоль работает;
  3. текстовый экран у меня довольно большой (разрешение на экране 1440х900 точек или 90x56 символов), но сам терминал занимает всего 80х24 символов;
  4. можно запустить mc и он работает! (собственно фото вверху).

Что пока не работает:

  1. не все клавиши клавиатуры работают и сделать полную поддержку довольно много работы. Хорошо бы доделать хотя бы функциональные клавиши F1-F10 и Ctrl;
  2. не работают лампочки клавиатуры. 
  3. нет аппаратного курсора на экране - пичалька..
  4. нет русской буквы Ё - вместо нее какая-то другая.
  5. вся псевдографика одним "кирпичиком".

 В общем получается, что несмотря на большой объем проделанной работы этот проект все еще остается сыроватым. Вот думаю - выкладывать как есть? или еще усовершенствовать его до человеческого вида? Чего-то я подустал от этого VT100 :-) делаю-то его вечарами да по выходным..

ЗЫ: Еще нужно сделать краткое описание Альтеровского проекта всей системы на кристалле терминала VT100 - что-то у меня уже на все это терпения не хватает.

 

Комментарии  

0 #6 alman 16.01.2015 02:46
Кстати, очерь интересной идеей была бы реализация честного RS-232 - можно было бы очень брутальную демку показать - используете PCI карту с шестнадцатью портами RS-232 и ставите её в любой десктопный компьютер с Linux. Подключаете к каждому порту порту терминалу из этой статьи, слегка правите стартовые конфиги и получаете 17 полноценных термилов. Для большего драматизма из компьютера с 16 компиортами видеокарту можно извлечь.

Если при этом запустить на каждом терминале консольный тетрис, то 16 одновременных игроков в тетрис не смогут даже на 1% загрузмть современные копьютеры.
0 #5 alman 16.01.2015 02:40
Цитирую nckm:
Цитирую wowa:
Лично моё мнение: Вы зря аж так увлеклись системами на чипе :) :)

Во многом согласен, но раз уж дело начал, нужно как-то довести до завершенного состояния..

В принципе, до завершённого состояния хватило бы полторы вещи. Если оставить такой шрифт, как показан на картинке выше, то навскидку на Ваш экран поместится 90 столбцов и 50 строк. Если не ошибаюсь, разрешение монитора 1280x1024? То есть полноэкраггый режим это как минимум. :-*

И неплохо было бы разобраться как терминал умеет сообщать своё разрешение. В Интернете подсказывают команду [c, но это не то.

Как вариант, можно на хосте только через переменные среды настроить разрешение терминала, но если бы терминал умел через искейп последовательно сти сообщать своё разрешение, то было бы чудесно.
0 #4 alman 24.03.2014 12:13
Клавиши F1-F12 передаются через ESC-последовате льности. В принципе, можно и без них попервой обойтись - их заменяют нажатия на клавишу Esc, а затем на цифровые клафишки 1,2,3, etc. Проверьте в любом Линуксе - будет работать.

Имхо, проект мог бы даже выстрелить как самостоятельный , если бы на его основе смогли бы наладить выпуск терминалов. Но тут всё упрается в стоимость дисплея.

И всё же 80x24 - это безумно мало. Идеальный терминала это 80x30. В таком терминале даже работать приятно.
0 #3 alman 24.03.2014 12:13
Всё правильно делаете - история показывает, что многие серьёзные проекты начинаются именно с терминала.

Теперь "глупый" совет - временно возьмите для теста не Ubuntu, а старенький Slackware пяти или даже десяти летней давности - никакого постороннего мусора, но чистый Unix-way :)

Аппаратный курсор - это очень нужно и, наверное, не так уж и сложно. Если нужен протокол управления лампочками клавиатуры (в смысле - документация) - я могу поискать - где-то у меня был.

С клавишей Ctrl всё довольно просто - если память мне не изменяет, при её удерживании надо обрезать несколько верхних бит у кода клавиши.
+1 #2 nckm 23.03.2014 17:50
Цитирую wowa:
Лично моё мнение: Вы зря аж так увлеклись системами на чипе :) Понимаю запустить АРМ на плате - но это всё как стрелять пушкой по воробьям. Для этой цели бы отлично подошел уже готовый (Вами же написаный) АВР. Его немного розширить для работы с 16 битными данными (как с регистрами которые как бы окно из памяти) и использовать. А ради спортивного интереса потратить на проэкт пол года - лишнее.. Тут нет никакого прогресса.. Я вообще считаю что красота ПЛИС вовсе не в возможности написать свой МК а в розширении МК в нужном направлении и увеличения скорости вычислений при минимальных затратах :)

Во многом согласен, но раз уж дело начал, нужно как-то довести до завершенного состояния..
0 #1 wowa 23.03.2014 16:37
Лично моё мнение: Вы зря аж так увлеклись системами на чипе :) Понимаю запустить АРМ на плате - но это всё как стрелять пушкой по воробьям. Для этой цели бы отлично подошел уже готовый (Вами же написаный) АВР. Его немного розширить для работы с 16 битными данными (как с регистрами которые как бы окно из памяти) и использовать. А ради спортивного интереса потратить на проэкт пол года - лишнее.. Тут нет никакого прогресса.. Я вообще считаю что красота ПЛИС вовсе не в возможности написать свой МК а в розширении МК в нужном направлении и увеличения скорости вычислений при минимальных затратах :)

Добавить комментарий



facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Статьи о разном Об усовершенствовании терминала