Lightning

Marcos Cruz
Madrid, noviembre 1988

PROGRAMA: LIGHTNING

AUTOR: STEVE SUTTON

EDITORIAL: DIGITAL PRECISION

PRECIO: 29.95 libras +5% de gastos de envío

Supongo que seréis pocos los que no hayáis oído hablar del Lightning, y menos los que no hayáis leído los comentarios al respecto en el QL World. Por si acaso, baste decir que se trata de un programa que sirve para acelerar la salida por pantalla del QL, y algo más que luego veremos, interceptando las llamadas a las rutinas correspondientes de la ROM y ejecutando en su lugar las suyas propias. Lo importante es que dicho proceso se realiza de forma transparente, es decir, que el usuario no se da cuenta de ello.

Respecto a la velocidad general del QL, hay que decir que a pesar -y en algún aspecto debido a ello- del microprocesador 68008, la máquina es lenta, comparándola con otras basadas en el 68000. Pero la razón principal de la lentitud es sin lugar a dudas el contenido de la ROM. De todos es conocida la velocidad a que fue implementado y escrito el sistema operativo y la cantidad de especificaciones que, habiendo sido anunciadas por Sinclair, se tuvieron que desechar a última hora por problemas de espacio. Ese es el problema principal: los escasísimos 48 Kbytes que debían contener el QDOS y el SuperBASIC. Tal vez hubiera sido más práctico el dedicar todo el espacio para el QDOS y proporcionar el SuperBASIC en microdrive, en cuyo caso nos hubiera quedado menos espacio para programas en SuperBASIC (lo cual no es un gran problema) pero dispondríamos de un QDOS con todas las facilidades del Toolkit II, por ejemplo, y mucho más rápido. Pero el caso es que a la hora de escribir el contenido de la ROM, los programadores tuvieron que hacerlo lo más compacto posible, sacrificando por ello la velocidad.

Esta oposición constante que se da al programar en código máquina (y en realidad en cualquier lenguaje, aunque tal vez en código máquina se aprecia mejor) entre espacio ocupado y velocidad de ejecución, se manifiesta mejor en lo relativo a las rutinas de impresión en pantalla.

El QL permite, en cuanto a impresión de textos se refiere, una enorme flexibilidad en tamaños y colores. La consecuencia de esto es que hay tamaños de letras y combinaciones de colores que son más sencillas de tratar (y por tanto más rápidas). Pero la pega es que el QDOS no distingue esos casos, sino que emplea el mismo código para imprimir cualquier tipo de texto.

Bueno, pasamos a comentar el Lightning. El programa lo recibí en disco de 3.5 pulgadas y 1440 sectores, como lo había pedido, junto con un manual de 20 hojas azuladas.

La instalación del programa es muy sencilla, y en cuanto se leen las primeras páginas del manual se puede hacer sin problemas. Conviene antes de nada sacar una copia del contenido del disco y trabajar con ella.

Lo que el disco contiene es un programa en BASIC que se encarga de instalarnos en otro disco cualquiera el Lightning, según nosotros vayamos seleccionando qué partes del mismo queremos instalar. Lo que hace este programa configurador es crear un fichero BOOT en el disco nuevo, que contenga las instrucciones de carga LBYTES de los ficheros del Lightning que hayamos elegido y las llamadas CALL al inicio de los mismos, con el fin de instalarlos.

¿Qué ficheros contiene el Lightning? En primer lugar, el programa configurador en BASIC. Después los ficheros de código correspondientes a cada tipo de "aceleración", así como los programillas BASIC para instalarlos aquellos individualmente. Por último, tenemos alrededor de ¡40 juegos de caracteres nuevos! y un fichero especial para el caso de correr el programa en un ATARI ST con QL EMULATOR.

¿Qué puede acelerar Lightning? Cada aspecto del QDOS que puede ser acelerado por Lightning tiene un fichero propio que se carga e instala con el correspondiente RESPR, LBYTES, y CALL, aunque de ello no hace falta preocuparse, pues el programa instalador de Lightning lo hace todo por nosotros. Estos ficheros y su misión son:

