CODINGAMSTRAD SEMANAL ★ AHORRAR MEMORIA EN GRÁFICOS II ★

Ahorrar memoria en gráficos II
★ 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 ★ 

Siguiendo con el tema de cómo incluir el mayor número posible de gráficos en nuestros programas, en esta ocasión presentamos una rutina con la que se consigue ahorrar la mitad de memoria en cada uno de ellos. Está especialmente indicada para aquellas imágenes que ocupen la mayor parte de la pantalla.

En algún capítulo anterior ya se ha abordado este problema, al cual se le han dado algunas posibles soluciones, hoy intentaremos dar otra salida a este gran inconveniente que en algunos casos nos obliga a rechazar gráficos verdaderamente bonitos debido a su gran longitud.

Con el método que comentaremos a continuación, estaremos en condiciones de ahorrar la mitad de la memoria que ocupe un gráfico, en cualquiera de los modos de pantalla en que nos permite trabajar nuestro Amstrad.

Las ventajas de la aplicación de esta rutina son verdaderamente asombrosas, ahora bien, esto no se consigue por arte de magia, y, por tanto, deberá existir algún inconveniente.

El método utilizado para el ahorro de memoria, consiste en aumentar el tamaño del gráfico por dos, es decir, igual que si lo viéramos a través de una lupa, con lo que, obviamente, se pierde algo de resolución gráfica.

Como ya hemos dicho anteriormente, esta pérdida de resolución puede resultar mínima, si se aplica a figuras relativamente grandes, ya que en ellas queda mucho más disimulada la pérdida de resolución.

El mayor problema con los gráficos es la memoria que ocupan.

Por tanto, aconsejaríamos que este método se utilizara únicamente para gráficos que estén destinados a ocupar gran parte de la pantalla, aunque se puede aplicar a figuras de dimensiones más reducidas con resultados verdaderamente muy buenos.

La utilización de esta rutina, es especialmente recomendada para aplicarla en aquellos gráficos que deban ocupar gran parte de la pantalla, ya que se conseguirá rellenar gran parte de la misma con una escasa ocupación de memoria, con lo que se podrán obtener pantallas más vistosas al estar ocupadas la mayor parte de ellas por gráficos.

Vamos a explicar a continuación cómo funciona cada una de las rutinas para los diferentes modos de pantalla.
Para el modo de alta resolución, el funcionamiento es bien sencillo, únicamente se trata de duplicar cada uno de los bits que componen un byte, con lo que se conseguirá dos bytes de gráfico aumentado por cada uno de gráfico original.

Esto se conseguirá chequeando los bits, y en caso de que estén a uno, duplicarlos con unos, y en caso de estar a ceros duplicarlos con ceros.

Dicha operación se realizará para cada línea horizontal. A continuación se duplicarán línea por línea, con lo que se obtendrá la magnificación en sentido vertical.

La rutina que se encarga de realizar este trabajo, para el modo 1 de pantalla, es similar a la anterior, pero en este caso deberemos tener en cuenta que los bits llevan, en este caso, información del color con que se va a imprimir el gráfico, por lo que se deberá tratar de una forma especial.

Así pues, deberemos tener en cuenta cada una de las parejas de bits que se encuentran en un byte.

En este caso, igual que en el anterior, tomaremos en primer lugar cuatro bits originales con lo que se logrará un byte ampliado y luego los otros cuatro.

Ahora bien, los bits que deberemos tomar en primer lugar serán aquellos que lleven la información de los dos primeros pixels, que serán los bits 7, 6 con sus correspondientes parejas, el 3 y 2.

El siguiente byte ampliado se formará con las restantes parejas de bits.

Para el modo de menor resolución, es decir el que permite mayor número de colores simultáneamente, la operación de magnificación será algo distinta a las anteriores, ya que en este caso el byte original únicamente es capaz de imprimir dos pixels.

Así pues, el byte aumentado que se obtenga imprimirá únicamente un pixel. Por lo tanto, en este caso se observará la información correspondiente al primer pixel, la cual se indica en alguno de los bits 7, 5, 3, 1 y se ampliará, consiguiéndose así el primer byte ampliado.

La rutina reduce la ocupación de una figura a la mitad.

El restante byte magnificado se conseguirá chequeando la información de los restantes bits.

