Esta vez hablaremos de las diferentes técnicas de protección para nuestros programas hechos en ATARI BASIC, se preguntaran para que usarlo ahora, que fin tiene,  Etc. Pero la idea es saber cómo se realizaban.

Partimos con la primera de ella, y la más fácil que es desactivando teclas que permiten que un programa en BASIC pare su ejecución.

Tecla BREAK : Presionando esta tecla se para la ejecución de un programa en BASIC, con lo cual nos devuelve el control para hacer lo que queramos con el programa ya sea listarlo, modificarlo, grabarlo etc.
Para desactivar esta tecla se deben pokear las siguientes 2 posiciones de memoria dejando los siguientes valores.

POKE 16,112:POKE 53774,112

No olvidar que esta línea debe ir después de un GRAPHICS. Ya que cuando se ejecuta esta instrucción en BASIC las posiciones de memoria vuelven a su estado original.

10 GRAPHICS 1
20 POKE 16,112:POKE 53774,112
30 POSITION 0,3:PRINT #6;"PRESIONA TECLA break"
40 GOTO 40

Tecla RESET : Presionando esta tecla se resetea nuestro ATARI, con lo cual nos devuelve otra vez el control para hacer lo que queramos con el programa.
Para desactivarlo tenemos que pokear la siguiente posición de memoria y lo dejamos con el valor 1, ahora cada vez que se presione esta tecla el ATARI se resetea pero borrando completamente todo.

POKE 580,1

10 POKE 580,1
20 GRAPHICS 1
30 POSITION 0,3:PRINT #6;"PRESIONA TECLA reset"
40 GOTO 40

La segunda, es cambiar las variables de ATARI BASIC por valores inválidos para evitar que modifiquen nuestro programa, así evitamos que alguien cambie cualquier cosa. Guarde su programa y después escriba:

32766 END
32767 FOR VARI=PEEK(130)+PEEK(131)*256 TO PEEK(132)+PEEK(133)*256:POKE VARI,155:NEXT VARI

Para ejecutarlo escriba GOTO 32767.Ahora liste el programa con el comando LIST y enter, vera que todas las variables fueron reemplazadas por un enter (155).

10 DIM NOM$(10)
20 NOM$="ATARIWARE"
30 PRINT CHR$(125);" ";NOM$
32766 END
32767 FOR VARI=PEEK(130)+PEEK(131)*256 TO PEEK(132)+PEEK(133)*256:POKE VARI,155:NEXT VARI

La tercera, es como evitar que listen nuestro programa con lo cual evitamos que miren nuestro código escrito. Antes ejecutar estas líneas primero guarde su programa normalmente, después escribe lo siguiente:

32766 END
32767 POKE PEEK(138)+256*PEEK(139)+2,0:SAVE "D:PROGRAMA2.BAS":NEW

Para ejecutarlo escriba GOTO 32767 y el programa se guardara sin problema, pero ahora solo lo podrá ejecutar con la instrucción RUN "D:PROGRAMA2.BAS", ya que si lo trata de cargar con load el atari lo cargara pero no dejara escribir nada.

10 DIM NOM$(10)
20 NOM$="ATARIWARE"
30 PRINT CHR$(125);" ";NOM$
32766 END
32767 POKE PEEK(138)+256*PEEK(139)+2,0:SAVE "D:PROGRAMA2.BAS":NEW

La cuarta, es una que me llamo bastante la atención ya que es una llave de seguridad a nivel de hardware y software.

A nivel de hardware se crea un puente entre los pines del joystick, la idea es usar los pines correspondientes a los paddles y fijar los valores que usan (0 al 288) . Los fijamos uniendo los puntos con una resistencia. Esta nos entregara un valor único la cual nos servirá para validar si el usuario tiene la llave de seguridad.

Como se ve en la imagen se unirían con una resistencia los pines 5 con el 7, el 9 con el 7 y el 4 con el 8. Con esto tenemos un valor fijo para el paddle 0, paddle 1 y botón. Ahora podemos preguntar fácilmente en ATARI BASIC.

10 IF PADDLE(0)<>100 AND PADDLE(1)<>50 AND STRIG(0)=1 THEN NEW

Y preguntamos al inicio del programa, si no está la llave colocada en el ATARI el programa se borra.

10 FOR I=1 TO 10
20 GOSUB 100
30 GRAPHICS 1
40 POSITION 0,3:PRINT #6;"PANTALLA #";I
50 A=1^1^1^1^1^1^1^1
60 NEXT I
70 END
100 REM IF PADDLE(0)<>100 AND PADDLE(1)<>50 AND STRIG(0)=1 THEN NEW
110 RETURN

No olvidar que todas las técnicas de protección escritas aquí se pueden usar en conjunto para así hacer un programa más seguro.

Fin.