009:trucos

Microhobby 9. Año II, del 1 al 7 de enero de 1985

Dentro del capítulo de protección de programas se encuentra la técnica de grabar en cinta los programas Basic como si se tratara de bytes.

Este método no funcionaría correctamente en el caso de los microdrives; la causa es que durante la carga de un programa desde el drive, la zona de trabajo cambia de acuerdo a la información a la que accede sucesivamente, con lo cual ésta no corresponde a lo que habíamos salvado en un principio.

Antes de nada, hay que decidir qué es lo que queremos salvar (para obtener la dirección de comienzo), y su longitud en bytes.

Dirección de comienzo:

  1. Incluyendo la pantalla: DIR = 16384.
  2. Programa Basic en adelante: DIR = 23552.

Longitud en bytes de la parte de la memoria que queremos salvar:

  1. Sólo programa Basic: LONG = PEEK 23627 + 256 * PEEK 23628 + 2 — DIR
  2. Programa más variable: LONG = PEEK 23641 + 256 * PEEK 23642 + 1 — DIR
  3. Con bytes o código máquina incluido: LONG = última dirección del c/m + 1 — DIR

La orden final que debemos dar al ordenador es:

SAVE "nombre" CODE DIR, LONG

que debe estar en una línea de programa; haremos un 'GO TO' a esa línea y eso es todo.

Una precaución que es imprescindible tomar siempre es SALVAR LA ZONA DE LAS VARIABLES DEL SISTEMA.

5 REM *** ASIGNACION DE DIRECCION DE COMIENZO Y LONGITUD TOTAL A SALVAR ***
10 LET DIR = 23552: LET LONG = PEEK 23627 + 256 * PEEK 23628 + 2 - DIR
15 REM *** SALVA EL PROGRAMA COMO BYTES ***
20 SAVE "PRUEBA" CODE DIR, LONG: GO TO 30
30 CLS : PRINT "ESTE PROGRAMA SE HA AUTOEJECUTA-DO COMO BYTES. SOLO HEMOS SALVADOEL PROGRAMA BASIC ( INCLUYENDO VARIABLES DEL SISTEMA )."
40 STOP

Continuando con el asunto de invertir el contenido de la pantalla, presentamos la que podíamos denominar «segunda parte» de la cuestión; de la misma forma que invertíamos los caracteres de la pantalla, haremos lo mismo con los atributos.

De nuevo nos vemos obligados a recurrir al código máquina por razones de velocidad y de sencillez de programación.

El método empleado en ambas rutinas es prácticamente el mismo, y pueden utilizarse juntas o por separado.

1 DATA 243, 33, 224, 87, 6, 22, 17, 32, 0, 25, 229, 213, 197, 6, 16, 27, 229, 25, 235, 225, 126, 79, 26, 119, 121, 18, 35, 27, 16, 246, 193, 209, 225, 16, 227, 251, 201
40 FOR I = 50100 TO 50136: READ X: POKE I, X: NEXT I
50 FOR I = 0 TO 21: PRINT AT I,0; PAPER 4; INK 0; "0123456789012345"; PAPER 3; INK 0; "0123455789012345": NEXT I
60 RANDOMIZE USR 50100
70 STOP

Para todos los amantes de los juegos y, sobre todo, para los programadores que se encuentran con que los 21 gráficos definidos por el usuario se agotan a las primeras de cambio, presentamos una pequeña técnica que nos permitirá emplear todos los juegos de caracteres que queramos.

Hay una variable del sistema situada en las posiciones de memoria 23675 y 23676, denominada UDG, cuyo contenido apunta a la dirección del primer carácter gráfico definido por el usuario.

Si cambiamos esa dirección de memoria por otra, el ordenador creerá que el juego de caracteres gráficos está en otra dirección; según el número de veces que hagamos esto, tantos juegos distintos tendremos.

Supongamos que queremos almacenar un segundo juego a partir de la posición de memoria 40960; este número es 160 x 256 más cero. Así que haríamos POKE 23675,0 y POKE 23676,160 después de introducir nuestros gráficos en la memoria.

  • 009/trucos.txt
  • Última modificación: d/m/Y H:i
  • por miguel