Microhobby 4. Año I, del 26 de noviembre al 03 de diciembre de 1984

Iniciación: El color en el Spectrum (III)

Los atributos en el Spectrum

Además de las estudiadas hasta ahora, existen otras maneras de cambiar los colores en el Spectrum. En el capítulo de esta semana presentamos algunas de estas variedades y la forma en que está distribuida la pantalla que contiene los atributos de color.

La capacidad gráfica del Spectrum se ve potenciada con el uso del color.

Existe una forma de colocar los colores en la pantalla, diferente de la que hemos visto hasta ahora: se trata de usar los códigos ASCII, mediante la instrucción 'CHR$'. Si coge la página 183 de su manual, observará una larga lista donde encontrará, al lado de los caracteres de su ordenador, unos números que representan a los códigos. Los comprendidos entre el 6 y el 23 tienen la peculiaridad de que no sirven para imprimir caracteres, sino que se utilizan para producir determinados efectos, como por ejemplo, situar la coma tras la sentencia 'PRINT', en un lugar determinado, o mover el cursor hacia un lado o hacia otro.

De la misma forma podemos cambiar los colores de la imagen del televisor. Si observamos los códigos 16, 17, 18, 19 y 20, veremos que, junto a ellos, aparecen los nombres de los comandos que utilizamos para cambiar los atributos de color de nuestro ordenador.

Así, por ejemplo, el número 17 corresponde al papel, por lo que si colocamos dicho número junto a la sentencia 'CHR$', será lo mismo que si ejecutáramos el comando 'PAPER':

10 PRINT CHR$ 17; CHR$ 5; "hola"

También podemos cambiar el color de la tinta:

10 PRINT CHR$ 17; CHR$ 5; CHR$ 16; CHR$ 7

Como habrán podido observar, tras el código del papel situamos un punto y coma, y, a continuación se indica el color elegido, mediante su número de código correspondiente situado tras 'CHR$'. Cuando lo que queramos modificar sea el estado de los atributos, como por ejemplo, en el caso de 'FLASH', 'CHR$', irá acompañado de un 0 ó de un 1, según el efecto que se pretenda conseguir:

PRINT CHR$ 18; CHR$ 1; "hola"

Aparentemente, este método de introducir los colores puede parecer para algunos un tanto pesado y carente de utilidad, frente a la rapidez con que actúan los comandos de color. Sin embargo, donde se demuestra su verdadera utilidad es a la hora de tratar con variables de cadena, ya que podemos asignarles al contenido de éstas los atributos que deseemos, algo que nunca podríamos hacer sin ayuda de 'CHR$'. Podemos comprobarlo con el siguiente ejemplo:

10 LET Z$=CHR$ 17 + CHR$ 5 + "Ejemplo"
20 PRINT Z$

La cadena 'Z$' aparece con el papel en color cyan, el mismo que habíamos asignado al definir los componentes de la variable alfanumérica en la línea 10. Siempre que llamemos a la variable, 'Z$', ésta nos aparecerá con los atributos que le hayamos dado.

Sin embargo, si queremos imprimir un elemento de la cadena por separado, habrá que tener mucho cuidado, porque si cambiamos, por ejemplo, la línea 20 por:

PRINT Z$(1)

nos aparecerá en la pantalla el mensaje 'K Invalid Colour'. Esto ocurre porque nuestro ordenador toma como primer elemento de la cadena el 'CHR$ 17'. Para evitar esto, podemos introducir en su lugar la línea:

PRINT Z$ (3 TO 5)

Pero, en tal caso, no aparecerán los atributos de color, ya que al suprimir los dos primeros elementos de la cadena, se eliminan también aquellos. La solución sería:

20 PRINT Z$ (TO 2); Z$ (3)

Como habrá observado anteriormente, cuando manipule cadenas mediante algún 'CHR$', deberá sustituir el punto y coma que colocábamos entre uno y otro por el signo “+”. Pruebe a utilizar los diferentes códigos en sus programas para acostumbrarse a trabajar con ellos.

Archivo de atributos

Muchos de nuestros lectores han oído hablar en numerosas ocasiones de la zona de atributos del Spectrum, e incluso algunos de los más introducidos en la materia sabrán que está comprendida entre la dirección 22.528 y la 23.296. Pero ¿cómo es y para qué nos sirve conocer esta zona?

En el archivo de atributos, se encuentra toda la información sobre las cualidades que poseen las 768 posiciones de la pantalla de nuestro televisor. Recordemos que el Spectrum tiene 24 líneas de 32 caracteres. Si las multiplicamos, obtendremos la cifra, antes mencionada, de la cantidad total de caracteres con los que podemos trabajar.

A cada dirección de memoria le corresponde una cualidad o unos atributos que la definen. Estas direcciones se empiezan a contar de izquierda a derecha, comenzando en el primer carácter del ángulo superior izquierdo y terminando en el último del ángulo inferior derecho.