lng_TEXT_ext acelera la impresión de textos.

lng_TEXT_mini_ext tiene la misma función que el anterior, aunque no tiene todas sus ventajas, pero ocupa mucho menos (para el caso de QL con 128 K)

lng_GRAPH_ext acelera el dibujo de puntos, líneas y circunferencias, así como la opción FILL para rellenar lo que se dibuje. También acelera el dibujo de elipses que estén orientadas sobre los ejes de la pantalla. No acelera el dibujo de arcos (función ARC), aunque es posible que una nueva versión sí lo haga. Aparte de acelerar, corrige algunos errores de precisión que tienen las rutinas de la ROM.

lng_MATH_ext acelera las siguientes funciones matemáticas del QDOS: EXP, LN, LOG10, SIN, ASIN, COS, TAN, ATAN, COT, ACOT, SQRT.

lng_MATH_newnames_ext crea duplicados de las funciones matemáticas del QDOS, de modo que podamos usar indistintamente las originales o las nuevas, más rápidas. No acelera las funciones normales, sino que añade otras más rápidas con nombres diferentes (por ejemplo FSIN en vez de SIN, etcétera).

lng_FONT_ext añade al BASIC las extensiones necesarias para emplear cualquier juego de caracteres en cualquier ventana. Es el equivalente del CHAR_USE del Toolkit II.

Todos los ficheros _ext que hemos visto tiene sus homónimos terminados en _bas, que son pequeños programas en BASIC que los inicializan individualmente. Por ejemplo, al hacer LRUN flp1_lng_TEXT_bas instalamos el código que acelera la impresión de textos, y así con los demás.

También se incluyen un par de demostraciones en BASIC para cronometrar ciertas rutinas de pantalla con y sin Lightning. ¡La mejor demostración es probar el Lightning con nuestros propios programas!

Cuando ejecutamos el programa configurador, éste nos irá preguntando uno a uno por los ficheros _ext que queremos meter en el disco en el que vayamos a instalar Lightning. Por ejemplo, en un tratamiento de textos habrá que meter obligatoriamente lng_TEXT_ext y ninguno más, pues no sirven de mucho los demás, pero en un programa de dibujo técnico o CAD convendría meter lng_MATH_ext sin dudarlo un instante y tal vez lng_TEXT_ext también. Todo depende del tipo de programa que haya en el disco o que vayamos a instalar después en el disco.

Una vez hemos seleccionado qué partes de Lightning queremos instalar, se nos preguntará si el disco en el que vamos a instalarlas tiene o no un fichero BOOT (¡esto lo podría averiguar el propio programa configurador si se tomase la molestia, digo yo!). Si respondemos que no, simplemente creará un BOOT con las ordenes que hagan falta y copiará los ficheros _ext seleccionados de uno a otro disco. Si hay un BOOT, lo renombrará como YOUR_ORIGINAL_BOOT y al final de su propio BOOT meterá un LRUN "flp1_YOUR_ORIGINAL_BOOT". Este último aspecto puede perfeccionarse metiendo un par de líneas en el programa configurador, de modo que nos pregunte qué nombre queremos dar a nuestro BOOT antiguo; ¡¡Queda mejor "boot_Quill", por ejemplo, que "YOUR_ORIGINAL_BOOT"!! Detalles aparte, el proceso es comodísimo y si nos descuidamos nos encontraremos instalando el Lightning hasta en los discos vírgenes...

He olvidado mencionar que cada fichero _ext añade al BASIC ciertas extensiones que permiten desconectar las rutinas de aceleración, dejando al QL con las rutinas originales del QDOS y su lentitud... En el caso de las rutinas matemáticas, tenemos un comando para cambiar la precisión de los cálculos a 4 bytes (valor por defecto), 2 bytes o 1 byte. Otra facilidad de la aceleración de textos es un comando para acelerar el comando MODE, evitando que realice algunas operaciones en las ventanas que en ocasiones no son necesarias.

Otras facilidades de Lightning son:

