HOTKEYS es una extensión que forma parte de “Pointer Environment” (PE), el entorno de ventanas creado por Tony Tebby para el Sinclair QL. Podríamos definirlo como un sistema para declarar combinaciones de teclas que cuando se pulsan dan lugar a una acción que es independiente de la tarea que se está realizando.

Lo primero que tenemos que tener presente es que, para poder disfrutar de las facilidades de HOTKEYS en nuestro QL, necesitamos cargar en nuestro sistema el “Pointer Environment” completo. Este entorno de ventanas consta específicamente de tres módulos residentes PTR_GEN, WMAN y HOT_REXT. Otro componente que podríamos catalogar de indispensable en el QL sería también el Toolkit 2, el cual viene de una manera u otra en la mayoría de los QL que incorporan expansiones de disquetera y ampliaciones RAM.

El programa más simple para cargar en nuestro QL un entorno mínimo para empezar a trabajar con HOTKEYS sería el siguiente:

100 TK2_EXT : REMark en algunos sistemas esta línea es esencial
110 LRESPR FLP1_PTR_GEN
120 LRESPR FLP1_WMAN
130 LRESPR FLP1_HOT_REXT
140 HOT_GO

Comentemos brevemente el las líneas del programa SuperBASIC anterior.

En la línea 100 se ejecuta el comando TK2_EXT que es usado para activar el Toolkit 2 en algunos sistemas. Esto nos permitirá usar a su vez el comando LRESPR, empleado en las líneas siguientes para cargar cómodamente el resto de extensiones necesarias para usar el PE. Si no tuviéramos el Toolkit 2 (que es el que aporta el comando LRESPR) tendríamos que cargar el resto de módulos averiguando primero el tamaños del archivos, y con los comandos LBYTES y CALL cargar cada uno de los módulos en modo residente. LRESPR nos ahorra esfuerzo ya que nos permite cargar las extensiones que necesitemos de una forma más automática.

En la línea 110 cargamos el primer módulo del PE llamado PTR_GEN. Este módulo controla la interfaz de puntero; una flecha en pantalla a modo de cursor que es controlada por un ratón o por las teclas del cursor del teclado. Al igual que otros sistemas GUI, podemos indicarle al ordenador lo que debe hacer desplazando el puntero hasta los “comandos” representados en la pantalla y haciendo “clic” sobre ellos.

El ratón en los QL tiene generalmente 2 botones. La presión sobre el botón izquierdo se llama HIT, y la presión sobre el botón derecho se llama DO. Esas acciones (HIT y DO) tienen equivalentes también en el teclado. Como hemos mencionado anteriormente el puntero se puede mover con las teclas del cursor del teclado, HIT se ejecuta con la barra espaciadora y la acción DO con la tecla ENTER.

WMAN es una abreviatura de “Window Manager” (el gestor de ventanas). Este gestor de ventanas es un sistema mediante el cual se proporciona un aspecto ‘estandarizado’ a la apariencia y funcionamiento de los menús, desplazamiento de las ventanas, etc. En la línea 120 de nuestro ejemplo cargamos WMAN con el comento LRESPR FLP1_WMAN.

HOT_REXT es la parte que controla las “Hotkeys”, las teclas de acceso rápido, que formalmente se denomina “Hotkey System II”. En nuestro ejemplo cargamos este módulo en la línea 130 con LRESPR FLP1_HOT_REXT, lo cual ejecuta un pequeño Job (o tarea residente) llamado Hotkey el cual se ocupa de controlar teclas de acceso rápido.

El comando HOT_GO de la línea 140 es el encargado de activar las teclas de acceso rápido (Hotkeys). En otras palabras, una vez que un comando HOT_GO ha sido ejecutado, las teclas de acceso rápido que se hayan programado comenzarán a funcionar.

Existe también un comando relacionado llamado HOT_STOP el cual desactiva las teclas de acceso rápido que se hayan definido. Es importante recordar este comando porque hay ocasiones en las que no podemos cargar extensiones adicionales mientras Hotkey está funcionando y una forma de hacerlo es desactivando temporalmente las Hotkeys con HOT_STOP y luego volverlo a activar una vez cargadas las extensiones necesarias.

Otra cosa importante a tener en cuenta es el uso de CTRL C (la pulsación conjunta de las teclas CTRL y la letra C). Este combinación de teclas permite conmutar el foco entre varios programas que están ejecutándose al mismo tiempo. Esta es una de las formas más habituales de conmutar entre los distintos programas que están ejecutándose en nuestro QL.

Para comprender la importancia de la Hotkeys en un sistema de la época del QL pongamos un ejemplo. Supongamos que estamos tecleando algo en un procesador de textos y queremos comprobar algo en nuestra base de datos sin tener que salir del procesador de textos. En un ordenador personal de principios de los años 80, nosotros tendríamos que grabar en un fichero el trabajo que estuviéramos haciendo en nuestro procesador de textos, a continuación salir del procesador, arrancar la base de datos, chequear la información, salir del sistema de base de datos y volver a arrancar el procesador de textos con el fichero en el que estuviéramos trabajando.

Pero en un QL con su multitarea y el Hotkeys, las cosas se podrían hacer de otra manera.

Supongamos que hemos definido una combinación de teclas como la vía para arrancar un programa, sin tener que parar el programa actual sobre el cual estamos trabajado. Más aún, si ese segundo programa ya estuviera en ejecución, nuestra combinación de teclas provocaría que se activara ese programa que aún está en memoria. Luego, mediante otra combinación de teclas (Hotkeys) que también hayamos definido, podríamos regresar al primer programa en el que estábamos anteriormente.

Todo esto puede sonar muy complicado al principio, pero podemos acostumbrarnos rápidamente después de verlo en acción.

Este es el principio básico detrás de las Hotkeys: definimos teclas para realizar “acciones”. Independientemente de lo que estábamos haciendo, estas teclas permiten que hagamos algo más al instante sin tener que pasar por la molestia de grabar el programa actual, salir de él e ir al SuperBASIC, teclear comandos para ejecutar otras acciones y así sucesivamente. Lo bueno de este sistema es que una vez que hayamos configurado la pulsación de una determinada acción según nuestras necesidades, podemos ir y definirlas en el programa de arranque de nuestro QL (boot) para que se ejecuten cada vez que arrancáramos el sistema.

En la definición de Hotkey anterior hemos hecho referencia al término “acciones”, pero ¿Qué son exactamente esas acciones?

Las acciones pueden ser:
– Cargar un programa en memoria para iniciarlo de forma rápida posteriormente.
– Cargar un programa desde disco.
– Seleccionar un programa (saltar directamente a él desde otro programa)
– Relleno de texto, o lo que sea, en un búfer especial (como una especie de portapapeles) para pasar en otro programa
– Enviar comandos al SuperBASIC
– Listar las teclas que se han definido
– Activar o desactivar definición de teclas individuales

Exploraremos esta acciones a medida que avancemos en el tema.

