Skip to content

Terminales

Juan Gonzalez-Gomez edited this page Apr 19, 2025 · 920 revisions

Descripción

Viaje por los terminales de texto, desde sus orígenes más artesanales hasta su forma actual en el sistema operativo Linux. Explicaremos cómo han ido evolucionando los dispositivos y conceptos clave que dieron forma a estas herramientas. Cuando escribimos comandos en un terminal gráfico de Linux, en realidad, muchísimos de las ideas y conceptos usados provienen de sistemas más antiguos. Escribimos comandos en el presente, pero el pasado nos influye mucho más de lo que pensamos

Note

TODOS los diagramas mostrados se han creado con el programa libre Inkscape 1.4, en formato SVG. Las fuentes de todos ellos están disponibles en el Repositorio. Todos los diseños 3D se han realizado con Freecad 1.0, en formato .FCStd, y también están en el repositorio. También se ha utilizado el programa GIMP 3.0.2 para realizar retoques. El sistema operativo usado ha sido UBUNTU Linux 24.04

Contenido

Introducción

Los Terminales son los dispositivos que permiten al usuario comunicarse con un ordenador. Actualmente, las interfaces con los computadores son gráficas. Sin embargo en esta sesión nos centraremos solo en las interfaces de texto, y por tanto, en los terminales de texto, que son los clásicos


Foto: Terminal Televideo 925 . Fuente: Wikipedia

Frente al terminal se sitúa el usuario que escribe comandos a través del teclado. Estos comandos llegan al ordenador, que los ejecuta y envía los resultados a la pantalla de salida

En los terminales hay muchos conceptos que provienen de dispositivos más antiguos, como el retorno de carro, el cursor o el salto de línea... Se han heredado de ellos y han evolucionado con el tiempo

En esta sesión vamos a realizar un viaje hacia los terminales, partiendo de los conceptos primigenios, estudiándolos y analizando su evolución

Escritura manual

El ser humano desarrolló la escritura hace milenios. Fue un gran avance porque permitió plasmar el conocimiento en elementos externos a la mente, y poder así almacenarlos, y transmitirlos a las siguientes generaciones

Los soportes donde escribir fueron evolucionando hasta llegar al papel y la tinta. Aquí es donde comenzamos nuestro viaje. El problema a resolver es cómo plasmar símbolos y caracteres en un papel. Una vez en ese soporte, ya se pueden almacenar, transportar y leer

La forma de logarlo es escribiendo manualmente con un bolígrafo o una pluma sobre el papel. Necesitamos que la tinta se deposite en el papel en los lugares donde nos interese. En esta figura vemos el mensaje impreso HOLA, que se ha generado metiendo la pluma en la tinta, presionando la pluma sobre el papel para depositar la tinta y moviendo la pluma para generar las letras de este mensaje

Así es como nace el concepto Carácter: un símbolo escrito sobre el papel. Escribiendo varios caracteres en la misma línea generamos palabras que nos permiten expresar mensajes. Las líneas tienen un ancho. Cuando se alcanza el extremo derecho, hay que escribir en la línea siguiente. Cuando se rellenan todas las líneas se completa la página. Así pues, la página tiene una anchura y una altura, que se puede definir en caracteres

Otro gran invento de la humanidad fue apilar y agrupar estas páginas para formar un códice. Es en realidad un libro, pero como está escrito a mano se denomina códice


Foto: Códice del Mio Cid. Fuente: Wikipedia

En estos códices, a pesar de estar escritos a mano, se aprecian perfectamente los caracteres, las líneas y las páginas

En los códices de Leonardo Da Vinci, además del texto aparecen dibujos. Podemos decir que en papel se pueden representar gráficos ademas de texto. Sin embargo, nosotros sólo nos centraremos en la información textual

La escritura manual es artesanal. Además, cada uno de nosotros tiene una letra diferente. Lo que nos interesa es estandarizar la letra. Eso se consiguió mediante la caligrafía y definiendo tipos de letras. Mediante la caligrafía las personas se ejercitan y aprenden a dibujar los caracteres de manera estándar. Los textos se hacen más claros y fáciles de leer


Foto: Página de códice Fuente: Wikipedia

Recapitulación de conceptos:

  • Papel
  • Tinta
  • Pluma
  • Carácter
  • Palabra
  • Mensaje
  • Línea
  • Página
  • Anchura de página (en caracteres)
  • Altura de página (en caracteres)
  • Caligrafía
  • Tipos de letra
  • Códice

Estampado de caracteres

Lo que nos interesa es escribir caracteres estándares más rápidamente. Con la caligrafía y los tipos de letra logramos la estandarización, pero NO la velocidad. Los códices siguen siendo obras de arte. Son copias únicas. Cada página escrita es una obra de arte, hecha a mano

La solución llegó con la imprenta, que nos permitió crear copias de los documentos escritos más rápidamente. Ahora los códices ya no son obras de arte, y pasan a llamarse libros

Pero en esta sesión NO estamos interesados en la imprenta ni la reproducción masiva de libros, sino en su principio de funcionamiento: la estampación de imágenes y texto sobre el papel

Mecanismo

El mecanismo de estampación es similar al de los Sellos. Los sellos son unas superficies (normalmente de goma) que tienen en relieve el carácter, símbolo o dibujos que queremos estampar en un papel. El sello se moja en tinta y se estampa en el papel. La transferencia de tinta entre el sello y el papel se hace mediante presión

En esta foto vemos más detalles. Observamos que el sello está en relieve: hay partes que sobresalen y otras que están hacia el interior. Las partes que sobresalen son las que reciben la tinta y son las que se imprimen en color azul (el de la tinta). Las zonas del interior no reciben tinta y por eso en el papel salen en blanco. También observamos que el sello y su impresión tienen una simetría especular

Imprimiendo un carácter

En el caso de la imprenta se utilizan planchas grandes, que imprimen una página completa. Sin embargo nosotros no estamos interesados en eso, sino en el estampado individual de cada carácter. Lo denominamos impresión de un carácter

Para imprimir un único carácter, como por ejemplo la letra L, lo primero que necesitamos es crear un sello para esa letra. Está formado por el propio sello, que está en relieve y un mango para ejercer la presión y realizar la impresión

Vemos que la L del sello está al revés, para que cuando se imprime salga en su posición correcta

En estas imágenes se muestra el proceso de impresión:

  1. Partimos del escenario inicial: con un papel y el sello
  2. Ponemos la tinta en el sello (apretando contra el tampón de tinta)
  3. Presionamos el sello contra el papel
  4. Retiramos el sello. La letra L se muestra, con la orientación correcta

Este proceso lo podemos repetir cuantas veces queramos, para imprimir siempre la misma letra L sobre el papel, en posiciones diferentes

Imprimiendo una palabra

Para imprimir una palabra bastaría con tener los sellos de TODOS sus caracteres, y realizar la estampación secuencialmente, carácter a carácter. Se comienza por el primer carácter, luego se coloca el siguiente a su derecha y así sucesivamente hasta completar la impresión

Por ejemplo, si queremos imprimir el mensaje HOLA necesitamos tener 4 sellos, uno para cada letra

Ahora realizamos el proceso de impresión, carácter por carácter. Empezamos por la H. La entintamos, la estampamos y listo!

Pasamos al siguiente carácter, O, y repetimos el proceso

Repetimos con la L

Y finalmente con la A

¡Ya está el mensaje impreso!

En esta Animación vemos el proceso completo. Aunque los sellos se mueven solos, en realidad es una persona la que lo mueve de una posición a otra con la mano. También se ha añadido el tampón de tinta

Esta técnica de imprimir caracteres la denominamos impresión por impacto. La ventaja es, como hemos visto, que todos los caracteres salen iguales. Aunque es una técnica manual, es el mismo principio de funcionamiento que usa la máquina de escribir

Conceptos nuevos

  • Imprenta
  • Libro
  • Estampación
  • Sello
  • Tampón de tinta
  • Impresión por impacto
  • Impresión de un carácter
  • Impresión de un mensaje

La máquina de escribir

La máquina de escribir permite imprimir mensajes en papel utilizando caracteres estándares. La ventaja es que cada carácter se imprime siempre EXACTAMENTE IGUAL, y por tanto los mensaje salen siempre iguales. Ya no es necesario que el usuario sepa caligrafía, sino que basta con que apriete teclas. Aunque este proceso también es manual, permite mayor velodiad de escritura. Sobre todo si el usuario sabe mecanografía, y por tanto tiene memorizadas las posiciones de las teclas


Foto: Máquina de escribir Underwood nº 3 de carro ancho. Fabricada en 1929 con teclado españo. Fuente: Wikipedia

En los siguientes apartados profundizaremos en su mecanismo de funcionamiento. No es una revisión detallada ni exhaustiva, sino general. Nos servirá para comprender mejor la evolución y entender los avances que se producen en los siguientes dispositivos en nuestro viaje hacia el terminal

Principio de funcionamiento

Las máquinas de escribir utilizan la técnica de Impresión por impacto, similar a la de los sellos. No es el objetivo de este documento describir en detalle el funcionamiento de la máquina de escribir, pero sí veremos sus principios fundamentales, y los elementos principales

Palanca de impacto

Los sellos del apartado anterior son ahora pequeños caracteres metálicos en relieve (y con simetría de espejo, igual que los sellos) que están unidos a una palanca que lo hace moverse adelante y atrás, alrededor de un eje

Rodillos de sujección y arrastre del papel

El papel lo mueve un rodillo (rodillo 1) que tiene otro rodillo en su parte superior (rodillo 2) para sujetar el papel. La palanca con el carácter a imprimir tiene dos posiciones: Una es la de impacto situada sobre el papel y la otra es la de reposo. Cuando el usuario aprieta la tecla asociada a ese carácter, se mueve desde la posición de reposo a la de impacto. Al dejar de apretar la tecla, retorna a la de reposo

Cinta de cinta

Para realizar la impresión se necesita aplicar tinta sobre el sello que está en la palanca. Las máquinas de escribir lo hacen de una manera muy ingeniosa. En vez de utilizar un tampón externo, tienen una cinta entintada situada entre el papel y el sello, de forma que la palanca golpea sobre esta cinta, en vez de directamente sobre el papel, y es la cinta la que produce la impresión. Cuando la palanca se mueve a la posición de impresión, la cinta sube. Al retirarse a la posición de reposo, baja

Cursor

Hay un elemento llamado cursor que sujeta la cinta en la posición donde imprimir el siguiente carácter. Este cursor es el que sube y baja la cinta. Su misión también es la de tensar la cinta y dejarla en posición horizontal para que pueda producir el impacto del carácter correctamente. Este es el mecanismo básico de impresión de un carácter

El cursor tiene un ancho fijo. Por ello, todos los caracteres tiene también el mismo ancho. Es decir, que los sellos de las palancas tienen todos la misma anchura. Llamamos letras monoespacio a aquellas que tienen todas la misma anchura. Hay letras más anchas, como la H y otras más delgadas, como la i, pero al ser monoespacio la anchura del carácter completo es la misma

Carro

La máquina de escribir está formada por dos partes independientes con movimiento relativo entre ellas. Por un lado tenemos el carro, que es el que lleva los rodillos de sujección del papel, y por otro lado el cuerpo de la máquina

El carro es móvil, y se mueve a izquierda y a derecha con respecto al cuerpo de la máquina. La cinta y el cursor están en el cuerpo de la máquina, por tanto NO se mueven

La misión del carro es mover el papel a derecha o izquierda para fijar la posición donde se imprimirá el siguiente carácter

Impresión de 2 caracteres iguales

Para imprimir 2 caracteres el proceso es el siguiente: Partimos de la máquina en reposo. El cursor marca la posición donde se va a imprimir el siguiente carácter. El cursor está en la posición inferior, y la panlanca en la posición de reposo

El usuario aprieta la tecla A. Esto provoca que el cursor suba (y con él la cinta) y que la palanca se mueve a la posición de impacto

Cuando el usuario libera la tecla A, la palanca vuelve a su posición de reposo, el cursor baja y el carro se mueve hacia la izquierda, una distancia igual a la de un carácter. De esta forma ahora el cursor está apuntando a la posición donde se situará el siguiente carácter. Este movimiento del carro hacia la izquierda es siempre de la misma distancia, ya que todos los caracteres tienen el mismo ancho (Son caracteres monoespacio)

Repetimos el proceso. Ocurre exactamente lo mismo, pero ahora el siguiente carácter A se imprime a la derecha del anterior

En esta animación se muestra el proceso de impresión del mensaje AA

Retorno de carro y salto de línea

Los caracteres se van escribiendo de izquierda a derecha, mientras el carro se mueve de derecha a izquierda. Llega un momento en el que los caracteres alcanzan el extremo derecho de la línea donde se han impreso en el papel, y por tanto ya no caben más. El cursor se encuentra situado en el extremo derecho de la línea

Para seguir escribiendo hay que realizar dos operaciones que denominamos salto de línea y retorno de carro. El retorno de carro consiste en llevar el carro hacia la derecha, de manera que el cursor se encuentre ahora en el extremo izquierdo, al comienzo de la línea actual

El salto de línea consiste en mover los rodillos de sujección del papel para que el cursor apunte a la siguiente línea

Ahora el siguiente carácter se imprime justo debajo del de la línea superior, en la misma vertical

Escritura de un mensaje

El proceso de impresión de mensajes con caracteres diferentes es similar. Lo que varía es la colocación de las palancas, y su geometría. Pero todas ellas impactan en la posición actual del cursor. Eso sí, sólo puede impactar una cada vez, o de lo contrario las palancas chocan entre sí y la máquina se bloquea

Las palancas se sitúan a una distancia radial fija del cursor, todas con el mismo centro. En este dibujo simplificado se han añadido 4 palancas (que no están a escala) con las letras H, O, L y A. Cada una está asociada a una tecla, y su colocación en la posición de reposo es indiferente. Lo importante es que cuando el usuario aprieta la tecla, la palanca correspondiente a ella impacta en el papel

La máquina tiene tantas teclas como caracteres puede imprimir. En esta figura sólo hemos colocado 4 teclas, correspondientes a las 4 palancas que tenemos en nuestra maqueta: H, O, L y A. El resto de teclas se han omitido para simplificar el dibujo

