Ver el código de Sección 1 - Que hacer si no tienes joysticks

%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/peek.png))%%
El uso de joysticks con tu computador Atari puede agregar excitantes y novedosas opciones a tus programas.

Pero, ¿qué hacer si no tienes joysticks y aún no estás dispuesto a adquirirlos?

¿Tendrás acaso que escribir números para elegir opciones desde un menú de respuestas?

¿Significará ésto que no puedes usar ninguno de los juegos para joysticks que aparecen en libros y revistas de computación?

¡NO! Hay un modo de hacerlo.

Podemos introducirnos entre los bits y bytes que forman la memoria de tu Atari y aprovechar los efectos que producen los valores que ellos entregan.

Cada vez que presionas una tecla, cambia el valor de la localización 764. Utilizando la función PEEK sobre ese número -es decir PEEK(764)- podrás saber cual fue la tecla presionada. (Ver Nota 1 al final de este programa).

El listado 1 (mostrado más adelante), te ensebará cómo leer el valor que contendrá esa dirección cuando presiones una tecla.

Escribe y has correr el programa. Presiona diferentes teclas para que experimentes los resultados por ti mismo.

Pero, lo que seguramente te estás preguntando ahora, es: ¿de qué me sirve todo eso para resolver mi problema de no tener joysticks?.

¡Calma! Antes de proseguir, debes aprender primero qué sucede cuando usas los joysticks.

¡Veamos!

Si tu programa tiene una linea I = STICK(1), la variable I tomará alguno de los nueve valores posibles, mostrados en la figura siguiente, según sea la posición del joystick cuando la ejecución del programa se encuentre en dicha línea.

Los valores serán:
%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/joystick.png))%%
Donde el valor I = 15 significa que el joystick está en la posición vertical de descanso.

Por otra parte, si tienes la expresión J=STRIG(1), la variable J tendrá el valor 0 (cero) si el botón rojo del joystick ha sido presionado y el valor 1, en caso contrario.

Además, si averiguamos qué valor se almacena en la dirección 764 -usando el ya mencionado PEEK(764)- al presionar las teclas de -flechas y barra espaciadora, encontramos que:
%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/flechas1.png))%%
y los valores almacenados al presionarlas juntas con la tecla SHIFT, serán:

%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/flechas2.png))%%

Finalmente, encontraremos que 33 es el valor para la barra espaciadora.

Por lo tanto, usando las teclas de flechas (solas o combinadas con SHIFT) y la barra espaciadora, podemos obtener los mismos resultados que usando un joystick. La barra
espaciadora reemplazará al botón rojo de disparo.

Las flechas serán los movimientos para arriba, para abajo, a izquierda y a derecha, respectivamente.

La combinación de la tecla SHIFT con:
%%(wacko wrapper=text wrapper_align=center)((https://www.atariware.cl/archivos/compu-util1/flechas3.png))%%

Cualquier otra tecla que se presione, o si no se presiona ninguna, equivaldrá al joystick en la posición vertical de descanso.

La rutina del listado 2 jugará el papel del joystick. Después de llamar a la subrutina 1000, el valor de I será el mismo que habría retornado la función I = STICK(1) y el valor de J será el que habría retornado J = STRIG(1).

Cuando compres tus joysticks, simplemente remueve esta rutina y coloca en su lugar las instrucciones originales del programa.

__**Listado de instrucciones "programa 1"**__
%%(code)
100 I=PEEK(764)
110 PRINT "I = ";I:REM IMPRIME VALOR DE LA TECLA PRESIONADA
120 POKE 764,255:REM INDICA AL COMPUTADOR QUE NO SE HA PRESIONADO TECLA ALGUNA 
130 FOR K=1 TO 500:NEXT K:REM HACE MAS LENTO EL PROCESO PARA QUE PUEDAS LEER LOS RESULTADOS
140 GOTO 100
%%
__**Listado de instrucciones "programa 2"**__
%%(code)
100 JOYSTICK=1000:REM LOCALIZACION DE LA SUBRUTINA
105 GOSUB JOYSTICK:REM VERIFICA LA POSICION DEL JOYSTICK
110 PRINT "EL JOYSTICK TIENE EL VALOR ";I
120 PRINT "EL BOTON TIENE EL VALOR    ";J
130 FOR K=1 TO 500:NEXT K
140 GOTO 105
1000 REM SUBRUTINA QUE REEMPLAZA AL JOYSTICK
1010 I=PEEK(764):J=1:POKE 764,255
1020 IF I=14 THEN I=14:RETURN
1030 IF I=79 THEN I=6:RETURN
1040 IF I=7 THEN I=7:RETURN
1050 IF I=71 THEN I=5:RETURN
1060 IF I=15 THEN I=13:RETURN
1070 IF I=70 THEN I=9:RETURN
1080 IF I=6 THEN I=11:RETURN
1090 IF I=78 THEN I=10:RETURN
1100 IF I=33 THEN I=15:J=0:RETURN:REM BOTON DE DISPARO
1110 I=15:RETURN
%%
**!!NOTA :!!**
Para aclararlo un poco más, te recordamos que la capacidad de memoria de tu computador es 64Kb, es decir tiene 64 * 1.024 = 65.536 celdas diferentes en donde almacenar información y dispones de dos comandos para actuar sobre el contenido de éstas:

**PEEK**, que tiene la Forma PEEK(nnn), en donde nnn es la dirección (o localización) y puede variar de 1 a 65.536. Esta Función te permite conocer el contenido de la memoria (celda) nnn, de modo que si ejecutas el comando:

PRINT PEEK(nnn)

El computador te retornará el valor que deseas averiguar.

**POKE**, que tiene la forma POKE N,M. Este comando ejecuta la acción inversa de la función anterior, vale decir, te permite colocar el valor que desees en la localización que necesites. N es la localización y M es el valor a colocar.

Estas dos funciones son muy útiles para reemplazar rutinas que en Basic resultan complicadas y lentas, sin recurrir a la programación en Assembler.

Si deseas profundizar más sobre este tema, revisa el Capítulo 3 del libro ((/Biblioteca/CompuAtari Compu Atari)), escrito por la Ing. Srta. Verónica Espinosa (Ediciones Compugráfica Ltda., 1986).