Las Hotkeys se definen como una pulsación de varias teclas donde se usa siempre la tecla ALT junto con otra tecla. Esto no es nuevo en el QL y de hecho el Toolkit II tiene algo muy parecido llamado ALTEKEYs. Veamos cual es la diferencia mediante un ejemplo sencillo.

Supongamos que hemos definido un ALT key del Toolkit II para cargar un programa llamado MIPROGRAMA_BAS desde la unidad de disco flp1_. Para ello utilizaremos el siguiente comando:

ALTKEY 'a','LOAD FLP1_MIPROGRAMA_BAS'

Bien, supongamos que estamos en SuperBASIC y pulsamos ALT junto con la tecla ‘a’. Efectivamente, aparecerá en el canal #0 (area de comando en la zona inferior de la pantalla) la orden LOAD FLP1_MIPROGRAMA_BAS. Pero supongamos que estamos editando un documento con el procesador de textos Quill, ¡vaya …!, ahora aparece LOAD FLP1_MIPROGRAMA_BAS como parte del documento que estábamos editando y esto no es lo que queremos. Tendríamos que regresar al SuperBASIC para que este altkey sea de utilidad.

El sistema HOTKEY nos permite hacer esto mucho mejor. Por ejemplo, con el comando HOT_CMD de HOTKEY podemos definir una combinación de teclas para indicarle al ordenador que queremos un comando destinado al SuperBASIC. Esto nos aseguraría que el control del ordenador “salta” al BASIC primero y luego ejecutal el comando por nosotros. El proceso de saltar al BASIC o a otro programa se conoce como “PICKING” en la terminología del sistma de Entorno de Ventanas del QL (PE). Esto evitaría el incoveniente de ALTKEY que hemos mencionado anteriormente.

Así podemos ver que el sistema HOTEKY nos da más versatilidad y potencia que el sistema ALTKEY usado por el Toolkit II.

Podemos elegir cualquier tecla a la hora de definir una acción con HOTEKY pero hay algunas teclas reservadas que deberíamos evitar.

Las letras y números son buenos candidatos. Las teclas de función se pueden definir también pero son más difíciles de recordar. Entre las teclas a evitar están la tecla ENTER (ALT ENTER tiene un significado especial para HOTKEY, nos recupera la última línea de ordenes que hemos tecleado), las teclas de cursor, la tecla CAPS LOCK y la telca TAB. Tampoco es buena idea usar las teclas de apóstrofe o las teclas de símbolos (por ejemplo \).

¿Cómo definir combinaciones de teclas y acciones?

Veamos ahora cómo definir combinaciones de teclas y sus correspondientes acciones.

Los comandos para definir HOTEKYs están incluidos como extensiones SuperBASIC para hacer uso de ellos. La mayoría son funciones en lugar de comandos, esto significa que al ejecutar esas funciones nos devolverá un valor de retorno el cual nos indica si todo se ha ejecutado bien o si ha habido algún error.

Por ejemplo, ejecuta los siguiente desde la línea de comandos SuperBASIC:

PRINT HOT_CMD('a','LOAD flp1_MIPROGRAMA_bas')

Esto imprime el número 0 si todo ha ido bien en la definición del HOTEKY. Si ha habido algún error entonces la función retornará un valor distinto de 0 que representa al código de error, por ejemplo “In Use” error (-9).

Existe un pequeño comando para manejar esos números de retorno pasados por la función que define el HOTEKY, llamado ERT, que significa Error ReporT. Si todo ha ido bien no hace nada, pero si algo ha fallado ese comando emite un sonido o nos da un mensaje descriptivo del error. Un ejemplo de cómo usarlo sería el siguiente:

ERT HOT_CMD('a','LOAD flp1_MIPROGRAMA_bas')

El primer parámetro de la función HOT_CMD define la tecla a la cual será asociada el comando. Presionando la tecla ALT junto con esa tecla (en nuestro ejemplo la tecla 'a') se ejecutará el comando especificado en el segundo parámetro (en el ejemplo, 'LOAD flp1_MIPROGRAMA_bas'). Un aspecto importante a tener en cuanta es que HOTEKY es sensible a las mayúsculas y minúsculas. Se puede definir una acción distinta para la tecla en mayúscula con lo cual tendremos dos definiciones para la misma tecla, pero existen particularidades y ciertas reglas en su uso.

Si defines una HOTEKEY con una tecla en minúscula y no existe otra definición para esa tecla en mayúsculas entonces ambas teclas provocarán en mismo resultado (en el ejemplo anterior ALT a , SHIFT ALT a , o ALT A producirán el mismo efecto).

Los usuarios QL suelen aplicar patrones en la definición de las teclas que resultan útiles.

Por ejemplo, para acciones que involucren la carga o la selección (picking) de programa:

a) usa teclas en mayúsculas para la carga de programa.
b) usa la tecla en minúscula para la selección de programa.

Esto parece lógico, la carga de un programa desde disco es una acción típicamente menos común durante una sesión de trabajo, así usamos las teclas SHIFT ALT y la tecla deseada (tenemos que pulsar tres teclas). Sin embargo, una vez cargado los programas en memoria podría ser muy habitual conmutar entre ellos con una combinación más simple de teclas, la tecla ALT y la tecla deseada (sólo pulsamos dos teclas).

Bien, veamos ahora cómo cargar y seleccionar programas.

Hay varias formas de cargar un programa. Puede cargarse en la memoria y posteriormente ejecutarlo desde la memoria. Esto es muy útil en sistemas sin disco duro ya que podemos para evitar tener que insertar su disquete cada vez que necesite iniciar cualquier programa frecuente y que no esté disponible en el disquete en esos momentos. Sin embargo, siendo muy útil para los programas de uso común, nos ata un poco en cuanto al uso óptimo de la memoria. El más simple de entender es el comando que simplemente carga un programa desde el sistema de almacenamiento (un disquete por ejemplo). Asumiré que mi programa se llama PROGRAM_EXE en este ejemplo:

ERT HOT_LOAD('p','flp1_program_exe')

Cuando mantienes presionada la tecla ALT y pulsas la tecla p, el sistema intenta cargar PROGRAM_EXE desde FLP1_. Sencillo. Pero, de nuevo, hay un par de puntos menores a tener en cuenta.

He puesto el texto entre comillas en el ejemplo anterior, pero en la mayoría de los casos, podría haberse escrito los parámetros del comando de esta forma:

ERT HOT_LOAD(p,flp1_program_exe)

En caso de duda, usa las comillas. Además, el nombre de archivo del programa está escrito en minúsculas, no importa ¡el QL maneja los nombres de archivo en mayúsculas y minúsculas! Ten en cuenta que si omites el nombre de la unidad, HOTKEY intentarán agregar el nombre de la unidad predeterminada por DATA_USE o PROG_USE (las unidades predeterminadas de Toolkit 2 para datos y programas).

