-
Notifications
You must be signed in to change notification settings - Fork 0
Terminales

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
- Introducción
- Escritura manual
- Estampado de caracteres
- La máquina de escribir
- Máquina de escribir eléctrica
- El Teletipo (TTY)
- Vídeo terminal
- Ordenadores personales como terminales
- Terminales emulados
- Terminales en Linux
- Conclusiones
- Autor
- Licencia
- Créditos
- Enlaces
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
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
- 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
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
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

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:
- Partimos del escenario inicial: con un papel y el sello
- Ponemos la tinta en el sello (apretando contra el tampón de tinta)
- Presionamos el sello contra el papel
- 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
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
- 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 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
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
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
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
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
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
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
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

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
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"

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
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:
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:

- 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
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
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
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:
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
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
- 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
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
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
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
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
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
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) |
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
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
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
- 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
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
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
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:
-
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
-
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
-
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
-
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
-
La información visualizada en la pantalla se puede editar. Es decir, que NO ES PERMANENTE, como el papel
-
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
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
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
A la salida del haz de electrones se sitúan dos placas conectadas a la tensión
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
Cuando se activan ambas placas de deflexión, horizontal y vertical, aplicando sobre ellas las tensiones
De manera esquemática el tubo de rayos catódicos lo podemos representar como una pantalla que tiene 2 entradas de alimentació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
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
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
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
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 |
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...
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
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 |
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 |
- 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
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
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
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
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)
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
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) |
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
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
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
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
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
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
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)
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
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
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
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
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
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
- Para ejecutarlo en color y que se muestren caracteres gráficos ejecutar:
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
- Ejemplo de ejecución, con mapeo de CR a CRLF:
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
- Instalación en Ubuntu 24.04:
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 + \
- Instalación en Ubuntu 24.04:
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
- Instalación en Ubuntu 24.04:
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
- Instalación en Ubuntu 24.04:
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
- Instalación en Ubuntu 24.04: Clonar repositorio y ejecutar
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
- Ejemplo de ejecución en Ubuntu Linux 24.04:
Terminal de comunicaciones integrado en Icestudio, el entorno de diseño de circuitos para FPGAs Libres
- Página en github
- Plataforma: Linux, Mac, Windows
- Última versión: 0.12
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-]
- Hay que instalar el paquete pyserial:
- 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
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
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
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
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
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
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

