Hay que cambiar el 15 por 16 en la linea que da error
Esto FR=JV AND 15 por esto FR=JV AND 16
Explicacion:
Estas pidiendo un valor del vector mas grande que el limite del vector...
O sea vos tenes DR$ del 0 al 10 (11 posiciones)... donde DR$(1) es "UP", DR$(2) es "DOWN"... y el ultimo es DR$(10) es "DO/RI"
El valor JV que estas usando en la linea 125, PRINT DR$(JV), esta fuera de rango. O sea que JV debe ser 14, 15.. o algun valor mayor al limite del vector que es 10.
Para comprobar que valor tiene JV antes de hacer llamada erronea, crea una linea
124 PRINT "JV VALOR:" : PRINT JV
Deberias fijarte porque JV vale mas que 10...
Por lo que lei en la guia tenes en los primeros 5 bits las lecturas del puerto del joystick, lo que pasa que el PEEK lee el byte entero. Por eso usa el AND para despejar el valor que le interesa
Los bits del joystick se interpretan asi:
Bit 1 Prendido: Up
Bit 2 Prendido: Down
Bit 3 Prendido: Left
Bit 4 Prendido: Right
Bit 5 Prendido: Fire
Si haciendo JV=PEEK(56231)
Por ejemplo
Código: Seleccionar todo
Nro Bit 1 2 3 4 5
Potencias de 2 1 2 4 8 16
Bits Leidos 0 1 0 1 1
El bit 2 y 4 esta prendido, o sea que el joystick esta DOWN+RIGHT, y el bit 5 esta prendido, o sea que ademas esta el boton de disparo.
Si sumamos las potencias de 2, el valor de JV es (bit1) 2 + (bit 4) 8 + (bit 5) 16 = 26
O sea que JV=PEEK(56231) te guarda en JV el valor 26.
Por ejemplo con esto
FR=JV AND 16
despeja solo el bit del joystick
Código: Seleccionar todo
Nro Bit 1 2 3 4 5
Potencias de 2 1 2 4 8 16
Bits Leidos 0 0 1 1 1
Operandor AND AND
Valor 16 0 0 0 0 1
--------------------------------
Bits Que Quedan 0 0 0 0 1
Si FR vale 16, el bit 5 estaba prendido. O sea que el boton del joystick estaba apretado.
La linea 110 habria que reemplazar el valor 15 por 16, sino no estaria detectando el Joystick
Si el boton estaba apretado, FR valdra 16, si estaba suelto valdra 0. Entonces se lo resta a JV para apagar UNICAMENTE ese bit. Fijate que si al valor de 26, le resto 16, me da 10, lo mismo que esten prendidos solo los bits 2 y 4.
Cuando haga PRINT DR$(JV).. JV valdria 10, si vemos el valor del vector en la posicion 10, es "DO/RI"