Al apretar una tecla, como por ejemplo la H, se activa la palanca que tiene la H y se genera la impresión del carácter H. Al soltarla se desplaza el carro, se baja la cinta y tanto la palanca como la tecla vuelven a su posición de reposo

En esta animación se muestra la impresión del mensaje "HOLA"

Esquema de impresión

Si nos fijamos sólo en la salida de la máquina, sin entrar en los detalles de los mecanismos, lo que vemos es un cursor fijo que señala el hueco donde se va a imprimir el siguiente carácter. Al apretar una tecla se imprime el carácter en esta posición y se mueve el papel hacia la izquierda. Estos pasos los resumimos en la siguiente figura

En esta animación vemos el funcionamiento:

Es importante observar que TODOS los caracteres tienen el mismo tamaño. Esto es lo que se conoce como fuentes monoespacio: Todos los caracteres, incluido el espacio, ocupan el mismo ancho. Es decir, que las placas que llevan el relieve de los caracteres tienen todos el mismo ancho. Y también el movimiento del carro hacia la izquierda es SIEMPRE de la misma distancia: un carácter

Entradas y Salidas

En la máquina de escribir ya podemos detectar los elementos de entrada y salida. La entrada son las teclas, que el usuario pulsa ejerciendo una fuerza mecánica sobre ellas. La salida es el papel con los caracteres impresos. Para generar esa salida, hay 3 acciones de salida, que llamamos actuaciones:

  • Actuación 1: Movimiento del cursor hacia arriba (para que la cinta entindada suba)
  • Actuación 2: Impacto de la palanca en la cinta, lo que provoca la impresión del carácter
  • Actuación 3: Desplazamiento del carro un carácter a la izquierda

Las pulsaciones de las teclas son nuestra acciones de entrada

Las acciones de entrada las provoca el usuario ejerciendo fuerza sobre la tecla correspondiente. Las acciones de salida se generan mediante elementos mecánicos que transmiten la fuerza del usuario a los actuadores, los cuales generan las acciones de salida correspondientes

En este esquema se recopilan todas estas ideas:

Mecanismo de impresión

Vamos a ver con un poco más de detalle la acción de impresión del carácter en el papel (el impacto de la palanca). La máquina de escribir es un dispositivo mecánico. Esto significa que la energía que llega por su entrada (las teclas) se transmite a los actuadores por medio de elementos mecánicos como levas, balancines, eslabones, articulaciones, muelles... El usuario ejerce una fuerza de entrada sobre la tecla, que se transmite mecánicamente hasta los actuadores que provocan las acciones correspondientes

El mecanismo que usaremos no es real, es una aproximación simplificada para entender mejor la relación entre la tecla y la palanca de impacto. La palanca de impacto tiene forma de L, con el eje de rotación en la unión de los dos palos de la L. En su parte horizontal lleva enganchado un muelle de recuperación que mueve esta palanca a su posición de reposo mientras que no se ejerzan otras fuerzas externas:

La tecla está situada sobre una pieza en forma de U con un segundo eje en su parte inferior. Esta pieza se comporta como un balancín y bascula sobre su eje. Su posición está fijada, por lo que NO se puede desplazar. Sólo puede bascular

En esta figura se muestra la interacción entre ambos mecanismos. Al apretar la tecla, la pieza en U bascula, lo que genera que su parte izquierda empuje la palanca, llevándola a la posición de impresión del carácter. Al soltar el botón el sistema vuelve a su posición de reposo gracias al muelle de recuperación que se encarga de tirar de la palanca hacia abajo y esta a su vez hace bascular la pieza en U a su posición de reposo

En esta animación vemos el mecanismo en acción. Es puramente mecánico:

Conceptos nuevos

  • Máquina de escribir
  • Tecla
  • Mecanografía
  • Palanca de impacto
  • Rodillo
  • Cinta de tinta
  • Cursor
  • Letras monoespacio
  • Carro
  • Retorno de carro
  • Salto de línea
  • Entrada
  • Salida
  • Teclado
  • Desplazamiento del cursor
  • Acciones de entrada
  • Acciones de salida
  • Energía mecánica
  • Actuadores
  • Mecanismos

Máquina de escribir eléctrica

Las máquinas de escribir son mecánicas. Esto significa que la energía para accionar las palancas e imprimir los caracteres proviene directamente de la pulsación de teclas. Es el usuario el que aplica una fuerza sobre la tecla, que se transmite al sistema de impacto a través de los mecanismos internos. Para que se produzca correctamente esta transmisión hay que apretar la tecla relativamente con fuerza, y hay que hundirla mucho

Las máquinas de escribir eléctricas son funcionalmente iguales a las mecánicas, con las mismas acciones: Impacto de la palanca, movimiento del cursor arriba-abajo, y desplazamiento del carro a la izquierda. Los elementos también son los mismos: Carro, teclado, rodillo, papel, cursor... En estas imágenes lo podemos comprobar para la máquina de escribir eléctrica modelo Olivetti TEKNE 3

Estas máquinas utilizan la energía eléctrica para accionar los diferentes actuadores: palancas de golpeo, movimiento del cursor arriba, abajo y movimiento del carro hacia la izquierda. El usuario aprieta una tecla con suavidad y se genera el impacto correspondiente. El resultado de esto es que estas máquinas funcionan más rápidamente y son mucho más cómodas para el usaurio

Teclado de entrada

El teclado de la máquina de escribir eléctrica se comporta de manera similar a la tradicional: Cuando el usuario aprieta una tecla, se realiza la impresión del carácter en el papel, y el carro se mueve un carácter a la izquierda para que el cursor apunte a la siguiente posición, sin embargo ahora la fuerza de presión ejercida por el usuario NO se transmite mecánicamente, sino eléctricamente

Cada tecla funciona igual que los interruptores eléctricos. Al pulsarla se cierra un circuito y se obtiene una tensión en un cable de entrada (indicado como In en la figura). Al dejar de apretar la tecla, esta vuelve a su posición original gracias a un muelle de recuperación, lo que provoca que el circuito se abra y la tensión del cable de entrada cambie. El resultado es que la pulsación de la tecla provoca un pulso eléctrico en el cable

El circuito que se muestra es el genérico usado para un pulsador típico. Está alimentado por una tensión positiva VCC, que típicamente es de 5v ó 3.3v en los circuitos digitales actuales (pero podría ser cualquier otra tensión). El negativo es GND. Se utiliza una resistencia de pull-up para obtener la tensión GND o VCC según que el pulsador esté apretado o no

Si quieres conocer más detalles sobre las entradas digitales tienes más información en el Cuaderno ténico 10 de FPGAs Libres: Entradas y pulsadores

Si este pulso lo interpretamos dentro del contexto de la lógica digital, en realidad lo que tenemos es un bit de información para cada tecla. Cuando la tecla está en reposo se lee el bit 0. Cuando la tecla se aprieta se genera el bit 1

En esta animación se muestra gráficamente el funcionamiento

La salida de cada tecla es ahora un número, de 1 bit. Los bits de todas las teclas del teclado se codifican en un número, asignado a esa tecla. Así, la salida del circuito del teclado es un número: el código de la tecla

Impresión de salida

La palanca que mueve el sello con el carácter a imprimir ya no se acciona mecánicamente a partir de la fuerza aplicada a la tecla por el usuario, sino que lo mueve un un actuador. Dado que la palanca tiene sólo dos posiciones: reposo e impacto, sólo necesitamos un bit para controlar su posición. Cuando el actuador recibe el bit 0, la palanca se coloca en posición de reposo. Cuando recibe el bit 1 se mueve a la posición de impacto

En esta animación vemos su funcionamiento

Dado que tenemos una palanca por cada carácter a imprimir, la información que recibe el actuador es en realidad un código de carácter, y a partir de ese número acciona la palanca correspondiente. Ese número llega por el bus Car

Además de la impresión de caracteres, hay actuadores para el resto de acciones:

  • Movimiento del cursor arriba-abajo: es el movimiento para subir la cinta entintada y que la palanca golpee en ella. La señal la llamamos Cursor-up. Cuando está a 1, el cursor sube y cuando se pone a 0 baja a su posición de reposo

  • Movimiento del carro. El carro tiene 3 señales de control: Derecha, Izquierda y CR, que sirven para llevar el carro una posición a la izquierda, una a la derecha o realizar un retorno de carro, que consiste en llevar el Carro al extremo derecho

  • Movimiento del papel. El papel se mueve un carácter arriba con la señalal LF, lo que se conoce como un salto de línea. Si la señal vale 0, entonces permanece en la línea actual

En esta figura se esquematizan todos los actuadores, con sus respectivas señales de control:

Controlador

En la máquina de escribir no eléctrica, hemos visto cómo la salida está ligada a la entrada a través de mecanismos. Sin embargo, en la eléctrica la asociación entre el teclado y la impresión de caracteres está determinado por un circuito controlador

Las teclas pulsadas son números de entrada que llegan a este controlador, que provocan otro número de salida: el carácter a imprimir (si lo hay), además de otras acciones de control como retorno de carro, salto de línea etc...

El que las teclas y los caracteres sean números es un gran salto evolutivo, y tiene un fuerte impacto en la aparición del terminal, como veremos más adelante

La tecla ENTER

Una de las innovaciones que introdujo la máquina de escribir eléctrica fue la tecla ENTER. Al apretar esta tecla la máquina automáticamente genera un retorno de carro y un salto de línea. El cursor apunta a la primera posición de la siguiente línea

Conceptos nuevos

  • Máquina de escribir eléctrica
  • Energía eléctrica
  • Pulso eléctrico
  • Bit
  • Circuito digital
  • Código de tecla
  • Señal de control
  • Código de carácter
  • Circuito Controlador
  • Acciones de control
  • Números
  • Tecla ENTER
  • Códificación de caracters y teclas como números

El Teletipo (TTY)

Los Teletipos funcionan de manera similar a una Máquina de escribir eléctrica. Tienen un teclado, un carro y un papel de salida donde se imprimen los caracteres


Foto: Puma telex terminal Fuente: Wikipedia

A diferencia de las máquinas de escribir, los rodillos que fijan el papel NO forman parte del carro. No se desplazan de izquierda a derecha, lo que permite que los teletipos se alimenten mediante papel continuo. Esto permite que los textos impresos no se limiten a una única página, sino que se pueden escribir de manera continua y casi infinita, sin interrupciones


Foto: Papel continuo Fuente: Wikipedia

El carro sigue siendo móvil, pero ahora contiene el cursor. Es decir, que el cursor es móvil, de izquierda a derecha. El carro tiene un mecanismo mejorado de impresión de caracteres por lo que ya no hay palancas, sino que está todo dentro del propio carro

En esta animación se muestra un esquema de funcionamiento del teletipo cuando está imprimiendo un mensaje de 2 líneas. Se puede ver cómo es el cursor el que se mueve, y que el papel contínuo está fijo. El mensaje TTY es el acrónimo utilizado para denotar el Teletipo

En este vídeo de Youtube se muestra el funcionamiento de un Teletipo real

Click to see the youtube video

Transmisión de mensajes

La misión del Teletipo es transmitir mensajes remotos. Dos teletipos se conectan mediante cables de transmisión. Uno lo denominamos el Teletipo local y otro el teletipo remoto. En cada teletipo hay un usuario. El usuario en el teletipo local escribe el mensaje y este se imprime en la máquina local, PERO también se envía al teletipo remoto y se imprime en él. El usuario remoto escribe la respuesta, que se imprime en ambos teletipos, el remoto y el local. De esta forma los teletipos son una especie de chat donde todo queda registrado en el papel continuo en ambos teletipos

La comunicación entre los teletipos es serie asíncrona, en la que por las líneas se transmisión se envían los bits de los caracteres a una determinada velocidad en bits por segundos (que en este caso son también baudios). Las velocidades de los primeros teletipos eran de 45 baudios, y luego pasaron a 110 baudios

Funcionamiento

El teletipo funciona igual que una máquina de escribir eléctrica: todo lo que escribimos en el teclado se imprime en el papel de salida. Estos caracteres que le llegan por su teclado los denominamos caracteres locales. Son los que ha escrito el usuario local

Sin embargo, la máquina también es capaz de imprimir los caracteres que recibe de la máquina remota, que han sido escritos por el usuario remoto. Es lo que llamamos los caracteres remotos. Por tanto, el teletipo es una máquina de escribir electrónica que imprime en el papel tanto los caracteres locales como los remotos

Además, cada vez que apretamos una tecla en el teclado local, el carácter correspondiente se imprime en el papel y se envía hacia el teletipo remoto

Este comportamiento es el que se describe gráficamente en este esquema. Del teletipo sale un cable (OUT) que va hacia el teletipo remoto, y recibo otro cable (IN) que viene del remoto

El comportamiento de imprimir en la máquina local los caracteres locales lo denominamos eco local. Se supone que lo que escribimos queremos que llegue al teletipo remoto, pero se imprime una copia local en nuestro papel, gracias el eco local

En este esquema vemos el funcionamiento de dos teletipos conectados a través de una línea de transmisión. Esta línea consta de 2 hilos de datos (más GND). Un hilo va en la dirección del Teletipo 1 hacia el 2, y el otro hilo en la dirección contraria: del teletipo 2 al 1

Cada Teletipo tiene una salida (OUT) y una entrada (IN). Cuando se aprieta una tecla, por ejemplo, en el teletipo 1, esta se imprime en en el papel del teletipo 1 (eco local) y además se envía al teletipo 2, que llega como carácer remoto y se imprime en su papel

Codificación de caracteres

Ya vimos cómo en la máquina de escribir eléctrica el teclado está mecanicamente desacoplado del papel. Tanto los caracteres como las teclas se codifican como números, que en realidad son impulsos eléctricos transmitidos por los cables. Estos números los define el fabricante, y pueden ser cualesquiera. Sólo se usan a nivel interno por lo que al usuario en realidad le son indiferentes

Sim embargo, en los teletipos es necesario estandarizar los códigos de los caracteres para que se puedan comunicar entre ellos, incluso si son teletipos de diferentes fabricantes. Esta necesidad de estandarización viene el mundo de las comunicaciones. Se usa el mismo código para representar tanto los caracteres locales como los remotos. Así, ahora, al apretar las teclas lo que se generan son los mismos códigos usados para la representación en el papel