Con HOTKEY hay dos extensiones para cargar programas en la memoria para que, posteriormente, puedan iniciarse rápidamente sin tener que tener tus discos en las unidades (esto es bastante similar en principio a usar RESPR o LRESPR para cargar extensiones SuperBasic).

Las dos extensiones son: HOT_RES y HOT_CHP. ¡Ahora las cosas se vuelven un poco más complejas! De hecho, hay otras variaciones llamadas HOT_RES1, HOT_CHP1 y HOT_LOAD1 para casos especiales en los que no te atreves a ejecutar dos copias del mismo programa al mismo tiempo. (A tener en cuenta que en QDOS podrían haber programas que se modifican a sí mismos cuando se cargan en memoria, lo cual podría tener efectos no deseados. Ignoraremos esto por ahora, pero ten en cuenta que existen razones para estas variantes del mismo comando).

HOT_RES se utiliza para cargar programas RESIDENTES. Eso significa que se cargan en la memoria para que posteriormente podamos iniciarlos rápidamente (una o más copias de ellos). Este comando tiene un problema: si hay otros programas ejecutándose o el Job del HOTKEY está activo, este comando podría no funcionar. En estos casos se debe utilizar HOT_CHP. En algunas versiones del sistema HOTKEY, la función HOT_RES parece convertirse automáticamente en HOT_CHP cuando sucede este problema.

¿Cuándo debes utilizar HOT_RES o HOT_CHP en lugar de HOT_LOAD?

Fácil. Reserva el uso de HOT_RES o HOT_CHP para los programas que utilizas con más frecuencia para evitar tener que insertar sus disquetes cada vez que inicies una copia. HOT_LOAD está bien para programas usados ocasionalmente en los que no quieres que acaparen memoria todo el tiempo mientras están cargados de forma residentes.

La secuencia real de eventos cuando se emite un comando HOT_RES o HOT_CHP es la siguiente:

1. Cuando el sistema interpreta el comando, agrega el programa pasado como parámtro al sistema de teclas de acceso directo. Esto significa que, en esencia, cuando se ejecuta la línea que define la tecla de acceso directo, se busca el programa y se carga en la memoria.

2. Cuando más tarde se pulsa la tecla de acceso directo definida como HOT_CHP o HOT_RES, busca el programa en la memoria e intenta iniciar su ejecución.

HOT_LOAD es esencialmente sólo el equivalente del paso (2) – sólo carga el programa nombrado cuando se pulsan las teclas indicadas, en lugar de almacenar una copia en la memoria. Es importante entender la diferencia entre estos comandos. HOT_LOAD iniciará un programa desde el disco sólo cuando se lo indicas. HOT_CHP y HOT_RES harán inmediatamente una copia del programa desde la unidad de almacenamiento a la memoria cuando se definan sus parámetros (tecla de acceso y nombre del programa). Posteriormente, al pulsar la tecla definida por HOT_RES o HOT_CHP, se ejecuta una copia del programa ya cargado en memoria. De hecho, es bastante inteligente, si usas HOT_CHP o HOT_RES, sólo una copia del programa se mantiene en memoria incluso si tiene dos de esos programas en ejecución. Es bastante complejo de explicar, pero básicamente los programas definidos como ‘puros’ pueden tener más de una instancia de sí mismos ejecutándose al mismo tiempo, aunque de hecho sólo hay una copia en la memoria – ¡el sistema está siendo bastante inteligente al ejecutar más de una instancia del mismo código a partir de una sola copia de él!

Estos programas ‘puros’ incluyen a Quill, Archive, Abacus, Easel y los programas QPAC1, por ejemplo. Pero hay otros programas (llamados ‘no puros’) que modifican su propio código de tal manera que no es prudente hacer que un programa en memoria se ejecute como si se tratara de dos instancias separadas. En caso de que una copia modificara su propio código al mismo tiempo que la otra instancia de sí misma intentara hacer algo podría producir el caos. Los programas compilados por Turbo entran en esta categoría – tiene que usar las versiones HOT_CHP1 y HOT_RES1 de estos comandos para asegurarse de que hay el mismo número de copias físicas del programa en la memoria como instancias de si mismo en ejecución. (Esto no es fácil de explicar pero espero que puedas seguirlo).

HOT_LOAD no hace esa distinción. Siempre carga una copia del disco y la ejecuta cuando la necesita. Si tienes problemas para entender HOT_CHP y HOT_RES y sus variaciones, ignóralos, usa HOT_LOAD solo por ahora hasta que entiendas estos conceptos.

Una vez que un programa se en memoria y se está ejecutando, se necesita una forma de saltar a y desde él. Supongamos que nuestro pequeño programa de ejemplo llamado PROGRAM_EXE tiene un nombre simplemente “PROGRAM” (es decir, el nombre que muestra cuando se está ejecutando y que emite el comando JOBS desde BASIC). Hay una función llamada HOT_PICK cuya función es encontrar el programa llamado, y traerlo para que sea el trabajo (o ‘Job’) actual. Esta acción se llama PICKING.

Por ejemplo:

ERT HOT_PICK('a','PROGRAM')

Una vez ejecutado el comando anterior, cuando presiones ALT a, el sistema busca un programa con ese nombre que se esté ejecutando en la memoria y lo “activa” para que puedas trabajar en él.

Todo esto está muy bien, pero como de costumbre con las teclas de acceso rápido (HOTKEYS), la historia no es tan simple.

Los nombres de los “Jobs” (de las tareas o trabajos en QDos) no son simples y pueden no ser obvios, por lo que el sistema HOTKEYS ofrece otra opción relacionada con esos nombres de “Jobs”.

Para elegir un “Job” o incluso eliminarlo, es posible que necesites saber su nombre. Muchas veces, el nombre del “Job” es igual al nombre del programa que cargaste, pero esto no siempre es así; ¡peor aún, algunos programas cambian sus propios nombres mientras se ejecutan por razones que se nos escapan a la mayoría de nosotros!

Para resolver esto, puedes usar la siguiente opción en algunos comandos HOTKEYS para establecer los nombres que desees darle al “Job” que representa tu programa. Estos comandos tienen la siguiente forma que incluye la especificación de un tercer parámetro:

ERT HOT_xxx('key','nombre del archivo','nombre del programa')

HOT_xxx puede ser, por supuesto, HOT_RES, HOT_CHP, etc.

El ‘nombre del archivo’ es el mismo que en los ejemplos anteriores. El ‘nombre del programa’ es cualquier nombre razonable que quieras dar al “Job” (o a la tarea). Por ejemplo, si el programa fuera una aplicación de base de datos llamado DATABASE_EXE y quisiéramos darle al “Job” (o a la tarea) el nombre de ‘mydbase’, entonces el comando debería ser este:

ERT HOT_LOAD('D','FLP1_DATABASE_EXE','mydbase')

Una vez que el programa se está ejecutando, verás el nombre de ‘mydbase’ si tecleas el comando JOBS o si has utilizado el menú de tareas del QPAC2. (Una tarea o un “Job” es simplemente un programa en código máquina, uno que se puede iniciar con EXEC, por ejemplo).

