APPLICATIONSDIVERS ★ COPY DE PANTALLA POR IMPRESORA ★

RSX HobbycopApplications Divers
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Una de las cosas en las que el Amstrad no resiste la comparación con sus más inmediatos competidores, como el Spectrum, es la posibilidad de realizar en todo momento un volcado del contenido de la pantalla a la impresora, lo que se conoce como una copia de pantalla o HARDCOPY («copia dura» en inglés).

Así, al Spectrum, por ejemplo, basta darle la orden COPY y, si la impresora es la adecuada, ¡voila!, aparece la copia en papel de la pantalla. Obviamente, este problema clamaba por una solución a grandes voces, y nuestros colaboradores Robert y Christine lo han resuelto... para varios tipos de impresoras.

En el artículo que sigue todo el mundo podrá aprender cómo y por qué se realiza un hardcopy, bien sea en Basic o en lenguaje máquina, en este último caso creando nuevos comandos RSX.

Despues de varias semanas leyendo montañas de propaganda y contando con mucho cuidado las pesetas disponibles, la familia votó por comprar el ordenador Amstrad, modelo barato, casette y mar-cianitos en verde y todo. En desfile fuimos a unos grandes almacenes y media hora después llegamos a casa con nuestro tesoro. Ya habíamos preparado el lugar de honor en el cuarto de estar con nueva mesa y estantería lista para las cintas y los libros que íbamos a comprar.

Orgullosamente, empezamos a comparar nuestro Amstrad con otras máquinas —hicimos varias pruebas y encontramos que el aparato era muchísimo mejor en velocidad, en su pantalla, etc. que muchas máquinas con procesador de 16 bits, el IBM-PC incluso—. Así hemos hecho muchos enemigos, comprobando que nuestro Amstrad de precio de mer-cadillo era un gigante comparado con las máquinas suyas, hasta que hablamos con el propietario de un simple Spectrum de 28.000 ptas.

Con el Amstrad no se puede

—Bien -dijo él-, muy bonito. Pero no se puede imprimir la pantalla por impresora, como yo hago con mi Spectrum.

—No digas tonterías —le contestamos—, por supuesto que se puede.

—¡Inténtalo! —contestó, sonriendo. Regresamos a casa, hicimos un diseño precioso en la pantalla (el escudo de la Caja de Ahorros local), copiamos un programa de una revista y... no funcionaba.

Otra vez, molestamos a los amigos de Amstrad, preguntándoles cómo ellos pasan diseños a la impresora. O no lo habían intentado, o no funciona, con feas líneas verticales por doquier. ¡Qué vergüenza! Nuestro Amstrad, la créme de la créme del micro, vencido por un Spectrum. ¡Imposible! Entonces con hielo sobre la cabeza, nos pusimos a trabajar para intentar solucionar el problema.

¡Claro que se puede!

Primero ves si tienes impresora. Si no, no te preocupes. Nosotros tampoco. Teclea sólo el programa final, ése del código máquina y busca un amigo con impresora. Y regálale una copia del programa.

Con la impresora, ver el manual para MODO GRAFICO, que también se llama imagen de bits (bit image) porque un bit (cifra binaria en el número enviado a la impresora) sale como un punto (dot) en el papel. Este modo puede ser de dos tipos.

Lo más probable es el tipo de COMPATIBILIDAD EPSON. Habrá un diagrama mostrando bit 0 enviado al punto (dot) más bajo en el cabezal de impresión. (Eso de los bits es curioso —los ingenieros siempre cuentan desde 0 y lo que para mí es el octavo bit, para ellos es sólo bit 7. Tal vez así les sale más barato el IVA.)

Los programas que siguen, se han escrito para este tipo. Si, al contrario, bit 0 se muestra dirigido al punto (dot) más alto de impresión, este tipo vamos a llamar de SEIKOSHA, porque lo hemos probado en una SEIKOSHA GP550A. E| programa final tiene unos pokes adicionales que lo adopte a este tipo de impresora.

Si no está claro de qué clase es la impresora, aplica el método conocido entre los científicos de SIAS. Esto es «Suck it and see». Pruébalo y verás. Teclea los programas y si todo sale invertido y al revés, debe ser del otro tipo.

Aparte de la SEIKOSHA GP550A, hemos probado los programas en otros dos: INDESCOMP 80 y STAR GEMINI 10X, los dos del tipo EPSON. Todas son máquinas económicas de unos 100 cps de velocidad.

ADVERTENCIA: El uso de RUN antes de SAVE puede ser perjudicial para su salud mental. Si no tienes impresora conectada.

?#8, «Hola»

y —adiós. Tendrás que apagar todo el aparato. Entonces teclea el programa y grábalo ANTES de probarlo. Microhobby no quiere ser causa de suicidios en masa de las mejores mentes del país.

