CODINGAMSTRAD SEMANAL ★ GIROS DE GRÁFICOS ★

Giros de gráficos
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

En el presente capítulo veremos una rutina que se encargará de realizar esta tarea, pudiendo girar un gráfico hasta en cuatro posiciones distintas, cada una de ellas distanciada por 90 grados.

Cuando creamos nuestros propios gráficos muchas veces tenemos que realizar los mismos en diferentes posiciones, y para ello tenemos que definir dicho gráfico para cada una de las diferentes posiciones.

De esta forma, si nosotros tenemos un gráfico en la posición inicial, al ejecutar nuestra rutina obtendremos dicho gráfico girado en 90 grados.

Si, una vez hecho esto, ejecutamos de nuevo la rutina, obtendremos sucesivamente el mismo gráfico, pero esta vez con un giro de 180 y 270 grados con respecto al original.

Como siempre que hablamos de gráficos, y dadas las diferentes estructuras de pantalla que posee el Amstrad, debemos hacer algunas aclaraciones.

Así pues, nuestra rutina funcionará correctamente sólo con gráficos realizados expresamente para el modo 2 de pantalla, en el cual todos los bits que componen cada uno de los bytes contienen información de pixel encendidos o apagados, sin tener en cuenta el color.

En los gráficos realizados para los demás modos de pantalla, el programa no funcionará, ya que los bytes que componen dicho tipo de gráficos contienen información sobre el color con el que deben ser imprimidos, lo cual dificulta enormemente la operación de giro.

Debemos también apuntar que la rutina está preparada para funcionar con gráficos compuestos de ocho bytes; es decir, con gráficos semejantes a caracteres definidos por el usuario.

Esto se ha hecho de esta forma para que esta rutina sea utilizable tanto por aquellos que utilizan bloques gráficos, como para aquellos que prefieren los gráficos definidos por el usuario.

De cualquier forma, esta rutina puede ser modificada de manera que sea utilizable para bloques gráficos de cualquier dimensión, realizando los cambios oportunos en el bucle principal del programa.

Vamos a explicar a continuación cuál es el método de trabajo para conseguir el giro de los gráficos en cualquier dirección.

Debemos tomar el bit 7 del primer byte y colocarlo en el bit 7 del octavo (último) byte, el bit 6 del byte número uno, debe colocarse en el último bit del byte 7, y así sucesivamente, hasta llegar al bit 1 del primer byte, que deberá colocarse en el bit 7 del mismo byte.

Seguidamente empezaremos a colocar ordenadamente los bits pertenecientes al segundo byte de nuestro gráfico. Pondremos el bit 7 de dicho byte en el sexto bit del último byte, el bit 6 del segundo byte, en el 6 del byte 7, y así sucesivamente hasta colocar el bit 0 del segundo byte, en el bit 6 del primero.

Esta operación deberemos ejecutarla con los ocho bytes que componen nuestro gráfico, colocando cada uno de los bits en las posiciones correspondientes.

Gráficamente la operación a realizar sería como la que se representa a continuación:

Gráfico inicial Gráfico final
12345678 57..........1
. .
. .
. .
5758596061626364 64..........8

En el gráfico anterior, los números del 1 al 64 representan los 64 bits que forman los ocho bytes que componen nuestro gráfico.

De esta forma, si, por ejemplo, tomamos el gráfico correspondiente a la letra «A», éste quedaría de la siguiente forma, una vez producido el giro:

00011000
00100100
01000010
01000010
01111110
01000010
01000010
00000000
00000000
01111100
00010010
00010001
00010001
00010010
11111100
00000000
Gráfico inicial Gráfico girado

Veamos a continuación cuál es el funcionamiento de la rutina y cuáles son los parámetros principales que utiliza el programa.

Las dos variables principales que utiliza el programa deben apuntar a dos buffers distintos, uno de ellos debe contener el gráfico inicial, y el otro debe reservar un espacio para colocar el gráfico girado.