A partir de ese momento, podemos definir un HOTKEYS (una tecla de acceso directo) para que elijamos ese programa, por ejemplo así:

ERT HOT_PICK('d','mydbase')

De modo que al pulsar ALT d el sistema busca un programa que tenga el nombre de ‘mydbase’, y si lo encuentra lo traerá al primer plano como programa activo o programa seleccionado.

Aquí dejamos la primera parte de la descripción del sistema HOTKEYS, seguiremos profundizando en la segunda parte de este artículo.

—-
Fuente :
CAUTION: HOTKEYS – Don’t Burn Your Fingers
By David Denham, 1999
QL Today.

—-

La red del Sinclair QL es realmente impresionante a pesar de su antigüedad y muy fácil de usar una vez que te acostumbras a los principios que están detrás de ella.

Como todos los QL tienen dos conectores de red (también las placas Aurora o las QXL), puedes encadenar hasta 63 máquinas en una misma red. Las dos máquinas de los extremos de la red deben tener uno de los dos conectores desconectados. Seguramente éstos tendrán una resistencia o algo parecido para establecer el final de la red cuando no hay un cable conectado. (Es decir, los dos extremos no necesitan conectarse a modo de red circular, esto si es necesario en SERNET y en MIDINET tal como diremos más abajo).

El cableado de la red QL es extremadamente simple. Un cable de dos hilos con conectores de audio mono de 3,5 mm en ambos extremos es todo lo que necesitas para unir dos QL, un cable de altavoces es perfectamente adecuado. Cualquier longitud razonable de cable debería funcionar, aunque no sé cual es la distancia máxima recomendada entre máquinas.

Antes de pensar en usar la red del QL asegúrate de usar Toolkit 2, el uso se hace mucho más simple y divertido. La red básica es usable sin Taoolkit 2, pero es necesario tener Toolkit 2 para aprovechar al máximo la red.

Número de estación.

Para identificar los ordenadores dentro de la red es necesario asignar a cada uno de un número entre 1 y 63. Esto se hace con el comando NET y un número entre 1 y 63 (por defecto el número de estación es la 1 si al comando NET no se suministramos número alguno). Por ejemplo, con el comando “NET 2” asignamos al ordenador la estación número 2 dentro de la red.

En una simple red con 2 estaciones (sólo dos QL conectados entre ellos) ambos ordenadores pueden tener el mismo número de estación. En estos casos la configuración es mucho más simple ya que no haría falta el comando NET ni asignar a cada ellos un número distinto. Como el valor 1 es el defecto, en cada uno de los QL nos referiríamos al otro como estación n1.

En una red con más de dos QL, la numeración de las estaciones no es automática y se debe realizar estación a estación con el comando NET y asignando a cada máquina de la red un número distinto entre 1 y 63. Puede ser una buena estrategia ir numerando secuencialmente las estaciones de la red, pero hay que tener en cuenta que para que una estación actúe como “servidor de dispositivos”, el número de dicha estación tienen que estar comprendido entre 1 y 8 (ambos inclusive). Esto implica que en una res QL NET sólo pueden existir 8 servidores de dispositivos.

Tal como acabamos de comentar, una de las facilidades más importantes que nos aporta el Toolkit 2 es que podemos configurar en la red hasta 8 estaciones que actúen como servidores. Esto simplemente se hace con el comando “FSERVE”. De forma general las estaciones en las que hemos cargado el job FSERVE pueden compartir con el resto de la red, no sólo su sistema de almacenamiento, sino también impresoras, puerto serie, puerto paralelo (si tienes Super GoldCard), su propia consola, etc.

Algunos ejemplos.

Supongamos que tenemos una red de tres QL (los tres con Toolkit 2) y queremos configurar una red donde queremos que dos de los QL actúen como cliente y como servidor y el último de ellos sólo como estación que consume recursos de los anteriores. Lo que podríamos hacer es configurar la red con los siguientes comandos:

En el QL 1 tecleamos el siguiente comando:

  FSERVE

En el QL 2 tecleamos el siguiente los comandos:

  NET 2
  FSERVE

En el QL 3 tecleamos el siguiente los comandos:

  NET 3

Eso es todo, pero resaltemos algunos detalles:

– En el QL 1 no hace falta especificar un número de estación ya que por defecto el valor de la estación es 1 (el comando NET sólo sirve para especificar el número de estación cuando ésta es distinta de 1).

– Como tenemos dos máquinas actuando como “servidores” de dispositivos, a esas máquinas (QL 1 y QL 2) les tenemos que asignar números de estación comprendidos entre 1 y 8. Al QL 3 le hemos asignado la estación 3, pero podría haber sido cualquier otro número entre 3 y 63.

Una vez configurada la red, pongamos algunos ejemplos de uso. En el QL 3 podríamos teclear los siguientes comandos:

DIR n1_FLP2:
  (Nos mostrará el pantalla el directorio raíz de la segunda disquetera
   de la estación 1). 

DIR n2_WIN1_programas_
  (Nos mostrará el pantalla el directorio WIN1_programas_ 
   de la estación 2). 

COPY win1_boot to n2_PAR             
  (Copiará el fichero boot de la unidad win1_ en la impresora
   paralelo de la estación 2)

COPY win1_boot to n2_SCR
  (Copiará el fichero boot de la unidad win1_ en la consola
   de la estación 2)

WCOPY flp1_games_ to n1_win1_games1_ 
  (Copiará todos los ficheros de la disquetera 1 al subdirectorio
   win1_Games1_ de la estación 1)

OPEN #5, n2_ser1: list #5: close#5
  (Listará el programa que tengamos cargado en memoria en la
   impresora serie de la estación 2)

EXEC n1_win1_games_chess
  (Ejecutará el programa chess desde el subdirectorio win1_games_
   de la estación 1). 

Una caractarística curiosa es que podemos abrir una ventana en la consola de otro usuario, imprimir un mensaje y esperar de él una respuesta. Por ejemplo, Afx (que está en la estación 1) podría ejecutar el siguiente programa para hacer una pregunta a Badaman que está en la estación 2:

10 OPEN #4, n2_con_200x200a0x0
20 INPUT #4, "Hola, aquí afx ¿podemos almorzar juntos?", r$
30 PRINT r$
40 CLOSE #4

Otra versión del mismo programa.

10 ch = FOPEN(n2_con_200x200a0x0): CLS #ch
20 INPUT #ch, "Hola aquí afx, ¿podemos almorzar juntos?", r$
30 PRINT r$
40 CLS #ch: CLOSE #ch

Una configuración interesante dentro de QL NET es hacer uso del sistema de dispositivos por defecto incorporado en el sistema operativo, proporcionado por los comandos DATA_USE, PROG_USE, SPL_USE y DEST_USE.

DATA_USE [nombre]    
  (selecciona el directorio de omisión para ficheros de datos)