Así, por ejemplo, al primer carácter de la fila 0, le corresponderá la dirección de memoria 22.528; al segundo de la fila 0, la 22.529; al primero de la fila 1, la 22.560, y así sucesivamente.

Para entenderlo mejor, introduzca la siguiente línea que le muestra la dirección que sigue la memoria en relación a la pantalla.

10 FOR I=1 TO 300: PAUSE 10: PRINT ">"; :NEXT I

El cuadro de la figura (1), nos muestra en el lado izquierdo del mismo, la dirección decimal y hexadecimal del primer carácter de la fila 0, y en el lado derecho, las correspondientes al último carácter de dicha fila. Esto nos servirá, a partir de ahora, para localizar rápidamente cualquier posición de memoria en la pantalla del televisor. Por ejemplo, si quisiéramos buscar la posición correspondiente a 23.000, veremos en la tabla que se encuentra entre la dirección 22.975 y la 23.007, por tanto pertenecerá a la fila 14. Para hallar el número de columna, bastará con restarle a la última dirección de la fila (23.007), la dirección que queremos buscar (23.000), y el resultado de ésta (7), restárselo a (31), que es el número total de columnas. En este caso la solución sería: fila 14 y columna 24.

Pantalla Abributos Línea Pantalla Atributos
Decimal - Hexadec. Número Decimal - Hexadec.
22.528 - 5800 0 22.559 - 581F
22.560 - 5820 1 22.591 - 583F
22.592 - 5840 2 22.623- 585F
22.624 - 5860 3 22.655 - 587F
22.656 - 5880 4 22.687 - 589F
22.688 - 58A0 5 22.719 - 58BF
22.720 - 58CO 6 22.751 - 58DF
22.752 - 58EO 7 22.783 - 58FF
22.784 - 5900 8 22.815 - 591F
22.816 - 5920 9 22.847 - 593F
22.848 - 5940 10 22.879 - 595F
22.880 - 5960 11 22.911 - 597F
22.912 - 5980 12 22.943 - 599F
22.944 - 59A0 13 22.976 - 59BF
22.975 - 59C0 14 23.007 - 59DF
23.008 - 59E0 15 23.039 - 59FF
23.040 - 5A00 16 23.071 - 5A1F
23.072 - 5A20 17 23.103 - 5A3F
23.104 - 5A40 18 23.135 - 5A5F
23.136 - 5A60 19 23.167 - 5A7F
23.168 - 5A80 20 23.199 - 5A9F
23.200 - 5AA0 21 23.231 - 5ABF
23.232 - 5AC0 22 23.263 - 5ADF
23.264 - 5AE0 23 23.295 - 5AFF
Fig. 1

Hay que hacer hincapié en la importancia de conocer perfectamente la distribución de la pantalla a la hora de hacer nuestros propios programas. Por eso, es conveniente que practiquen lo explicado anteriormente, buscando diferentes direcciones de memoria. Sin embargo, como no podemos olvidar que disponemos de un ordenador, una vez que dominemos la distribución del archivo de atributos, lo más lógico será utilizar un programa para hacer más fácil nuestra tarea. El que ponemos a continuación, cumple perfectamente con este cometido. Para parar el programa, tendrá que pulsar 'STOP'.

10 INPUT A: LET F=0
20 FOR I=22559 TO 23295 STEP 32
30 IF I=22559 THEN GO TO 50
40 LET F=F+1
50 IF A<=I THEN GO TO 80
60 NEXT I
80 LET C=I-A: LET C=31-C
90 CLS: PRINT AT 10,10,"FILA ";F;TAB 18;"COLUMNA "; INT C
100 GO TO 10

De ahora en adelante podremos utilizar este programa siempre que queramos localizar una posición de la pantalla de atributos, ya sea con el fin de analizar ésta o bien para modificar un determinado carácter de la misma, asignándole unos atributos diferentes.

Si por ejemplo escribiéramos la siguiente línea:

10 PRINT AT 10,10; PAPER 1;" "

al ejecutar la linea 10 nos aparecerá en la posición definida por 'A' un carácter con el color azul. Podría darse el caso de que quisiéramos hacer lo contrario que en los ejemplos anteriores, es decir, conociendo la posición de pantalla hallar la dirección de memoria correspondiente. Para ello hemos confeccionado el siguiente programa:

10 LET F=22496: INPUT "NUMERO DE LINEA = "; A
20 INPUT "NUMERO COLUMNA = "; B
30 FOR I=0 TO A
40 LET F=F+32
50 NEXT I
60 LET F=F+B
70 PRINT AT 10,10; "LA FILA ",A ;" COLUMNA ";B
80 PRINT FLASH 1; "CORRESPONDE A LA DIRECCION ";F

De esta forma podemos saber que a la posición 10,10 le corresponde la dirección 28.858.

Gabriel Nieto

 
004/iniciacion.txt · Última modificación: d/m/Y H:i (editor externo)
Recent changes RSS feed Creative Commons License Driven by DokuWiki Made on Mac