Los códigos utilizados para la comunicación deben tener en cuenta también las acciones. Por ello el conjunto total de caracteres se divide en dos grupos:

  • Caracteres visibles: Son los caracteres que ve el usuario, y que se imprimen en el papel. El espacio está incluideo dentro de esta categoría
  • Caracteres de control: Son números que no tiene representación sino que al recibirlos el teletipo realiza una acción como por ejemplo retorno de carro, salto de línea, hacer sonar una campana....

A partir del año 1967 se estandarizó el código ASCII, que es el que se usa actualmente

Código ASCII

En el mundo de los sistemas digitales TODO es número. Las imágenes son números. Los sonidos son números. Los programas son números... y como no podía ser de otra forma, los caracteres son números

Actualmente todos los computadores y dispositivos del mundo utilizan el código ASCII como base para representar los caracteres. Se trata de un código de 7 bits, lo que nos permite representar un total de 128 caracteres diferentes. Dado que la unidad mínima de información en informática es el byte, todos los caracteres se representan mediante 8 bits (al menos). En los caracteres ASCII puros, el bit de mayor peso siempre está a 0

Los primeros 32 caracteres (con códigos del 0 al 31) son caracteres de control, mientras que el resto son caracteres visibles (del 32 al 127). En esta figura se muestra la tabla ASCII

Los bits de mayor peso determinan el grupo del carácter: códigos de control, Número, letra mayúscula o letra minúscula

Códigos de control

TODOS los códigos de control tienen los 2 bits de mayor peso a 00. En total hay 32 caracteres de control, pero de todos ellos sólo hay unos pocos que se utilizan actualmente. El resto estaban pensados para la implementación de protocolos de transmisión de caracteres, pero han quedado obsoletos y no se usan

Estos son los códigos de control que se suelen usar:

Código de control Número Descripción
BEL 0x07 Campana (Bell). Emisión de un pitido
BS 0x08 Retroceso. (Back Space)
HT 0x09 Tabulación horizontal (Horizontal tab)
LF 0x0A Salto de línea (Line Feed)
CR 0x0D Retorno de carro (carriage return)
ESC 0x1B Escape

Estos son el resto de código de control, que se están en deshuso

Código de control Número Descripción
NULL 0x00 Carácter nulo (null character)
SOH 0x01 Inicio de encabezado (start of heading)
STX 0x02 Inicio de texto (start of text)
ETX 0x03 Fin de texto (end of text)
EOT 0x04 Fin de transmisión (end of transmission)
ENQ 0x05 Consulta (enquiry)
ACK 0x06 Acuse de recibo (acknowledge)
VT 0x0B Tabulación vertical (vertical tab)
FF 0x0C Avance de página (form feed)
SO 0x0E Desactivar mayúsculas (shift out)
SI 0x0F Activar mayúsculas (shift in)
DLE 0x10 Escape vínculo de datos (data link escape)
DC1 0x11 Control de dispositivo 1 (device control 1)
DC2 0x12 Control de dispositivo 2 (device control 2)
DC3 0x13 Control de dispositivo 3 (device control 3)
DC4 0x14 Control de dispositivo 4 (device control 4)
NAK 0x15 Acuse de recibo negativo (negative ack.)
SYN 0x16 Síncronía en espera (synchronous idle)
ETB 0x17 Fin del bloque de transmisión (end of trans. block)
CAN 0x18 Cancelar (cancel)
EM 0x19 Fin del medio (end of medium)
SUB 0x1A Substitución (substitute)
FS 0x1C Separador de archivo (file separator)
GS 0x1D Separador de grupo (group separator)
RS 0x1E Separador de registro (record separator)
US 0x1F Separador de unidad (unit separator)

Caracteres visibles

Los caracteres visibles son los que tienen una representación gráfica, y son por tanto los que se imprimen en el papel. El carácter espacio (SP), también llamado blanco, es una excepción: no se imprime nada, pero también se considera un carácter visible

Si nos fijamos en la tabla ascii presentada en el apartado anterior, vemos que está formada por 8 líneas de 16 caracteres cada una. Las dos primeras líneas son los caracteres de control, mientras que el resto de líneas son los visibles. A nivel de bit lo distinguimos muy fácilmente observando los 2 bits de mayor peso (del código de 7 bits). Si están ambos a 0 entonces es un carácter de control

La fila 3 se corresponde con los dígitos decimales: 0-9. Sus 3 bits de mayor peso tienen el valor 011 (3 en hexa) y los 4 bits de menor peso se corresponden con el número en binario. Así, el carácter con código 0x30 es el dígito 0, el 0x31 es el dígito 1... y el 0x39 es el dígito 9. Basta con quedarnos con el nibble inferior para obtener su conversión a binario. Esto es muy útil porque ¡No hay que hacer cálculos!

Las filas 4 y 5 se corresponden con las LETRAS MAYÚSCULAS, y las filas 6 y 7 con las letras minúsculas. Todas las letras mayúsculas tienen el bit 6 a 1 y el bit 5 a 0. Basta con cambiar al bit 5 a 1 para pasar de mayúsculas a minúsculas, y viceversa. Esto es equivalente a sumar el valor 0x40 al código ascii de una mayúscula, para convertirla a su minúsucula equivalente. Y viceversa. Si tenemos una letra minúscula y le restamos el valor 0x40, se convertirá en mayúscula

Tecla Control y caracteres de control

Para generar algunos caracteres de control se utilizan teclas específicas, como ESC o DEL. Sin embargo es posible generar otros utilizando una tecla especial denominada CONTROL y una letra MAYÚSCULA. El código de control generado, con esta técnica, es el código ASCII de la LETRA MAYÚSCULA con su bit 6 a 0. Así por ejemplo, si pulsamos CONTROL-H se genera el código BS (BackSpace). El código ASCII de la letra H es: 0x48, y al poner a 0 su bit 6 se convierte en el código 0x08 que es el del BS

Los códigos de control de la fila 0 se generan apretando la tecla control + las letras de la fila 4. Los códigos de control de la fila 1 se generan con control+ las letras de la fila 5. Así, viendo la tabla ASCII sabemos qué tecla apretar para generar cada carácter de control

El primer terminal

Los teletipos fueron los primero terminales. Sus señales de IN y OUT no se conectan a líneas de transmisión sino directamente las mismas señales de entrada/salida de un computador (Típicamente mediante las señales TX/RX de la comunicación serie asíncrona)

Los terminales también reciben el nombre de consolas. Cuando se usan para dialogar con los computadores dejan de ser entidades autónomas para convertirse en periféricos del propio computador

Uno de los primeros teletipos usados como terminal fue el AS-33 en la década de los 60. Se hizo muy popular como terminal de las computadoras PDP-8 y PDP-11


Foto: Teletipo ASR-33 Fuente: Wikipedia

A partir de 1968, aparecieron los Terminales DECWriter (LA30, LA36, LA120), basados en matrices de puntos. Se utilizaban también para la comunicación con las computadoras PDP


Fotos: Teletipo DECWriter Fuente: Wikipedia

Conceptos nuevos

  • Teletipo
  • TTY
  • Papel continuo
  • Cursor móvil
  • Transmisión de mensajes
  • Teletipo local
  • Teletipo remoto
  • Línea de transmisión
  • Comunicación serie asíncrona
  • Velocidad de transmisión
  • Bits por segundos
  • Baudios
  • Caracteres locales
  • Caracteres remotos
  • Eco Local
  • Codificación de caracteres
  • Caracteres visibles
  • Caracteres de control
  • Código ASCII
  • Byte
  • Bit de mayor peso
  • Bit de menor peso
  • Códigos de control
  • Campana (bel)
  • Retroceso (Backspace)
  • Tabulación horizontal
  • Escape
  • Nibble
  • Letras mayúsculas
  • Letras minúsculas
  • Tecla control
  • Terminal
  • Consola

Vídeo Terminal

Los terminales teletipos evolucionaron a los video terminales (VT). El papel se sustituye por una pantalla de vídeo, pasando a ser un papel electrónico. Lo mismo que ocurre con el papel se emula ahora en la pantalla de vídeo: impresión de caracteres, movimiento del cursor, retorno de carro, salto de línea...


Fotos: Video Terminal DEC VT220. Fuente: Wikipedia

En los primeros video terminales la pantalla se limitaba a imitar el comportamiento de los teletipos. Las acciones eran las mismas. Pero ahora en el monitor se pueden hacer cosas nuevas, como por ejemplo mover el cursor, limpiar la pantalla, editar texto... por ello aparecen nuevas acciones que se controlan mediante caracteres de control y la combinación de la tecla CONTROL + letra. El comportamiendo exacto depende del modelo de terminal. Cada videoterminal tiene sus propios caracteres de control, definidos en su manual de usuario

Una gran mejora es la mayor velocidad de estos terminales. Al NO ser mecánicos, la velocidad de impresión de los caracteres en la pantalla es mucho mayor, y por tanto la velocidad de transmisión también lo puede ser

Los primeros videoterminales fueron gráficos, como por ejemplo el VT01 y VT02 de la empresa DEC, a finales de los años 60. Se utilizan con el PDP-1 y PDP-4. La familia de terminales VTx de DEC se hizo muy popular y marcó un estándar a seguir. Veremos los detalles de algunos de los modelos más importantes en las siguientes secciones

Pantallas de vídeo

La gran novedad de los videoterminales es que la información la presentan electrónicamente en una pantalla. El papel queda sustituido por una imagen de vídeo. Esto supuso un gran avance.

La tecnología empleada para la construcción de las pantallas de los primeros videoterminales son los Tubos de rayos catódicos, conocidos con las siglas CRT (cathode-ray tube). En esta sección estudiaremos los principios de funcionamiento de las pantallas de vídeo, igual que hicimos con las máquinas de escribir

Ventajas del uso de pantallas

Las pantallas de vídeo, como dispositivos para presentar información al usuario, tienen las siguientes ventajas en comparación con su impresión en papel en los terminales teletipos:

  1. El monitor NO tiene partes móviles. Pasamos de representar la información utilizando movimientos mecánicos a hacerlo electrónicamente, domando los electrones convenientemente. Esto hace que los terminales sean más robustos, con menos fallos y más duraderos. Además de ser más fáciles de mantener y reparar

  2. Las pantallas son silenciosas. La presentación de los caracteres en la pantalla no genera ningún sonido. Todo lo contrario con los teletipos, que cada caracter se genera mediante un golpeo contra el papel, lo que produce bastante ruido

  3. La velocidad de impresión en el monitor es varios órdenes de magnitud más rápida que la impresión en papel. Por ello el cuello de botella ya no es la impresión. Puedes mostrar información muy rápidamente

  4. La velocidad de comunicación entre el terminal y el computador es mayor. Esto es debido a que el cuello de botella ya no es la impresión

  5. La información visualizada en la pantalla se puede editar. Es decir, que NO ES PERMANENTE, como el papel

  6. La información ahora se puede almacenar en ficheros, es decir, de manera electrónica. El papel deja de ser el soporte principal para el almacenamiento. Se necesita menos espacio físico para almacenar esta información electrónica

Monitores CRT

Los Monitores CRT fueron los primeros que aparecieron. En su interior tienen un Tubo de Rayos catódicos (Cathod-Ray tube, CRT), y por ello tienen gran grosor (profundidad) y ocupan mucho espacio, frente a las pantallas planas LCD actuales

Tubos de rayos catódicos

El Tubo de rayos catódicos se utiliza para representar información visual en los monitores, osciloscopios, televisores y radares. Este elemento es común a todos estos dipositivos. Lo que cambia es la electrónica usada para controlarlo


Fotos: Video Terminal DEC VT220. Fuente: Wikipedia

Vamos a describir el CRT paso a paso, añadiendo paulatinamente los diferentes elementos. No se muestran todos los detalles. Sólo lo necesario para entender la idea de su funcionamiento

Empezamos por el propio tubo, que puede tener diferentes formas. En su interior está hecho el vacío. Uno de los extremos es más ancho y grande, y es el que se usa de pantalla. Su parte interior está recubierta de un material que brilla cuando los electrones impactan sobre él. Típicamente se usaba fósforo, y que genera un color verde. Por eso las pantallas originales eran verdes (y monocromas). La pantalla es uniforme, pero nosotros la dibujaremos con un centro y los dos ejes x e y, para usarlos como referencia

Dentro del tubo hay un emisor de electrones, que está conectado a una fuente de alimentación (Tensión V+). Emite un haz de electrones que va en línea recta hacia el centro de la pantalla. Este haz incide sobre la pantalla, que tiene en su parte interior una película de fósforo que emite luz al impactar los electrones. Lo que vemos es un punto luminoso en el centro de la pantalla

La intensidad del haz se regula con una entrada de tensión $V_b$. Si la tensión es 0, NO hay emisión de electrones. Si la tensión es la máxima, se genera un haz con muchos electrones, lo que provoca que el punto luzca con mayor intensidad

A la salida del haz de electrones se sitúan dos placas conectadas a la tensión $V_y$, que se denominan placas de deflexión vertical. Cuando la tensión $V_y$ es positiva se genera un campo eléctrico que hace que el haz de electrones se curve verticalmente. El resultado es que ahora el punto es visible a una distancia dada sobre el eje vertical. Esta distancia depende de la tensión aplicada

En la trayectoria del haz de electrones también se sitúan otras dos placas, con diferente orientación, denominadas placas de deflexión horizontal cuya misión es curvar el haz en el eje horizontal proporcionalmente a la tensión aplicada $V_x$. Cuando sólo actúan estas placas el punto visible se desplaza sobre el eje x, cuya distancia depende de la tensión aplicada

Cuando se activan ambas placas de deflexión, horizontal y vertical, aplicando sobre ellas las tensiones $V_x$ e $V_y$ respectivamente, logramos que el haz de electrones se posiciones en cualquier parte de la pantalla. Así podemos dibujar un punto en cualquier punto (x,y) de la pantalla, sin mas que aplicar las tensiones $V_x$ e $V_y$ correctas

De manera esquemática el tubo de rayos catódicos lo podemos representar como una pantalla que tiene 2 entradas de alimentación: $V_+$ y GND, y 3 entradas analógicas correspondientes al brillo ($V_b$), Posición x ($V_x$) y posición Y ($V_y$)

Rasterización