PROG_USE [nombre]
  (selecciona el directorio de omisión para programas ejecutables)

DEST_USE [nombre]
  (selecciona el directorio de omisión de destino (COPY, WCOPY)) 

SPL_USE  [nombre]
  (selecciona el spooler de impresión por omisión (SPL))

El uso de estos nombres de directorio por omisión hace nos hace el trabajo bastante más fácil. Por ejemplo, con la siguiente instrucción todos los programas serán cargados por defecto desde el directorio “progs” del disco win1_ de la estación 1 cuando no indiquemos expresamente una unidad de almacenamiento.

PROG_USE n1_win1_progs 

Una vez introducido el comando anterior, podríamos ejecutar cualquier programa ubicado en esta estación de trabajo y subdirectorio simplemente con EXEC y el nombre del programa.

Pongamos otro ejemplo, con la siguiente instrucción se selecciona el dispositivo PAR (puerto paralelo) de la estación 2 como destino del “spooler” de omisión.

SPL_USE  n2_par

Y partir de la línea anterior, podemos imprimir en segundo plano cualquier fichero como el ejemplo siguiente:

SPL flp1_myFile_txt    
  (imprime myFile_txt en el puerto paralelo de la estación 2)

NFS_USE

Además del uso de dispositivos por defecto, podemos también “mapear” rutas de una red a un dispositivo cualquiera, esto lo hacemos con el comando NFS_USE que nos aporta el Toolkit 2. Veámoslo.

Mediante el comando NFS_USE es posible ocultar la red local a las aplicaciones escogiendo un nombre especial para el servidor de ficheros en red local. La sintaxis es la siguiente:

NFS_USE "nombre", "ubicaciones de la red local", ...

Los “nombres de red local” deben ser nombres de directorio completos, pudiéndose dar hasta 8 en un comando. Cada uno de estos nombres estará asociado con uno de los 8 posibles dispositivos de directorio (“nombre_1” a “nombre_8”). Pongamos un ejemplo.

NFS_USE mdv,n2_win1_,n2_flp1_,n2_flp2_

La anterior sentencia asigna distintas ubicaciones de la estación 2 que actúa como servidor de ficheros a los dispositivos mdv1_, mdv2_ y mdv3_ de la estación cliente. En el ejemplo, “mdv1_” es asignada a la unidad win1_ en la estación 2, “mdv2_” será tomado como “flp1_” en estación 2 y “mdv3_” será tomado como “flp2_ “también en la estación 2.

Una cosa que también se suele hacer es “reasignar” un nuevo nombre a los dispositivos existentes si queremos “mapear” éstos a otras rutas de la red local. En nuestro ejemplo anterior haríamos lo siguiente:

MDV_USE MDD
NFS_USE mdv,n2_win1_,n2_flp1_,n2_flp2_

De esta manera mantendremos los accesos a las unidades de microdrive como MDD1_ y MDD2_ en lugar de MDV1_ y MDV2_.

El controlador de dispositivos DEV (DEV_USE).

En la primera versión de QDOS no existía la posibilidad de crear subdirectorios reales dentro de un dispositivo de almacenamiento. Debido a esto muchos programas de QL fueron escritos sin tener en cuenta la posibilidad de almacenar archivos en subdirectorios. En la siguientes versiones de QDOS, y por supuesto de SMSQ/E, apareció el soporte a lo que se llaman “nivel 2” del sistema de almacenamiento donde el soporte de subdirectorios es completo. Este “nivel 2” del sistema de almacenamiento se extendió con la (Super)GoldCard, dispositivos de disco duro y unidades de disquete de alta densidad. En este contexto, para facilitar la compatibilidad de los programas antiguos que no daban soporte a los subdirectorios, se creó una extensión que aporta un dispositivo virtual llamado DEV. En si, el dispositivo DEV es un dispositivo genérico por defecto (no sólo acotado al uso de la red local) y es una especie de “engaño” para permitir que el software antiguo (como Quill, Archive, Abacus y Easel) hagan uso de subdirectorios.

Además de lo expuesto anteriormente, y en el contexto que nos ocupa, los dispositivos DEV también tienen la capacidad de “mapear” dispositivos lógicos a rutas reales dentro de la red local.

Como de costumbre, hay hasta 8 dispositivos DEV; DEV1_ a DEV8_. Cada dispositivo DEV está conectado a un dispositivo real particular o a un directorio por defecto particular en un dispositivo real. Los archivos en un dispositivo DEV pueden ser abiertos, usados y borrados de la misma manera que en un dispositivo real.

Cada unidad “DEV” está conectada a un dispositivo mediante el comando DEV_USE. La sintaxis es la siguientes.

DEV_USE NúmeroDisp, DirectorioReal

Pongamos un ejemplo.

DEV_USE 4, n2_win1_sys_

A partir de la introducción de comando anterior podemos hacer referencia al contenido del directorio win1_sys_ de la estación 2 como dispositivo DEV4_ de nuestra estación.

A tener en cuenta que el sistema QDOS y SMSQ/E puede manejar también dispositivos distintos a los dispositivos de almacenamiento. Estos dispositivos son:

SER1 y SER2  (puertos serie RS232)
PAR          (puerto paralelo (sólo a partir de SuperGoldCard))
SCR,         (pantalla como dispositivo de salida)  
CON          (consola como dispositivo de entrada/salida)

Esto significa que podemos mapear una unidad DEV a uno de estos dispositivos. Por ejemplo:

DEV_USE 8, n1_par

La orden anterior asigna la unidad lógica “DEV8_” al puerto paralelo de la estación 1.

Otro ejemplo interesante:

NFS_USE "ser",n1_par, n2_par 
PAR_USE "ser"
COPY_N "flp1_myfile" TO "ser2"

Las líneas anteriores reasignan los identificadores de los puertos serie de mi estación, concretamente, SER1_ se reasigna al puerto paralelo el la estación 1 y SER2_ se reasigna al puerto paralelo de la estación 2.

SERNET y MIDINET

Tanto SERNET como MIDINET son controladores de red que aparecieron posteriormente y te permiten montar redes de bajo costo como la QL NET original del Toolkit 2. SERNET permite conectar dos o más máquinas que ejecutan SMSQ/E a través de los puertos serie, mientras que MIDINET permite conectar dos o más ordenares ATARI con SMSQ/E a través de los puertos MIDI. SERNET fue desarrollado a partir del software MIDINET de Phil Borman. Bernd Reinhardt modificó el software para usar los puertos seriales en lugar de los puertos MIDI.

Con estos controladores podemos ampliar las “fronteras” extendiendo la red QL, por ejemplo, permitiendo que las máquinas sin conectores net 1 / net 2 del QL se unan a la red.

