APPLICATIONSDIVERS ★ BUFFER-64 (AMSTRAD SEMANAL) ★

Buffer-64 (Amstrad Semanal)Applications 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 ★ 

El segundo banco de memoria del 6128 es posiblemente el gran olvidado por usuarios y programadores. El difícil manejo de estas 64 K extras, asusta e intimida al programador que no se encuentre muy familiarizado con las técnicas de paginación de memoria, sólo accesibles desde Código Máquina.

Nosotros, por nuestra parte, ofrecemos hoy una utilidad que no dudamos es altamente sugerente para usuarios y programadores: un buffer de impresora que aumentará la velocidad de impresión hasta ocho veces.

La rutina que presentamos en esta ocasión es capaz de hacer trabajar a la vez [a impresora y el ordenador sin necesidad de largas esperas entre los listados.

Cuando se utiliza la impresora para listados, resultados o textos, el ordenador siempre se bloquea durante un tiempo que depende de la longitud de los datos a enviar. En los listados un poco largos, el tiempo de espera puede llegar a ser «eterno». Para que este tiempo se reduzca considerablemente, hemos creado la siguiente rutina. De esta forma no hay que esperar a que se acabe un listado para poder seguir trabajando con el ordenador en otra tarea.

Dicha rutina crea un buffer que se encarga de manejar la salida del ordenador hacia la impresora, reduciendo el tiempo de espera y pudiendo contener hasta 65.537 caracteres en el segundo banco de 64 K del CPC 6128.

La espera depende del número de caracteres que mandemos a la impresora. Así, por ejemplo, un listado de 25 K tarda tan sólo 33 segundos en darnos el Ready, mientras que si no existiese el buffer y con una impresora de 100 cps, el tiempo sería superior a los 4 minutos. Esta gran diferencia hace que la utilización del buffer sea muy interesante.

El programa es compatible con cualquier impresora y se pueden utilizar tantos programas escritos en Basic como algunos escritos en binario, por ejemplo Amsword, Gena-Mona, Tascopy, Masterfile, Mastercalc, etc.

El manejo es muy sencillo y se reduce a utilizar normalmente los comandos Basic destinados a la impresora como pueden ser List #8, Print #8, Write #8, Width, etc., o bien las opciones de los distintos programas referidas a la impresora.

Al utilizar alguna de estas órdenes o los programas que usen la impresora, los datos que se envían a ésta se van almacenando en el buffer a razón de unos 800 a 1.000 cps. A su vez, la rutina los manda a la impresora, cuando ésta admita más datos, comprobando siempre que está en línea. De esta forma no se pierde ningún dato. El buffer se seguirá vaciando hasta haberlos mandado todos. En cualquier momento podemos enviar más caracteres al buffer, con la sola limitación de llenarlo, algo bastante difícil, si tenemos en cuenta que son 64 K.

Además, incluye una secuencia de control para detener la impresora cuando detecte los caracteres &FF y &FE, como si hubiéramos llegado a un final de página. La forma de conseguirlo es incluyendo en el programa la siguiente línea:

PRINT #8,CHR$(&FF)CHR$(&FE);

Es importante no olvidar el punto y coma final. Los dos caracteres &FF y &FE actúan como códigos de control para el buffer; es decir, no salen en la copia de papel. Cuando la rutina encuentra estos dos caracteres cancela temporalmente el envío de datos a la impresora. Además cambia el color del borde de la pantalla (rojo con franjas azules) y espera a que se pulse la tecla Control para continuar con la impresión en el mismo punto donde la había dejado. Mientras tanto, debemos haber cambiado el papel de la impresora y haberla puesta en línea. Cuando la rutina espera que se pulse Control, el ordenador no puede ejecutar ninguna otra tarea. Por ejemplo si tecleamos el siguiente programa

10 FOR i = 1 TO 20 :PRINT #8, “Ejemplo del buffer” :NEXT
20 PRINT #8,CHR$(&FF)CHR$(&FE);
30 J=J + 1:IF J = 2 THEN END ELSE GOTO 10

y lo ejecutamos, teniendo conectada la impresora veremos que, después de imprimir «Ejemplo del buffer» 20 veces, el buffer lee los dos códigos de control de la línea 20, por lo que la impresora se detiene y el color del borde de la pantalla cambia. Ahora colocamos el papel, ponemos la impresora en línea y pulsamos Control. En ese momento el borde de la pantalla vuelve a su
color inicial y seguirá imprimiento hasta completar otras veinte veces el mensaje del ejemplo.

Para una mayor facilidad en el manejo del buffer hemos incluido los siguientes comandos RSX:

  • |BUFF,@r %: La variable r% nos informa del número de caracteres que contiene el buffer. Por la forma de tratar el Amstrad los números enteros, los mayores a 32.767 los considera negativos. Así, la forma correcta de utilizar este comando sería:

    r% = 0 :|buff,@r% :PRINT
    (r%-65536 x (r% < 0))

    de esta manera se obtiene un número positivo entre 0 y 65.536.
  • |DES: Cancela el envío de datos a la impresora. Los que ya contiene el buffer se guardan por si se quiere reanudar nuevamente la impresión, mediante el comando |ACT. Es útil para cambiar el papel, detener un listado, etc.
  • |ACT: Se utiliza para reanudar la impresión, después de haber utilizado el comando IDES. Si no se ha utilizado anteriormente |DES o no hay caracteres en el buffer no produce ningún efecto.
  • |RES: Reinicializa completamente el buffer, borra todos los caracteres que en él hubiera, cancela el envío de datos a la impresora y modifica la llamada de la impresora, con lo que la salida hacia ella ya no pasa por el buffer. Esta orden equivale a trabajar con la impresora, como si no se hubiese cargado el programa.
  • |INB: Sirve para reinicializar el buffer, después de una orden |RES, modifica la llamada de impresora para que pase a través del buffer y crea el efecto contrario a |RES. Además borra todos los caracteres que hubiese en el buffer en ese momento.

Para cargar el programa,hay que copiar el cargador Basic y ejecutarlo. Si no aparece ningún error se procede a su grabación en binario de la forma siguiente:

SAVE“BUFFER”,B,&A000,000,692

Una vez salvado en disco o cinta, se ejecuta escribiendo el siguiente programa cargador del binario:

10 H = HIMEM-692:SYMBOL AFTER 256:MEMORY H-1
20 LOAD“BUFFER.BIN”,H:CALL H

Cuando el programa se haya ejecutado, tendremos disponibles los nuevos comandos RSX y el buffer listo para ponerse a funcionar. El valor de H no puede ser inferior a 32.767.
Cargue el programa cargador del binario en memoria y ejecútelo. Cargue algún otro programa en memoria y a continuación ejecute una orden. LIST #8
Si la impresora está conectada, se pondrá a funcionar. Dependiendo de la longitud del listado obtendremos el Ready, pero aun así la impresora seguirá funcionando hasta completar todo el listado. Si desea detener el listado momentáneamente, ejecute una orden |DES.
Para que continúe imprimiendo no hay más que ejecutar un lACT. En cualquier momento puede conocer el número de caracteres que contiene el buffer con sólo teclear:
r%=0:|BUFF,@%: PRINT (r%—65536*(r% < 0);Si no quiere seguir utilizando el buffer teclee |RES y comprobará que vuelve a funcionar de manera normal. Es decir, un poco lento. Ahora el buffer está vacío.
La rutina es compatible con la mayoría de los procesadores de texto como por ejemplo el Amsword. Cargue y ejecute primero el cargador binario y después el procesador de textos. En el caso del Amsword II, para poder utilizar la opción de papel suelto, hay que cambiar la línea 1410, que dice:

1410 CLS: PRINT "coloca el papel - después pulsa una tecla": GOSUB 24700

por la siguiente:

141000 PRINT #8,CHR$(&FF)CHR$(&FE);

de esta forma la impresora se parará, esperando la colocación de nuevo papel para seguir imprimiendo.

La rutina, según se puede apreciar en el listado ensamblador, empieza con la zona de relocalización hasta la línea 1090. La primera parte crea los comandos RSX. Después empieza la rutina encargada de conocer el número de caracteres para el comando |BUFF. Ahora nos encontramos con la rutina EMPI, que activa la interrupción para permitir el envío de datos a la impresora y reinicializar los parámetros que necesita el buffer para funcionar. Después tenemos una rutina, llamada RUT, que se encarga de leer los datos que se envían a la impresora y guardalos en el segundo banco, comprobando que el buffer no esté lleno. Por último, nos encontramos con la rutina a la que saltará el ordenador cuando se produzca la interrupción, comprobando si la impresora está en línea, para enviar un carácter, si no lo está retornará.

AS

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: 128K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTHOR: Juan Carlos Plaza
 



★ AMSTRAD CPC ★ DOWNLOAD ★
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» 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.74-desktop/c
Page créée en 251 millisecondes et consultée 71 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.