- Comando _lngZIP para variar el número de lineas de texto que lng_TEXT_ext moverá al llenarse una ventana.

- Dispositivo nulo (nul) que deshecha todo lo que se le mande, muy útil para los procesos de depuración de programas.

- Facilidad de desagüe (drain) que nos permite, mediante la pulsación de CTRL Z, mandar "a la porra" todo lo que debería salir en pantalla. Por ejemplo: hacemos un COPY UPDATES_DOC,SCR de un fichero enorme y no nos interesa lo que viene al principio. Pulsamos CTRL Z y la pantalla se quedará como bloqueada (como con CTRL F5)... pero la impresión no se detendrá en realidad, sino que es como si se desviase al dispositivo nul y se realizará a toda velocidad! Pulsando una tecla cualquiera volvemos a ver en pantalla lo que se está imprimiendo (¡¡si tardamos mucho, ya no habrá nada que ver!!). En lugar de CTRL Z puede asignarse otra tecla para esa función con el comando _lngKEYSET.

Antes de hablar de velocidades, comentaré que el manual es breve pero claro y suficiente, con instrucciones precisas de cómo instalar el programa y de como emplear los comandos. Además, se proporcionan ejemplos de cómo hacer ciertos cálculos en lugar de otros con las funciones matemáticas para acelerar aún más nuestros programas BASIC, así como algunos consejos a la hora de diseñar la posición y tamaño de las ventanas para sacar el máximo partido a Lightning.

¿Qué incremento de velocidad conseguimos con Lightning? No se puede dar una cifra exacta, pues depende del tipo de programa que empleemos, de las extensiones que haya instaladas, e incluso de si tenemos o no expansión de memoria y cual. Sobre todo, depende del uso repetido y continuo que se haga de la pantalla y de las funciones matemáticas. Para haceros una idea, os describo algunas pruebas que he hecho:

1. Tiempo empleado al imprimirse las pantallas de texto y gráficos de Super Astrologer y Astronomer: ¡He perdido el papel en que anoté los resultados, cronometrados con reloj de pulsera! Seguro que lo encuentro cuando envíe esto... Bueno, ni me apetece repetir las pruebas (me tiré un buen rato en ello) ni merece la pena. Puedo asegurar, de memoria, que todas las pantallas tardaban en completarse al menos un 20% menos de tiempo, más o menos, con Lightning (lng_TEXT_ext + lng_GRAPH_ext + lng_MATH_ext) que sin Lightning.

2. Tiempo empleado en 1000 sustituciones de letras en The Editor. Aquí si que se notó la diferencia: cargué un fichero de 750 líneas de texto y ordené un "1000e/a/x/" para que me cambiase las 1000 primeras "aes" por "equis". Sin lightning tardó alrededor de 7 minutos (el tiempo exacto estaba en el mismo papel que antes, ejem), y con Lighting (lng_TEXT_ext) tardó alrededor de 4 minutos.

3. En el fichero forth_scr del Forth de Computer One viene una palabra para dibujar un enorme globo a base de circunferencias. La modifiqué un poco para realizar el test: 100 globos (cada globo se dibuja primero y luego se borra dibujándolo de nuevo encima con el color de tinta igual al del papel) sin Lightning tardaban en dibujarse en pantalla el mismo tiempo en que se dibujaban 70 globos con Lightning (lng_GRAPH_ext). He de mencionar que la instalación del fichero lng_MATH_ext no aceleraba nada el proceso, a pesar de que en el dibujo de las circunferencias se empleaban cálculos de senos con las palabras de coma flotante del Forth (¿?). Tardaba lo mismo con lng_MATH_ext que sin él; sólo lng_GRAPH_ext aceleraba el asunto de forma sensible... misterios de la Naturaleza.

4. ¡No he podido ejecutar el programa Cosmos con el Lightning instalado, se queda colgado antes de aparecer el dibujo de presentación!