Tanto el SERNET como el MIDINET están organizados como una red circular. En el caso de MIDI, el puerto MIDI OUT de cada máquina tiene que estar conectado al puerto MIDI IN de la siguiente máquina. Todos los cables tienen que formar un círculo completo. Cada máquina en el círculo tiene que estar funcionando y el controlador tiene que cargarse para tener una red en funcionamiento. Lo mismo se aplica a SERNET: con dos máquinas, puede usar un cable de módem nulo. Con tres o más máquinas, debes cablear tus propios cables para que todas las señales de salida de una máquina estén conectadas a las señales de entrada de la siguiente máquina y así sucesivamente, para formar un círculo completo también.

SERNET tiene que configurarse para que sepa qué puerto usar como puerto de comunicación. Como es habitual en muchos programas y controladores de dispositivo del QL esto se hace mediante el uso de MenuConfig para configurar los parámetros dentro del binario del propio controlador (SERNET_REXT).

Una vez configurado podemos cargar el controlador con una instrucción similar a la siguiente (suponemos que el controlador está en el directorio raíz de la unidad win1_.

LRESPR win1_SERNET_REXT

Sernet enlaza los ordenadores a través del puerto serie y utiliza el nombre de dispositivo “S” de forma similar a la “N” para la red QL.

Y por último, una vez cargado el controlador, sólo tenemos que definir el número de estación y activar los servicios de la estación como servidora dentro de la red. Las instrucciones serían como el siguiente ejemplo:

Estación 1:
  SNET_USE 1
  SERNET 

Estación 2:
  SNET_USE 2
  SERNET 

A partir de este momento estas dos estaciones pueden compartir sus recursos. Por ejemplo con la siguiente instrucción en la estación s1.

DIR s2_FLP2_            

Nos mostrará el pantalla el directorio raíz de la segunda disquetera de la estación 2.

Enlazando las dos redes, QLNET y SERNET.

Para finalizar, el último paso de nuestro experimento es configurar un entorno, en el cual puedan convivir dos redes: QL NET y SERNET. Por un lado QL NET nos permitiría conectar QL originales (BBQL) en nuestro entorno, y por otro lado podríamos añadir a esta “red QL” sistemas modernos que tengan disponible al menos un puerto RS232 (por ejemplo el emulador QPC2 en un PC con Windows 10 o la FPGA Q68).

El punto de unión de estas dos redes la hemos resuelto con una combinación hardware-software relativamente reciente. El hardware no es otro que la FPGA Q68 que incluye de serie un puerto RS232 y a la cual se la he aplicado un “modding” para incluir dos conectores QL NET. En cuanto al software, lo único que necesitamos ejecutar en la Q68 es el driver SERNET que hemos mencionado anteriormente y el nuevo driver QLNET de Martyn Hill que te permite conectar en red el Q68 con otras máquinas compatibles con QL a través de los puertos QLNET estándar. Los comandos a incluir en el boot de arranque de la Q68 sólo debe incluir los siguientes comandos:

LRESPR win1_sernet_rext     (Carga el controlador SERNET)
BAUD 115200                 (Establece la velocidad en baudios) 
SERNET 2                    (Establece s2 como número de estación SERNET)
SERNET                      (Activa los servicios SERNET) 

LRESPR win1_ndq68_dvr_v305  (Carga el driver de red QL NET para Q68)
NET 2                       (Establece n2 como estación QL NET) 
FSERVE                      (Activa las funciones de servidor QL NET). 

Descrito todo esto, la primera parte de este artículo seguramente tendrá más sentido.

—-
Fuentes:
– SUPERTOOLKIT II, MANUAL DEL USUARIO (Tony Tebby, Qjump, Reino Unido. 1985).
– The QL Network. QL Today, Volume 9 Issue 4. (David Denham).
– SERNET on QDOS? QL Today, Volume 6 Issue 6. (Dilwyn Jones).
– Announcing availability of a QLNET driver for the Q68 (ND-Q68) (https://qlforum.co.uk/viewtopic.php?f=3&t=2881&p=28393) (Martyn Hill).

El domingo 24 de mayo estuvimos invitados al programa de AmigaWave especial sobre QL, algo que veníamos acariciando largo tiempo, y nos dieron dos horas para contaros todo acerca del QL de hoy, Comienza en el minuto 45.

Nosotros sentimos el QL como algo vivo que sigue evolucionando, y aquí hemos querido contar hasta dónde ha llegado. Hablar del QL original para nosotros es como hablar del PC y contar las bondades o inconvenientes del MS-DOS, obviando los Windows y Linux que hoy día podemos tener instalados en ellos. Para los que tienen un QL “pelado”, una única ampliación, la de José Leandro, le cambia la cara a la máquina de forma espectacular, y luego, ya si uno quiere aventuras, pues tiene todo el abanico de ampliaciones posibles y la Q68 (FPGA). El QL no le tiene que gustar a todo el mundo. Es un sistema diferente, con sus cosas buenas y malas, como todos, y que tiene su propia historia.

Espero que lo disfrutéis. Nosotros hemos pasado un rato muy bueno. ¡Feliz día del orgullo friki!

Algunos enlaces de interés:

Emuladores

uQLx http://www.dilwyn.me.uk/emu/index.html#uQLx_for_Linux_etc.
Q-emuLator http://www.terdina.net/ql/q-emulator.html
SMSQmulator https://www.wlenerz.com/SMSQmulator/
QPCII https://www.kilgus.net/

SMSQ/E https://www.wlenerz.com/smsqe/

Documentación

Sinclair QL Recursos en Castellano https://sinclairql.es
QBlog https://sinclairqles.wordpress.com/
QReino https://www.qreino.es/

Dilwin Jones (inglés) http://www.dilwyn.me.uk/

Foros

Speccy.org https://foro.speccy.org/viewforum.php?f=15

Retrowiki http://retrowiki.es/viewforum.php?f=98

QLForum (inglés) https://qlforum.co.uk/

Noticias

Sinclair QL Planet (inglés) https://badaman.badared.com/ql/planet/

Aprovechando la salida de la nueva versión de SMSQ/E, en el siguiente video de se programa semanal de AmigaWave, David hace un excelente repaso de la trayectoria del mundo del QL, especialmente de las expansiones como la GoldCard las QXL y las Q40 y Q60, y muestra el entorno de ventanas Pointer Envoronment (PE) a color real, y con resoluciones superiores a 512×512.

Lo relativo al QL comienza en el minuto 50 y dura unos 40 mins.

¡No os lo perdáis!

Hace un tiempo (bueno, … bastante tiempo) escribíamos en QBlog un artículo introductorio sobre las facilidades de red local que incorporaba el Sinclair QL. En ese artículo comprobamos lo sencillo que es montar una pequeña red con dos QLs y la versatilidad el sistema operativo para manejar recursos compartidos entre distintas estaciones. (Si la red local del QL es algo nuevo para ti te recomendamos su lectura).

Ahora, en una serie de dos artículos, vamos a intentar profundizar algo más en las capacidades de red de los sistemas QDOS y SMSQ/e. Intentaremos describir con detalle qué posibilidades actuales tenemos para llevar al límite la red de área local de sistemas QDOS y SMSQ/E.

Esta primera entrega tendrá un carácter mas “exhibicionista” (por decirlo de alguna manera) de hasta donde podemos exprimir la red del Sinclair QL. Sólo expondremos conceptos muy generales y relataremos un ejemplo de cómo podemos llevar al límite la red del Sinclair QL en el contexto actual (año 2020). La segunda parte será algo más árida para quien no esté familiarizado con los sistemas operativos del mundo QL. En esa segunda parte entraremos en las entrañas de los distintos comandos y facilidades que nos aporta el sistema operativo a la hora de planificar y configurar nuestra red. También haremos una descripción más detallada de las distintas partes (hardware y software) que la componen.

Una pequeña introducción.

La incorporación de serie de hardware y software de red en los microordenadores de los años 80 no era una característica muy común. En el año 84, ésta fue una novedad interesante en el Sinclair QL que no fue lo suficientemente valorada ni conocida.

QL NET es el nombre por el que se conoce la red de área local del QL. Esta red permite la conexión de hasta 64 estaciones de trabajo que soporten este protocolo. La red permite compartir impresoras, unidades de almacenamiento y hasta la propia consola de cualquier estación conectada a ella.

Los datos circulan por la red a una velocidad de 100K Baudios y el protocolo asegura que las estaciones estén listas antes de que los datos sean pasados a través de la red. Los datos también pueden ser volcados a modo de “broadcast” a todos los ordenadores que estén a la escucha.

Con el paso de los años, y la entrada en el mundo QDOS/SMSQe de otro tipo de hardware, principalmente el Atari ST, se implementaron nuevos controladores de red dado que estos sistemas no incluían el hardware de red del QL (QL NET). El primero de los controladores en llegar fue MIDINET el cual permitía conectar en red varios AtariST. El puerto MIDI OUT de cada estación se conectaba al puerto MIDI IN de la siguiente estación y así se podía formar una red en anillo. Posteriormente, a partir de MIDINET se desarrolló SERNET que permitía también la conexión en red de varias estaciones SMSQ/E y QDOS a través la interfaz RS232. Este controlador se usaba frecuentemente en hardware distinto al QL original que incorporaba puertos RS232 de alta velocidad (Aurora, Q40/Q60 y emuladores como QPC).

Nuestra red experimental.

La idea básica es montar una red local entre 4 máquinas distintas y heterogéneas empleando QL NET y SERNET. Las características de cada estación que componen nuestra red son las siguientes:

Estación 1. QL clásico ampliado con una Super GoldCard y una QL-SD como unidad de almacenamiento.

Estación 2. Q68 con un “modding” reciente que incorpora QL NET. Además de QL .NET, Q68 incluye de serie un puerto RS232. (Q68 es una FPGA que implementa una máquina SMSQe)

Estación 3. PC con Windows 10 que ejecuta el emulador QPC2. Esta estación tiene un puerto COM1.

Estación 4. Un segundo PC con Windows 10 que comparte a través de la red TCP/IP una carpeta de su sistema de archivos con la estación 3.

El esquema de la red está en la siguiente figura.

(NOTA: No te preocupes por las siglas del la imagen anterior, hablaremos de ello en el la segunda parte de este artículo).

Podríamos decir que la “magia” de esta red heterogénea está en la FPGA Q68 (estación 2) que actúa como una especie de “gateway” entre dos redes distintas QL NET y SERNET. Mediante QL NET conectamos el QL original y la FPGA, mediante SERNET conectamos la FPGA y el PC con el emulador QPC2. Y por último nos aprovechamos de la posibilidad que tiene QPC2 de montar volúmenes de almacenamiento “mapeados” sobre capetas locales o remotas del PC anfitrión.

La infraestructura anterior y las facilidades que nos da el sistema operativo del QL (tanto QDOS como SMSQe) nos permite cosas como montar unidades de almacenamiento lógicas en el QL “mapeadas” a carpetas o directorios nativos del los PC de la red y de la FPGA.

Por poner un ejemplo, podemos redirigir el nombre que asigna QDOS al microdrive 1 (MDV1_) a una carpeta compartida que tiene el PC número 2 de mi red local. Desde este momento, si tecleamos “dir mdv1_” obtendremos el contenido de la carpeta compartida del PC 2 de nuestra red.

A modo ilustrativo, en la figura 1 podemos observar que en el QL (estación N1) se han definido los 4 dispositivos de almacenamiento lógicos (dispositivos DEV) siguientes:

– DEV1_ (apunta a la unidad de almacenamiento WIN1_ de la FPGA).
– DEV2_ (apunta a la unidad de almacenamiento WIN1_ del emulador QPC2 en el PC1)
– DEV3_ (apunta a un directorio del disco C: del primer PC, que ha sido montado a su vez como disposito DOS1_ en QPC2))
– DEV4_ (apunta a un directorio compartido del segundo PC, que ha sido monado como dispositivo DOS2_ en QPC2)

Forzando un poco más, podríamos “mapear” DEV4_ a una subcarpeta dentro de nuestro sistema de almacenamiento en la nube tal como dropbox. Esto significa que desde mi QL pudo escribir o leer directamente archivos que van a ser vistos de forma inmediata por toda las personas del planeta a las que le haya compartido dicha carpeta.

Esta red me permite prescindir de disquetes y tarjetas SD cuando quiero transferir ficheros a mi QL. Ahora todo lo hago todo via QL NET.

Algunas pantallas a modo de ejemplo.

Q68 con los puertos QL-NET (lateral) y su interfaz RS232 (parte trasera)

QL – accediendo a la unidad de almacenamiento de Q68

Q68 – accediendo a la unidad de almacenamiento del QL

QPC2 – con una unidad virtual del sistema anfitrión (DOS)

QL mostrando el contenido de una carpeta del PC con Win10 (ver número sectores)

Todo esto podría parecer confuso para las personas desconocedoras del mundo QL y sus sistemas operativos QDOS y SMSQe, pero en cuanto se dominen un par de conceptos toda esta configuración es muy sencilla.

En la segunda parte de este artículo explicaremos los principales comandos del sistema operativo que nos permite hacer lo indicado anteriormente. Veremos como crear esos dispositivos DEV y otros comando útiles para configurar y montar una red QDOS/SMSQe con máquinas heterogéneas.

Esta semana se ha liberado una nueva versión de SMSQ/E, la versión 3.36. Aporta algunas características interesantes:
– En Q68 las tarjetas no necesitan ser inicializadas para un acceso normal.
– En Q40/Q60 los archivos contenedores pueden ser leídos desde las cuatro primeras particiones.
– Las unidades WIN pueden ser removibles en SMsQmulator
– …

Pero una característica digna de mención para los usuarios de habla hispana es que por fin integra de forma nativa el soporte para teclados en español, tanto del teclado original del QL (Rom MGE) como para teclados de PC usados, por ejemplo, en la Q68. Los usuarios con teclados y QLs en español ya no tendremos que lidiar con controladores externos, basta con teclear el comando “KBD_TABLE 34” y ya tendremos habilitado el teclado en castellano.

También integra de forma nativa la posibilidad de activar los mensajes del sistema en castellano, esto se hace con el comando “LANG_USE 34”.

Como viene siendo habitual desde hace tiempo, los artífices de estas mejoras y nuevas características han sido Marcel Kilgus y Wolfgang Lenerz.

El sitio oficial para la descarga del SMSQ/E es este:
http://www.wlenerz.com/smsqe/,

Siempre es una buena noticia ver que, después de tantos años, sigan saliendo versiones nuevas de este “pequeño” y formidable sistema operativo.

La tecnica de color cycling permite definir una imagen cuya paleta de color tiene la característica de que puede definirse parte de ella como un ciclo de colores consecutivos, lo que da como resultado un efecto de movimiento o animación.

El ejemplo por excelencia es fichero “Waterfall” que venia como demo en NEOCrhome, uno de los primeros programas que permitian este efecto que era común en los Atari ST y los Commodore Amiga.

En el QL tenemos una paleta de color muy limitada en los modos clásicos de 4 y 8 colores, y esto no nos permite conseguir efectos muy realistas, pero algo se puede hacer. Sin duda en otros modos de color, con algo de código maquina, el efecto seria mucho mejor de lo que aquí muestro como resultado:

Usando RECOL

Para conseguir este efecto hemos de partir de dos premisas:

1.- SuperBASIC tiene un comando llamado RECOL que cambia los colores de pantalla que le indiquemos. Para los colores por defecto del 0 al 7 podemos decidir que estos serán sustituidos en pantalla por otro color de 0 a 7. Por ejemplo, podemos cambiar el color azul por el blanco, como se ve a continuación, siendo ‘n’ el canal elegido.

RECOL #n,0,7,2,3,4,5,6,1

Esto lo que hace es intercambiar los colores en la pantalla. Para las animaciones, debemos cerciorarnos de que, al usar RECOL, intercambiamos colores, como en este caso, el color 1 por el color 7, y el color 7 por el color 1. De otra forma puede ocurrir que colores distintos en pantalla acaben siendo el mismo.

2.- SuperBASIC permite definir ventanas que podemos asociar a un canal. De esta forma podemos definir áreas rectangulares sobre las que aplicar RECOL. En este ejemplo se han usado dos zonas como se ve en la imagen. De esta manera podemos salvar el resto de la imagen y actuar solo sobre la zona sobre la que vamos a usar RECOL.

Aquellas zonas de la pantalla con bordes irregulares deben ser trabajadas de tal forma que los colores que se usen no se vean afectados por el RECOL, como es el caso de los bordes de la cascada. Esta es la imagen de partida.

Seguramente usando el comando FLASH pueden conseguirse otros efectos interesantes, pero esto supondria crear una mascara más precisa para el cambio de colores.

El programa

Este es el código que permite este cambio de color.

100 MODE 8
110 LBYTES mdv1_scrs_cascada_scr,131072
120 ch1=3 : ch2=4
130 OPEN #ch1,scr_148x145a232x29
140 OPEN #ch2,scr_512x82a0x174
150 REPeat loop
160   RECOL #ch1,0,7,2,3,4,5,6,1
170   RECOL #ch2,0,7,2,3,4,5,6,1
180   IF INKEY$<>"": EXIT loop
190   PAUSE 10
200 END REPeat loop
210 CLOSE #ch1 : CLOSE #ch2

Otros usos de RECOL

En este otro ejemplo se usa RECOL para simular un rastro en la pantalla. se muestra una pelota que rebota y va dejando una cola de color tras ella.

Este es el programa:

100 MODE 8 : ch=3
110 OPEN #ch,scr_
120 axw=400 : ayw=200
130 WINDOW #ch,512,256,0,0
140 PAPER #ch,1 : CLS #ch
150 WINDOW #ch,axw,ayw,INT((512-axw)/2),INT((256-ayw)/2)
160 PAPER #ch,0 : CLS #ch
170 INK #ch,7
180 SCALE #ch,ayw,0,0
190 axw=INT(X_Scale (ayw,axw,ayw))
200 r=6 : d=4
210 x=INT(axw/2)
220 y=INT(ayw/2)
230 iz=0: ab=0
240 ix=1 : iy=1
250 :
260 REPeat bucle
270   RECOL #ch,0,0,1,2,3,4,5,6
280   FILL #ch,1
290   CIRCLE #ch,x,y,r
300   FILL #ch,0
310   x=x+(d*ix) : y=y+(d*iy)
320   IF x>axw OR x<0 THEN ix=-ix
330   IF y>ayw OR y<0 THEN iy=-iy
340 REMark   PAUSE
350 END REPeat bucle
360 :
370 DEFine FuNction X_Scale (y_scale, wide, high)
380   RETurn .7411765 * y_scale * wide / high
390 END DEFine X_Scale

Desconozco si esta técnica se ha usado en el QL en algún momento, pero puede ser un punto de partida para una portada o juego básico.

 

Actualización 2020-04-02

Psicodelia

otro ejemplo con RECOL. En estecaso se usa toda la pantalla para conseguir un efecto psicodélico.

El programa es también muy sencillo:

100 MODE 8
110 LBYTES mdv1_scrs_psicodelia_scr,131072
120 ch1=3
130 OPEN #ch1,scr_512x256a0x0
140 REPeat loop
150   RECOL #ch1,0,3,6,2,5,1,4,7
160   IF INKEY$<>"": EXIT loop
170   PAUSE 10
180 END REPeat loop
190 CLOSE #ch1

Aquí las imágenes usadas:

He creado el siguiente recurso para estar al día en las noticias de los blogs internacionales de Sinclair QL.

https://badaman.badared.com/ql/planet/

Con este planeta de noticias podemos:

  • Leer las noticias en orden cronológico descendente.
  • Acceder a las distintas páginas que aparecen en el planeta.
  • Acceder a las noticias originales.
  • Descargar el listado de fuentes web en formato opml
  • Ver un listado de los encabezados de las noticias
  • Obtener una fuente web (atom) que podemos usar en nuestros agregadores.

 

Tim Swenson ha creado un programa muy básico en SuperBASIC que muestra la potencia de la pila TCP de emuladores como QPC2, uQLx o SMSQmulator corriendo el sistema operativo SMSQ/E.

El programa es básicamente una forma sencilla de entrar al canal #QLForum en el IRC y enviar y recibir mensajes, mostrando los usuarios conectados, aunque esto se puede cambiar modificando los datos de conexión en el código del programa.

Ejecutando el programa

Para usarlo, sólo es necesario descargar el archivo, y ejecutarlo con lrun.

lrun win1_QLbas_bas

Cambiad win1_ por el dispositivo en el que se encuentre el fichero: mdv1_, win1_, dos1_, flp1_, ram1_ …

Read More