Intentando adiestrar el escarabajo pelotero

Marcos Cruz
Madrid, diciembre 1988

Las rutinas de José Carlos de Prada (Ver disco Cuq número 1) para leer el estado del ratón de Investrónica (¡perdón, quise decir escarabajo pelotero!) permiten a uno diseñar sus propios programas para que funcionen con dicho engendro. No obstante, desde que topé en mi devenir con el susodicho ente repugnante, no he pretendido otra cosa que liberarle de su condición de inútil supremo. Hasta ahora no he tenido éxito en tamaña empresa.

Bueno, la idea era escribir una rutina en SuperBASIC para compilarla y dejarla como tarea residente. La función de la tarea sería leer el estado del escarabajo pelotero y engañar al QL para que creyese que en lugar del mismo se han pulsado las teclas del cursor correspondientes. De este modo, con sólo EXECutar dicha tarea, el escarabajo podría usarse en cualquier programa, ¡incluso en Quill! Hasta aquí todo muy bonito, pero en la práctica no es así.

En primer lugar, ¿por qué, si el escarabajo pelotero se conecta a un port de joystick, no puede leerse con INKEY$? La respuesta la tendremos si ejecutamos el siguiente programa:

100 REMark Marcos 26/10/1988

110 REMark 

120 CLS:TK2_EXT:REMark Toolkit II

130 PRINT "bits 01234567"

140 REPeat bucle

150 AT 1,0

160 FOR fila=0 TO 7

170 PRINT "fila"!fila!BIN$(KEYROW(fila),8)&CHR$(10);

180 END FOR fila

190 END REPeat bucle

Ejecutad el programa anterior con el escarabajo pelotero conectado y movedlo. Como observaréis, no se activa sólo el bit correspondiente a la tecla del cursor -o de tecla función, según donde esté conectado el bicho- correspondiente al movimiento, sino que llegan a activarse todos o casi todos los bits de igual peso de todas las filas... ¿? ¡Por eso no se puede leer el escarabajo con INKEY$!

¿Qué se puede hacer, entonces? Se me ocurrió lo siguiente:

100 :

110 REMark Programa para simular el funcionamiento

120 REMark de un joystick

130 REMark con el ratón de Investrónica

140 REMark conectado a CTL1

150 REMark 

160 REMark Marcos 28/10/1988

170 REMark 

180 REMark Debe ser compilado y ejecutado como tarea

190 :

200 SET_PRIORITY 1:REMark para Turbo

210 IMPLICIT% peso_bit,bit,fila,n_filas,letra:REMark para Turbo

220 :

230 REPeat bucle

240 letra=0

250 IF peso_en_filas%(16)>1:letra=200

260 IF peso_en_filas%(2)>1:letra=192

270 IF peso_en_filas%(4)>1:letra=208

280 IF peso_en_filas%(128)>1:letra=216

290 IF peso_en_filas%(64)>1:letra=32

300 IF letra

310 PRINT "Letra= ";

320 REPeat espera

330 FOR fila=0 TO 7

340 IF KEYROW(fila):NEXT espera

350 END FOR fila

360 END REPeat espera

370 POKE_W 163978,0

380 PRINT letra

390 END IF 

400 END REPeat bucle

410 :

420 DEFine FuNction peso_en_filas%(peso_bit)

430 n_filas=0

440 FOR fila=0 TO 7:IF KEYROW(fila)&&peso_bit:n_filas=n_filas+1

450 RETurn n_filas

460 END DEFine peso_en_filas

470 :

Si el programa se ejecuta -para hacer pruebas no hace falta compilarlo- aparecerá el código ASCII del carácter correspondiente al movimiento del escarabajo.

El funcionamiento se basa en averiguar si, para cierto peso de bit, están activadas varias filas del teclado. Si es así, es que el ratón se ha movido. Pero esto es todo lo que hay, no he podido ir más allá. Todo intento de simular que la tecla correspondiente se ha pulsado (en lugar de simplemente imprimir su código ASCII) ha sido infructuoso.

En el conjunto de procedimientos de ejemplo que viene con Turbo, hay uno que, compilado, hace que los caracteres "-" y "_" intercambien sus posiciones en la tecla en que están. Para ello detecta la pulsación de cada uno mediante INKEY$, en un bucle sin fin, y, si han sido pulsados, los sustituye por el otro mediante TYPE_IN. Pero si en vez de INKEY$ se usa KEYROW, el procedimiento no funciona.

En el libro de Adrian Dickens no he encontrado ninguna referencia a todo esto. El problema, lo que me falta saber cómo hacer, es en resumen lo siguiente: ¿Cómo, tras detectar cierta combinación de teclas mediante KEYROW, simular que se ha pulsado otra tecla cualquiera?


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