Los monitores CRT muestran las imágenes en el CRT mediante un proceso conocido como rasterización o escaneo ráster. El haz de electrones se mueve horizontalmente de izquierda a derecha y vuelve de nuevo a la izquierda. Eso se conoce como un barrido horizontal. Su vuelta a la parte izquierda se denomina retroceso horizontal

Por otro lado, al finalizar un barrido horizontal el haz avanza hacia la siguiente línea. Así, la pantalla se recorre hacia abajo, línea a línea. Esto se conoce como un barrido vertical. Cuando el haz llega a la parte inferior derecha, vuelve a su posición de origen en la essquina superior izquierda. Esto se conoce como retroceso vertical

En esta figura se muestra este proceso de rasterización:

Cuando se produce el retroceso vertical, se ha completado el dibujo de un fotograma, que también denominamos frame. Este proceso de rasterización se repite continuamente a una frecuencia mayor a 50Hz para que se produzca la ilusión óptica de la visualización de una imagen en el ojo humano

Señales de vídeo y sincronización

El monitor tiene 2 conectores. Uno es el de alimentación, que se enchufa a la red eléctrica. El otro conector lleva las señales al CRT para generar las imágenes

El circuito de barrido horizontal genera una señal triángular, lo que produce el barrido horizontal: El haz se mueve de izquierda a derecha. La señal HSYNC indica que el haz debe realizar el retroceso horizontal. Lo que hace es que se inicializa la tensión vx y se emite un nuevo diente de sierra

La misma señal HSYNC hace que el circuito de barrido vertical incremente el valor de la tensión vy para apuntar a la siguiente línea. Cuando se recibe la señal VSYNC se comienza el retroceso vertical

Para tener un poco más de intuición sobre cómo funcionan estas señales, vamos a ver un ejemplo muy sencillo. Supongamos que tenemos un monitor ficticio de resolución 4x2 píxeles: sólo 2 filas de 4 píxeles cada una. En la pantalla se está mostrando este patrón, en el que hay 4 píxeles encendidos y 4 apagados:

🔴 🔴 
 🔴 🔴  

En esta figura se muestra el valor de todas las señales. Todas ellas son digitales: lo que se envían son 2 valores de tensión diferentes que representan los bits 0 y 1. El valor de los 8 píxeles se envía en serie a través de la señal de vídeo. Primero el valor de los 4 píxeles de la primera línea, y luego los 4 de la segunda. Cada vez que se termina una línea, se activa la señal HSYNC. Cuando se termina de enviar la segunda línea, se activan HSYNC y VSYNC, y se vuelve a comenzar. La señal de VSYNC es la que delimita la imagen actual, también llamado frame (fotograma)

Esta señal de vídeo se envía continuamente al CRT, en un proceso que se denomina refresco. Al menos hay que enviar 50 frames por segundo (frecuencia de 50Hz), para que sea apreciable por el ojo humano

Si quieres aprender más sobre los circuitos implicados en el control de las pantallas, puedes consultar el Cuaderno Técnico 20 y el Cuaderno técnico de FPGAs Libres

Monitores LCD

Los monitores modernos ya no se basan en el Tubo de Rayos catódicos, y por ello ocupan mucho menos espacio: son planos. PERO, aunque no tengan CRT, la señales de vídeo y la terminología es la misma que para los monitores de CRT. Seguimos hablando de señales de sintronización vertical y horizontal, refresco, rasterización, etc...


Foto: Monitor LCD. Fuente: Wikipedia (Dibujo de un monitor LCD)

El funcionamiento es totalmente diferente a los CRTs. Veremos un ejemplo MUY SIMPLIFICADO de una pantalla de sólo 6 píxeles, agrupados en dos filas de 3 píxeles cada una. La idea es mostrar el principio de funcionamiento, pero sin entrar en los detalles

La pantalla está formada por 3 capas apiladas. Una de ellas es emisora de luz (polarizada). En el centro se sitúa una capa con las moléculas de cristal líquido, organizadas en un array de 3 x 2. Estas moléculas son las que definen nuestros píxeles. Están todas ellas interconectadas, fila a fila, y columna a columna. De esta forma se puede activar cada pixel sin más que aplicar una tensión a la fila y columna correspondiente

La última capa es el cristal donde se muestran los píxeles. Las moléculas de cristal líquido cambian su alineación con la tensión aplicada. Con una cierta alineación, dejan pasar la luz polarizada, y el pixel en cuestión será visible. Pero si se aplica otra tensión diferente, las moléculas se alinean en otra dirección, NO dejando pasar la luz. En los LCDs monocromos sólo se tienen estos dos estados: dejar pasar o no la luz. Pero cambiando el ángulo se consiguen diferentes intensidades lo que permite tener niveles de grises

Los píxeles se activan de uno en uno, secuencialmente, según llega la señal de vídeo. Por eso el concepto de raster de escaneo sigue vigente. No hay un haz, pero sí un pixel que será el siguiente en refrescarse. Este proceso se realiza igual que con los CRTs: escaneo horizontal y escaneo vertical

Funcionamiento

El funcionamiento del videoterminal es similar al del teletipo. Todos los caracteres que se teclean se envían por la línea serie al computador (TX), y también hacia el propio terminal si está activo el modo local (eco local). Los caracteres recibidos desde el computador se procesan primero, para determinar si son caracteres visibles o bien caracteres de control

Los caracteres visibles se almacenan en la memoria del terminal, en la dirección de memoria indicada por el cursor, secuencialmente, según llegan. Cada vez que se almacena uno se incrementa la dirección del cursor. Esta memoria, en paralelo con la escritura de caracteres, está siendo leido por el circuito de refresco. Se comienza por el primer carácter (correspondiente a la esquina superior izquierda) y se lleva a la CGROM que es la memoria que contiene los bits que definen a ese carácter. Típicamente cada carácter está definido por una matriz de 5x7 puntos. Lo que se obtiene es la primera línea de ese carácter. Luego se pasa al siguiente, y se obtiene su primer línea. De esta forma se genera la señal de vídeo correspondiente a la primera línea, completándose un barrido horizontal

El proceso se repite con el resto de líneas de la primera fila de caracteres, y así sucesivamente con todas las filas de caracteres. El proceso se resume en este esquema

Si lo que se recibe es un carácter de control, no se almacena en memoria, sino que se procesa y se actúa en consecuencia. Por ejemplo borrar el carácter, mover el cursor, emitir un pitido, etc...

La CGROM es la memoria donde están almacenados los píxeles que componen cada uno de los caracteres. Por ejemplo, el Carácter 'A' de 5x7 píxeles estaría almacenado en esta memoria de la siguiente manera:

En las siguientes secciones vamos a ver algunos de los videterminales más usados

VT05

El VT05 (1975) fue el primer terminal de video alfanumérico de DEC que se popularizó y sirvió como precursor de la famosa serie VT100


Foto: Terminal VT05. Fuente: Terminals-wiki

En la wiki de terminales (Terminals-wiki) podemos encontrar mucha informacion sobre el terminal VT05, así como su manual de usuario. A continuación resumimos la información más relevante

  • 63 Caracteres de 5x7 píxeles. Sólo caracteres en Mayúsculas
  • Resolución de 20x72 (filas x columnas)
  • Posibilidad de colocar el cursor en cualquier posición
  • Velocidad máxima: 2400 baudios
  • Pantalla CRT
  • Cursor parpadeante
  • Teclas para movimiento del cursor: UP, DOWN, LEFT, RIGHT
  • Tecla para llevar el cursor a HOME

Estos son los caracteres de control implementados

Código ID Tecla Descripción
7 BEL Ctrl-G Sonido de campana
8 BS Ctrl-H Cursor izquierda
9 HT Tabulador horizontal
0x0A LF Salto de linea
0x0B Cursor abajo
0x0D CR Retorno de carro
0x0E CAD Direct Cursor Addressing: Posicionar el cursor
0x18 Cursor derecha
0x1A Cursor arriba
0x1D HOME Cursor al inicio
0x1E EOL Borrar hasta el final de la linea
0x1F EOS Borrar desde el cursor hasta la última linea

VT52

El VT52 (1977) fue otro modelo muy popular de DEC, de la serie VT5x


Foto: Terminal VT52. Fuente: Terminals-wiki

En su manual de usuario se encuentran todos los detalles. Resumimos los aspectos más relevantes:

  • Ya soporta caracteres tanto en MAYÚSCULAS como en minúsculas. Por ello incorpora las teclas nuevas Shift y Caps Lock
  • Resolución de 24x80 (filas x columnas)
  • Velocidad máxima: 9600 baudios
  • Secuencias de escape mediante el carácter ESC

En estes terminal ya se empiezan a utilizar muchas señales de control, y por tanto los caracters de control ASCII se quedan cortos. Por ello se incluye el carácter de escape ESC segudio de un número de 7 bits para (representado por un carácter) para generar más acciones de control. Técnicamente ya no son caracteres de control, sino secuencias de ESCAPE

Estos son los caracteres de control implementados

Código ID Descripción
0x07 BEL Sonar la campana
0x08 BS Cursor a la izquierda
0x09 TAB Tabulación horizontal
0x0A LF Salto de línea
0x0D CR Retorno de carro

Y estas son las Secuencias de ESCAPE