Probando, probando

Programa 1: PRUEBA. Este es de introducción. Los expertos en el asunto ya pueden saltar a programa 2, pero entonces les faltarán muchas líneas del presente programa que se usan allí. Cuando tecleas, no hace falta contar espacios: las indentaciones (p. ej. líneas 61020-61100) se usan para ayudar a comprender la estructura de los bucles y no necesitas seguirlas. Las observaciones (REMs) que siguen al apostrofe (') pueden reemplazarse con un par de asteriscos ('**). Las líneas DATA también son de este estilo: terminan con una etiqueta de postizo para indicar lo que los números representan. Puedes teclear más simplemente

64000 DATA 27, 64, 27, 177, **

respetando las comas.

Teclar y grabarlo con SAVE «prueba» en ca-sette o disco. Ahora encender la impresora y RUN. Si salen 6 líneas dobles, largas, horizontales, fantástico. Pero, si cuando yo lo hago, salen estas líneas parcialmente rotas por «gremlins» en la máquina, con unos pocos «H» y «,» esparcidos, bien. Estos gremlins saben Basic, pero no Código Máquina, y la versión final va a funcionar correctamente.

Si no hay nada de líneas dobles horizontales, en verdad falla algo. Comprobar el programa y leer la parte del manual de la impresora que trate de modo gráfico. Al menos, no vale la pena seguir tecleando más programa, hasta que esta parte, de prueba, funcione.

¿Cómo funciona el programa?

En el programa PRUEBA se ven cosas como «car7but» o «espacio 7 bit». Un carácter para la máquina es un número entre 0 y 255. Estos números consisten de ocho bits (cifras binarias). Si quieres ver los bits en acción, prueba lo siguiente:

for car = 115 to 135:? car; bin$ (car, 8): next car

y se nota que bit 7, el primero desde la izquierda, se alza (cambia deOa 1) entre 127 y 128. Hasta 255 se queda alzado.

La puerta Centronics (Printer) en el Amstrad corta la cabeza de cualquier carácter que pasa por ahí y entonces no llega a la impresora el octavo bit, sólo bits 0-6. Línea 64000 son los DATA para un espacio entre líneas que corresponde a siete «dots en el papel. Compruébalo y si hace falta cambia los DATA, enviando un carácter diferente. Teclea:

61070 car 7 bit=63

y RUN. Ahora (sin hacer caso de «gremlins» si los hay) se ve una fina línea blanca entre bloques de negro. Esta línea corresponde al bit 6 (64) siendo el único que no pone un punto en el papel.

61070 car 7 bit= 127

y las dos franjas de negro deben unirse justamente, pero sin solapar. Si piensas que el espacio hay que ajustarle, cambia los datos correspondientes en línea 64000.

Los datos terminan en un número al cual se ha añadido 128 como señal de fin de datos, por ejemplo, 177 = 49 + 128 y 49 dice el manual de la impresora es el código para espacio entre líneas de siete puntos (dots).

Los datos de línea 64010 son los códigos de control para enviar 100 caracteres gráficos a la vez.

La línea 64020 es la que más probablemente aprovecharás cambiando. Esta repone la impresora en el estado que normalmente uses. En el programa hay los códigos más sencillos de reiniciación. Puede ser que tu impresora no reconoce ESC@. Entonces cámbialos por otros códigos. Por lo menos, juega con esta línea y ver lo que los cambios hacen con RUN seguido por LIST 64000-64020, #8.

Estos mismos códigos de control pueden pokearse en el programa final en código máquina.

Hardcopy en Basic

No borres el programa de memoria. Vamos a aumentarlo para copiar la pantalla a papel, usando Basic.
Notarás que no necesitas teclear otra vez las líneas 63020-50 y 63240-final, porque son iguales que antes. Tampoco te molestes en borrar los bloques antiguos 60000 y 61000, que no se usan aquí.

Las impresoras de la otra clase (como la SEIKOSHA GP550A) tienen dos líneas diferentes, aparte aquéllas de los DATA del programa anterior. Son las dos siguientes:

