CODINGAMSTRAD SEMANAL ★ COMPACTOR DE PANTALLAS ★

Compactor de Pantallas
★ 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 ★ 


Aún no se ha hablado en esta serie dedicada a los gráficos, de las pantallas como tales, es decir, de aquellas pantallas que no están incluidas en el programa propiamente dicho, sino que únicamente hacen la función de presentación de nuestro programa.

La rutina que publicamos en este número tiene la función de reducir las pantallas, de tal manera que ocupen exactamente la mitad de lo que sería normal.
e todos es sabido que la memoria destinada al tratamiento de la pantalla en nuestro Amstrad, tiene una longitud de 16384 bytes, de esta forma cualquier pantalla que se almacene en disco o cinta ocupará 16 K, aunque debido a otras circunstancias, en un disco ocupará 17 K.

A primera vista no parece preocupante esta cantidad de memoria destinada a la pantalla, sobre todo si se está trabajando con una unidad de discos.

En el caso de aquellos que trabajen con un cassette, la posibilidad de reducir la longitud de la pantalla se presenta como una opción muy beneficiosa, debido a la lentitud de este método de carga.

En este último caso, la posibilidad de reducir la longitud de la pantalla en la mitad significaría pasar de ocho bloques de fichero a cuatro bloques lo cual significa una reducción considerable del tiempo de carga.

Veamos ahora qué puede significar un ahorro en la longitud de pantalla en el caso de que se esté trabajando con una unidad de disco.

Se nos ocurre, en principio, que una disminución de la longitud a la mitad de una pantalla, representa un ahorro importante para nuestro bolsillo, debido, sobre todo, al precio actual de los «diskettes», ya que en cada uno de éstos podremos almacenar mayor número de pantallas.

Otra ventaja que se puede obtener es el aumento de la velocidad de carga, aunque ésta no sea demasiado significativa en este caso.

Aparte de todas estas consideraciones, podemos sacar otras consecuencias más importantes si cabe, se trata de la posibilidad de incluir pantallas como tales en nuestros programas.

Realmente éste es el mayor beneficio que podremos obtener con el programa que presentamos hoy, ya que nuestro ordenador únicamente dispone de una cantidad de memoria determinada, y cualquier método de ahorro de memoria representa una gran ventaja a la hora de ponernos a programar.

Vamos a suponer que nos proponemos la confección de un programa tipo aventura gráfico-conversacional, en el cual a cada una de la pantalla que aparezcan, deben poseer una alta calidad, ya que en este tipo de programas la parte más importante es el diseño gráfico.

Una de las mayores ventajas de ahorrar memoria es la de poder utilizar ésta para incluir pantallas como tales en nuestros programas

Supongamos también que cada uno de los dibujos, ocupará una cuarta parte de la pantalla, y en el resto de ésta es donde aparecerán los mensajes, y donde introduciremos los nuestros a las preguntas del programa.

Pues bien, en circunstancias normales, teniendo en cuenta que nuestro ordenador tiene una capacidad de 40 K y que en una cuarta parte de la pantalla tendrá una longitud de 4 K, el programa podría contener como máximo unas 10 pantallas.

Vamos a suponer ahora que aplicamos nuestro programa de reducción a cada una de las pantallas que hemos creado, con lo cual conseguiremos una disminución de la pantalla a la mitad (como media); esto supondrá que el número de pantallas que podremos incluir en nuestro programa gráfico-conversacional será el doble que en el caso anterior.

Creo que esto es un ejemplo muy claro de las posibilidades que nos puede ofrecer la rutina reductora de pantallas.

Otra de las ventajas que se me ocurre en este momento, podría ser la posibilidad de incluir en nuestro programa varias pantallas de presentación, para las diferentes partes del programa, o bien pantallas de menú en las que se quiera incorporar toques gráficos.

Por supuesto, esta rutina será perfectamente aplicable a otros gráficos que no sean necesariamente pantallas, aunque no es aconsejable su aplicación en gráficos de dimensiones muy reducidas.

Otra cosa que se debe tener en cuenta es que la reducción que se consiga, dependerá absolutamente de la pantalla con que se esté trabajando.