Secuencia Descripción
ESC A Cursor arriba
ESC B Cursor abajo
ESC C Cursor derecha
ESC D Cursor izquierda
ESC F Entrar en modo gráfico
ESC G Salir del modo gráfico
ESC H Home
ESC J Borrar hasta el final de la pantalla
ESC K Borrar hasta el final de la línea
ESC Y #line #col Posicionar el cursor en (#line, #col)
ESC Z Identificar el terminal
ESC [ Modo pausa
ESC \ Salir del modo pausa
ESC = Entrar en el modo alternativo
ESC > Salir del modo alternativo

Para borrar la pantalla hay que hacer 2 operaciones: primero enviar un HOME y luego Borrar hasta el final de la pantalla ESC J

El terminal tiene lo que llaman un modo gráfico en el que se imprimen símbolos gráficos (no ASCII) definidos en su CGROM. Los códigos asignados son desde el 0x5E al 0x7E. Permite dibujar símbolos como un rectángulo sólido, subíndices, el símbolo de grados, el símbolo de más y menos...

VT100

El VT100 lo creó DEC en 1978 y marcó un hito. Se convirtió en un estándard de facto. Los emuladores de terminal actuales son compatibles todavía con el VT100


Foto: Terminal VT100. Fuente: Terminals-wiki

En su manual de usuario (PDF) se encuentran todos los detalles. Resumimos los aspectos más relevantes:

  • Mayor velocidad de comunicación: 19200 baudios
  • Mayor resolución de pantalla: Modos de 80x24 y 132x14
  • Mayor resolución de los caracteres: 7x9 píxeles
  • Atributos en los caracteres: Parpadeante (Blink), Negrita (Bold), Vídeo inverso (Inverse) y subrayado (Underline)
  • Teclado y pantalla desacoplados. El teclado está conectado mediante un cable y es independiente de la pantalla. En los modelos anteriores era todo un mismo bloque. Eso hace que el VT100 tengo un aspecto más parecedio a los ordenadores personales

El VT100 ya no está implementando en hardware puro, sino que incorpora el procesador 8080. Esto hace que sea mucho más parecido a un ordenador personal, aunque el software está prefijado para su funcionamiento como terminal (y NO como una máquina universal)

Aunque la función principal es como terminal, incorpora un modo de configuración en el que la pantalla y el teclado se usan para establecer la configuración, y NO para enviar caracteres al ordenador e imprimir sus mensajes en la pantalla. Al salir de este modo ya sí se comporta como un terminal como tal

El usuario puede configurar varios aspecto del terminal. Estos son los más interesantes:

  • Configuración de las posiciones de los tabuladores
  • Establecer el tipo de cursor: Bloque o raya horizontal
  • Fondo oscuro/claro
  • Auto XON/XOFF activo o no
  • Configurar las secuencias de escape: modo ANSI / modo VT52
  • Sonido por software para la pulsación de las teclas (on/off). Cuando está activo cada pulsación de un carácter emite un tono de 400 Hz y 5ms de duración
  • Campana al alcanzar el margen derecho (on/off)
  • Configuración de la comunicación serie: bits por carácter, paridad, velocidad...
  • Modo Autorepeat para las teclas (on/off). Este es el modo que existe actualmente en todos los ordenadores. Si se mantiene pulsada una tecla más de medio segundo, se emite repetidamente el carácter a una velocidad de 30 caracteres por segundo

Caracteres de control

Estos son los caracteres de control implementados

Código ID Descripción
0x00 NULL Carácter para relleno
0x05 ENQ Transmitir mensaje de respuesta
0x07 BEL Sonar la campana
0x08 BS Cursor a la izquierda
0x09 TAB Tabulación horizontal
0x0A LF Salto de línea
0x0D CR Retorno de carro
0x0E SO Invocar el conjunto de caracteres G1
0x0F SI Seleccionar el conjunto de caracteres G0
0x11 XON Continuar con la transmisión
0x13 XOFF Parar la transmisión
0x18 CAN Cancelar una secuencia de control
0x1B ESC Comenzar una secuencia de control

Secuencias de escape: ANSI

El VT100 tiene 2 modos de procesamiento de secuencias de escape, para amplicar los caracteres de control. Un modo es el compatible con el VT52. Las secuencias de escape son las mismas

Secuencia Descripción
ESC A Cursor arriba
ESC B Cursor abajo
ESC C Cursor derecha
ESC D Cursor izquierda
ESC F Entrar en modo gráfico
ESC G Salir del modo gráfico
ESC H Home
ESC J Borrar hasta el final de la pantalla
ESC K Borrar hasta el final de la línea
ESC Y #line #col Posicionar el cursor en (#line, #col)
ESC Z Identificar el terminal
ESC [ Modo pausa
ESC \ Salir del modo pausa
ESC = Entrar en el modo alternativo
ESC > Salir del modo alternativo

El problema es que estas secuencias son privadas de DEC, y sólo usadas por DEC. Por ello, el VT100 implementa las nuevas secuencias de escape ANSI, que están definidas en los estándares x3.41-1974 y x3.64-1977

En esta tabla se resumen las secuencias de escape principales. Se utiliza el símbolo ❎ para denotar un parámetro numérico

Secuencia ANSI Descripción
ESC[❎;❎R Reportar la posición del cursor
ESC[❎D Mover el cursor ❎ posiciones a la izquierda
ESC[❎C Mover el cursor ❎ posiciones a la derecha
ESC[❎B Mover el cursor ❎ posiciones hacia abajo
ESC[❎A Mover el cursor ❎ posiciones hacia arriba
ESC[❎;🔴H Mover el cursor a la posición ❎ y 🔴
ESC[❎J Borrar la pantalla
ESC[❎K Borrar la línea
ESC[❎;...;🔴m Establecer los atributos

Conceptos nuevos

  • Videoterminal
  • Pantalla de vídeo
  • Imagen de vídeo
  • Tubos de rayos catódicos (CRT)
  • Monitores CRT
  • Placas de deflexion
  • Emisor de electrones
  • Raster
  • Rasterización
  • Barrido horizontal
  • Retroceso horizontal
  • Barrido vertical
  • Retroceso vertical
  • Fotograma (frame)
  • Señal de vídeo
  • Señal de sincronización horizontal (HSYNC)
  • Señal de sincronizacion vertical (VSYNC)
  • Refresco de pantalla
  • Pantallas LCD
  • Memoria de vídeo
  • CGROM
  • Circuito de refresco
  • Píxel
  • VT05
  • VT52
  • VT100
  • Tecla shift
  • Tecla caps Lock
  • HOME
  • Secuencias de escape
  • Códigos ANSI
  • Posicionamiento del cursor

Ordenadores personales como terminales

A partir de la familia de terminales VT100, las siguientes versiones eran cada vez más parecidas a los ordenadores personales. En vez de monitores especiales, se utilizaban los mismos de los ordenadores personales, y lo mismo con los teclados. La diferencia es que estos terminales tenían una misión específica: comunicarse con un ordenador externo. Y eso lo hacían mediante un software específico grabado de fábrica, que no se puede cambiar

En estas fotos se muestran los terminales VT220 y VT320. Se puede apreciar el gran parecido que tienen a ordenadores personales


Foto: Terminales VT220 y VT320. Fuente: Wikipedia

Por otro lado, los ordenadores personales se fueron haciendo más populares, y más baratos. Y cada vez aparecieron más programas disponibles. Se trata de máquinas universales que no tienen un propósito único, sino que su funcionamiento depende del software que ejecutan. Por tanto, con el software adecuado estos ordenadores personales se convierten en terminales, y se pueden usar para acceder a cualquier otro ordenador. En este caso decimos que se trata de un terminal emulado. Esto es, es un terminal lógico creado a partir de software (sin existencia física real)

En esta foto se muestran dos ordenadores personales de los años 80: Un IBM PC/XT y un Amstrad PC1512. Yo tuve estos dos ordenadores, y los utilicé ambos como terminales, para conectarme a otros ordenadores remotos (BBS)


Foto: Ordenadores IBM PC/XT y Amstrad PC1512. Fuente: wikipedia

Conexión punto punto entre dos ordenadores PC remotos

Una de las aplicaciones de los primeros ordenadores personales como terminales era la de conectarse a otros ordenadores remotos, a través de la línea telefónica. Esto ocurría en los 80 años, antes de que internet estuviese en los hogares. Supuso un gran avance, ya que permitía a la gente intercambiar mensajes y programas sin salir de sus casas

El sistema era muy parecido al de los antiguos teletipos, pero usando ordenadores PC. Cada ordenador se conecta a un módem, y ambos módems establecen la conexión a través de la línea telefónica. El esquema se muestra en esta figura:

El proceso era el siguiente. Primero se contactaba por teléfono con la persona, que normalmente era un amigo. Se trataba de una llamada normal, de voz, entre dos personas. El amigo configuraba el ordenador en modo escucha y colgaba el teléfono. A continuación se realizaba una segunda llamada, pero esta era generada directamente por el ordenador. El PC remoto descolgaba la llamada y emitía unos pitidos que el modem del PC local reconocía y se establecía la comunicación

A partir de ese momento, se establecía un canal de datos full-duplex (en ambas direcciones). Todo lo que se teclea en el PC local le llega al PC-remoto. Todo lo que se escribe en el PC remoto llega al PC local y se muestra en la pantalla

Este comportamiento de conexión punto-punto se logra mediante la utilización de un programa terminal de comunicaciones: Es un software que se ejecuta en los PCs para convertirlos en terminales, y poder así comunicarse

Nada más establecerse la comunicación, el sistema se convierta en un chat, y ambos usuarios pueden "chatear", cada uno desde su casa. Esto lo vemos actualmente como algo normal, pero por aquél entonces era algo extraordinario, y muy emocionante. Los programas terminales incorporan, además, la posiblidad de transferir ficheros entre los ordenadores

Todavía recuerdo con gran emoción y excitación la primeva vez que recibí un fichero remoto, transmitido por un amigo mío, desde su casa, y yo en la mía. Se trataba de un juego muy simple. Una vez concluida la comunicación, ejecuté el fichero, y funcionó perfectamente. Era la primera vez en mi vida que veía con mis propios ojos cómo se transportaban digitalmente los archivos, y ví cómo se abría un mundo totalmente nuevo. Por aquel entonces, con 15 años, decidí estudiar ingeniería de Telecomunicaciones

Anteriormente si querías obtener nuevos programas y ficheros, sólo lo podías intercambiar físicamente con tus amigos. Quedábamos en casa de alguien y nos intercambiábamos físicamente los disquetes con los programas. Eso mismo lo podríamos hacer ahora directamente desde nuestras casas... era simplemente ¡fantástico!

Dos de los programas de comunicaciones que solíamos utilizar eran Télix y Procomm


Pantallazo del Telix y del Procomm. Fuente: Museo de la informática

Conexión con BBS

Además de las conexiones punto-punto entre ordenadores, en los 80s teníamos otra forma de comunicarnos y de intercambiar mensajes y programas entre usuarios: Las BBS. Una BBS es un ordenador que está conectado permanentemente a una línea de teléfono. Es decir, que es un ordenador que atiende a todas las llamadas recibidas de otros ordenadores. Mientras está atendiendo a una, la línea está ocupada y NO se pueden conectar otros ordenadores

La persona encargada de la gestión de la BBS se denomina Sysop (SYStem OPerator)

Cuando un usuario se conecta a una BBS puede realizar diferentes actividades como leer sus correos personales, dejados en la misma BBS por otros usuarios que se han conectado anteriormente, acceder a los foros o entrar en la zona de descargas para bajarse programas. También se tiene la posiblidad de chatear con el Sysop

Las velocidades típicas de conexión son de 1200 ó 2400 baudios

En el ordenador remoto se ejecuta un software de BBS. Existen muchos. Uno de los que yo utilicé cuando monté mi propia BBS (Atomic BBS) fue el WWIV. Todavía recuerdo algunas BBS que utilizaban este sofware como Exolom, Atharva, Pegasus... Yo era el Sysop de Atomic BBS

El usuario se conecta a la BBS utilizando un software de comunicaciones, como los vistos en la sección anterior. En la terminología actual diríamos que el usuario es el cliente y la BBS el servidor. Aunque este servidor sólo puede atender a un usuario cada vez

Conexiones serie a dispositivos

Actualmente una de las aplicaciones de los ordenadores personales es la de comunicarse con dispositivos externos, que típicamente están implementados con procesadores. Es decir, que son también ordenadores. Mediante la comunicación serie podemos enviar comandos a los dispositivos conectados, y leer información en ellos. Mediante los terminales serie convertimos el ordenador en un terminal lógico para comunicarse con ellos

La comunicación serie es conocida coloquialmente como puerto serie. Es la manera más sencilla, y la primera en usarse, para intercambiar mensajes con otros dispositivos hardware. Requiere de muy pocos recursos hardware y se programa muy fácilmente. Todos los microcontroladores de las placas más conocidas incluyen un hardware especializado para establecer comunicaciones serie: Arduinos, Raspberry pi, móviles, tablets, ESp32, Micro:bit, NacnoCH32V20, Placas con FPGAs libres (como la Alhambra-II),... Este hardware recibe el nombre de UART (Universal Asynchronous Receiver Transmitter)

Nivel físico

Vamos a ver algunos detalles del puerto serie: las señales empleadas y los tipos de conectores. No entraremos en todos los detalles, sino más bien presentaremos las ideas generales, a modo introductorio. Puedes encontrar más información sobre el puerto serie en el Tutorial de Electrónica Digital para Makers: Capítulo 30: Puerto serie

Norma RS-232

El puerto serie nació para conectar ordenadores y terminales con módems, y lograr con esto acceder a ordenadores remotos. Todos los detalles de los pines, conectores, tensiones, etc, están definidos en la Norma RS-232.

La Norma RS-232 define 9 señales, accesibles a través de pines del conector serie de Terminal. De estas 9 señales, una es la referencia de tensión (GND), 2 son para la transmisión/recepción de datos (TX,RX) y las 6 restantes son señales de control

En total hay 6 señales de control de las cuales 2 van desde el PC/terminal al módem (señales de salida) y 4 van desde el módem al PC (sesñales de entrada). Las señales de salida son DTR y RTS. Con la primera se le indica al módem que el Terminal está listo. El módem responde activando la señal DSR. La segunda se activa para indicar al módem que se quiere comenzar la conexión con el sistema remoto. Los módems se enlazan entre ellos. Al recibir la portadora se activa la señal DCD y cuando finaliza el enlace se activa la señal CTS. La señal de entrada RI se activa cuando el modem remoto recibe un tono de llamara (RING)

En esta tabla se resumen todas las señales RS-232

Señal Nombre Sentido Descripción
TX Transmisión PC -> Modem Envío de datos en serie
RX Recepción Modem -> PC REcepción de datos en serie
DTR Data Terminal Ready PC -> Modem El PC está listo
DSR Ddata Set Ready Modem -> PC El módem está listo
RTS Request to send PC -> Modem El PC quiere establecer conexión con el Ordenador remoto
DCD Data carrier detect Modem -> PC El modem ha detectado una señal portadora en la línea
CTS Clear to Send Modem -> PC Conexión establecida. La comunicación puede comenzar
RI Ring Indicator Modem -> PC Detectado un tono de llamada en la línea (¡Alguién llama al teléfono!)
GND Ground -------- Referencia de tensión (Masa)

Conectores

Actualmente los ordenadores ya no vienen con puerto serie sino que se usa el USB al que se le conecta un conversor USB-Serie. Los conectores típicos que vienen con los PCs son el USB-A y el USB-C

El primer conector que apareció fue el DB25. Se trata de un conector macho de 25 pines. Los terminales y los PCs tenían uno o dos de estos en la parte posterior, para conectar el módem. Este conector tiene 25 pines organizados en 2 filas. En la superior hay 13 pines y en la inferior 12, lo que lo dota de una forma trapezoidal. Esta forma garantiza que nunca se podrá conectar el cable al revés (sólo tiene una única posición)

En la norma RS232 sólo hay 9 señales definidas. Por ello, de los 25 pines del DB25, sólo se usan 9. Debido a esto, se pasó a utilizar un conector con exactamente 9 pines, el DB9, que es más pequeño. Tiene también 2 filas, una superior de 5 pines y otra inferior de 4 pines

En los ordenadores actuales sólo hay conectores USB, por lo que hay que conectar conversores USB-Serie. Se trata de un chip que recibe por un lado los pines físicos del USB (4) y por el otro lado tiene las 9 señales de la normal RS-232

La mayoría de sistemas empotrados que conectamos al ordenador (arduinos, fpgas, raspberries...) se conectan por USB, pero en su interior lleva este chip que realiza la conversión. Uno de los chips USB-serie más extendidos es el FT232R

También existen cables USB-serie que por un lado llevan el conector USB macho y por el otro un conector de pines hembra. Uno muy utilizado es el FTDI TTL-232R-5V

Puedes encontrar más información sobre este cable en el cuaderno técnico: Skycube 1.0: Cable de descarga FTDI

Conexión a Modems

Los módems son unos dispositivos que convierten una señal digital que llega en serie a otra analógica equivalente que envían por la línea telefónica. Y viceversa, reciben la señal analógica que llega por la línea telefónica y la convierte a digital. Lo que logramos con esto es acceder desde un ordenador local (que hace de terminal) a un ordenador remoto

Una de las compañías más mítica en la construcción de módem fue HAYES, creadora de los famosos smartmodems controlados mediante COMANDOS AT

En esta figura se muestra el startmodem original de Hayes, que funcionaba a 300 baudios


Smartmodem de hayes. Foto del frontal25 y parte trasera26. Fuente: Wikipedia

En este este enlace se encuentra el PDF del manual original del smartmodel Hayes

Funcionamiento del módem

El esquema de funcionamiento se muestra en esta figura. En la izquierda tenemos el PC transmisor, que quiere enviar un dato (un carácter). El software de comunicaciones lo escribe en el puerto serie, y sale por el pin TX en serie, hasta el módem. Aquí se convierte a una señal analógica que puede ser enviada por la línea telefónica. En el otro extremo el modem recibe esta señal analógica y devuelve la señal digital original, que transmite en serie al PC por el Pin RX

La comunicación entre el PC y el módem se realiza a través del puerto serie. Las señales de conexión son las especificadas por la Norma RS-232. En esta figura se muestra la conexión entre las señales del modem y del PC. Observa que todas las señales van en paralelo excepto las de Datos, que se cruzan. El pin TX del PC está conectado al Pin RX del módem, y viceversa, el Pin RX del PC está conectado al pin TX del módem

Modos de funcionamiento

El módem tiene 2 modos de funcionamiento. Uno es el modo normal y es en el que se encuentra nada más encenderlo. En este modo no hay conexión con el modem remotor todavía. Todos los caracteres que se envían desde el PC los procesa el módem, y devuelve respuestas en caso necesario. La comunicación es sólo entre en PC y el Módem

El otro modo de funcionamiento es el modo online. El modem entra en este modo automáticamente una vez que se establece la conexión entre ambos módems. En este modo todos los caracteres que recibe el modem provenientes del PC (TX) los envía al modem remoto a través de la línea telefónica, y viceversa, todos los caracteres recibidos por la línea telefónica se envían al PC a través de su pin RX

Cuando estamos en este modo existe una conexión punto-punto entre ambos ordenadores. Y es como si estuviesen conectados directamente por un cable. A efectos de comunicación sería como si el ordenador remoto lo tuviésemos al lado del nuestro, conectados físicamente por los cables TX y RX

Comandos AT

En el modo normal el módem espera recibir Comandos AT. Son cadenas de caracteres que comienzan por AT (De ahí su nombre) y permiten configurar el modem, así como leer información de él. La mayoría de estos comandos, una vez ejecutados, hacen que el modem devuelva como respuesta OK

En esta tabla se muestran algunos de los comandos AT más comunes, aunque hay muchísimos más

Comando AT Descripción
AT Comprobar que el modem atiende comandos. Si está operativo responde con OK
ATBx Configurar los baudios (velocidad de funcionamiento del modem)
ATDx Llamar al número telefónico indicado
ATA Responder a una llamada entrante
ATZ Resetear la configuración a sus valores por defecto
ATH Colgar una llamada en curso
+++ Si hay ya una llamada en curso y estamos en modo online con este comando se vuelve al modo normal para así poder dialogar con el modem (por ejemplo para colgar)

Los comandos AT están estandarizados. Se puede encontrar más información en este documento: Serial asynchronous automatic dialling and control

Comunicaciones con el Modem

La comunicación con el modem la hacemos usando un programa de terminal serie (ver apartado siguiente) que envía al modem todo lo que tecleamos y nos muestra en pantalla las respuestas del módem. Al arrancarlo estamos en modo normal. Escribimos comandos AT para configuarlo y para realizar la llamada al ordenador remoto. En cuanto se establece la conexión el modem envía la respuesta CONNECT y pasa automáticamente al modo online. ¡¡Ya podemos interactuar con el ordenador remoto!!

La comunicación se termina cuando alguno de los dos cuelga el teléfono. En ese momento el modem pasa al modo normal de nuevo

Conexión con sistemas empotrados

Otra de las aplicaciones de los PCs como terminales es la de comunicarse con Sistemas empotrados. Se trata de placas que incorporan típicamente un Microcontrolador. Los microcontroladores son procesadores que disponen de periféricos integrados. Son pequeños ordenadores. Todos ellos siempre incluyen una unidad para comunicaciones serie asíncronas. Esta es la forma más básica de comunicación, además de ser fiable y consumir pocos recursos hardware. Recibe diversos nombres según el microntrolador, como SCI (Serial communication interface) o UART (Universal Asynchronous Receiver Transmiter)

En el caso de las FPGAs este periférico hay que sintetizarlo como parte de tus diseños

En esta figura se muestran dos ejemplos de sistemas empotrados: la placa Arduino UNO que incorpora un microcontrolador AVR, y la placa Alhambra-II con una FPGA

La conexión con los sistema empotrados actuales se realiza utilizando un cable USB, pero en la mayoría de estas placas hay un chip de conversión USB-serie, como el FTDI

Un ejemplo es la placa Arduino uno. Aunque se conecta por USB, en realidad disponibles de un puerto serie virtual con el que nos podemos comunicar. La aplicación típica es la depuración. El arduino puede imprimir mensajes en la consola gracias a esta comunicación serie

En la placa Alhambra-II se incorpora el chip FTDI, que además de las señales TX y RX incluye el resto de señales de la norma RS-232 (Salvo DCD y RI)

Conexión con máquinas CNC

Las Máquinas de control numérico se usan en la industria para la fabricación de piezas. Ejemplos de estas máquinas son tornos, fresadoras, cortadoras láser e impresoras 3D. Se trata de máquinas automatizadas. Cada operación que realizan no se la indica un operario sino una instrucción

Dentro de cada máquina hay un sistema empotrado que recibe comandos por el puerto serie. Podemos utilizar el PC como un terminal de acceso a estas máquinas, para enviar comandos y depurar su funcionamiento

Un ejemplo son las impresoras 3D. Típicamente se conectan por el cable USB al PC, pero en realidad la comunicación es por puerto serie. Desde el terminal serie del PC se pueden enviar comandos para posicionar el extrusor de la impresora, calentarlo, echar plástico, etc

Códigos G (G-CODE)

Las máquinas de control numérico se manejan mediante unos comandos ASCII conocimos como G-CODES. Estos comandos los podemos enviar directamente desde un terminal serie. Esto permite depurar las máquinas y probarlas fácilmente, sin necesidad de utilizar ningún software especializado. Basta con conocer la sintáxis de estos códigos y enviarlos por el puerto serie

Los G-Codes comienzan por una letra mayúscula, que puede ser G para comandos relacionados con el movimiento y M para cualquier otro tipo de comandos (como encender/apagar elementos de la máquina)

Si bien los GCODEs están estandarizados, cada máquina añade los suyos propios. Para el caso de las Impresoras 3D Libres, los GCODEs están publicados en la wiki de reprap: GCODES de las impresoras 3D del proyecto RepRap

Hay muchísimos GCODEs. En esta tabla se resumen algunos, que se han utilizando este capítulo del Tutorial de montaje de la Prusa 2. En la wiki y los vídeos se pueden ver ejemplos de movimiento de una impresora 3D real

GCODE Descripción
M114 Leeer la posición actual
M115 Obtener información sobre el firmware
G28 Hacer un 'homing'
G91 Pasar a coordenadas relativas
G90 Pasar a coordenadas absolutas
G1 Movimiento del cabezal

Estos son algunos ejemplos de comandos reales

GCODE Descripción
G1 X50 Ir a la posición (50,0,0)
G1 X0 Volver al origen (0,0,0)
G1 X50.5 Ir a la posición (50.5,0,0)
G1 X50 F6000 Ir a la posición (50,0,0) a la velocidad de 6000mm/min (100mm/sec)
G1 F3000 Fijar la velocidad a 3000 mm/min. A partir de ahora todos los comandos de movimiento usarán esta velocidad
G1 X50 Y50 Movimiento de dos ejes. Ir a la posicion (50,50,0)
G1 X100 Y100 Z30 Ir al punto (100, 100, 30). Todos los ejes se mueven a la vez. Se paran también a la vez (Movimiento coordinado)

Este es un ejemplo real de un fichero con GCODEs. Es el usado en el tutorial de la Prusa como Ejemplo. El cabezal realiza una trayectora en cuadrado:

  G91
  G1 X50 F3000
  G1 Y50
  G1 X-50
  G1 Y-50

Programas de comunicaciones serie

En este sección listamos algunos de los programas de comunicaciones serie que se pueden utilizar para comunicarse actualmente con dispositivos conectados a través del puerto serie. Estos programas también reciben el nombre de terminales serie, y se pueden usar para acceder a otros ordenadores a través del puerto serie. Convierten el ordenador en un terminal emulado

Nombre de los dispositivos serie

Los puertos serie disponibles en los ordenares reciben un nombre, que depende del sistema operativo. Este nombre se usa en los programas de comunicaciones para indicar qué puerto usar, y poder así configurarlo

  • Windows: COM1, COM2, COM3,...COMx, donde x es un número entero
  • Linux: Existen diferentes nombres, según la naturaleza del dispositivo serie conectado
    • Dispositivos serie nativos: /dev/ttyS0, /dev/ttyS1, ... /dev/ttySn
    • Dispositivos serie por usb: /dev/ttyUSB0, /dev/ttyUSB1, ..., /dev/ttyUSBn
    • Otros dispositivos serie por usb: /dev/ttyACM0, /dev/ttyACM1, ..., /dev/ttyACMn
  • Mac:
    • Dispositivos serie: /dev/tty.*
    • Dispositivos serie: /dev/cu. *
    • Ejemplos: /dev/cu.usbserial-XXXXX donde XXXX es un identificador único

Script communicator

Terminal serie con interfaz gráfica (QT). Multiplataforma

  • Página en Github
  • Plataformas: Linux, Windows, Mac
  • Última versión: 06.11
  • Notas:
    • Para que funcione en Linux (ubuntu 24.04) hay que instalar el paquete libxcb-cursor-dev
    • Sólo funciona en linux (Ubuntu 24.04) con Xorg. NO FUNCIONA con Wayland

Minicom

El Minicom es similar al TELIX, pero para sistemas Linux

  • Página en Debian, Minicom en Wikipedia
  • Plataforma: Linux
  • Última versión: 2.9
  • Notas:
    • Para ejecutarlo en color y que se muestren caracteres gráficos ejecutar: minicom -l -m -L -c on

Tio

Terminal serie minimalista y moderno, pensado sobre todo para la comunicación con sistemas empotrados

  • Página en Github
  • Plataforma: Linux, Mac
  • Última versión: v3.7-16
  • Notas:
    • Ejemplo de ejecución, con mapeo de CR a CRLF: tio /dev/ttyUSB1 --map ICRNL,INLCRNL
    • Soporta la conexion y desconexión en caliente

Putty

Terminal multiplataforma que no sólo permite conexión por puerto serie, sino también SSH y Telnet

  • Página
  • Plataforma: Linux, Mac
  • Última versión: 0.81
  • Notas:
    • Instalación en Ubuntu 24.04: sudo apt install putty

GNU Screen

Screen no es un programa específico para terminales serie, sino para abrir terminales genéricos, entre ellos el puerto serie

  • Página
  • Plataforma: Linux
  • Última versión: 4.09.01
  • Notas:
    • Instalación en Ubuntu 24.04: sudo apt install screen
    • Ejemplo de ejecución en Linux: screen /dev/ttyUSB1 115200
    • Salir con Ctrl-a + \

GTKTerm

Terminal serie gráfico, que usa la biblioteca gráfica GTK

  • Página en github
  • Plataforma: Linux
  • Última versión: 1.2.1
  • Notas:
    • Instalación en Ubuntu 24.04: sudo apt install gtkterm

Picocom

Terminal minimalista, para Linux

  • Página
  • Plataforma: Linux
  • Última versión: v3.1
  • Notas:
    • Instalación en Ubuntu 24.04: sudo apt install picocom
    • Ejemplo de ejecución, con mapeo de CR a CRLF: picocom -b 115200 --imap crcrlf /dev/ttyUSB1
    • Se sale con Ctrl-a + Ctrl-x

Tuicom

Terminal de comunicaciones escrito en Rust (y por tanto es multiplataforma). El transmisor y el receptor están separados en dos ventanas de texto independientes. Tiene también un modo hexadecimal

  • Página en github
  • Plataforma: Linux, Mac, Windows
  • Última versión: 0.1.0
  • Notas:
    • Instalación en Ubuntu 24.04: Clonar repositorio y ejecutar cargo install --path .
    • Ejemplo de ejecución en Linux: tuicom --baud 115200 /dev/ttyUSB1
    • Se sale con ESC

Arduino Terminal

El entorno de Arduino incluye un terminal serie que se puede usar de manera genérica, con cualquier placa

  • Página
  • Plataforma: Linux, Mac, Windows
  • Última versión: 2.3.6
  • Notas:
    • Ejemplo de ejecución en Ubuntu Linux 24.04: ./arduino-ide_2.3.6_Linux_64bit.AppImage --no-sandbox

Icestudio Terminal

Terminal de comunicaciones integrado en Icestudio, el entorno de diseño de circuitos para FPGAs Libres

Pyserial: Miniterm

Terminal serie que viene integrado en el paquete python pyserial

  • Página en Github
  • Plataforma: Linux, Mac, Windows
  • Última versión: Pyserial 3.5
  • Notas:
    • Hay que instalar el paquete pyserial: pip install pyserial
    • Ejemplo de ejecución en Ubuntu Linux 24.04: python -m serial.tools.miniterm /dev/ttyUSB1 115200
    • Se sale con Ctrl-]

Conceptos nuevos

  • Ordenador personal (PC)
  • VT220
  • VT320
  • Modem
  • Línea telefónica
  • Ordenador local
  • Ordenador remoto
  • Comunicación full-duplex
  • Conexión punto-punto
  • Programa terminal de comunicaciones
  • Chat
  • Transferencia de ficheros
  • BBS
  • Sysop
  • Correo electrónico
  • Foro
  • Cliente
  • Servidor
  • Terminal serie
  • Puerto serie
  • Microcontrolador
  • UART
  • Norma RS-232
  • Señal portadora
  • Conversor usb-serie
  • Conector DB25
  • Conector DB9
  • FTDI FT232R
  • Smartmodem de Hayes
  • Comandos AT
  • Sistemas empotrados
  • Arduino
  • FPGA
  • Máquinas CNC
  • Código G (GCODES)
  • Programa de comunicaciones serie
  • Terminal emulado

Terminales emulados

Ya estamos llegando a los Terminales modernos. Hemos visto que originalmente un terminal era un dispositivo físico usado para comunicarse con un ordenador remoto, a través de un cable. Con la llegada de los ordenadores personales, el teclado y la pantalla se usan para enviar comandos al propio ordenador local, y comunicarse directamenten con el sistema operativo. El ordenador remoto y el terminal local se funden en un único dispositivo

El teclado y la pantalla pasan a llamarse la consola. Tenemos la consola de entrada (teclado) y la consola de salida (pantalla). Esta consola se comunica directamente con el sistema operativo. Al arrancar el ordenador, se ejecuta un programa llamado shell que es el que permite que introduzcamos comandos para dialogar con el sistema operativo, y poder así acceder a los ficheros para crearlos, modificarlos y ejecutar otros programas

Ya no hay puerto serie ni comunicación remota, sino que la shell está conectada directametne a la consola. Esta pantalla donde nos comunicamos con el sistema operativo es la nueva terminal, que solemos llamar la línea de comandos. Se trata de un terminal emulado, en el que la comunicación entre el usuario y el programa se hacen por software: lo que teclea el usuario se envía a la shell, y los mensajes de salida de la shell se muestran en la pantalla

Desde la shell se ejecutan programas. Al hacerlo la shell pasa el control al programa y la consola se conecta ahora a este nuevo programa, para que el usuario puedo interaccionar con él. Al salir del programa la shell retoma el control de la consola

En los siguientes apartamos seguimos nuestro viaje histórico examinando la evolución de los terminales emulados en los ordenadores personales

Ordenadores personales con MS-DOS

El MS-DOS era el sistema operativo con el que venían los primeros PCs. Se trataba de un sistema operativo mono-usuario. Es decir, que sólo atiende a un único usuario, que es el que tiene el control de la consola

Al encenderlo entraba directamente en la línea de comandos del MS-DOS, donde el usuario escribe comandos y ejecuta programas

Estos son algunos de los comandos usados en MS-DOS

Comando Descripción
A: Cambiar a la unidad de disquetes A
C: Cambiar a la unidad de Disco Duro
DIR Mostrar los archivos en el directorio actual
MKDIR Crear un directorio
CD Cambiar de directorio
COPY Copiar un archivo
DEL Borrar un archivo

Aunque se trata de sistemas antiguos, es posible utilizarlos utilizando emuladores. En este enlace puedes probar un IBM PC XT, con el sistema operativo MS-DOS, arrancando de un disquete (Unidad A:)

Al arrancar el emulador se inicia el ordenador, se carga el sistema operativo y aparece el prompt del sistema. Estamos en la línea de comandos. Este es nuestro terminal, que nos permite comunicarnos con el MS-DOS

Vamos a probar algunos comandos. Primero mostramos todos los archivos del disquete, usando el comando DIR

En total hay 23 archivos. Como ejemplo final, vamos a entrar en el entorno de Basic, donde ejecutaremos un programa hola mundo. Desde el terminal ejecutamos el comando BASIC

Escribimos directamente el programa en BASIC, que en nuestro caso sólo tiene una única línea, y luego escribimos el comando RUN para ejecutarlo

10 print "Hola Mundo! :-)"
run

Esto es lo que obtenemos:

Para volver a la línea de comandos del sistema operativo escribimos el comando SYSTEM

Ordenadores personales con Linux

A partir de los años 90 se desarrolló el sistema operativo GNU/Linux, conocido coloquialmente como LINUX. Es un sistema escrito desde 0, que es Libre, y que se puede compilar utilizando sólo herramientas libres (El ecosistema de GNU). Está basado en UNIX. Se podría decir que es una reimplementación de UNIX desde cero pero Libre

Lo creó Linus Torvalds para poder ejecutarlo en su ordenador PC de casa. Y poco a poco se fue extendiendo entre usuarios de todas partes del mundo

Si te interesan los sistemas operativos UNIX, puedes encontrar muchísima información en el libro Fundamentos de Sistemas Operativos: Una Aproximación Práctica Usando Linux escrito por los profesores de la URJC Enrique Soriano y Gorka Guardiola. En el apartado 4.7 (Página 261) encontrarás muchísima información sobre los terminales

Terminal tty1

Los sistemas Linux iniciales arrancaban en modo texto, similar al ms-dos. El usuario ve una pantalla negra con letras blancas donde salen los mensajes de arranque hasta que aparece el mensaje Login:. La pantalla y el teclado constituyen la consola que está asociada a este terminal. Recibe el nombre de tty1

El usuario lo primero que hace es escribir el nombre y el password en este terminal. Esto le da acceso a sus datos privados, y a la línea de comandos del sistema operativo (Shell). A diferencia del ms-dos, Linux es un sistema operativo multiusuario. Permite que muchos usuarios puedan utilizar al ordenador, cada uno con sus propios ficheros y datos privados

Terminales virtuales

Linux es también un sistema Multitarea, en las que se ejecutan procesos de forma concurrente. Esto permite que un mismo usuario tenga varias sesiones abiertas. Cada sesión usa un terminal diferente: tty2, tty3... Inicialmente se arranca en el terminal tty1. Si se pulsan las teclas Ctrl-Alt+2 se accede a un terminal nuevo: el tty2. Ahora la pantalla y el teclado están conectados a este terminal, y el usuario puede abrir una sesión nueva

El usuario puede en cualquier momento pasar un terminal virtual a otro. Es como si tuviese dos terminales funcionando en paralelo, con dos teclas y dos pantallas, y el usuario se mueve de uno a otro

Terminales gráficos

Ya estamos llegando al final de nuestra historia. Los sistemas modernos son gráficos. No sólo se muestra texto, sino también imágenes, dibujos, colores... Para interactual con el ordenador además del teclado, tenemos otros dispositivos como ratones o pantallas táctiles

En esta foto vemos el sistema que tengo actualmente en mi portátil, un Linux Ubuntu 24.04. Esto es lo que aparece al terminar el arranque

Una vez que nos hemos logeado, tenemos un escritorio gráfico sobre el que trabajar. Aunque el sistema es gráfico, podemos abrir un terminal gráfico para escribir comandos para el sistema operativo. Existen diferentes programas en Linux: Xterm, Gnome-terminal...

En esta imagen se muestra un escritorio de Ubuntu 24.04 en el que se han abierto dos terminales gráficos

Cuando uno de estos terminales está activo, decimos que tiene el foco, y por tanto todo lo que escribamos en el teclado se enviará a este terminal. Estos son los terminales modernos. En esta imagen se muestra un terminal en el que se ha ejecutado el comando ls que muestra todos los ficheros del directorio actual

Conceptos nuevos

  • Sistema operativo
  • Shell
  • Línea de comandos
  • MS-DOS
  • Sistema operativo monousuario
  • Prompt
  • BASIC
  • Linux
  • Unix
  • tty1
  • Login
  • Password
  • Sistema operativo Multiusuario
  • Terminal virtual
  • Sistema operativo Multitarea
  • Proceso
  • Sesión
  • Terminal gráfico
  • Ratón
  • Pantalla táctil
  • Escritorio gráfico
  • Xterm

Terminales en Linux

Terminamos este cuaderno técnico profundizando un poco más sobre los terminales en Linux. Estudiaremos algunos de los comandos que nos permiten obtener información sobre ellos, así como cambiar parámetros de su configuración

Cuando abrimos la línea de comandos en un Linux actual (Por ejemplo Ubuntu 24.04), sabemos que se trata de un terminal emulado por software, que lee las teclas y se las envía a la shell. También recibe todos los mensajes de la shell y los muestra en la ventana gráfica. Este terminal en el que trabajamos tiene unas propiedades de visualización que depende del tipo de terminal. Cuando nos referimos a estas propiedades de visualización hablamos de Terminales de visualización (display terminals)

Terminales de visualización

Una parte muy importante de los terminales está relacionada con la visualización de información. Los terminales tienen una pantalla, física o emulada, en la que se muestra la información proveniente del programa que estamos ejecutando. Esta visualización depende de qué tipo de terminal sea. Por ejemplo, los antiguos terminales VT52 tienen 24 líneas de 80 caracteres, en monocromo. Sin embargo los terminales VT100 tienen un modo de 132x14 además de incluir atributos como vídeo inverso, subrayado, parpadeo, negrita...

Para poder emular por software los terminales físicos necesitamos primero describir en una base de datos todos los parámetros del terminal: Número de líneas y columnas, atributos, secuencias de escape para cambiar atributos, movimientos del cursor, etc... De esta forma, el software puede leerla y saber de qué terminal se trata, para adaptarse a él. Esta base de datos se denomina terminfo (TERMinal INFOrmation)

Nombres de los terminales de visualización

En esta base de datos de terminales de visualización, se asigna un nombre a cada uno. El nombre del terminal que estamos utilizando está disponible en la variable de entorno TERM

Para leer este nombre utilizamos el comando echo $TERM. Si estamos en una máquina Ubuntu 24.04 y hemos abierto un terminal gráfico su nombre será xterm-256color. Este nombre indica que estamos en un terminal gráfico a color, con un total de 256 colores. Por supuesto que este terminal de visualización tiene muchas más propiedades

Como experimento vamos a ver lo que pasa si abrimos otro terminal, pero en modo texto. Esto lo podemos hacer desde Ubuntu 24.04 apretando las teclas Ctrl-Alt+3. Nos aparecerá una ventana completa de texto, asociada al terminal tty3. Si ejecutamos el comando anterior observamos que ahora el terminal de visualización tiene el nombre linux. Como se trata de un terminal diferente, tendrá otras propiedades distintas

Ubuntu 24.04.2 LTS JANEL tty3

JANEL login: obijuan
Password:
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.11.0-21-generic x86_64)

obijuan@JANEL:~$ echo $TERM
linux
obijuan@JANEL:~$

Como referencia se listan a continuación todos los nombres de los terminales de visualización disponibles en Ubuntu 24.04:

ansi, cons25, cygwin, dumb, Eterm, hurd, linux, mach, mach-bold, mach-color, mach-gnu, mach-gnu-color, pcansi, rxvt, rxvt-basic, rxvt-m rxvt-unicode, rxvt-unicode-256color, screen, screen-256color, screen-256color-bce, screen-bce, screen-s, screen-w, screen.xterm-256color sun, tmux, tmux-256color, vt100, vt102, vt220 ,vt52, wsvt25, wsvt25m, xterm, xterm-256color, xterm-color, xterm-debian, xterm-mono, xterm-r5, xterm-r6, xterm-vt220, xterm-xfree86

Se han resaltado en negrita algunos de los terminales que ya conocemos

La base de datos terminfo

La base de datos terminfo se encuentra en el directorio /usr/share/terminfo/. Navegando por ese directorio veremos los nombres de todos los terminales de visualización disponibles. Los ficheros con la información de los terminales están compilados y están en binario por lo que NO los podremos ver con el comando cat

Terminfo es una base de datos un poco enrevesada. La documentación para entenderla es larga y muy tediosa de leer. En esta sección NO haremos una revisión exhaustiva sino más bien presentaremos las ideas generales para entenderla. Se pueden encontrar TODOS LOS DETALLES EN SU página de manual

Cada terminal tiene sus propias propiedades, como por ejemplo el número total de líneas y columnas, movimiento del cursor, caracteres de escape ansi, colores... Todas estas propiedades están organizadas en 3 categorías, según su tipo. Cada propiedad recibe un nombre estandarizado

  • Propiedades Booleanas: Sólo tiene dos valores: Activa o NO activa. En esta tabla se resumen algunas de estas propiedades, usando su nombre estandarizado
Propiedad Descripción
am Márgenes automáticos
bce Borrar la pantalla usando el carácter del fondo
ccc El terminal puede cambiar los colores
km El teclado tiene la tecla ALT
xenl Ignorar el carácter de nueva línea si justo se está en el extremo derecho del terminal
npc No se usan caracteres de relleno
  • Propiedades numéricas: Tienen un valor asignado. En esta tabla se muestran algunas de ellas, y sus valores en caso del terminal xterm-256colors
Propiedad Valor Descripción
colors 256 Número máximo de colores en pantalla
lines 24 Número de líneas
cols 80 Número de columnas en una línea
it 8 Número de espacios a los que equivale un TAB
pairs 65536 Numero máximo de pares de colores en la pantalla
  • Propiedades cadena: Quedan definidas mediante una cadena de caracteres. Estas cadenas típicamente son códigos de control (Ctrl+letra) o secuencias de escape. En esta tabla se muestran algunos ejemplos. Los valores son los asignados para el terminal xterm-256colors
Nombre Valor Descripción
bel Ctrl-G Código de control para emitir un pitido audible
cr '\r' Carácter retorno de carro
ht Ctrl-I Carácter de tabulación horizontal
nel ESC E Nueva línea
ATRIBUTOS ------------- --------------------------
blink ESC[m Activar atributos de parpadeo
bold ESC[1m Activar atributos de negrita
dim ESC[2m Activar atributos de baja intensidad
sitm ESC[3m Activar atributo de cursiva
ritm ESC[23m Desactivar atributo de cursiva
rev ESC[7m Activar el modo inverso
invis ESC[8m Activar modo Black (Caracteres invisibles)
smul ESC[4m Activar el modo de subrayado
rmul ESC[24m Desactivar el modo subrayado
setab ESC[4❎m Establecer el color del fondo ❎
setaf ESC[3❎m Establecer el color de la tinta ❎
sgr0 ESC(B ESC[m Apagar todos los atributos
CURSOR ------------- ------------------------------------
civis ESC[?25l Cursor invisible
cnorm ESC[?12l ESC[?25h Mostrar cursor
cvvis ESC[?12;25h Cursor muy visible
cub ESC[D Mover el cursor un carácter a la izquierda
cub1 Ctrl-H Mover el cursor un carácter a la izquierda
cuf1 ESC[C Mover el cursor un carácter a la derecha
cuu1 ESC[A Mover el cursor un carácter hacia arriba
cud ESC(B Mover el cursor un carácter abajo
cud1 '\n' Mover el cursor un carácter bajo
cuf ESC[❎C Mover el cursor ❎ caracteres a la derecha
cuu ESC[❎A Mover el cursor ❎ posiciones hacia arriba
cup ESC[❎;❎H Posicionar el cursor en la ❎ y ❎ dadas
home ESC[H Llevar el cursor a home
hpa ESC[❎G Llevar el cursor a la columna indicada
sc ESC 7 Save cursor: Almacenar la posicion actual del cursor
rc ESC 8 Restore Cursor. Llevar el cursor a la posición anteriormente guardada
TECLAS ----------------- -------------------------
kcub1 ESC 0D Tecla flecha izquierda
kcuf1 ESC 0C Tecla fecha derecha
kcuu1 ESC 0A Tecla fecha arriba
kcud1 ESC 0B Tecla flecha abajo
kbs Ctrl-? Tecla de DELETE (backspace)
kdch1 ESC[3<~ Tecla de Borrar un caracter
kent ESC 0M Tecla Enter
BORRADO ------------------ -----------------------------
clear ESC[H ESC[2J Borrar la pantalla
ed ESC[J Borrar hasta el final de la pantalla
el ESC[K Borrar hasta el final de la línea
el1 ESC[1K Borrar hasta el inicio de la línea
dch1 ESC[P Borrar 1 caracter
dch ESC[❎P Borrar ❎ caracteres
ech ESC[❎X Borrar ❎ caracteres
dl ESC[❎M Borrar ❎ líneas
dl1 ESC[M Borrar 1 línea (ESC[M)
OTROS ------------------ --------------------------------------
ich ESC[❎@ Insertar ❎ caracteres
rep 🔴ESC[❎b Repetir el caracter 🔴 ❎ veces
il ESC[❎L Insertar ❎ lineas
il1 ESC[L Insertar 1 línea
csr ESC[❎;❎r Establecer region de scroll desde linea inicial ❎ hasta final ❎
ri ESC M Scroll hacia atrás una línea
rin ESC[❎T Scroll hacia atrás ❎ líneas
ind '\n' Scroll del texto arriba
indn ESC[❎S Scroll hacia adelante de ❎ lineas
flash ESC[?5h ESC[?5l Parpadeo rápido de la pantalla
is2 ESC[!p ESC[?3;4l ESC[4l ESC> Cadena de inicialización
rs1 ESC c ESC]104\7 Cadena de reinicio
rs2 ESC[!p ESC[?3;4l ESC[4l ESC\E> Cadena de reinicio

Comando infocmp: Mostrar las propiedades del terminal

El comando infocmp muestra todas las propiedades disponibles para el terminal por defecto. Lo que hace es leer la base de datos de terminfo y la decodifica. Su salida, no obstante, sigue siendo bastante crítica y complicada de descifrar. Aquí vemos un ejemplo en Ubuntu 24.04:

Este es el resultado al ejecutarlo sobre el terminal de text tty3

Comando tput: Observar una propiedad

El comando tput nos permite conocer el valor de una determinada propiedad. Su comportamiento depende del tipo de propiedad. Vamos a ver algunos ejemplos de su uso, en el terminal xterm-256colors

Las propiedades booleanas se devuelven como valor de salida al ejecutar tput. Por ello, para observarlas hay que mirar la variable del sistema $?

En este ejemplo comprobamos las propiedades booleanas ccc y eo. Para comprobarlas utilizamos el comando tput seguido de echo $? para ver su valor de salida:

Aquí las ponemos en modo texto para poder hacer copy & paste:

obijuan@JANEL:~$ tput ccc; echo $?
0
obijuan@JANEL:~$ tput eo; echo $?
1
obijuan@JANEL:~$

Comprobamos que la propiedad ccc está activa, mientras que la eo no lo está

Note

Se utiliza Lógica inversa. Un 0 significa que la propiedad está activa, y un 1 que NO está activa

Las propiedades numéricas imprimen directamente su valor en la consola. Por ejemplo vamos a comprobar las propiedades colors y cols

Aquí lo ponemos en modo texto

obijuan@JANEL:~$ tput colors
256
obijuan@JANEL:~$ tput cols
80
obijuan@JANEL:~$

Cuando se usa tput con propiedades de cadena, estas cadenas se imprimen en la consola, y como son cadenas de control con secuencias de escape, el propio terminal las interpretará y las ejecutará. Esto permite tener acceso a la modificación de atributos fácilmente

En este ejemplo se establecen atributos y a continuación se imprimem mensajes de texto para ver cómo han variado los atributos. Primero se cambia a negrita, luego a cursiva y finalmente se cambia el color del fondo. Los atributos sólo afectan a la cadena escrita con echo porque el prompt emite secuencias ANSI que cambian los colores y reestablecen los atributos

Esta es la salida en modo texto:

obijuan@JANEL:~$ tput bold; echo "Negrita"
Negrita
obijuan@JANEL:~$ tput sitm; echo "Cursiva"
Cursiva
obijuan@JANEL:~$ tput setab 4; echo "Color del fondo"
Color del fondo
obijuan@JANEL:~$

Arquitectura del terminal

El funcionamiento simplificado del terminal es el que ya conocemos. Hay un teclado con el que enviamos caracteres de entrada al programa que se ejecuta (que puede ser la shell). Este programa genera unos caracteres de salida que llegan a la pantalla donde se muestran. Este sería el esquema simplificado

Sin embargo esto no es así. Los caracteres que salen del teclado no llegan directamente a nuestro programa, sino que son procesados primero por el driver del dispositivo del terminal (tty). Luego se envían al programa. Y lo mismo en el otro sentido. Los caracteres que salen del programa no llegan directamente a la pantalla, sino que los filtra también este driver. El esquema sería como este:

El dispositivo del terminal tiene un comportamiento por defecto, que se puede configurar. Este modo por defecto recibe el nombre de modo canónico. En realidad la unidad mínima de transferencia de información entre consola y programa no son caracteres aislados, sino bloques de caracteres que terminan con el carácter \n. Los caracteres se van acumulando en dos buffers, uno de entrada y otro de salida. Permanecen ahí hasta que se recibe \n y en ese momento envían el bloque completo

Analizaremos por separado cada una de las arquitecturas asociadas a la entrada y la salida. Una vez más hay que resaltar que no estamos entrando en profundidad, sino más bien presentando las ideas generales para tener intuición de lo que está ocurriendo

Arquitectura de la salida

El esquema de la arquitectura de salida se muestra en esta figura

Cuando el programa en ejecución quiere sacar información textual por la pantalla, envía los caractares al terminal mediante la escritura en el dispositivo tty. Estos caracteres NO se imprimen directamente en la pantalla, sino que se almacenan primero en un buffer. Permanecen ahí hasta que se recibe el carácter \n. En ese momento el bloque de caracteres almacenado se envía a la siguiente etapa

Esta segunda etapa está asociada al terminal de salida. Se hace la distinción entre los caracteres visibles y los caracteres de control. Entre los caracteres de control incluimos las secuencias de escape. Si el caráctere es visible, se muestra por la pantalla. Si se trata de secuencias de control, se actúa en consecuencia

Un ejemplo de secuencia de control es la recepción de la cadena ESC[m que activa el atributo de parpadeo, y por tanto los siguientes caracteres visibles que se impriman aparecen parpadeantes

En la pantalla no sólo aparece la información enviada por el programa, sino que también se imprimen los caracteres que se están tecleando. PERO llegan directamente a la segunda etapa, gracias al eco local. No pasan por el buffer. Y no funcionan como un blqoue finalizado en '\n', sino carácter a carácter

En esta animación se muestra el funciona de la impresión del mensaje visible HOLA\n

¿Y por qué este comportamiento? Para optimizar. El rendimiento de las aplicaciones es mucho mayor si se hace de esta manera, que no imprimiendo los caracteres en la consola según se reciben

Este buffer de salida se puede volcar a la pantalla en cualquier momento, sin necesidad de recibir el carácter \n. Es la operación de control que se denomina flush

Arquitectura de la entrada

Este es el esquema de la arquitectura de entrda

Los caracteres recibidos del teclado no se envían directamente al programa en ejecución, sino que se procesan primero. Si se trata de caracteres visibles se almacenan en el buffer de entrada y NO se envía al programa todavía. Si lo que se recibe es una tecla especial, como por ejemplo DEL, se borra el último carácter introducido en el buffer. El programa NO se entera que el usuario ha apretado la tecla de borrado

Cuando el usuario aprieta la tecla ENTER, el driver del terminal genera el carácter \n que hace que el buffer se vacíe, enviando todo su contenido al programa (incluido el carácter '\n')

Además, se hace eco en la pantalla de todo lo que escribe el usuario. Es lo que ya conocemos del ECO LOCAL. El progorama NO sabe nada de estos caracteres impresos en la pantalla. Simplemente recibe una cadena finalizada en \n cada vez que el usaurio aprieta ENTER

En esta animación se muestra el funcionamiento

¿Por que funciona así? Este comportamiento permite simplificar los programas. No tienen que preocuparse de gestionar la edición de la entrada por parte del usuario. El usuario escribe comandos y los puede editar. Cuando ya lo tiene listo pulsa enter y ese comando le llega al programa. El programa no se entera de que ha habido una edición

Control del terminal

El funcionamiento normal del Terminal, el que hemos visto con los buffers en los apartados anteriores, se denomina modo canónico. Es el comportamiento por defecto

Sin embargo este comportamiento se puede cambiar. Lo podemos configurar. Por ejemplo para eliminar el eco local. O para eliminar el buffer de entrada y permitir que los caracteres lleguen directamente a nuestro programa, sin tener que apretar la tecla ENTER

Este comportamiento lo podemos configurar mediante llamadas al sistema operativo. Y esto es algo que realizamos al programar, en cualquier lenguaje de programación. La interfaz para controlar el terminal mediante llamadas al sistema se denomina termios (TERMminal Input/Output Settings)

También lo podemos configurar utilizando el comando stty, que acepta unos parámetros y realiza estas llamadas al sistema para configurar el comportamiento del terminal

Termios

La interfaz para modificar el comportamiento del terminal se denomina Termios (TERMinal Input/Output Settings). En Linux se tiene acceso a esta documentación mediante el comando man termios

Esta documentación hace referencia a la interfaz en lenguaje C, que es el lenguaje del sistema por excelencia, pero por supuesto los mismos conceptos aplican para el restro de lenagujes de programación. En este enlace, por ejemplo, se encuentra la documentación de Termios para Python

No es el objetivo de este cuaderno ténico entrar en los detalles. Sólo resaltar algunas de las cosas que se pueden lograr con Termios:

  • Eliminar el eco local
  • Configurar la entrada en modo raw (crudo), para que llegan las teclas como tales, sin procesar
  • Configurar el buffer de entrada para ser transparente, y no esperar a recibir '\n' para realizar el envío. Así nuestros programas tiene acceso carácter a carácter, según escribe el usuario
  • Volcar el buffer de salida (flush)
  • Configurar un timeout para el buffer de entrada. Si no se recibe algún carácter en el tiempo indicado, la lectura finaliza con error
  • Configurar un tamaño mínimo para el buffer de entrada. Si se reciben los elementos indicados, la lectura devuelve el control

Comando stty

Desde la línea de comandos podemos cambiar el comportamiento del terminal con el comando stty

Si ejecutamos el comando directamente, devuelve la configuración actual

Nos informa que la velocidad del terminal es de 38400 baudios. Esto es algo heredado del pasado, y parte de la configuración por defecto actual. Pero lógicamente en los terminales de acceso al sistema actuales NO hay comunicación serie

Vamos a hacer algunas pruebas del funcionamiento de stty

Experimento 1: Traducir los caracteres de mayúsculas a minúsculas

Si ejecutamos el comando stty iuclc, la entrada se configura para convertir TODAS las mayúsculas a minúsculas. Tras su ejecución ya no veremos las mayúsculas en el eco local. Si ejecutamos ahora otra vez stty, veremos que aparece la opción que hemos establecido iuclc

Experimento 2: Eliminar el eco local

El eco local lo quitamos con el comando stty -echo. Una vez ejecutado este comando, al escribir NO VEREMOS NADA EN EL TEMINAL. Pero al dar al Enter se ejecutará el comando que habíamos tecleado. No aparece en la pantalla porque hemos eliminado el eco local, pero SÍ ESTÁ EN EL BUFFER de entrada

Para volver a activar el eco local ejecutamos el comando stty echo (pero en el pantallazo no aparece el comando porque el eco local está eliminado)

Experimento 3: Configuración el puerto serie

El comando stty también se usa para configurar el puerto serie. Tenemos que utilizar la opción -F y a continuación pasarle el nombre del dispositivo serie a utilizar. En este ejemplo primero vemos la configuración actual. Por defecto está a 9600 baudios. A continuación lo configuramos a 115200 baudios, eliminamos el eco local y activamos el modo raw

En estas condiciones ejecutamos el comando cat /dev/ttyUSB1 que nos muestra en la consola todo lo recibido por el puerto serie

Experimento 4: Puerto serie: Envío y recepción de datos en serie

En este experimento grabamos en la placa de FPGA Alhambra-II un circuito que simplemente hace eco de todo lo recibido por el puerto serie a la velcodiad de 115200 baudios. Configuramos el dispositivo serie como antes: modo raw y eliminación del eco local. Abrimos un terminal para recepción de los datos y ejecutamos el comando cat > /dev/ttyUSB1 para visualizar todo lo que se recibe

Abrimos otro terminal para envío de cadenas. Estas cadenas llegan a la FPGA, hace eco de ellas, y se reciben en el otro terminal

En estos pantallazos se muestra un ejemplo:

Para enviar cadenas lo podemos hacer de estas maneras:

  • echo "mensaje" > /dev/ttyUSB1: Envía la cadena "mensaje\n". El comando echo añade automáticamente el carácter \n
  • echo -n "mensaje" > /dev/ttyUSB1: Envía la cadena "mensaje". El flag -n elimina el \n final
  • printf "mensaje" > /dev/ttyUSB1: Envía la cadena puesta entre comillas. Por defecto sin \n

Todo lo enviado desde el terminal transmisor aparece en el terminal receptor

Estos son los comandos escritos en el terminal transmisor, para poder hacer copy y paste:

obijuan@JANEL:~$ echo "Hola" > /dev/ttyUSB1
obijuan@JANEL:~$ echo -n "123" > /dev/ttyUSB1
obijuan@JANEL:~$ printf "456\n" > /dev/ttyUSB1
obijuan@JANEL:~$ printf "Adios!" > /dev/ttyUSB1
obijuan@JANEL:~$ echo "" > /dev/ttyUSB1
obijuan@JANEL:~$ echo "bye!" > /dev/ttyUSB1 

Estos son los comandos escritos en el terminal receptor

obijuan@JANEL:~$ stty -F /dev/ttyUSB1 115200 -echo raw
obijuan@JANEL:~$ cat /dev/ttyUSB1

Conceptos nuevos

  • Terminales de visualizacion
  • Terminfo
  • variable de entorno TERM
  • Comando infocmp
  • Comando tput
  • Nucleo del sistema operativo (Kernel)
  • Driver
  • Modo canónico
  • Buffer
  • Flush
  • Llamadas al sistema
  • Termios
  • Modo raw
  • Comando stty

Conclusiones

Al escribir un comando linux en el terminal gráfico estamos invocando ideas y conceptos pasados. Ese terminal gráfico está imitando las pantallas de texto, que nos muestran información en forma de vídeo, y que a su vez están imitando el papel en blanco donde imprimían los teletipos

Los teletipos, a su vez, heredan los conceptos de la máquina de escribir eléctrica, que es una evolución de la máquina de escribir manual. La técnica para imprimir está basada en la estampación de caracteres, que fue inventada con la imprenta, y que evolucionó a partir de las letras manuscritas

Conceptos como tinta se siguen utilizando hoy en día en los terminales para especificar el color de los caracteres. Otros conceptos, como retorno de carro provienen de la máquina de escribir

Los terminales, lejos de ser obsoletos, siguen siendo fundamentales en numerosos contextos técnicos y profesionales, y conocer su funcionamiento nos conecta con los principios esenciales de la computación. Escribimos comandos en el presente, estamos influídos por el pasado mucho más de lo que pensamos

Autor

Licencia

Créditos

Enlaces:

Clone this wiki locally