
Los gráficos de forma de onda son un sistema de gráficos vectoriales simple introducido por Digital Equipment Corporation (DEC) en los terminales VT55 y VT105 a mediados de la década de 1970. Se utilizaban para producir salidas gráficas desde mainframes y minicomputadoras . DEC utilizaba el término "gráficos de forma de onda" para referirse específicamente al hardware, pero se usaba de manera más general para describir todo el sistema.
El sistema fue diseñado para utilizar la menor cantidad posible de memoria de computadora . En cualquier posición X podía dibujar dos puntos en posiciones Y dadas, lo que lo hacía adecuado para producir dos formas de onda superpuestas , gráficos de líneas o histogramas . Se podían mezclar texto y gráficos, y había herramientas adicionales para dibujar ejes y marcadores.
El sistema de gráficos de forma de onda se utilizó solo durante un corto período de tiempo antes de ser reemplazado por el sistema ReGIS más sofisticado, introducido por primera vez en el VT125 en 1981. [1] ReGIS permitió la construcción de vectores arbitrarios y otras formas. Mientras que DEC normalmente proporcionaba una solución compatible con versiones anteriores en los modelos de terminales más nuevos, no decidieron hacerlo cuando se introdujo ReGIS y los gráficos de forma de onda desaparecieron de los terminales posteriores.
Descripción
Los gráficos de forma de onda se introdujeron en el terminal VT55 en octubre de 1975, una época en la que la memoria era extremadamente cara. Aunque era técnicamente posible producir una pantalla de mapa de bits utilizando un búfer de cuadros con la tecnología de la época, [a] la memoria necesaria para hacerlo con una resolución razonable estaba por lo general fuera del precio que lo hacía práctico. Se utilizaron todo tipo de sistemas para reemplazar la memoria de la computadora con otros conceptos, como los tubos de almacenamiento utilizados en los terminales Tektronix 4010 , o el sistema de carreras de rayos con memoria cero utilizado en el Atari 2600. DEC decidió atacar este problema mediante un uso inteligente de un pequeño búfer que representaba solo las posiciones verticales en la pantalla. Un sistema de este tipo no podría dibujar formas arbitrarias, pero permitiría la visualización de datos gráficos. [2]
El sistema se basaba en una pantalla de 512 por 236 píxeles, [b] produciendo 512 columnas verticales a lo largo del eje X y 236 filas horizontales en el eje Y. [c] Las posiciones Y se contaban desde abajo, por lo que la coordenada 0,0 estaba en la parte inferior izquierda y 511, 235 en la parte superior derecha. [3] Si esto se hubiera implementado utilizando un búfer de trama con cada posición representada por un solo bit, se habrían requerido 512 ⨉ 236 x 1 = 120.832 bits, o 15.104 bytes. En ese momento, la memoria costaba unos 50 dólares por kilobyte, [4] por lo que el búfer solo costaría más de 700 dólares, equivalentes a 4.325 dólares en 2023. [5]
En cambio, el sistema gráfico de forma de onda utilizaba un byte de memoria para cada posición del eje X, y el valor del byte representaba la posición Y. Esto requería solo 512 bytes para cada gráfico, un total de 1024 bytes para los dos gráficos. Para dibujar una línea, el programador debía construir una serie de posiciones Y y enviarlas como puntos individuales, [6] el terminal no podía conectar los puntos por sí mismo. Para facilitar esto, el terminal incrementaba automáticamente la posición X cada vez que se recibía una coordenada Y, de modo que una línea gráfica podía enviarse como una larga cadena de números para las posiciones Y subsiguientes en lugar de tener que enviar repetidamente la posición X cada vez. El dibujo normalmente comenzaba enviando una única instrucción para establecer la posición X inicial, a menudo 0 a la izquierda, y luego enviando los datos para toda la curva. [6]
El sistema también incluía almacenamiento para hasta 512 marcadores en ambas líneas. Estos siempre se dibujaban centrados en el valor Y de la línea con la que estaban asociados, lo que significa que una simple indicación de encendido/apagado para las ubicaciones X era todo lo que se necesitaba, requiriendo solo 1024 bits, o 128 bytes, en total. Los marcadores se extendían 16 píxeles verticalmente y solo podían alinearse en límites de 16 píxeles, por lo que no estaban necesariamente centrados en el gráfico subyacente. [7] Los marcadores se usaban para indicar puntos importantes en el gráfico, donde normalmente se usaría un símbolo de algún tipo. El sistema también permitía dibujar una línea vertical para cada ubicación horizontal y una horizontal en cada ubicación vertical. Estos también se almacenaban como simples bits de encendido/apagado, lo que requería otros 128 bytes de memoria. Estas líneas se usaban para dibujar ejes y líneas de escala, o podían usarse para un cursor en forma de cruz que abarcara la pantalla. [8] Un conjunto separado de dos registros de 7 bits contenía información adicional sobre el estilo de dibujo y otras configuraciones.
Aunque complejo desde la perspectiva del usuario, este sistema fue fácil de implementar en hardware. Un tubo de rayos catódicos produce una pantalla escaneando la pantalla en una serie de movimientos horizontales, bajando una línea vertical después de cada escaneo horizontal. [9] En cualquier instante dado durante este proceso, el hardware de visualización examina algunas ubicaciones de memoria para ver si es necesario mostrar algo. Por ejemplo, puede determinar si dibujar un marcador en el gráfico 0 examinando el registro 1 para ver si los marcadores están activados, mirando en el búfer de marcadores para ver si hay un 1 en la ubicación X actual y luego examinando la ubicación Y del gráfico 0 para ver si está dentro de los 16 píxeles de la línea de escaneo actual. [d] Si todo esto es cierto, se dibuja un punto para presentar esa parte del marcador. Como esto será cierto para 16 ubicaciones verticales durante el proceso de escaneo, se dibujará un marcador de 16 píxeles de alto. [10]
Vendida sola, la VT55 tenía un precio de 2.496 dólares, [11] equivalentes a 15.421 dólares en 2023. [5] Al igual que otros modelos de la serie VT50, la terminal podía equiparse con una impresora de papel húmedo opcional en un panel a la derecha de la pantalla. Esto sumaba 800 dólares equivalentes a 4.943 dólares en 2023 [5] al precio. [12]
DEC también ofreció el VT55 en un paquete con un modelo pequeño del PDP-11 para crear un modelo del sistema DEClab 11/03. El DEClab se vendía normalmente por 14.000 dólares, equivalentes a 86.494 dólares en 2023, con un terminal de copia impresa DECwriter II (LA36) por 15.000 dólares, equivalentes a 86.494 dólares en 2023, con el VT55. [13] El sistema tenía canales de E/S para hasta 15 dispositivos de laboratorio e incluía bibliotecas para FORTRAN y BASIC para leer los datos y crear gráficos. El Manual del programador del VT55, bastante extenso, cubría esto último en profundidad. [14]
Comandos y datos