¿Qué significa esta dependencia? Pues bien, esto quiere decir que la reducción no se realiza por arte de magia, y que en algunos casos conseguiremos reducir la longitud de una pantalla hasta una cuarta parte, y que en otras incluso es posible que la pantalla en forma «reducida» ocupe incluso más que en su forma original, aunque hemos de adelantar que esto último es realmente difícil que ocurra.

Veamos cuál es el método utilizado para conseguir esta reducción, con lo cual entenderemos mucho mejor lo que se ha dicho anteriormente.

En primer lugar, el programa coloca un puntero en la dirección inicial de pantalla, seguidamente se lee cada uno de los bytes que la componen. Por cada byte igual al anterior se incrementa un contador, hasta que se tropieza con un valor distinto al anterior.

En este punto coloca el valor del contador y el valor del byte de pantalla en un buffer, y pasa al siguiente byte de pantalla, para realizar la misma operación.

De esta forma, obtendremos la pantalla codificada de tal forma que el primer byte indicará el número de veces a imprimir con el valor del segundo byte.

BYTE 1
n. veces
BYTE 2
valor

Ahora podemos ver perfectamente la dependencia a la que se aludía anteriormente de la reducción conseguida respecto al tipo de pantalla.

De esta forma si consideramos un caso hipotético como es el que cada byte de la pantalla sea diferente al anterior, aplicando esta rutina de reducción, se obtendrá una pantalla que tendría una longitud igual al doble de la original, pero como ya hemos dicho esto es del todo imposible en una pantalla normal de presentación.

Para comprobar el funcionamiento de esta rutina, hemos tomado dos pantallas cualesquiera de dos juegos comerciales: se trata de «Knight Ghost» y «Cavern of Death».

Para estas dos pantallas se han conseguido los siguientes resultados:

Longitud de la
pantalla
original
Longitud de la
pantalla
reducida
Knight Ghost16.384 bytes9.376 bytes

Cavern of Death

16.384 bytes7.100 bytes

Como se puede comprobar, se ha conseguido una reducción media de la longitud de pantalla a la mitad.

Por supuesto, cada una de estas pantallas se podría reducir mucho más si se aplicara un método específico para cada una de ellas en particular.

Pero esto sería imposible de plasmarlo en un solo artículo, por lo que nos hemos decidido por la rutina que ha dado mejores resultados medios para la mayoría de pantallas probadas.

Algunos otros métodos de reducción, podrían basarse en la codificación únicamente de aquellos valores que más abundaran en una pantalla en concreto.

Volviendo a nuestra rutina, una vez ésta ha realizado el trabajo de reducción, se almacenan los nuevos valores en disco o cinta.

Este nuevo fichero incluye, además, el programa que se encargará de decodificar la pantalla en el momento en que se desee volcar en pantalla, además se salvará con una extensión concreta para poder distinguirlo del original:

NOMBRE.SCR

Para cargar cualquiera de las pantallas reducidas en memorias, deberemos proceder de la siguiente manera:

MODE X
MEMORY &3FFF
LOAD "PANTA.SCR", &4000
CALL &4000

El programa consta de dos partes, una en Código Máquina y otra en Basic; la primera de ellas se encarga de realizar la compresión propiamente dicha.
Un juego sin buenas pantallas no es nada. Por eso es tan importante poder utilizar una buena parte de la memoria en ellas El bloque de Basic nos permitirá cargar la pantalla original en memoria, y almacenará en disco o cinta el bloque de datos una vez se haya realizado el trabajo de codificación de datos, el cual incluirá la rutina encargada de codificar la pantalla.

Para poder utilizar este programa, previamente deberemos haber copiado el listado ensamblador que aparece al final del artículo, o bien teclear el programa cargador Basic que aparece a continuación.

En caso de que una vez ejecutado dicho programa no se haya presentado ningún mensaje de error, deberemos salvarlo en disco o cinta de la siguiente manera:

SAVE“COMPBIN”,B,&A000

Para poder utilizarlo, únicamente deberemos ejecutar el bloque de Basic, que se encargará de cargar en memoria la rutina en Código Máquina.

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 ★

Type-in/Listing:
 » Compactor  de  Pantallas    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2026-07-05
DL: 0
TYPE: PDF
SiZE: 397Ko
NOTE: Supplied by archive.org ; 3 pages/PDFlib v1.6

Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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/c
Page créée en 626 millisecondes et consultée 10 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.