006:trucos

No renderer 'odt' found for mode 'odt'

Microhobby 6. Año I, del 11 al 17 de diciembre de 1984

Nuestros lectores, sin duda, recordarán en esta misma sección de trucos, un método para conseguir que el borde de la pantalla acumulara varios colores, aprovechando el tiempo de barrido de la ULA.

Lo que proponemos aquí es una forma de convertir el borde de la pantalla en un calidoscopio de color, empleando para ello la instrucción del Basic «OUT» y el port (puerto) número 254. Aclararemos que un PORT es un dispositivo de los llamados I/O (Input/Output, Entrada/Salida), usado por el microprocesador para intercambiar datos con el mundo exterior y que, en este caso, su valor numérico afecta al color del borde de la pantalla.

Así, una instrucción de tipo OUT '254,6' pondrá el borde de color amarillo; esto quedará más claro con el siguiente programa:

10 REM *** BORDER DEMO ***
10 FOR A=1 TO 100
30 LET N=INT (RND*7)
40 OUT 254, N
50 NEXT A

Le proponemos aquí una cortísima rutina en código máquina que le permitirá realizar un desplazamiento a la derecha de toda la pantalla de dos pixels en dos pixels, creando un efecto bastante curioso para rótulos de presentación, por ejemplo.

La subrutina es reubicable, esto es, puede ejecutarse en cualquier lugar de la memoria.

Para que se produzca el efecto deseado, el bucle 'FOR-NEXT' de la línea 40 debe tener un número de pasos múltiplo de 8 (40=5*8).

10 RESTORE : FOR I=40000 TO 40018: READ X: POKE I, X: NEXT I
20 DATA 33, 0, 64, 14, 192, 6, 32, 183, 203, 30, 203, 30, 35, 16, 249, 13, 32, 243,201
30 LIST
40 FOR I=1 TO 40: RANDOMIZE USR 40000: NEXT I

Si queremos evitar que otra persona vea el listado de nuestro programa, entre los muchos métodos que existen para lograrlo, podemos aprovechar la variable del sistema 'DF SZ' localizada en la dirección de memoria 23659.

Esta posición la utiliza el sistema operativo para memorizar el número de líneas de la parte inferior de la pantalla reservadas para mensajes de error, o cualquier otro mensaje que cause la detención del programa, como por ejemplo, cuando pulsamos las teclas 'CAPS SHIFT' y 'BREAK' simultáneamente.

Si hacemos 'POKE 23659,0' cualquier intento de detener el programa bloqueará el ordenador y no podremos recuperar el control.

Para volver a la situación original, teclear 'POKE 23659,2'.

Hablando en general, suele ser necesario en cualquier programa que mantenga un diálogo con el usuario mediante 'INPUTS', letreros o algún otro tipo de texto, mantener «actualizada» la información de pantalla borrando lo supérfluo.

Una manera de hacerlo sería construir una subrutina que aceptara por ejemplo, tres parámetros: la longitud de texto a borrar, la posición horizontal (X) y la posición vertical (Y).

Con la idea de generalizar la subrutina lo más posible, es conveniente recurrir a este método válido para cadenas de cualquier longitud y situadas en cualquier posición de la pantalla, en lugar de fijar los parámetros dentro de la misma subrutina.

En principio, lo más simple para borrar algo es poner espacios encima, así que dimensionaremos una matriz alfanumérica 'B$' de 32 elementos que son los caracteres que caben en una línea.

Ahora, supongamos que queremos borrar la palabra «MICROHOBBY» situada en la posición 0,0 de la pantalla: el programa siguiente lo hace:

Lo único a tener en cuenta es que, como sólo queremos borrar 'A$', contamos con ello en la línea 9000.

Si quisiera usted borrar grandes áreas de la pantalla, sólo tiene que cambiar el número de elementos de la matriz.

10 REM *** BORRAR DEMO ***
20 DIM B$(32): LET X=0: LET Y=0
30 LET A$="MICROHOBBY": PRINT AT X, Y; A$
40 PAUSE 100: GO SUB 9000: REM *** SUBRUTINA DE BORRADO ***
50 STOP
9000 PRINT AT X, Y; B$( TO LEN A$): RETURN
  • 006/trucos.txt
  • Última modificación: d/m/Y H:i
  • por 127.0.0.1