Изучение глифов на терминалах DEC VT100 и VT220

Недавно я немного увлёкся эмуляцией аналоговых медиа: хотелось воссоздать растровую графику ЭЛТ, как на «стеклянных терминалах» прошлого, таких как культовая серия VT от Digital Equipment Corporation (DEC). В процессе возник ряд вопросов об особенностях отображения шрифтов в пиксельной графике ЭЛТ. Интересно, как на самом деле выглядели шрифты и можно ли реконструировать их по спецификациям?


Современные шрифты TrueType воссоздают глифы VT220. Имейте в виду, что VT-терминалы поддерживали два режима разрешения: один на 132 символа в строке и один на 80 символов (char-matrix 9?10 и 10?10, соответственно), в последнем интервал расширен на один пиксель

Благодаря обилию технической информации на сайтах вроде vt100.net и bitsavers.org можно легко определить внешний вид тех шрифтов. Например, мы можем восстановить глифы из прошивки терминалов. Есть даже шрифты TrueType, которые повторяют типографику VT220: Glass TTY VT220 с растровыми строками и DEC Terminal Modern с современными, гладкими очертаниями (на иллюстрации вверху).

При ближайшем рассмотрении эти шрифты значительно отличаются друг от друга, но ни один из них не выглядит правильно. Сравнивая с фотографиями настоящего VT100, заметны различия не только в плотности шрифта, но и в размере и форме контуров и в общем «ощущении» от шрифта. Впрочем, фотографии терминала тоже не могут передать настоящее ощущение плотности шрифта, потому что оно сильно зависит от параметров съёмки:


Приключенческая игра Colossal CavePhoto на экране VT100. Фото: Википедия, Дейв Фишер, 2008, Wikimedia Commons (отредактировано, N.L.).


Отображение списка каталогов на VT100. Фото: Джейсон Скотт, 2013. Creative Commons (отредактировано, N.L.).

Поскольку фотографии не очень помогают, пришло время взглянуть на прошивку.

Прошивки


Есть копии ПЗУ, можно просто извлечь оттуда реальные шрифты, которые будут идеально соответствовать оригиналу, верно?.. Что может пойти не так?


Содержимое ПЗУ с терминалов VT100 (слева) и VT220 (справа). Разделение VT200 выполнил Пол Фло Уильямс, vt100.net (2008). VT100 дополнено мной, N. L.). Явно отличаются символы 'a', 'c', 'g', '2', '6', '7', '9', '@', '%', '{', '}', '|', '°' и форма управляющих символов (? ? ? ? ?). Кроме того, на VT220 больше символов

Это тоже выглядит неправильно. Очевидно, глифы растягиваются вертикально примерно до двойной высоты, но это не единственное искажение. Символы просто не выглядят правильно. Например, посмотрите на 'p' и 'q' или смещение точек нисходящего правого штриха 'k', не говоря уже о забавных очертаниях '6' и '9' на VT100 или искажённом '2'! Более того, при ближайшем рассмотрении символьная матрица составляет всего 8?10, в то время как мы ожидали не менее 9?10 (и 10?10 для режима c 80 столбцами), как описано в спецификациях. Это явно не то, что отображается на экране.

Фосфор


Давайте ещё раз взглянем на руководства, в частности на «Техническое руководство серии VT100» (2-е издание, EK-VT100-TM-002; DEC, Maynard, Massachsetts, 1979). Там указано, что дело в задержке люминофора (фосфора):


Продолжительность импульса и профиль активации фосфора для VT100 и VT200 («Техническое руководство серии VT100», EK-VT100-TM-002, стр. 4-78). Имейте в виду, что профили сигнальных импульсов сильно идеализированы и в аналоговой реальности они тоже наклонные

Время полной активации люминофора на самом деле больше, чем продолжительность импульса для одного пикселя (40 наносекунд). Это означает, что если мы пытаемся отобразить только один пиксель, люминофор на этом конкретном месте никогда не достигнет своего полного уровня активации, что приведёт к размытому изображению различной яркости между более тусклыми, тонкими участками и более плотными, толстыми. Поэтому типографика вынуждена подстраиваться, выдавая импульсы двойной продолжительности (80 нс), чтобы обеспечить чёткое изображение и разборчивый текст.


Импульсы одинарной и двойной продолжительности и активация люминофора (оттуда же, отредактировано N. L.)

Схема растягивания точек


Для этого терминалы VT используют специальный метод растягивания точек (dot stretching): отдельные строки матрицы символов из ПЗУ модифицируются на лету, продлевая любые импульсы активного пикселя ещё на один пиксель. Там, где в ПЗУ один пиксель, на экране будет два. Где два подряд, отобразится три.

Таким образом, наша матрица 8?10 расширяется до ожидаемой 9?10 (или 10?10 в режиме 80 столбцов, где последний пиксель для рисования линий растягивается на ещё один импульс).


Растягивание точек в VT100 и VT200 («Техническое руководство серии VT100», EK-VT100-TM-002, стр. 4-78)

