viernes, 28 de junio de 2024

Commodore 64C: Impresora MPS-801

La impresora Commodore MPS-801 es una impresora monocromo y matricial creada en el año 1984 para ordenadores Commodore. Utiliza papel continuo, se conecta al ordenador mediante el puerto serie, imprime 80 caracteres por línea mediante una matriz de 6x7 puntos y no permite imprimir astas ascendentes o descendentes. Fue diseñada y fabricada por la empresa Seikosha. Las siglas MPS significan Matrix Printer System.

Si abrimos la tapa de la impresora podremos ver las partes de la mecánica de la impresora con las que tiene que interactuar el usuario. En la parte de arriba se encuentra el tractor de papel que hace avanzar el papel después de imprimir una línea. La impresora utiliza papel continuo. En este tipo de papel todas las hojas están unidas y en los laterales hay tiras con agujeros que utiliza la impresora para tirar del papel y hacerlo avanzar.


En cada uno de los lados del tractor hay una rueda con pivotes donde se enganchan las tiras laterales con agujeros del papel. Las ruedas tienen una tapa que hay que levantar para colocar el papel y volver a cerrar para sujetar el papel. El papel se introduce por la parte de atrás, sale por delante y se coloca sobre el tractor. Cuando se termina la impresión se pueden arrancar las tiras laterales y separar las hojas.




En el lado derecho de la impresora hay un mando para hacer girar el tractor de papel manualmente. En el lado izquierdo de la impresora, junto al indicador de encendido, hay un botón con el texto "Paper Advance" para avanzar el papel una línea.


En la parte de abajo hay un carro que se desplaza horizontalmente sobre dos barras, accionado por una correa dentada. Encima del carro va atornillado el cabezal de impresión. Se puede atornillar un poco más adelante o atrás para que imprima correctamente. La impresión solo se realiza de izquierda a derecha y carácter a carácter. Cuando el carro llega al final de la línea vuelve al principio para imprimir otra línea. El carro está enganchado a una banda enrollada que tira de él para que vuelva al principio más rápido. El cabezal de impresión se conecta a la placa electrónica de la impresora mediante un cable plano y flexible. Sobre el carro también hay una pieza de plástico donde se acopla el cartucho de la cinta de tinta.



La cinta de tinta se coloca entre el cabezal y el papel. El cartucho tiene un eje que hace avanzar la cinta hacia la derecha. Por la parte de arriba hay un mando para hacer girar el eje manualmente y tensar la cinta. Por abajo tiene una hendidura con forma de cruz que encaja en la cabeza de un eje del carro. Cuando el carro se desplaza hacia la derecha hace girar el eje, provocando que avance la cinta a la vez que avanza el carro.


A la izquierda del carro hay una palanca para ajustar la presión del cabezal de impresión sobre el papel. Esto permite que se imprima más oscuro o más claro. Una vez colocados el papel y el cartucho de la cinta de tinta se puede cerrar la tapa.


En la parte de atrás se encuentran dos conectores DIN-6. Uno se utiliza para conectar la impresora al puerto serie del ordenador y el otro para conectar otro dispositivo al ordenador, a través de la impresora, mediante "daisy chain". A la derecha de los conectores hay una palanca para seleccionar el número de dispositivo o ejecutar el test de impresión.



En el lado izquierdo se encuentra el interruptor de apagado/encendido. La impresora se conecta a la red eléctrica mediante un cable. En la parte de abajo tiene una etiqueta donde se indica el modelo y las características de la corriente eléctrica que necesita.



Para imprimir en la impresora desde BASIC primero se debe abrir una conexión con la impresora utilizando el comando OPEN. El primer parámetro es el número de archivo y el segundo el número de dispositivo. Este número debe ser igual al seleccionado con la palanca de la parte de atrás de la impresora. El tercer parámetro toma los valores 0 o 7 y sirve para utilizar el modo mayúsculas/gráficos o minúsculas/mayúsculas. Por defecto se usa el modo mayúsculas/gráficos. Al terminar de imprimir se debe cerrar la conexión con el comando CLOSE.