63150 car 7 bit=64* ((TESTR(—6,2)=0)-f-1) punto aquí? —devuelve 64 63170 car 7 bit=64* ((TESTR (l/0)=0)+ /j + car 7 bit/2

cuyo efecto es copiar el grupo de siete puntos de la pantalla en orden inverso. La multiplicación *2 ha sido reemplazado por división 12, que en el programa de código máquina será RL- rotación hacia la izquierda, reemplazado por RR- rotación hacia la derecha.

Grabar el programa con SAVE «copión, bas». Coge unos cinco pliegues de papel continuo usado, que estabas a punto de tirar, porque lo que saldrá probablemente será un desastre. Cuando lo hice en una INDESCOMP 80 y STAR GEMINI, salieron beeps, alimentación de hoja y todo. Pero también...

Enciende la impresora, RUN y cuando el dibujo está acabado pulsa la tecla «C». Y a comer, toma un café o algo. Porque el pobre Basic tarda. Para mí, el tiempo mostrado en la pantalla al final era de 21 min y 20 seg.

Lo que hace el programa es procesar los 640x2000 pixels de la pantalla en bloques de siete, preguntando a través de la función TESTR si están encendidos o no y pasar la información a la impresora en forma de bits —un bit por pixel —para imprimir los puntos en papel. (Cada bloque se repite su impresión para tener una copia 640x400).

Pero, 640 x 200 veces en Basic puede ser demasiado. Se diseñó Basic para ser interactiva, no repetitiva. Ahora vamos a ver el programa en código máquina, pero la lógica será igual a lo que acabamos de ver.

Lenguaje máquina: el plato fuerte

Esta vez teclea NEW. Hay una comprobación en el programa que los datos numéricos han sido entrados correctamente. Un error se señala con el mensaje «Error en xxx» y las líneas de DATA se alistarán. Teclea en MODE 2: el formato es de 64 caracteres por línea, para ajustarse a la norma de la revista y si saltas un dato, será claro a simple vista.

Una vez terminado, grabarlo con SAYE «hobbycop».

Características

Nuevos comandos Basic:

|COPY ( , tinto)
|COPYLAT ( , tinta)

  • Copia de la pantalla de un solo color enviado a impresora con modo gráfico (bit image)-
  • Si no se especifica el parámetro opcional, INK 0 en la pantalla saldrá de papel blanco y los demás INKs saldrán negro.
  • Con el parámetro, el fondo de papel sin imprimir corresponderá al INK «tinta», y los demás (INK 0 incluido) saldrán negro.
  • Comprobado en las impresoras SEIKOSHA GP550A, INDESCOMP 80, y STAR GEMINI 10X.
  • |COPY en mode-0/mode-1 da una imagen de 320x200 puntos (80 seg) en mode-2 da una imagen de doble densidad de 640x200 (tardando 150 seg).
  • |COPYLAT en cualquier mode da 640x400 puntos, copia lateral (5 min y 20 seg). ,
  • Al terminar la copia la impresora está reiniciada para la impresión de texto normal.
  • La tecla de «break» ESC-ESC está reconocida, parando de emergencia la copia. En este caso la impresora necesita ser apagada para su reiniciación.
  • Compatible con toda la familia de CPC464 (472, 664, 6128% por reubicarse dinámica y automáticamente en memoria.
  • Longitud después de reubicación, 443 bytes.
La barra vertical | que hay en el bloque de líneas 3000 se encuentra encima del signo @ en el teclado. Se usa para dar acceso a nuevos comandos en Basic, en este caso comandos que residen en la misma memoria llamados RSX (extensiones residentes).

Teclea MODE 1. Enciende la impresora. RUN. Debe verse en la pantalla la información contenida en las líneas 3010-3070. Teclea simplemente.

|copy

y (ENTER) claro, y sale una copia de la pantalla en el papel.

|copy, 1

y debe salir ahora con blanco y negro invertido. (Esta forma del comando significa: elegir INK 1 como fondo de papel blanco, e imprime todas las demás tintas).

Comienza una nueva hoja en la impresora, y

|copylat

y sale una copia lateral de la pantalla, tamaño grande.

Los dos nuevos comandos se quedan en la memoria, hasta que apagues la máquina. Carga otra vez el programa COPION.BAS con

LOAD « copión.bas »

El programa cargador HOBBYCOP se ha borrado, claro, pero su efecto queda. Tecleas:

63005 |COPY: RETURN

y RUN. Cuando termina el dibujo en la pantalla, pulsa la tecla « C » (de copiar) y sale la copia al papel. Inténtalo otra vez, pero ahora en lugpr de « C », pulsa ESC/ESC para «break», y saldrá el mismo dibujo, pero en otra forma. Tecleas:

63005 |COPYAT: RETURN

y RUN para una copia grande.

La pantalla en MODE 1 tiene 320x200 pixels. En MODE 2, 640x200 pixels. Entonces |COPY hace una copia en doble densidad automáticamente, si la pantalla está en MODE 2, con cada pixel un punto en el papel. Pero, es posible que la impresora que uses no tenga doble densidad de impresión en modo gráfico. En tal caso, adapta el programa HOBBYCOP con el siguiente poke de cortocircuito.

2200 'JR C, COPION cambiado a JR COPION en la dirección poke1.
2210 poke1 =&122.
2220 POKE (h+ 1) + poke1, &18.

En una aplicación como el Pascal de Hisoft, uno tiene que reiniciar cualquier RSX al principio de cada programa. La llamada necesaria, user(rsx), se da en la pantalla al final de HOBBYCOP.

Código fuente del programa HOBBYCOP

El listado del programa fuente en Ensamblador se ha escrito en forma autodocumentada. Etiquetas en mayúsculas representan nudos de la estructura del programa. En minúsculas se usan sólo para reubicación o para pokes desde Basic.

Personalizar HOBBYCOP

Para acomodar el programa a tu propia impresora y gustos, cárgalo con LOAD «hobbycop» y añadir líneas de la misma forma que cambiamos el programa para máquinas estilo SEIKOSHA. Por ejemplo, me gusta reiniciar la impresora INDESCOMP 80 a letras pequeñitas y juego ASCII. Entonces pongo los códigos de control para decir adiós gráficos (byeb-ye) en la manera siguiente:

2350'
2360 ' codigos de ctrel - pokes.
2370 '
2380 e$=CHR$ (27) 'ESC.
2390 spacng = &65 'espacio entre lineas para 7 dots.
2400 grafic = &6D '100 caracteres graficos densidad normal.
2410 grafc1 =&75 '320 caracteres graficos densidad normal.
2420 grafc2 = &7D '320 caracteres graficos densidad normal.
2430 byebye=&85 'adios graficos reinicio impresion de texto.
2520 control$ = CHR$ (10) + e$ + "R" + CHR$ (0)+CHR$ (15) + e$ + "3"+CHR$ (16)
2530 direc = byebye: GOSUB 2900
2899 RETURN.
2900 'pokear control$
2910 direc = direc + h.
2920 FOR q = 1 TO LEN (control$)-1
2930 POKE direc+q, ASC (MID$ (control$, q, 1))
2940 NEXT q
2950 POKE direc + q, ASC (MID$ (control$, q, 1)) + &80 'terminator.

Ahora RUN. Y despues de usar lCOPY, me deja la impresora otra vez con la forma de letra que me gusta. Las direcciones de los cinco bloques de codigos de control se encuentran en lineas 2390-2430. Hay sitio para hasta ocho codigos en cada bloque.

Para usar HOBBYCOP en programas propios, hay que anadir:

3085 RUN « ¡nombre.de.tu.programa »

a HOBBYCOP. Entonces graba HOBBYCOP en frente de tu programa, el cual ahora puede usar |COPY y |COPYLAT sin haber perdido mas de 443 bytes de memoria.

No olvides que las copias son monocromaticas. Si tienes muchos colores en la pantalla, solo uno puede salir en blanco y los demas en negro. Tal vez puedes usar algo como la tecnica de procesar la pantalla a solo dos colores que se ha visto en el ejemplo grafico de COPION.BAS. «What you see is what you get» es el dicho ingles. Es mejor ver en la pantalla exactamente lo que va a salir en el papel.

Quiero dar gracias a mis amigos Paco y Juan de Portalo aqui en Badajoz, colaboradores de MICROHOBBY Semanal, para el uso de su impresora Star Gemini. Paco es uno de los dos Paco pacenses inmortales por su exito «BUGABOO» -la pulga. De el aprendi es-te metodo tan hermoso de automodificacion en codigo maquina, donde el programa se escribe a si mismo. Las etiquetas AUTOA y AUTOC en el programa Ensamblador sena-lan a tales autoamodificaciones, sin las cua-les el programa habrfa sido algo como 30 por 100 mas largo. Y gracias, tambien, a mi amigo Angel Hernandez del lnstituto Reino Aftasien Badajoz, no solo por el uso de la Indescomp 80 y la Seikosha GP550A, sino tambien por su bonito programa de geografia vista desde el espacio, que he usado en preparar ejemplos para este articulo.

AMSTRAD SEMANAL n°27

★ PUBLISHERS: HOBBY PRESS, AMSTRAD SEMANAL
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1986
★ AUTHORS: Robert Chatwin , Christine Chatwin
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Hobbycop    (Amstrad  Semanal)    SPANISHDATE: 2024-05-15
DL: 110
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 tracks
.DSK: √

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Hardcopy-Programm (Computer Technik)
» Applications » Din A4 - Hardcopy Fuer Nlq 401 (CPC Amstrad International)
» Applications » RSX Printscreen Hardcopy (Computer Schau)
» Applications » Hardcopy et Fenetre
» Applications » Farbhardcopy für OKI 20 (CPC Amstrad International)
» Applications » GPaint Hard Copy (Amstrad Action)
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 387 millisecondes et consultée 427 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.