Debemos tener en cuenta que dichas operaciones deberán efectuarse para todos y cada uno de los bytes que componen el gráfico original.

Estas rutinas almacenarán el gráfico ampliado a partir de la posición de memoria que nosotros indiquemos, de esta forma conoceremos la localización de nuestro nuevo gráfico.

El programa que hemos preparado incorpora una rutina de impresión para mostrarnos la forma del gráfico una vez magnificado, aunque dicha rutina se podrá quitar en cualquier momento, con sólo eliminar las llamadas que se hacen a la misma desde distintas partes del programa.

Debemos tener en cuenta que el gráfico obtenido finalmente, tendrá una longitud doble a la del gráfico original, cosa que deberemos tener presente en caso de que se quiera salvar en disco o cinta dicha figura.

Para realizar esta operación únicamente deberemos efectuar un save con la dirección que hayamos indicado en la correspondiente llamada al programa, y una longitud doble a la del gráfico original.

Para un manejo más fácil de la rutina de magnificación de gráficos, hemos preparado un nuevo comando RSX, con el cual podremos realizar más fácilmente las operaciones de ampliación de gráficos.

Esta nueva instrucción será del siguiente tipo:

|MAGNI,MOD,POSX,POSY,GRAF,DIRB, DIMX,DIMY

donde cada uno de los parámetros corresponde a:

Mod.....Modo de pantalla del gráfico.
Posx.....Coordenada vertical de pantalla, imprimirá el gráfico obtenido.
Posy.....Coordenada horizontal.
Graf.....Dirección del gráfico original.
Dirb.....Dirección del gráfico ampliado.
Dimx .... Altura del gráfico original.
Dimy .... Anchura del gráfico original.

De esta forma una vez ejecutada la rutina de magnificación, el gráfico ampliado se encontrará en la dirección indicada por el parámetro dirb, con lo cual lo podremos salvar de la forma indicada anteriormente.

Debemos tener cuidado con el valor que se da a dicho parámetro, ya que un valor erróneo podría provocar un cuelgue del ordenador. Esto ocurrirá si dicha dirección se encuentra cerca de la dirección de ejecución del programa, es decir de la posición de memoria &8000).

Así pues, para que no ocurra nada anormal, la dirección del gráfico ampliado, deberá ser lo más baja posible para que de esta forma no pueda interrumpir en ningún momento nuestro programa.
El programa se especializa en gráficos de gran tamaño.

Debemos fijarnos también en el valor que se le da a la variable mod, ya que dando un valor erróneo, el resultado obtenido será inservible, puesto que para cada modo de pantalla se utilizan diferentes rutinas.

Los valores a introducir en los parámetros correspondientes a la dimensión del gráfico, deberán darse en caracteres, tanto en alto como en ancho.

Para aquellos que deseen separar las rutinas de ampliación de gráficos de la rutina de impresión de pantalla, diremos que las correspondientes, a cada uno de los modos son las siguientes:

Magni0 . . Ampliación para modo 0
Magni1 . . Ampliación para modo 1
Magni2 . . Ampliación para modo 2

Para la utilización de esta rutina, deberemos copiar el listado ensamblador que aparece al fina del artículo, y una vez ensamblado salvarlo en cinta o disco.

Gracias al Código Máquina no se aprecia disminución alguna de velocidad.

Aquellos que no posean ensamblador pueden utilizar el cargador Basic que aparece a continuación, y una vez ejecutado, en caso de no existir errores, almacenarlo de la forma siguiente:

SAVE"MAGNI" , B , &9000, &1DE

Cuando deseemos ejecutar el programa, deberemos cargar el código objeto en la dirección de memoria &9000, realizando una llamada a dicha dirección para inicializar los nuevos comandos RSX.

A partir de ese momento estaremos en disposición de ampliar los gráficos que deseemos en cualquiera de los modos de pantalla.

AS

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



Page précédente : Ahorrar memoria en gráficos
★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
 » Ahorrar  memoria  en  graficos  2    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2026-07-05
DL: 2
TYPE: PDF
SiZE: 1232Ko
NOTE: Supplied by archive.org ; 13 pages/PDFlib v1.6

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.732-desktop
Page créée en 650 millisecondes et consultée 17 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.