BUFLET .... Dirección del gráfico
BUFFER .... Espacio reservado para el gráfico final

Así pues, debemos cargar el registro doble DE con la dirección donde se encuentra nuestro gráfico (BUFLET), y el registro HL con la dirección del espacio reservado para colocar el gráfico una vez girado.

LD DE,BUFLET
LD HL,BUFFER

Seguidamente entramos en un bucle, en el cual se irán tomando los ocho bytes que componen el gráfico, para entrar más tarde en otro, donde se moverán los ocho bits de cada uno de dichos bytes.

En este último es donde se realiza realmente el trabajo de modificación de nuestro gráfico.

Antes de entrar en el mismo, deberemos cargar en el acumulador el contenido del byte correspondiente al gráfico, al cual se apunta a través del registro doble DE.

LD B,8
LD A,(DE)

Esta rutina funciona solamente en el modo 2 de pantalla, ya que al no tener en cuenta el color se facilita enormemente la operación de giro Seguidamente rotamos el acumulador hacia la derecha, consiguiendo de esta forma colocar el bit 0 en el Carry, para más tarde traspasarlo a la dirección de memoria apuntada por HL (dicho registro indica el espacio reservado para el gráfico final), mediante una rotación a la izquierda de dicho registro doble.

NUD3: RRA
RL (HL)
INC HL
DJNZ NUD3

Por último, incrementamos el registro DE y se vuelve a ejecutar el bucle, tomando el siguiente byte correspondiente al gráfico inicial.

La rutina, tal como está planteada, gira el gráfico inicial 90 grados hacia la derecha, con lo cual, ejecutándola sucesivamente, conseguiremos otra vez el gráfico inicial.

Con la misma estructura de nuestro programa, se podría conseguir efectuar este giro, pero hacia la derecha, con lo cual se conseguiría girar el gráfico inicial también 90 grados, pero esta vez en sentido contrario a las agujas del reloj.

Para aquellos que deseen confeccionar una rutina similar, pero para girar bloques de mayores dimensiones, se debe tener en cuenta que en primer lugar se deben transformar todos los bytes que componen la primera fila horizontal, una vez hecho esto, se deberá pasar a la siguiente línea, hasta llegar a la última.

Por último, vamos a comentar otro tipo de giro que nos puede resultar interesante a la hora de trabajar con nuestros gráficos.

Se trata de girar un gráfico de forma que se obtenga la imagen del inicial reflejada en un espejo.

Para un byte cualquiera, gráficamente quedaría de la siguiente manera:

0XX0000X X0000XX0
Gráfico inicial Gráfico «espejo»

Para conseguir este efecto para un byte, podríamos escribir el siguiente programa:

LD A,(HL)
CPL
LD (HL),A

Suponiendo que el registro doble HL apuntara a la dirección del gráfico, cargaríamos el contenido de dicha dirección en el acumulador, efectuaríamos su complemento y, a continuación, lo cargaríamos en dicha dirección de memoria de nuevo, pero esta vez ya modificado.

Así pues, si deseáramos transformar un gráfico compuesto por ocho bytes, deberíamos hacer:

LD HL,GRÁFICO
LD B,8
BUC: LD A,(HL)
CPL
LD (HL),A
INC HL
DJNZ BUC
RET

De la misma forma podríamos conseguir la imagen especular de bloques gráficos de mayores dimensiones.

En definitiva, tecleando esta rutina se pueden conseguir giros de 90 grados en cuatro posiciones diferentes de nuestros gráficos. Así podremos utilizar la posición que más se ajuste a nuestros deseos.

Utilizando esta rutina se pueden realizar airos en gráficos de 8 bytes, pero puede modificarse para utilizarlo en gráficos de cualquier dimensión.

AS

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTOR: Alberto Suñer
 



★ AMSTRAD CPC ★ DOWNLOAD ★
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.74-desktop
Page créée en 311 millisecondes et consultée 64 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.