- 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
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)
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)
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 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 |
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

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:~$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
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
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
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
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
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
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

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)
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

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-nelimina el\nfinal -
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- 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
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
- Juan González-Gómez (Obijuan)
- 1 Foto del terminal Televideo 925. Dominio público. https://commons.wikimedia.org/w/index.php?curid=493141
- 2 De Gerard Brils - Fotografía propia de Adrian Pingstone, febrero de 2005, Dominio público. https://commons.wikimedia.org/w/index.php?curid=71740105
- 3 De Gerard Brils - Fotografía propia de Adrian Pingstone, febrero de 2005, Dominio público, https://commons.wikimedia.org/w/index.php?curid=68618
- 4 Foto de máquina de escribir. By Brass hat - Own work, CC0, https://commons.wikimedia.org/w/index.php?curid=17789085
- 5 Foto del Teletipo. De The original uploader was Kierant de Wikipedia en inglés. - Transferido desde en.wikipedia a Commons., CC BY 2.5,
- 6 Foto de papel continuo. De ArnoldReinhold - Trabajo propio, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=16147192
- 7 Foto del teletipo ASR-33. De Rama & Musée Bolo - Trabajo propio, CC BY-SA 2.0 fr, https://commons.wikimedia.org/w/index.php?curid=36769003
- 8: Foto de la PDP-11 conectada a un Teletipo DECWriter, By U.S. Army Natick Soldier Systems Center - Digital Commonwealth, Public Domain, https://commons.wikimedia.org/w/index.php?curid=115500010
- [8-bis]: Foto del teletipo DECWriter, By User LPfi on the Swedish Wikipedia (on Commons: LPfi) - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=4580743
- 9: Foto del Video Terminal DEC VT220. By Tom Page - https://www.flickr.com/photos/tompagenet/34430050852/, CC BY-SA 2.0, https://commons.wikimedia.org/w/index.php?curid=98843032
- 10: Foto del terminal VT05. Terminals-wiki. License: Attribution-Share Alike 3.0 Unported. https://terminals-wiki.org/wiki/index.php/File:VT05.jpg
- 11: Foto del Tubo de Rayos catódicos de un monitor. By Catalogo collezioni (in it). Museoscienza.org. Museo nazionale della scienza e della tecnologia Leonardo da Vinci, Milano., CC BY-SA 4.0. https://commons.wikimedia.org/w/index.php?curid=48928866
- 14: Foto de un monitor LCD. By Karya sendiri, CC BY 3.0, https://id.wikipedia.org/w/index.php?curid=469034
- 15: Foto del Video Terminal DEC VT52. By Terminal-wiki - https://terminals-wiki.org/wiki/index.php/File:DEC_VT52_321524414402-1.jpg
- 16: Foto del Video Terminal DEC VT100. By Terminal-wiki - https://terminals-wiki.org/wiki/index.php/File:DEC_VT100_terminal.jpg
- 17: Foto del VT220. By Tycho talk - http://shansov.net - Trabajo propio, CC0, https://commons.wikimedia.org/w/index.php?curid=76456515
- 18: Foto del VT320, De I, Adamantios, CC BY-SA 3.0 - https://commons.wikimedia.org/w/index.php?curid=2432499
- 19: Foto del IBM PC/XT. De Ruben de Rijcke - http://dendmedia.com/vintage/ - Trabajo propio, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=3610862
- 20: Foto del Amstrad PC1512. De Amstrad_1512_DD.jpg: KoSderivative work: Ubcule (talk) - Amstrad_1512_DD.jpg, Dominio público, https://commons.wikimedia.org/w/index.php?curid=16670481
- 22: Pantallazo del programa de comunicaciones Telix. Museo de la informática - https://museodelainformatica.com/programas/telix.html
- 23: Pantallazo del programa de comunicaciones Procomm. Museo de la informática - https://museodelainformatica.com/programas/procomm.html
- 24: Dibujo de señal PSK: Dominio público, https://commons.wikimedia.org/w/index.php?curid=3661370
- 25: Foto frontal modem Hayes: By Aeroid - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=105059610
- 26: Foto de la trasera del modem Hayes: By Aeroid - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=105059617
- Terminales
- Códice
- Caligrafía
- La imprenta
- Sellos
- Máquina de escribir
- Cuaderno ténico 10 de FPGAs Libres: Entradas y pulsadores
- Teletipos
- Papel continuo
- Código ASCII
- [Teletipo AS-33](Cuaderno ténico 10 de FPGAs Libres: Entradas y pulsadores)
- PDP-8
- PDP-11
- Terminales DECwrite
- Empresa DEC
- Tubo de rayos catódicos
- Rasterización
- [Cuaderno Técnico 20: Pantallas de vídeo. Fundamentos. Display de 1x4 LEDs](Cuaderno ténico 10 de FPGAs Libres: Entradas y pulsadores)
- Pantallas de video. Fundamentos. Matriz de 4x4 LEDs
- VT05
- Wiki de terminales
- Manual de usuario del VT05
- VT52
- Manual de usuario del VT52
- VT100
- Manual de usario del VT100
- Secuencias ANSI. Estándar X3.41-1974
- Secuencias ANSI. Estándar x3.64-1977
- Ordenadores personales
- Terminal VT220
- Terminal VT320
- IBM PC/XT
- Ordenador Amstrad PC1512
- Programa Telix
- Programa procomm
- BBS
- Sysop
- Software de BBS
- WWIV
- Tutorial de Electrónica Digital para Makers: Capítulo 30: Puerto serie
- Norma RS-232
- Skycube 1.0: Cable de descarga FTDI
- Modem
- HAYES
- PDF del manual original del smartmodel Hayes
- Comandos AT
- Serial asynchronous automatic dialling and control
- [Sistemas empotrados](Serial asynchronous automatic dialling and control)
- Microcontrolador
- Máquina de control numérico
- G-CODES
- GCODES de las impresoras 3D del proyecto RepRap
- Tutorial de montaje de la Prusa 2
- Script communicator
- Minicom
- Tio
- Putty
- GNU Screen
- GTKTerm
- Picocom
- Tuicom
- Arduino terminal
- Icestudio
- Pyserial-miniterm
- Terminal emulado
- MS-DOS
- Acceso al emulador del IBM PX XT (Modelo 5160)
- Sistema operativo GNU/Linux
- Linus Torvalds
- Fundamentos de Sistemas Operativos: Una Aproximación Práctica Usando Linux
- Terminfo
- Página de manual de terminfo
- Comando tput
- Termios
- Termios para python
- Comando stty
- Historia de los Video terminales
- Manual Basic IBM PC (PDF)
