Impresora
El simulador cuenta con una impresora con un puerto paralelo tipo Centronics. Esta cuenta con papel y un buffer.
Esta impresora recibe un carácter por vez, y lo imprime en el papel. Como la impresora es lenta, el carácter no se imprime inmediatamente, sino que se almacena en un buffer interno. Cuando la impresora termina de imprimir un carácter, imprime el siguiente, y así sucesivamente hasta que el buffer se vacíe.
El tiempo que tarda la impresora en imprimir un carácter es configurable.
Si el buffer se encuentra lleno y aún así se envía un carácter, este se pierde. Para evitar eso, la impresora provee el flag busy: cuando es 1
, el buffer está lleno.
Cada vez que se envía un carácter, si el buffer no está lleno, el flag busy se pone en 1
. Luego, si el buffer se llenó, este quedará en 1
hasta que se imprima algún carácter. De lo contrario, ni bien se agrege el carácter al buffer, el flag busy volverá a 0
.
Imprimir con PIO
Una opción es conectar la impresora al PIO. La conexión queda así:
PA = ____ __SB
PB = DDDD DDDD
En PB
se almacenará carácter a imprimir, expresado en ASCII. En PA
, los seis bits más significativos no hacen nada. El bit menos significativo es la flag busy. Y el que queda es el strobe.
El strobe es el bit que le indica a la impresora que queremos imprimir. Las impresoras Centronics toman el valor en PB
cuando detectan un flanco ascendente en el strobe. Es decir, una transición de S=0
a S=1
.
En resumen, para imprimir un carácter, hay que
- verificar que el buffer no esté lleno (flag busy),
- escribir el carácter en
PB
, - poner el strobe en 0,
- poner el strobe en 1.
Imprimir con Handshake
A diferencia del PIO, el Handshake es un módulo diseñado específicamente para las impresoras Centronics.
Con el Handshake no hay que preocuparse por el strobe, ya que este automatiza el flanco ascendente. Así, para imprimir basta con
- verificar que el buffer no esté lleno (flag busy),
- escribir el carácter en el registro de datos.
Más información sobre el Handshake y sus funcionalidades aquí.
Caracteres especiales
Además de los caracteres ASCII comunes, hay otros dos que pueden resultar útiles:
- el carácter de salto de línea (
LF
, 10 en decimal) imprime, en efecto, un salto de línea — útil para no imprimir todo en una sola línea; - el carácter de form feed (
FF
, 12 en decimal) limpia la impresora (dicho de otra forma, arranca la hoja).