5. En nuestro lento Quill no he notado demasiado acelerón. Se nota, eso sí, que los menús de arriba se borran y dibujan más rápido, y que el scroll parece algo más ligero, pero el engendro es de por sí tan lento que no hay milagro que lo acelere, ya que no es problema sólo de salida en pantalla en este caso. Por ejemplo, la definición de bloques para borrarlos o copiarlos sigue siendo, a pesar del lng_TEXT_ext, tan tortuosa y desesperante como antaño.

6. Donde he apreciado espectacularmente la presencia invisible de Lightning es al copiar un fichero desde cualquier dispositivo a la pantalla. En estos casos, cronometrando empleando la función DATE, la media de tiempo empleado en hacer la copia con Lightning ha sido el ¡30%! del tiempo que lleva hacerla sin Lightning... ¡no da tiempo ni a leer la pantalla! ¡Cuando te acostumbras a esa velocidad y desconectas el Lightning con la orden _lngoFF, te da la impresión de que le pasa algo al QL, de lo lento que va imprimiendo!

Bueno, creo que con estas impresiones os habréis hecho una idea de las características del programa. Mi opinión particular es que merece la pena sin lugar a dudas el comprarlo, pero que hay que tener claro que donde se nota su presencia es en aquellas tareas que hagan un uso repetido y constante de la salida a pantalla o de las funciones matemáticas ya citadas.

Los juegos de caracteres incluidos en el disco del Lightning son muy variados, desde futuristas hasta medievales, aunque sólo incluyen hasta el carácter 127, es decir, ningún carácter español. Con un QLUDGE como el de Turbo Toolkit o SpeedScreen se pueden modificar y, con algo de paciencia, añadirles las vocales acentuadas, las "eñes" y demás. Con el siguiente programita, adaptación personal de uno que viene en el manual del Lightning, podremos sacar en impresora unas copias de todos los juegos de caracteres de un disco (está hecho para la Trump Card, o bien para el Toolkit II). He empleado CHAR_USE del Toolkit II en lugar de la orden _lngFONT del Lightning, para evitar tener que cargar e instalar el fichero lng_FONT_ext.

Una última nota antes de acabar: si, en el plazo de un mes después de comprar el Lightning, se compra un compilador de Digital Precision (Superforth, C, Turbo) se obtiene un 15% de descuento con sólo mencionar en la carta el nombre del disco del Lightning (el nombre con que fue formateado), que es una serie de dígitos.

100 REMark Programa para imprimir juegos de

110 REMark caracteres con Toolkit II

120 REMark 

130 REMark Marcos 24/10/1988

140 REMark 

150 TK2_EXT

160 FORMAT ram1_200

170 :

180 MODE 4

190 WINDOW 480,240,0,0

200 PAPER 7

210 INK 0

220 CSIZE 1,0

230 CLS

240 :

250 SDP_SET 1,3,0,0 :REMark depende del tipo de impresora!

260 device$="flp1_"

270 OPEN_NEW#3,ram1_dir

280 WDIR#3,device$&"_font"

290 CLOSE#3

300 dire=ALCHP(1024)

310 OPEN_IN#3,ram1_dir

320 INPUT#3,basura$,basura$

330 número_fonts=0

340 REPeat print_font

350   IF EOF(#3):EXIT print_font

360   INPUT#3,nombre_font$

370   IF nombre_font$(LEN(nombre_font$)-4 TO)<>"_font":NEXT print_font

380   LBYTES device$&nombre_font$,dire

390   CHAR_USE 0,0

400   PRINT nombre_font$

410   CHAR_USE dire,0

420   FOR n=32 TO 127:PRINT CHR$(n);

430   número_fonts=número_fonts+1

440   PRINT

450   PRINT

460   IF número_fonts=6

470     hard_copy

480     número_fonts=0

490     CLS

500   END IF 

510 END REPeat print_font

520 IF número_fonts:hard_copy

530 CHAR_USE 0,0

540 STOP

550 :

560 DEFine PROCedure hard_copy

570   BEEP 1000,10000

580   PAUSE(-1)

590   SDUMP#1

600 END DEFine hard_copy

610 :


Sinclair QL Recursos en Castellano Alojado en / Hosted at:
Sinclair QL Recursos en Castellano
Sinclair QL Spanish Resources