Podemos imprimir cualquier carácter permitido por el ordenador y algunos caracteres de control. Con el carácter de control 10 avanzamos una línea. Con el carácter 14 se entra en el modo de caracteres de doble tamaño. Esto es útil para imprimir un título a la página. Con el carácter 15 se vuelve al modo de caracteres de tamaño normal. El carácter de control 16 sirve para añadir espacios en blanco y crear márgenes o columnas tabuladas. A continuación del carácter se escribe el número de espacios.

30 T$="IMPRESORA COMMODORE MPS-801"

120 OPEN 1,4
130 PRINT# 1,CHR$(10)CHR$(14)
140 PRINT# 1,CHR$(16)"12"T$
150 PRINT# 1,CHR$(16)"12";: FOR Y=1 TO LEN(T$): PRINT# 1,CHR$(99);: NEXT Y
160 PRINT# 1,CHR$(15)

200 CLOSE 1

También es posible crear nuestros propios caracteres o gráficos. Cada carácter se compone de una matriz de 6x7 puntos, por eso la impresora es matricial. Con esa matriz de puntos podemos crear caracteres o gráficos. Cada punto es representado por un bit y se agrupan en columnas de 7 puntos / 7 bits. En un editor de texto podemos dibujar el carácter o gráfico utilizando algún símbolo como por ejemplo la almohadilla (#).

Para utilizar los caracteres en BASIC necesitamos convertir el valor de las columnas de 7 bits a decimal y sumarle 128. Para ello podemos indicar en cada línea la potencia de dos de los bits. Si sumamos las potencias de dos de los bits activados tendremos el valor decimal de la columna de bits. Por último sumamos 128 y ya tenemos el número que espera la impresora. Si creamos un carácter la última columna debe estar vacía para dejar espacio con el siguiente carácter. A continuación se muestra la creación del carácter "Ñ".

1    #####
2    
4    #   #  
8    ##  #
16   # # #
32   #  ##
64   #   #

1 + 4 + 8 + 16 + 32 + 64 + 128 = 253
1 + 8 + 128 = 137
1 + 16 + 128 = 145
1 + 32 + 128 = 161
1 + 4 + 8 + 16 + 32 + 64 + 128 = 253
+ 128 = 128

253 137 145 161 253 128

Los números decimales los debemos añadir a una cadena de texto utilizando el comando CHR$. Para imprimir el carácter hay que entrar en el modo gráfico con el carácter de control 8. Una vez que terminemos de escribir nuestros caracteres podemos volver al modo normal con el carácter de control 15. Si vamos a utilizar el carácter individualmente con caracteres normales podemos incluir en una misma variable el carácter y los caracteres de control de entrada y salida del modo gráfico.

10 N$=CHR$(253)+CHR$(137)+CHR$(145)+CHR$(161)+CHR$(253)+CHR$(128)
20 N$=CHR$(8)+N$+CHR$(15)

Para escribir un texto podemos utilizar un array de cadenas de texto pero hay un problema. La impresora puede imprimir 80 caracteres por línea. La longitud máxima de una línea de código en el interprete de BASIC es también de 80 caracteres. Esto hace que en una sola línea de código no sea posible asignar a una variable una cadena de 80 caracteres. Entre el nombre de la variable y la cadena de texto se sobrepasan los 80 caracteres que puede tener la línea de código. Para solucionar este problema se puede compilar el programa con MOSpeed, que no tiene la limitación de 80 caracteres por línea de código.

40 X=5
50 DIM P$(X)
60 P$(0)="LA IMPRESORA COMMODORE MPS-801 ES UNA IMPRESORA MONOCROMO Y MATRICIAL"
70 P$(1)="CREADA EN EL A"+N$+"O 1984 PARA ORDENADORES COMMODORE. UTILIZA PAPEL"
80 P$(2)="CONTINUO, SE CONECTA AL ORDENADOR MEDIANTE EL PUERTO SERIE, IMPRIME 80"
90 P$(3)="CARACTERES POR LINEA MEDIANTE UNA MATRIZ DE 6X7 PUNTOS Y NO PERMITE" 
100 P$(4)="IMPRIMIR ASTAS ASCENDENTES O DESCENDENTES. FUE DISE"+N$+"ADA Y FABRICADA POR"
110 P$(5)="LA EMPRESA SEIKOSHA. LAS SIGLAS MPS SIGNIFICAN MATRIX PRINTER SYSTEM."

170 FOR Z=0 TO X
180 PRINT# 1,CHR$(16)"04"P$(Z)
190 NEXT Z
java -cp basicv2.jar com.sixtyfour.cbmnative.shell.MoSpeedCL commodore-mps-801-printer-may-gra.bas -tolower=true -deadstoreopt=false -target=commodore-mps-801-printer-may-gra.prg

La impresora no funciona, creo que falla el cabezal de impresión. Así que para ejecutar el programa he usado el emulador VICE, configurándolo para imprimir a una imagen. Si ampliamos la imagen se puede ver la matriz de puntos que compone cada carácter. Como la impresora no permite imprimir astas ascendentes, el carácter "Ñ" solo se puede crear con la misma altura que el resto de caracteres. Lo ideal sería que fuera igual al carácter "N" con la virgulilla sobresaliendo por encima.


Si al abrir la conexión utilizamos como tercer parámetro el número 7, la impresora funcionará en modo minúsculas/mayúsculas. Como el carácter "n" solo tiene una altura de 5 puntos es posible crear una "ñ" de la misma altura que la "n" y la virgulilla sobresaliendo por encima. Pero como la impresora no permite astas descendentes, los caracteres que la tienen como "g", "p" o "y" se imprimirán más arriba de lo normal. Por ejemplo la "p" minúscula no se distingue de la "P" mayúscula.

1    #####
2    
4    # ##    
8    ##  #
16   #   #
32   #   #
64   #   #   

1 + 4 + 8 + 16 + 32 + 64 + 128 = 253
1 + 8 + 128 = 137
1 + 4 + 128 = 133
1 + 4 + 128 = 133
1 + 8 + 16 +32 + 64 + 128 = 249
+ 128 = 128

253 137 133 133 249 128

El carácter 99, utilizado para el subrayado del título, es necesario cambiarlo por otro porque en el modo minúsculas/mayúsculas es el carácter "C". Si compilamos el programa con MoSpeed el código debe estar en minúsculas y no se debe utilizar el parámetro tolower con el valor true.

10 n$=chr$(253)+chr$(137)+chr$(133)+chr$(133)+chr$(249)+chr$(128)
20 n$=chr$(8)+n$+chr$(15)
30 t$="Impresora Commodore MPS-801"
40 x=5
50 dim p$(x)
60 p$(0)="La impresora Commodore MPS-801 es una impresora monocromo y matricial"
70 p$(1)="creada en el a"+n$+"o 1984 para ordenadores Commodore. Utiliza papel"
80 p$(2)="continuo, se conecta al ordenador mediante el puerto serie, imprime 80"
90 p$(3)="caracteres por linea mediante una matriz de 6x7 puntos y no permite" 
100 p$(4)="imprimir astas ascendentes o descendentes. Fue dise"+n$+"ada y fabricada por"
110 p$(5)="la empresa Seikosha. Las siglas MPS significan Matrix Printer System."
120 open 1,4,7
130 print# 1,chr$(10)chr$(14)
140 print# 1,chr$(16)"12"t$
150 print# 1,chr$(16)"12";: for y=1 to len(t$): print# 1,chr$(183);: next y
160 print# 1,chr$(15)
170 for z=0 to x
180 print# 1,chr$(16)"04"p$(z)
190 next z
200 close 1
java -cp basicv2.jar com.sixtyfour.cbmnative.shell.MoSpeedCL commodore-mps-801-printer-min-may.bas -deadstoreopt=false -target=commodore-mps-801-printer-min-may.prg

Esto es lo básico que hay que saber a nivel de usuario para utilizar la impresora. En el manual de la impresora se puede ampliar información. Por ejemplo podremos ver más caracteres de control. En el siguiente artículo analizo la electrónica y la mecánica.

No hay comentarios:

Publicar un comentario