Однако так получатся разные результаты для символов обычного размера и двойной ширины! Благодаря чудесам растягивания точек в одном шрифте содержится два шрифта, в каждом из которых детализация зависит от размера экрана!


  1. Как в ПЗУ
  2. Одиночная ширина с растяжением точек
  3. Двойная ширина с растяжением точек
  4. Одиночная ширина с растяжением точек и задержкой (люминофор)
  5. Двойная ширина с растяжением точек и задержкой (люминофор)

(1, 2, 3 согласно Полу Фло Уильямсу, vt100.net, 4 и 5 добавлены мной, N. L.)


Принципиально важно, что изображение (2) даёт точечные штрихи, которые отличаются от чётких линий в современных реконструкциях шрифта. Но если добавить синусоидальные и косинусообразные графики активации люминофора (рис. 4 и 5, а также диаграмма с графиком активации выше), то получим более точный вариант реального отображения на экране (помните, что VT100 и VT220 проявляют довольно заметные растровые линии).


Образцы символов VT220 (режим 80 столбцов).

  1. Как в ПЗУ
  2. Одиночная ширина с растяжением точек
  3. Добавлены графики активации люминофора
  4. Добавлено свечение люминофора

(1 и 23 согласно Полу Фло Уильямсу, vt100.net, 3, 4 и негатив добавлены мной, N. L.)

Налицо довольно экстремальный пример, как носитель диктует внешний вид типографской формы, или, с другой стороны, как дизайн глифов создаётся с учётом носителя и его конкретных технологических ограничений для достижения желаемой типографики. Посмотрев на эффекты активации люминофора, задержку и свечение, становится понятно, почему разные фотографии экранов VT-терминалов показывают различную ширину шрифта, в зависимости от выдержки на камере, в то время как сохраняется общая гладкость шрифта.

Вот ещё одно представление шрифтов в ПЗУ с применением описанных эффектов, которые лучше похожи на реальное изображение с экрана:


Видимые глифы VT100 (слева) и VT220 (справа)

Ниже показаны символы двойной ширины VT100 по сравнению с нормальными символами одиночной ширины (чёрным на белом, а также в негативе, как они воспринимаются с экрана):



Картинки с верстака


И, наконец, два изображения с моего рабочего «верстака», на котором я пытаюсь воссоздать экран аналогового терминала в веб-браузере средствами HTML5 и canvas API. Может, многовато ретро-размытия, но вы уловили идею:


Эмуляция VT100 (скриншот)


Эмуляция VT220 (скриншот)

И это всё на сегодня…

Комментарии (13)


  1. PeterZha
    03.04.2019 14:02

    Ретро-размытия не то, чтобы многовато, а просто невообразимо много. Как человек, сидевший за этими терминалами не один десяток часов, могу сказать что терминалами с таким сведением лучей народ пользовался только при отсутствии рядом свободного нормального.


    1. Habivax
      04.04.2019 08:42

      Ретро-размытия не то, чтобы многовато, а просто невообразимо много.

      Для «зелёных» мониторов согласен, но их резкость была неприятной для глаз, резала. А вот на «янтарных» шрифт был более «смазанным» при любой фокусировке, но при этом работать за ними было удобнее, глаза меньше уставали. Тёплый, ламповый шрифт ;)

      Цвета на картинках с верстака не совсем в тон, не видел я мониторов в такую «синеву». Второй ближе к оригиналу, но смотрится каким то серо-мутным, имхо он был более насыщенный.


  1. aitras
    03.04.2019 14:03

    Выглядит здорово, размытия только лишка.


  1. Augustxeno
    03.04.2019 14:34

    где еще для винды скачать такие шрифты


    1. LumberJack
      03.04.2019 17:59

      1. u010602
        04.04.2019 01:39

        Спасибо, скачал, установил, но использовать для консоли и блокнота не могу, его нет в списке. Интересно почему.


  1. Elanir
    03.04.2019 19:19

    Не про шрифты, но в тему. Вот здесь можно скачать эмулятор олдскульных терминалов и шрифтов к ним. К сожалению, я не увидел там вышеупомянутого VT100, но, возможно, кому-то будет интересно.


  1. Tzimie
    03.04.2019 20:33
    +2

    Хочу за vax/vms
    А еще лучше rsx-11m


  1. u010602
    04.04.2019 01:33

    На последних скринах символы кажутся сильно узкими, и стоят сильно плотно.


    1. fraks
      04.04.2019 08:43

      А мне они наоборот, показались наиболее близкими к тому что я помню с терминала
      Электроника 15-ИЭ-00-013 который аналог VT52.
      Ну и печатный шрифт тоже такой был, на матричниках. Вспомнил что тогда можно было визуально различать почти все символы из какого они набора — РУС или ЛАТ


  1. vorfol
    04.04.2019 08:43

    А для инвертированных символов какой алгоритм применяется?


  1. nochnoy
    04.04.2019 10:20

    Шикарно! А ещё бы подобную штуку для всего экрана, чтобы, например, поиграть в старые игры или полазить по старым версиям сайтов в WayBackMachine. Потому что все сохранившиеся скриншоты выглядят совершенно не так, как оно было в эпоху ЭЛТ.


    1. engine9
      05.04.2019 01:44

      Обратите внимание на комментарий.