Los datos se enviaban al terminal utilizando un conjunto extendido de códigos similares a los introducidos en el VT52 . Los códigos del VT52 generalmente comenzaban con el ESCcarácter (octal 33, decimal 27) y luego eran seguidos por una instrucción de una sola letra. Por ejemplo, la cadena de cuatro caracteres reposicionaría el cursor en la esquina superior izquierda (inicio) y luego limpiaría la pantalla desde ese punto hacia abajo. Estos códigos eran básicamente amodales ; se activaban por el modo de escape resultante y se salía automáticamente de nuevo cuando se completaba el comando. Los códigos de escape podían intercalarse con el texto de visualización en cualquier parte del flujo de datos. [15]ESCHESCJESC
En cambio, el sistema gráfico era completamente modal, y se enviaban secuencias de escape para hacer que el terminal entrara o saliera del modo de dibujo gráfico . Los datos enviados entre estos dos códigos eran interpretados por el hardware gráfico, por lo que el texto y los gráficos no podían mezclarse en una única secuencia de instrucciones. Se entraba al modo gráfico enviando la cadena y se salía de nuevo con la cadena . Incluso los comandos dentro del modo gráfico eran modales; los caracteres se interpretaban como datos adicionales para el carácter de carga anterior (comando) hasta que se veía otro carácter de carga. Había diez caracteres de carga disponibles: [16]ESC1ESC2
@ - sin operación, se utiliza para indicarle a la terminal que el último comando ya no está activo A - cargar datos en el registro 0, seleccionando el modo de dibujo para los dos gráficos I - cargar datos en el registro 1, seleccionando otras opciones de dibujo H - carga la posición X inicial (horizontal) para los siguientes comandos B - cargar datos para las ubicaciones Y para el gráfico 0 comenzando en la posición H seleccionada anteriormente J - datos de carga para las ubicaciones Y para el gráfico 1 comenzando en la posición H seleccionada anteriormente C - almacenar un marcador en el gráfico 0 en la siguiente ubicación X K - almacena un marcador en el gráfico 1 en la siguiente ubicación X D - dibuja una línea horizontal en la ubicación Y indicada L - dibuja una línea vertical en la ubicación X indicada
Las posiciones X e Y se enviaron como números decimales de 10 bits, codificados como caracteres ASCII , con 5 bits por carácter. Esto significa que cualquier número dentro del espacio numérico de 1024 (2 10 ) se puede almacenar como una cadena de dos caracteres. Para garantizar que los caracteres se puedan transmitir a través de enlaces de 7 bits, el patrón 01 se coloca delante de ambos números de 5 bits, lo que produce valores ASCII de 7 bits que siempre están dentro del rango imprimible. Esto da como resultado un algoritmo de codificación algo complejo. [17]
Por ejemplo, si uno quisiera codificar el valor decimal 102, primero lo convierte al patrón decimal de 10 bits 0010010010. Luego, lo divide en partes superiores e inferiores de 5 bits, 00100 y 10010. Luego, agrega 01 binario para producir números de 7 bits 0100100 y 0110010. Convierte individualmente de nuevo a decimal 40 y 50, y luego busca esos caracteres en una tabla ASCII, encontrando ( y 2. Estos deben enviarse primero al carácter menos significativo de la terminal. Si se estuvieran usando para establecer la coordenada X, la cadena completa sería . Cuando se usaban como ubicaciones X e Y para los gráficos, se ignoraban los dígitos adicionales. Por ejemplo, el eje X de 512 píxeles requiere solo 9 bits para codificar, por lo que se ignoró el décimo bit. Del mismo modo, las ubicaciones Y ignoraban los bits 9 y 10. [18]H2(
Los registros de control siempre contenían 7 bits, siendo el bit más significativo siempre el 01. [19] En el registro cero, el bit 0 (menos significativo) activaba o desactivaba todo el sistema de dibujo de líneas. Los bits 1 y 2 activaban o desactivaban los gráficos individuales 0 o 1, y los bits 3 y 4 controlaban si los gráficos 0 y 1 eran líneas o se rellenaban para formar histogramas. Por ejemplo, si uno quería tener ambos gráficos en pantalla, pero el gráfico 0 fuera un histograma y el gráfico 1 una línea, el patrón de bits requerido sería 0101111, siendo el 01 inicial fijo, el siguiente bit indicando que el gráfico 1 es una línea (0), el siguiente que el gráfico 0 es un histograma (1), que ambos gráficos están activados (11) y que todo el sistema de gráficos está habilitado (1). El patrón resultante es equivalente al decimal 47, el carácter /. Este modo se habilitaría con la cadena . A/
El registro I se cargó utilizando una codificación similar, pero los bits controlaban la visualización de los marcadores y las líneas horizontales y verticales. Al igual que con A, los bits más significativos siempre fueron 01, el bit menos significativo activaba o desactivaba las líneas horizontales, el bit 1 era el mismo para las verticales, 2 y 3 indicaban si se debían mostrar o no los marcadores en el gráfico 0 o 1 respectivamente, y la configuración del bit 5 borraba todos los datos de los marcadores y las líneas. Eso significaba que se podía borrar la pantalla enviando el patrón de bits 0110000, decimal 48, el carácter 0. Esto produce el comando fácilmente legible . [20]I0
Los marcadores y las líneas solo necesitaban enviar una coordenada, una X o una Y. En el caso de un marcador, la ubicación Y se definía mediante los datos previamente establecidos con B o J. En el caso de las líneas, la segunda coordenada abarcaba la pantalla. Por ejemplo, una línea vertical podía colocarse en la ubicación 102 del eje X con la cadena . Tanto los marcadores como las líneas podían borrarse configurando el bit 5 del tercer carácter, que de otro modo no se utilizaría. [18]L2(
Ejemplo
El siguiente ejemplo produce un gráfico simple: [21]
ESC1A'I?B1111111111111111H (J6666666666666666C$09K$8D+723L 0?? 8
Los dos primeros caracteres indican al terminal que debe entrar en modo gráfico, mientras que los cuatro siguientes establecen los dos registros de modo de dibujo para activar ambas líneas gráficas, los marcadores en ambas y habilitan las líneas horizontales y verticales. La B seguida de la cadena de 1 produce una línea horizontal de 8 píxeles en la parte inferior izquierda de la pantalla dibujada utilizando el gráfico 0. La ubicación X comienza en la ubicación predeterminada 0 y se mueve una ubicación con cada punto de datos siguiente, que siempre consta de dos caracteres. No es necesario escribir B nuevamente, la cadena es modal y el comando actual sigue siendo B hasta que se encuentra otro. [21]
Esto ocurre cuando se encuentra la H y se utilizan los dos caracteres siguientes para mover la posición inicial de la X al centro de la pantalla. A continuación, se dibuja un segundo segmento de línea en el gráfico 1 utilizando la J. A continuación, se añaden dos marcadores, uno en cada línea, centrados a lo largo de los segmentos. Los segmentos de línea tienen 16 píxeles de ancho y los marcadores siempre tienen 16 de alto. El resultado son formas de cruz, una en la parte inferior izquierda y otra centrada. Como los marcadores están centrados en los límites de 16 píxeles y no se pueden dibujar fuera del área visible, el primer marcador en el segmento inferior aparecerá sobre la línea, creando una forma de T invertida en lugar de una cruz. Los dos últimos comandos, D y L, producen dos líneas horizontales en la parte inferior y central de la pantalla, y tres líneas verticales a la izquierda, al centro y a la derecha. [21]
En este punto, el terminal todavía está en modo de dibujo gráfico. Se podría convertir el gráfico 1 en un histograma enviando A7, lo que provocaría que se dibujara una barra vertical que se extendiera hacia abajo desde el centro de la pantalla. Al enviarlo, ESC2se saldría del modo gráfico, momento en el que los caracteres adicionales se interpretarían como texto normal. [21]
Cambios en el VT105
El VT105 era muy similar al VT55, pero añadía una serie de características adicionales. Una de ellas era un modo de formato cuadrado que reducía la visualización horizontalmente en ocho anchos de caracteres y la ampliaba verticalmente en una línea para hacerla más cuadrada que el diseño original. Esto dejaba espacio adicional a la izquierda para ocho caracteres en lugar de una única columna vertical, lo que mejoraba la visualización de las etiquetas. [22] El VT105 también cambió ligeramente el significado de los bits del registro 0; los bits 1 y 2 ya no activaban y desactivaban todo el gráfico, sino la visualización de los puntos del gráfico en sí. Esto permitía que la visualización hiciera una línea, un histograma sombreado o un histograma con una línea más brillante en la parte superior. [23] En comparación, en el VT55 el bit de gráfico controlaba la visualización de todo el conjunto de datos, no solo la línea en sí, por lo que desactivar el bit de gráfico también haría que desapareciera el histograma.
Otro cambio fue reutilizar el comando @, anteriormente el noop, para permitir que se envíe una nueva posición Y como la línea de sombra . Esto funcionó en conjunto con el histograma para permitir que se cambie la dirección del relleno. En el VT55, el relleno siempre se dibujaba hacia abajo desde el gráfico hasta la base de la pantalla; en el VT105, con la línea de sombra establecida, esto se podía configurar para que se dibujara hacia arriba hasta la parte superior de la pantalla o, más comúnmente, hacia un punto central en los datos. Por ejemplo, con la línea de sombra establecida en el medio de la pantalla, si se trazaba una onda sinusoidal , las áreas por encima del centro se sombrearían hacia abajo y las secciones por debajo del centro hacia arriba, produciendo una forma de onda rellena. Habilitar una línea horizontal en el mismo punto agrega una línea de base visual. [24] Había dos líneas de sombra en la memoria, una para cada gráfico, pero solo un comando @. Un bit en el registro 1 controlaba en cuál de los dos búferes se cargaban los datos @. [25]
Otra adición importante fue el concepto de gráficos de tiras , un modo que emulaba los trazadores de papel que se movían hacia arriba y hacia abajo mientras el papel se enrollaba debajo de ellos. Estos se usaban comúnmente para registrar datos científicos, pero quizás son más conocidos en los detectores de mentiras más antiguos . A medida que se agregaban nuevos puntos de datos a uno de los gráficos, los datos anteriores se desplazaban hacia la izquierda. Por lo tanto, enviar una serie de valores Y usando B o J primero haría que la línea se dibujara de izquierda a derecha como el VT55, pero los puntos de datos adicionales empujarían los datos anteriores hacia la izquierda. [26] Si se establecían marcadores o líneas de eje vertical, también se empujaban, siguiendo los datos. [27] En el modo de tira dual , agregar datos al gráfico 1 hacía que ambos gráficos se movieran al mismo tiempo. [26]
Todas estas nuevas características se controlaban mediante segundos caracteres opcionales añadidos a los comandos A e I. El primer carácter de datos funcionaba como lo había hecho en el VT55, y por lo tanto proporcionaba compatibilidad con versiones anteriores. [e] El segundo carácter activaba las nuevas características. El segundo carácter enviado al A controlaba las líneas de sombreado y la característica de gráfico de tiras; el bit menos significativo, bit 0, establecía que los datos de la línea de sombreado enviados con @ se cargaran en el gráfico 0 o el gráfico 1, mientras que los bits 2 y 3 activaban o desactivaban la línea de sombreado para el gráfico 0 o 1, respectivamente. Activar el bit 3 permitía utilizar gráficos de tiras, mientras que el bit 4 lo activaba para ambos gráficos, la característica de doble tira. El segundo carácter en el comando I tenía solo dos valores, ! o espacio; enviar ! ponía el terminal en modo cuadrado, mientras que el espacio, o nada, lo dejaba en el formato de rectángulo compatible con VT55. [25]
Otros detalles
La serie VT50 también incluía un conjunto de caracteres alternativo, el modo gráfico , que se podía activar y desactivar mientras se estaba en modo texto. Estos se usaban para proporcionar glifos adicionales útiles para el etiquetado y tareas similares. Entre los caracteres se encontraban los subíndices del 0 al 9 y la parte superior de las fracciones 1/, 2/, 3/, 5/ y 7/. Estos se podían combinar para formar, por ejemplo, 3 ⁄ 7 . El conjunto también incluía barras horizontales en cada una de las 8 líneas de escaneo en un glifo normal, el símbolo de grado y otros ejemplos comunes. Estos usaban códigos de caracteres separados, por lo que los caracteres gráficos se podían mezclar con el conjunto de caracteres normal en una sola pantalla. [28]
Notas
- ^ El Cromemco Dazzler es un ejemplo contemporáneo.
- ^ 230 o 240 líneas en el VT105.
- ^ La documentación del VT55 imprime todo en octal, por lo que la resolución es 1000 por 354 en esa notación. Esto puede dificultar las conversiones y comparaciones, y no siempre se indica qué sistema se está utilizando. La documentación del VT105 es mucho más explícita en este sentido.
- ^ Lo cual puede hacer rápidamente examinando los bits de orden superior de la ubicación Y, ignorando los 4 bits inferiores.
- ^ Con la excepción del cambio en el registro 0, señalado anteriormente.
Referencias
Citas
- ^ "Las mejoras dan a DEC Minc gráficos de coma flotante". Computerworld : 47. Agosto de 1981.
- ^ VT55 1976, pág. 5-11.
- ^ VT105 1979, pág. 3-7.
- ^ "Precios de la memoria (1957-2014)"
- ^ abc 1634–1699: McCusker, JJ (1997). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de valores monetarios en la economía de los Estados Unidos: adiciones y correcciones (PDF) . American Antiquarian Society .1700–1799: McCusker, JJ (1992). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de valores monetarios en la economía de los Estados Unidos (PDF) . American Antiquarian Society .1800–presente: Banco de la Reserva Federal de Minneapolis. «Índice de precios al consumidor (estimación) 1800–» . Consultado el 29 de febrero de 2024 .
- ^ desde VT105 1979, pág. 3-17.
- ^ VT105 1979, pág. 3-1.
- ^ VT105 1979, pág. 3-4.
- ^ VT55 1976, pág. 4-1.
- ^ VT55 1976, pág. 4-2.
- ^ "El terminal gráfico VT55 de Digital alcanza nuevas cotas". Computerworld : 26. 19 de noviembre de 1975.
- ^ "Copia impresa opcional en la unidad gráfica DEC". Computerworld : 31. 15 de octubre de 1975.
- ^ "Enlaces del sistema a 15 herramientas de laboratorio". Computerworld : 56. 23 de mayo de 1977.
- ^ Manual del programador VT55 (PDF) . Digital. Febrero de 1977.
- ^ VT55 1976, pág. 4-3.
- ^ VT55 1976, pág. 5-14.
- ^ VT55 1976, pág. 5-17.
- ^ desde VT55 1976, pág. 5-27.
- ^ VT55 1976, pág. 5-24.
- ^ VT55 1976, pág. 5-25.
- ^ abcd VT55 1976, pág. 5-29.
- ^ VT105 1979, pág. 3-86.
- ^ VT105 1979, pág. 3-10.
- ^ VT105 1979, pág. 3-20.
- ^ desde VT105 1979, pág. 3-8.
- ^ desde VT105 1979, pág. 3-25.
- ^ VT105 1979, pág. 3-5.
- ^ VT55 1976, pág. 5-10.
Bibliografía
- Manual del usuario del osciloscopio VT55 DECgraphic (PDF) . Digital. Diciembre de 1976.
- Manual técnico del terminal gráfico VT105 (PDF) . Digital. Septiembre de 1979.