Графика формы волны - Waveform graphics
Графика формы волны это простой векторная графика система введена Корпорация цифрового оборудования (DEC) на VT55 и VT105 терминалы в середине 1970-х гг. Он использовался для вывода графики из мэйнфреймы и миникомпьютеры. DEC использовала термин «графика формы сигнала» для обозначения аппаратного обеспечения, но в более общем плане он использовался для описания всей системы.
Система была разработана для использования как минимум память компьютера насколько возможно. В любом заданном месте X он мог рисовать две точки в заданных положениях Y, что делало его подходящим для создания двух наложенных друг на друга формы волны, линейные диаграммы или гистограммы. Текст и графику можно было смешивать, а также были дополнительные инструменты для рисования осей и маркеров.
Система графики формы волны использовалась только в течение короткого периода времени, прежде чем ее заменили более сложной РЕГИС система, впервые представленная на VT125 в 1981 г.[1] ReGIS позволял создавать произвольные векторы и другие формы. В то время как DEC обычно предоставляла обратно совместимое решение в более новых моделях терминалов, они не сделали этого, когда был представлен ReGIS, и графика формы сигнала исчезла с более поздних терминалов.
Описание
Графика сигналов была представлена на терминале VT55 в октябре 1975 года, когда память была чрезвычайно дорогой. Хотя было технически возможно произвести битовая карта отображение с помощью кадровый буфер используя технологии эпохи,[а] объем памяти, необходимый для этого при разумном разрешении, обычно превышал ту цену, которая делала это практичным. Для замены компьютерной памяти другими концепциями использовались всевозможные системы, например трубки для хранения используется в Tektronix 4010 терминалы, или система гоночного луча с нулевой памятью, используемая в Atari 2600. DEC решила решить эту проблему с помощью умного использования небольшого буфера, представляющего только вертикальные позиции на экране. Такая система не могла рисовать произвольные формы, но позволяла отображать данные графика.[2]
Система была основана на дисплее размером 512 на 236 пикселей,[b] создание 512 вертикальных столбцов по оси X и 236 горизонтальных строк по оси Y.[c] Координаты Y отсчитывались снизу вверх, поэтому координата 0,0 была внизу слева, а 511, 235 - вверху справа.[3] Если бы это было реализовано с использованием фреймбуфера, где каждое местоположение было представлено одним битом, потребовалось бы 512 ⨉ 236 x 1 = 120 832 бит или 15 104 байта. В то время память стоила около 50 долларов за килобайт,[4] поэтому один буфер будет стоить более 700 долларов, что эквивалентно 3629 долларам в 2019 году.[5]
Вместо этого графическая система формы волны использовала один байт памяти для каждой позиции оси X, причем значение байта представляло позицию Y. Это требовало всего 512 байтов для каждого графа, всего 1024 байта для двух графов. Чтобы нарисовать линию, программист должен был построить серию точек Y и отправить их в виде отдельных точек,[6] сам терминал не смог соединить точки. Чтобы упростить это, терминал автоматически увеличивал местоположение X каждый раз, когда была получена координата Y, поэтому линию графика можно было отправлять в виде длинной строки чисел для последующих местоположений Y вместо того, чтобы каждый раз повторно отправлять местоположение X. Рисование обычно начинается с отправки одной инструкции для установки начального положения X, часто 0 слева, а затем отправки данных для всей кривой.[6]
В систему также включено хранилище до 512 маркерs в обеих строках. Они всегда рисовались по центру значения Y линии, с которой они были связаны, а это означало, что все, что было необходимо, - это простая индикация включения / выключения для местоположений X, требующая всего 1024 бит или 128 байтов в целом. Маркеры расширялись на 16 пикселей по вертикали и могли быть выровнены только по границам 16 пикселей, поэтому они не обязательно были центрированы по нижележащему графику.[7] Маркеры использовались для обозначения важных точек на графике, где обычно использовался какой-либо символ. Система также позволяла рисовать вертикальную линию для каждого горизонтального местоположения и горизонтальную линию для каждого вертикального местоположения. Они также хранились как простые биты включения / выключения, для чего требовалось еще 128 байт памяти. Эти линии использовались для рисования осей и масштабных линий или могли использоваться для курсора-перекрестия на экране.[8] Отдельный набор из двух 7-битных регистры содержит дополнительную информацию о стиле рисования и других настройках.
Несмотря на сложность с точки зрения пользователя, эту систему легко реализовать на оборудовании. А электронно-лучевая трубка производит отображение, сканируя экран в серии горизонтальных движений, перемещаясь вниз на одну вертикальную линию после каждого горизонтального сканирования.[9] В любой момент во время этого процесса аппаратное обеспечение дисплея проверяет несколько ячеек памяти, чтобы увидеть, нужно ли что-нибудь отображать. Например, он может определить, рисовать ли маркер на графе 0, исследуя регистр 1, чтобы увидеть, включены ли маркеры, просматривая буфер маркеров, чтобы увидеть, есть ли 1 в текущем местоположении X, а затем исследуя местоположение Y графика 0, чтобы увидеть, находится ли он в пределах 16 пикселей от текущей строки развертки.[d] Если все это верно, рисуется точка, представляющая эту часть маркера. Поскольку это будет верно для 16 вертикальных местоположений во время процесса сканирования, будет нарисован маркер высотой 16 пикселей.[10]
Проданный один VT55 стоил 2496 долларов.[11] эквивалент 12 940 долларов США в 2019 году.[5] Как и другие модели серии VT50, терминал может быть оснащен дополнительным принтером для мокрой бумаги на панели в правой части экрана. Это добавило 800 долларов США, что эквивалентно 4 147 долларов США в 2019 году.[5] к цене.[12]
DEC также предлагала VT55 в комплекте с небольшой моделью PDP-11 создать одну модель системы DEClab 11/03. DEClab обычно продается за 14000 долларов, что эквивалентно 72 579 долларов в 2019 году с DECwriter II (LA36), или 15000 долларов, что эквивалентно 72 579 долларам в 2019 году с VT55.[13] В системе были каналы ввода-вывода для 15 лабораторных устройств и включены библиотеки для FORTRAN и БАЗОВЫЙ для чтения данных и построения графиков. Последнее подробно описано в довольно обширном руководстве программиста VT55.[14]
Команды и данные
Данные были отправлены на терминал с использованием расширенного набора кодов, подобных тем, которые представлены на VT52. Коды VT52 обычно начинались с ESC (восьмеричное 33, десятичное 27), за которым следовала однобуквенная инструкция. Например, строка из четырех символов ESCЧАСESCJ переместит курсор в левый верхний (домой), а затем очистит экран от этой точки вниз. Эти коды были в основном немодальный; вызванный ESC результирующий режим выхода автоматически завершился снова, когда команда была завершена. Коды выхода могут перемежаться с отображаемым текстом в любом месте потока данных.[15]
Напротив, графическая система была полностью модальной, с escape-последовательности отправляется, чтобы заставить терминал войти или выйти режим рисования графика. Данные, передаваемые между этими двумя кодами, интерпретировались графическим оборудованием, поэтому текст и графику нельзя было смешивать в одном потоке инструкций. Графический режим был введен путем отправки строки ESC1, и снова вышел со строкой ESC2. Даже команды в графическом режиме были модальными; символы были интерпретированы как дополнительные данные для предыдущего загрузить символ (команда), пока не будет виден другой символ загрузки. Доступны десять символов загрузки:[16]
@ - нет операции, используется, чтобы сообщить терминалу, что последняя команда больше не активна A - загрузить данные в регистр 0, выбрать режим рисования для двух графиков I - загрузить данные в регистр 1, выбрать другие параметры рисования H - загрузить начало Положение X (по горизонтали) для следующих команд B - загрузить данные для местоположений Y для графика 0, начиная с позиции H, выбранной ранее J - загрузить данные для местоположений Y для графика 1, начиная с позиции H, выбранной ранее C - сохранить маркер на графике 0 в следующее местоположение по оси X K - сохранить маркер на графике 1 в следующем местоположении по оси X D - нарисовать горизонтальную линию в заданном местоположении Y L - провести вертикальную линию в заданном положении X
Координаты X и Y были отправлены как 10-битные десятичные числа, закодированные как ASCII символов, с 5 битами на символ. Это означает, что любое число в пределах 1024 номеров (210) можно сохранить как строку из двух символов. Чтобы гарантировать, что символы могут передаваться по 7-битным каналам, перед обоими 5-битными числами помещается шаблон 01, создавая 7-битные значения ASCII, которые всегда находятся в пределах допустимого диапазона для печати. Это приводит к довольно сложному алгоритму кодирования.[17]
Например, если кто-то хочет закодировать десятичное значение 102, сначала вы конвертируете его в 10-битный десятичный шаблон 0010010010. Затем он разбивается на верхнюю и нижнюю 5-битные части, 00100 и 10010. Затем добавьте двоичное число 01, чтобы получить 7-битные числа 0100100 и 0110010. Преобразуйте по отдельности обратно в десятичные числа 40 и 50, а затем найдите эти символы в таблице ASCII, найдя (и 2. Сначала они должны быть отправлены на терминал наименее значимых символов. Если они были используется для установки координаты X, полная строка будет ЧАС2(. При использовании в качестве координат X и Y для графиков лишние цифры игнорировались. Например, для оси X 512 пикселей требуется только 9 бит для кодирования, поэтому 10-й бит был проигнорирован. Аналогично, позиции Y игнорировали 9-й и 10-й биты.[18]
Регистры управления всегда содержат 7 бит, причем самые старшие биты всегда равны 01.[19] В нулевом регистре бит 0 (наименее значимый) включает или выключает всю систему рисования линий. Биты 1 и 2 включают или выключают отдельные графики 0 или 1, а биты 3 и 4 управляют тем, являются ли графики 0 и 1 линиями или заполнены для построения гистограмм. Например, если кто-то хочет, чтобы оба графика отображались на экране, но график 0 был бы гистограммой, а график 1 был бы линией, требуемый битовый шаблон был бы 0101111, ведущий 01 фиксирован, а следующий бит говорит, что график 1 является линия (0), следующая за этим графиком 0 является гистограммой (1), на которой находятся оба графика (11) и что вся графическая система включена (1). Результирующий шаблон эквивалентен десятичному числу 47, символу /. Этот режим будет включен со строкой А/.
Регистр I был загружен с использованием аналогичной кодировки, но биты управляли отображением маркеров и горизонтальных и вертикальных линий. Как и в случае A, старшие значащие биты всегда были 01, младший значащий бит был включен или выключен для горизонтальных линий, бит 1 одинаков для вертикальных, 2 и 3 независимо от того, отображать ли маркеры на графике 0 или 1 соответственно, и установка бит 5 очистит все данные для маркеров и линий. Это означало, что можно очистить дисплей, отправив битовую комбинацию 0110000, десятичное число 48, символ 0. Это дает легко читаемую команду. я0.[20]
Для маркеров и линий необходимо было отправить только одну координату, X или Y. В случае маркера положение Y определялось данными, ранее установленными с помощью B или J. Для линий вторая координата охватывала экран. Например, вертикальная линия может быть размещена в позиции 102 по оси X со строкой L2(. И маркеры, и линии можно очистить, установив бит 5 третьего символа, который в противном случае не использовался бы.[18]
Пример
В следующем примере создается простая графика:[21]
ESC1A'I? B1111111111111111H (J6666666666666666C $ 09 тыс. $ 8D + 723L 0 ?? 8
Первые два символа сообщают терминалу о переходе в графический режим, а следующие четыре устанавливают два регистра режима рисования, чтобы включить обе линии графика, маркеры на обоих и включить горизонтальные и вертикальные линии. Буква B, за которой следует строка из 1, создает горизонтальную линию размером 8 пикселей в нижнем левом углу экрана, нарисованную с использованием графика 0. Местоположение X начинается с местоположения по умолчанию 0 и перемещается по одному местоположению с каждой последующей точкой данных, которая всегда состоит из двух символов. Нет необходимости вводить B снова, строка является модальной, и текущая команда остается B, пока не встретится другая.[21]
Это происходит, когда встречается H, и следующие два символа используются для перемещения начального положения X в центр экрана. За этим следует второй сегмент линии, который рисуется на графике 1 с использованием J. Затем добавляются два маркера, по одному на каждой линии, центрированные вдоль сегментов. Сегменты линии имеют ширину 16 пикселей, а маркеры всегда имеют высоту 16 пикселей. В результате получаются кресты: один в нижнем левом углу, а другой по центру. Поскольку маркеры центрированы на границах 16 пикселей и не могут быть нарисованы за пределами видимой области, первый маркер в нижнем сегменте появится над линией, создавая перевернутую Т-образную форму, а не крест. Последние две команды, D и L, создают две горизонтальные линии внизу и в центре экрана и три вертикальные линии слева, в центре и справа.[21]
На данный момент терминал все еще находится в режиме рисования графиков. График 1 можно превратить в гистограмму, отправив A7
, в результате чего будет нарисована вертикальная полоса, идущая вниз от центра экрана. Отправка ESC2
выйдет из графического режима, после чего дальнейшие символы будут интерпретироваться как обычный текст.[21]
VT105 изменения
VT105 был в целом похож на VT55, но имел ряд дополнительных функций. Один был квадратный формат режим, который уменьшил дисплей по горизонтали на восемь символов и увеличил его по вертикали на одну строку, чтобы сделать его более квадратным, чем исходный макет. Это оставило дополнительное место слева для восьми символов вместо одного вертикального столбца, что улучшило отображение меток.[22] VT105 также немного изменил значение битов регистра 0; бит 1 и 2 больше не включают и не выключают весь график, а отображение графика указывает на себя. Это позволяло отображать линию, затемненную гистограмму или гистограмму с более яркой линией вверху.[23] Для сравнения, на VT55 бит графика управляет отображением всего набора данных, а не только самой линии, поэтому отключение бита графика приведет к исчезновению гистограммы.
Еще одно изменение заключалось в повторном использовании команды @, ранее использовавшейся нет
, чтобы разрешить отправку новой позиции Y как линия тени. Это работало вместе с гистограммой, позволяя изменять направление заливки. На VT55 заполнение всегда опускалось от графика к основанию дисплея, на VT105 с установленной линией затенения можно было настроить отображение до верхней части экрана или, что чаще, к центральной точке. в данных. Например, при установке линии затемнения в середину экрана, если синусоидальная волна На графике области выше центра будут заштрихованы вниз, а участки под центром вверх, создавая заполненную форму волны. Включение горизонтальной линии в той же точке добавляет визуальную базовую линию.[24] В памяти было две линии затенения, по одной для каждого графика, но только одна команда @. Бит в регистре 1 контролирует, в какой из двух буферов были загружены данные @.[25]
Еще одним важным дополнением стала концепция ленточные графики, режим, имитирующий бумажные перьевые плоттеры, которые перемещались вверх и вниз, пока бумага наматывалась под ними. Они обычно использовались для записи научных данных, но, пожалуй, лучше всего известны на старых детекторы лжи. Когда новые точки данных были добавлены на один из графиков, предыдущие данные были смещены влево. Таким образом, отправка серии значений Y с использованием B или J сначала приведет к тому, что линия будет нарисована слева направо, как VT55, но дополнительные точки данных будут сдвигать предыдущие данные влево.[26] Если были установлены маркеры или линии вертикальной оси, они тоже перемещались в соответствии с данными.[27] В режим двойной полосыпри добавлении данных в график 1 оба графика перемещались одновременно.[26]
Все эти новые функции управлялись с помощью дополнительных вторых символов, добавленных к командам A и I. Первый символ данных работал так же, как и в VT55, что обеспечивало обратную совместимость.[e] Второй включил новые функции. Второй символ отправляется в линии затенения A и функцию ленточной диаграммы; младший значащий бит, бит 0, устанавливает данные линии затенения, отправленные с @, для загрузки в график 0 или график 1, а биты 2 и 3 включают или выключают линию затенения для графика 0 или 1, соответственно. Включение бита 3 позволяет использовать ленточные диаграммы, а бит 4 включает его для обоих графиков, функцию двойной полосы. Второй символ в команде I имел только два значения,! или пробел; отправка! перевести терминал в квадратный режим, в то время как пробел или ничего оставил его в формате прямоугольника, совместимого с VT55.[25]
Другие детали
Серия VT50 также включала альтернативный набор символов, графический режим, который можно было включать и выключать в текстовом режиме. Они использовались для предоставления дополнительных глифов, полезных для маркировки и аналогичных задач. Среди знаков были нижний индекс от 0 до 9 и верхняя часть дробей 1 /, 2 /, 3 /, 5 / и 7 /. Их можно объединить, например, в3⁄7. Набор также включает горизонтальные полосы на каждой из 8 строк развертки в обычном глифе, символ градуса и другие распространенные примеры. В них использовались отдельные коды символов, поэтому графические символы можно было смешивать с обычным набором символов на одном экране.[28]
Заметки
- ^ В Cromemco Dazzler это современный пример.
- ^ 230 или 240 строк на VT105.
- ^ В документации VT55 все напечатано в восьмеричном формате, поэтому разрешение в этой нотации составляет 1000 на 354. Это может затруднить преобразование и сравнение, и не всегда указывается, какая система используется. Документация VT105 в этом отношении более ясна.
- ^ Что он может сделать быстро, исследуя старшие биты местоположения Y, игнорируя младшие 4 бита.
- ^ За исключением изменения регистра 0, отмеченного ранее.
использованная литература
Цитаты
- ^ «Усовершенствования, дающие графику DEC Minc, блок с плавающей запятой». Computerworld: 47. Август 1981.
- ^ VT55 1976, п. 5-11.
- ^ VT105 1979 г., п. 3-7.
- ^ «Цены на память (1957-2014)»
- ^ а б c Федеральный резервный банк Миннеаполиса. «Индекс потребительских цен (оценка) 1800–». Получено 1 января, 2020.
- ^ а б VT105 1979 г., п. 3-17.
- ^ VT105 1979 г., п. 3-1.
- ^ VT105 1979 г., п. 3-4.
- ^ VT55 1976, п. 4-1.
- ^ VT55 1976, п. 4-2.
- ^ «Графический терминал Digital VT55 достигает новых высот». Computerworld: 26.19 ноября 1975.
- ^ «Печатная копия опциональна на графическом блоке DEC». Computerworld: 31, 15 октября 1975.
- ^ «Системные ссылки на 15 лабораторных инструментов». Computerworld: 56. 23 мая 1977 г.
- ^ Руководство программиста VT55 (PDF). Цифровой. Февраль 1977 г.
- ^ VT55 1976, п. 4-3.
- ^ VT55 1976, п. 5-14.
- ^ VT55 1976, п. 5-17.
- ^ а б VT55 1976, п. 5-27.
- ^ VT55 1976, п. 5-24.
- ^ VT55 1976, п. 5-25.
- ^ а б c d VT55 1976, п. 5-29.
- ^ VT105 1979 г., п. 3-86.
- ^ VT105 1979 г., п. 3-10.
- ^ VT105 1979 г., п. 3-20.
- ^ а б VT105 1979 г., п. 3-8.
- ^ а б VT105 1979 г., п. 3-25.
- ^ VT105 1979 г., п. 3-5.
- ^ VT55 1976, п. 5-10.
Список используемой литературы
- VT55 DECgraphic Scope Руководство пользователя (PDF). Цифровой. Декабрь 1976 г.
- Техническое руководство для графического терминала VT105 (PDF). Цифровой. Сентябрь 1979 г.