APPLICATIONSDIVERS ★ Dos modos de pantalla simultáneos|Amstrad Personal) ★

DosModos (Amstrad Personal)Applications Divers
★ 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 ★ 

Con el siguiente programa se pueden utilizar dos modos de pantalla a la vez, incluso desde Basic, en cualquiera de los Amstrad CPC. Esta es la solución a los problemas que surgen siempre que, por ejemplo, se emplean textos y dibujos con gran variedad de colores en una misma pantalla.

Como ya habremos podido observar, algunos de los numerosos juegos que existen en el mercado para nuestro ordenador utilizan dos modos de pantalla simultáneamente.

Generalmente, se emplea media pantalla en modo 0 y la otra parte puede ser trabajada con los otros dos restantes.

La utilidad de esta técnica reside en que se puede usar con gráficos de baja resolución y hasta 16 colores, por un lado, y por otro con gráficos de alta resolución con solamente dos colores posibles. Además, existe otra ventaja: si nos encontramos en el modo 0 de pantalla, la impresión de textos es prácticamente imposible (por su gran dimensión), pero, con esta técnica, se puede utilizar una parte de la pantalla para imprimir gráficos con mucho colorido y la otra para imprimir los textos.

Esto es de vital importancia para programas de tipo aventuras gráfico-conversacionales.

Por supuesto, aparte de estas ventajas que hemos mencionado, existen muchísimas otras que no hace falta citar, ya que todos nosotros somos capaces de imaginarlas.

Pues bien, en el presente artículo, presentamos un programa con el que se podrá trabajar en dos modos cualesquiera de pantalla
simultáneamente, incluso desde Basic.

El modo de pantalla está determinado mediante dos bits que se deben situar en el port de vídeo. Para cada uno de los distintos modos, estos valores serán los siguientes:

00 ........ Modo 0
01 ........ Modo 1
10 ........ Modo 2

Así pues, éstos serán los valores que deberemos colocar en dicho port. Dado que nuestro Amstrad repone el estado de la pantalla en cada interrupción, nosotros deberemos crear una rutina que sea capaz de alterar ciertos registros cuando se produzcan dichas interrupciones. Para lograrlo se utilizan algunas rutinas del firmware que nos posibilitarán la entrada de nuestro programa en las interrupciones del sistema.

Para escribir un dato en el port de vídeo, disponemos de los registros alternativos B' y C'. Este último contiene una copia del modo de pantalla actual. Cambiando debidamente este registro alternativo y escribiendo un nuevo valor, se puede cambiar al modo de pantalla deseado. Esta escritura se hace de la siguiente forma:

EXX
OUT(C),C
EXX

Como puede observarse, se utiliza la instrucción EXX, para cambiar a los registros alternativos, y, una vez efectuada la operación de salida, se vuelven a reponer los registros normales con la misma instrucción. Por supuesto, si nosotros realizáramos el cambio de modo de esta forma, sin tener en cuenta ninguna otra cosa, la pantalla cambiaría al modo seleccionado, pero no se produciría la simultaneidad de modos que es lo que se pretende. De manera que deberemos esperar a que se produzca el barrido de pantalla, y se construya la misma. Antes de que termine esta operación, ejecutaremos las instrucciones antes mencionadas, con lo cual obligaremos a que en el resto de la pantalla aparezca el nuevo modo.

Así pues, nuestra rutina provoca dos interrupciones, cada una de las cuales colocará un modo de pantalla distinto, con lo cual conseguiremos el efecto de dos modos de pantalla simultáneos, utilizando distintas llamadas al firmware.

Son las siguientes:

#BCD7. Inicializa y sitúa una rutina en el frame flyback list.
#BCEO. Inicializa y coloca un bloque en el fast ticker list.
#BCE6. Para eliminar cada una de las anteriores.

Si ejecutamos el programa que aparece listado al final del artículo, nos aparecerán dos modos de pantalla, uno de los cuales ocupa la mitad superior, y el otro la mitad inferior. Pero la parte de pantalla ocupada por cada uno de los modos puede alterarse, cargando el acumulador con diferentes valores:

270 LD A,3

Podemos definir el trozo de pantalla
ocupado por cada modo

Los distintos valores que pueden utilizarse son 2, 3 ó 4, con lo cual el espacio de pantalla ocupado por cada uno de los modos será diferente para estos distintos valores.

Además de permitirnos cortar la pantalla por diferentes lugares, podremos elegir también los modos en que deseemos trabajar, alterando las líneas que se indican a continuación:

220 SET 0,C Modo 1
230 RES 1,C
380 RES 0,C Modo 0
390 RES 1,C

En este caso se eligen los modos de pantalla 1 y 0 respectivamente.

Dado que la impresión en pantalla del Amstrad se realiza de diferente forma para cada modo, tomando los datos de una misma matriz y transformándola adecuadamente para el modo actual, nos encontraremos con que la impresión puede resultar muy confusa en la parte de la pantalla en que el modo sea distinto al elegido desde Basic. En Código Máquina no deberá ocurrir esto, ya que los gráficos los preparamos de distinta forma, dependiendo del modo en que se van a imprimir.

Así pues, desde Basic, nos vamos a encontrar con el problema de que las impresiones de texto en pantalla pueden resultar

incomprensibles, en los modos de pantalla distintos al elegido desde el mismo Basic.

Esto puede solucionarse cambiando el modo, adaptándolo al de la zona de pantalla donde se vaya a imprimir. Aunque esta solución no resulta viable en principio (supondría borrar todo lo que anteriormente existiera en pantalla), funcionará si modificamos el salto en la rutina del firmware correspondiente, Mode clear, que se encuentra en la dirección #BDEB, colocando un retorno en dicha dirección, de la siguiente manera:

POKE &BDEB,201

De esta forma conseguiremos cambiar el modo de pantalla sin que ello signifique un borrado de la misma.

Para aclarar un poco más esta situación, hemos preparado un programa demostración, en el cual pueden verse impresos en pantalla dos textos, uno en modo 0 y otro en modo 1, cambiando, antes de la impresión, el modo de pantalla.

No es necesario saber nada de
lenguaje máquina para
beneficiarse de las ventajas que
esta rutina comporta

Por fin, y para aquéllos que deseen disponer de esta potente rutina, deberán copiar el listado ensamblador que aparece al final del artículo, colocándolo en la dirección de memoria deseada. Aquéllos que no utilicen ensamblador, pueden teclear el programa cargador Basic. Una vez ejecutado y comprobado que no existen errores, se salva en cinta o disco, tecleando:

SAVE"DOSMOD",B,&A000,&60

Por último, si deseamos cambiar la zona de pantalla que deben ocupar los distintos modos, desde Basic, deberemos pokear los valores 2, 3 ó 4, en la dirección de memoria &A034.

Amstrad Personal

★ PUBLISHER: Amstrad Personal
★ YEAR: 1988
★ CONFIG: ???
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD PERSONAL 1987
★ AUTHOR: Alberto Súñer
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» DosModos    (Amstrad  Personal)    LISTING    SPANISHDATE: 2022-09-20
DL: 102
TYPE: PDF
SiZE: 229Ko
NOTE: 3 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX Swap (Amstrad Personal)
» Applications » RAM-Swap (Schneider Magazin)
» Applications » Swap Screen (Popular Computing Weekly)
» Applications » RSX - Bankswap (CPC Amstrad International)
» Applications » 128K Memory Swapper
» Applications » Bankswap (Computer Schau)
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.7-desktop/c
Page créée en 536 millisecondes et consultée 380 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.