106 SCREEN HIDE (Oculta temporalmente una pantalla) SCREEN HIDE ¡n¿ Elimina la pantalla seleccionada de visualizacion. Esta pantalla podra volver a verse usando el comando SCREEN SHOW. Si "N" fuera omitido, esta instruccion ocultara entonces a la pantalla actual. SCREEN SHOW (Muestra una pantalla nuevamente) SCREEN SHOW ¡n¿ Este comando vuelve a visualizar una pantlla despues de que esta haya sido previamente oculta por el comando anterior. =SCREEN HEIGHT (Devuelve la altura de la pantalla) H=SCREEN HEIGHT ¡n¿ Devuelve la altura de la pantalla. Si no incluyes el parametro N, la altura devuelta sera la de la pantalla actual. =SCREEN WIDTH (Devuelve la anchura de la pantalla) W=SCREEN WIDTH ¡n¿ Este comando recupera la anchura de la pantalla actual o de la numero N. =SCREEN COLOUR (Devuelve el numero de colores) C=SCREEN COLOUR Devuelve el numero maximo de colores en la pantalla actualmente activa. =SCIN (Devuelve el numero de pantalla de una posicion determinada) S=SCIN(x,y) Devuelve el numero de pantalla que esta debajo de las coordenadas X e Y. Si esta pantalla no existiera, entonces S toma un valor negativo. SCIN es usado normalmente en conjuncion con las funciones X e Y del raton para chequear si el cursor del raton se ha introduci- do en alguna pantalla. 107 Definiendo los colores de una pantalla ====================================== DEFAULT PALETTE (carga la paleta estandard en una pantalla) DEFAULT PALETTE c1,c2,c3...c6,,....(hasta 32 colores) Este comando simplifica el proceso de apertura de multiples panta llas con la misma paleta. Define una lista de colores que seran utilizados para todas las pantallas siguientes que se crearan con la instruccion SCREEN OPEN. Como es habitual, el rango de valores permitidos de color oscila desde $000 hasta $FFF. GET PALETTE (Obtiene la paleta de una pantalla) GET PALETTE n ¡,mask¿ Esta instruccion copia los colores de una pantalla N, cargandolos en la pantalla actual. Esto puede ser muy util cuando estes movi- endo informacion desde una pantalla a otra con el comando SCREEN COPY, ya que es vital que ambas pantallas, fuente y destino, ten- gan el mismo tipo de colores. El parametro opcional "MASK" te permite cargar justo una selec cion de colores. Vease GET SPRITE PALETTE para mas detalles. Limpiando una pantalla ====================== CLS (Limpia la pantalla) Este comando borra todo o parte de la pantalla actual. Existen 3 formatos posibles para este comando: 1) CLS Borra la pantalla actual llenandola con el color 0 y limpia cualquier ventana que haya sido establecida 2) CLS col Llena tu pantalla con el color COL 3) CLS col,x1,y1 to x2,y2 Replaza la region rectangular definida por las coordenadas an- teriores con un bloque de color COL. COL puede tomar cualquier valor desde 0 hasta el maximo valor permitido. X1,Y1,X2,Y2 con tienen las coordenadas de las esquinas superior izquierda e in ferior derecha del area que va a ser limpiada con este comando como por ejemplo: CLS: Circle 100,9,9:CLS 1,50,50 to 150,150 108 Manipulacion del contenido de una pantalla ========================================== SCREEN COPY (Copia secciones de una pantalla) SCREEN COPY screen1 TO screen2 SCREEN COPY screen1,x1,y1,x2,y2 TO screen2,x3,y3 ¡,mode¿ Este comando realiza una copia de grandes secciones de una panta- lla desde un lugar a otro a notable velocidad. "SCREEN1" contiene la pantalla utilizada como fuente de imagen. Esta puede ser un nu mero estandard de pantalla, o bien el numero de una pantalla logi ca o fisica, generada por comandos LOGICOS o FISICOS. "SCREEN2" selecciona una pantalla opcional de destino en la que estos datos van a ser copiados. Si se omitiera, el area sera copiada en la pantalla actual. X1,Y1 y X2,Y2 contienen las dimensiones del area fuente rectan gular, y X3,Y3 corresponden a las coordenadas de destino. No hay limites en absoluto para dichas coordenadas. Cualquier parte de tu imagen que caiga fuera del area de pantalla sera automaticamen te catalogada como apropiada. El parametro opcional "MODE" elige cual de los 255 posibles modos sera usado en la operacion de copia. Dichos modos determi- nan como las areas fuente y destino deben combinarse en la panta- lla. El modo se establece usando un sistema BIT con el siguiente formato: MODO BIT fuente BIT destino --------- ---------- ----------- 4 0 0 5 0 1 6 1 0 7 1 1 Advierte que los 4 primeros Bits en este sistema NO son usados por esta instruccion y deben ser siempre 0. Cada BIT en "MODE" representa una simple combinacion de bits en las areas fuente y destino. Si el modo BIT es puesto a 1, entonces el bit asociado a la pantalla es tambien puesto a 1, de otra forma el resultado sera 0. Al objeto de seleccionar el correcto MODE de dibujo para tus aplicaciones, debes simplemente decidir que combinaciones te inte resan, y poner los BITS pertinentes a 1. Si no estas familiarizado con la notacion binaria, encontraras este parametro (MODE) un poco pesado. Asi que antes de que te vuelvas loco con tanta explicacion, sera mejor ver una detallada lista de los requerimientos mas frecuentes, con su sistema BIT asociado: 109 MODE EFECTO BIT-PATTERN -------- ------------------------------ -------------- REPLACE Replaza el area de destino con % 11000000 una copia de la fuente imagen (Es el modo por defecto) INVERT Replaza la imagen destino por % 00110000 una copia inversa de la imagen fuente AND Combina fuente y destino con % 10000000 una operacion logica AND OR Igual que antes pero con una % 11100000 operacion logica OR XOR Combina fuente y destino con % 01100000 una operacion logica XOR Los usuarios mas avezados habran observado que SCREEN COPY com bina las imagenes fuente y destino usando areas "blitter" B y C mientras que el area "blitter" A no se usa nunca en este sistema. Scrolling de pantallas ====================== DEF SCROLL (Define una zona de scroll) DEF SCROLL n,x1,y1 to x2,y2,dx,dy Te permite definir mas de 16 diferentes scrollings. Cada una de esas zonas puede ser asociada con una operacion especifica de des plazamiento (scroll), determinada por las variables dx,dy. "N" contiene el numero de la zona puede oscilar de 1 a 16. X1,Y1 se refieren a las coordenadas de la esquina superior iz- quierda del area que va a ser desplazada, mientras que X2,Y2 es el punto diagonalmente opuesto. "Dx" significa el numero de pixels de la zona que va a ser des plazada hacia la derecha en cada operacion. Los numeros negativos indican que el scrolling o desplazamiento se realiza de derecha a izquierda, mientras que los positivos indican que se hara de iz- quierda a derecha. De forma similar, "Dy" contiene el numero de pixels de la zona que avanzara hacia arriba o hacia abajo durante el scroll. En ca- so de valores negativos de Dy el movimiento sera hacia arriba, y por el contrario valores positivos traducen un movimiento hacia abajo. 110 SCROLL (Desplaza la pantalla) SCROLL N Este comando desplaza la pantalla usando los parametros que han sido previamente definidos con el comando anterior. "N" hace refe rencia al numero de la zona que deseas desplazar: LOAD IFF "AMOS_DATA:IFF/Frog_Leap.IFF",2 DEF SCROLL 1,0,0, TO 320,200,1,0 DO Scroll 1 Loop Intercambios de pantalla ======================== Al objeto de producir los suaves efectos de movimiento encon- trados en muchos programas, es necesario completar todas las ope- raciones de dibujo en poco tiempo, no mas de un quinceavo de se- gundo. Esto representa un gran desafio para cualquier ordenador y es, a menudo, dificil de conseguir, incluso para el Amiga. Si la animacion en compleja, tus graficos tienden a vibrar de forma muy molesta mientras se estan dibujando. Por fortuna, existe una solucion que ha sido exitosamente ex- plotada en la gran mayoria de los modernos programas de Arcade. Esta tecnica de "interrupcion" o Switching de pantalla puede fa- cilmente generar animaciones de pantalla sin vibraciones, usando solo una fraccion de la potencia del Amiga. La idea basica es extremadamente simple. A la vez que constru yes tus imagenes en la pantalla actual, diseñaras todas tus opera ciones graficas sobre una pantalla logical separada, que es com- pletamente invisible al usuario. Esta es distinta de la PANTALLA FISICA que es la que normalmente ves en tu monitor. Una vez que los graficos han sido completados, podras entonces trasladarte de una pantalla a otra. Asi la vieja pantalla fisica ahora se trans- forma en una nueva pantalla logica, y sera usada pra la cosntruc- cion del proximo dibujo en tu programa. A primera vista, este proceso parece bastante complicado, pero todo sera ejecutado de forma automatica por el comando DOUBLE BU- FFER de AMOS Basic. Dicho comando hace que se ejecuten todas las operaciones graficas en la pantalla logica sin que se alteren las imagenes actualmente visualizadas. Todo lo que tienes que hacer dentro de tus programas es sincronizar tus operaciones graficas con los intercambios de pantalla (SWITCHING). Esto queda facili- tado con la ayuda de la instruccion SCREEN SWAP 111 SCREEN SWAP (Intercambio entre pantallas logicas y fisicas) SCREEN SWAP ¡n¿ Este comando realiza un "swap" entre pantallas logicas y fisicas. Esto te posibilita cambiar instantaneamente lo que se visualiza en la pantalla fisica. Si estas usando DOUBLE BUFFER, esas pantallas deberan haber sido creadas de antemano. Sin embargo, necesitaras anular el sis tema automatico de "switching" de pantallas mediante la orden BOB UPDATE OFF, de otro modo las pantallas seran intercambiadas 50 veces por segundo, y podria interferir con tus propias operacio- nes de dibujo. Es tambien necesario anular el "autoback" mediante AUTOBACK OFF. Esto normalmente copia tus operaciones graficas en ambas pantallas (fisica/logica). Es util cuando desees combinar graficos simples con bobs moviles, pero destruira totalmente el efecto de las operaciones de "switching" de pantallas. =LOGBASE (Devuelve la direccion de parte de una pantalla logica) Address=LOGBASE(plane) La funcion LOGBASE es usada por los mas expertos programadores para acceder directamente a la pantalla de memoria del Amiga. El parametro "PLANE" se refiere a uno de los 6 posibles BIT-planes que confeccionan la pantalla actual. Despues de llamar a esta fun cion, "ADDRESS" contendra la direccion del Bit-Plane requerido, o bien 0 si este no existiera. =PHYBASE (Devuelve la direccion de la pantalla actual) Address=PHYBASE Este comando devuelve la direccion de memoria del numero de Bit- Plane "Plane" para la pantalla actual. Si este plano no existiera entonces apareceria un valor 0 en esta funcion. =PHYSIC (Devuelve un identificador de la pantalla fisica) =PHYSIC =PHYSIC(s) Esta funcion devuelve un numero de identificacion de la actual pantalla fisica. Este numero te permite acceder directamente a la imagen fisica que es visualizada por el sistema de doble buffer. El resultado de esta funcion puede ser sustituido por el nume- ro de pantalla en los comandos ZOOM, APPEAR y SCREEN COPY. "S" es el numero de pantalla AMOS. Si se omite, entonces la presente pantalla sera la utilizada. No confundir con la funcion LOGBASE. 112 =LOGIC (Devuelve un identificador de la pantalla logica) =LOGIC =LOGIC(s) Devuelve un numero de identificacion de una pantalla logica. Este puede ser usada en conjuncion con los comandos SCREEN COPY, ZOOM y APPEAR para cambiar el "off-screen" de tu imagen, sin afectar a la visualizacion actual. Sincronizacion de pantalla ========================== Como la mayoria de los ordenadores caseros, el Amiga puede usar un formato de mapa de memoria. Este es un termino tecnico, pero se trata de un concepto que ya nos suena como muy familiar. Simplemente, una imagen "mapeada en memoria" es aquella que se sirve de un hardware especial que la convierte una imagen almace- nada en memoria en una señal que puede ser visualizada en la pan- talla de tu monitor. La visualizacion de pantalla es actualizada por el Hardware, cada cincuentavo de segundo. Una vez que la pantalla ha sido dise ñada, el impulso electronico se apaga y regresa a la esquina supe ro-izquierda de la pantalla. Este proceso se denomina periodo de vacio vertical (en ingles: Vertical Blank Period/ VBL). Del mismo modo, AMOS Basic realiza un buen numero de importantes tareas, como el movimiento de los sprites y el "switch" entre las panta- llas fisica y logica. La accion de las instrucciones como ANIM o SCREEN SWAP seran ejecutadas solo cuando la pantalla sea dibujada por completo. Un cincuentavo de segundo es bastante tiempo para AMOS Basic, y esto podria ocasionar un importante retraso en la coordinacion de tu programa y la pantalla, especialmente relevante en el caso de los bucles. El mejor modo de evitar este contratiempo consiste en esperar a que la pantalla haya sido actualizada antes de ejecu tar el proximo comando Basic. WAIT VBL (Espera el periodo de vacio vertical) Esta instruccion detiene al Amiga hasta que finalice el periodo de vacio vertical o VBL. Es frecuentemente usada despues de una instruccion PUT BOB o una SCREEN SWAP. 113 Efectos especiales ================== APPEAR (Mezcla dos dibujos) APPEAR source TO destination, effect ¡,pixels¿ El comando APPEAR te capacita para producir bonitas mezclas entre las pantallas fuente y destino. "SOURCE" y "DESTINATION" son sim- plemente los numeros de dichas pantallas que ya abras previamente abierto mediante SCREEN OPEN. Tambien podras sustituir las funcio nes LOGICAS y FISICAS en estas posiciones si lo deseas. "EFFECT" determina el tipo de mezcla que se producira por esta instruccion. El tamaño de este parametro puede variar desde 1 has ta el numero de pixels de la pantalla actual. "PIXELS" especifica el numero de puntos que seran afectados. Normalmente, este valor se fija en el total del area de pantalla, pero puedes reducirlo para mezcla solo una parte de la pantalla. Todas las pantallas se dibujaran en estricto orden y desde arriba hacia abajo. La apariencia de tus mezclas variara naturalmente del modo gra fico que estes utilizando. FADE (Combina uno o mas colores) FADE speed¡,colour list¿ FADE speed TO screen ¡,mask¿ El comando FADE te permite realizar suaves cambios de toda la pa- leta, de un juego de colores a otro. Esto puede ser util cuando se quiera generar efectos casi profesionales para tus pantallas. La version estandard de esta instruccion, toma la paleta actu- al y lentamente disuelve los colores de pantalla hasta 0. Cada va lor de color es sucesivamente reducido uno a uno hasta alcanzar 0 por ejemplo: Fade 15: Wait 225 "SPEED" es el numero de periodos de vacio vertical que transcu rriran mientras se ejecuta cada cambio de color. Cuando se realice un "fading" mediante interrupciones, es pre- ferible esperar a que la operacion haya sido terminada antes de proceder a proxima instruccion Basic. El tiempo necesario para la espera (WAIT) despues de un "fading" puede ser calculado segun la formula siguiente: Valor de WAIT = Speed * 15 Fade puede ser util tambien para generar una nueva paleta di- rectamente desde una lista de valores de color: FADE 15,$100,$200,$200,$300 114 Cualquier numero de colores puede ser especificado en esta ins truccion, incluso por encima del maximo permitido por el actual modo grafico. Como la mayoria de los comandos AMOS, es posible el omitir completamente alguno de los parametros. El resto de los co lores no se veran afectados por el comando FADE: FADE 15,,$100,$800,$F00 La mas potente accion de FADE es la lenta transformacion de co lores desde la pantalla actual hasta la paleta tomada de otra pan talla ya existente: FADE speed TO s ¡,mask¿ Los colores seran lentamente convertidos en los de la paleta de la pantalla "S". Tambien es posible cargar la paleta desde el banco de Sprites, utilizando la misma tecnica. Simplemente usando un valor negativo para la pantalla numero "S". "MASK" es un sistema de BITs que especifica que colores deben ser cargados. Cada color se asocia con un simple BIT en este sis- tema, numerado de 0 a 15. Si un BIT es puesto a 1, entonces el co lor relevante sera cambiado. FLASH (Establece la secuencia de color de flashing) Este comando te ofrece la capacidad de cambiar periodicamente el valor asignado a cualquier indice de color. Esto supone una espe- cie de interrupcion como la usada por las instrucciones de sprite y las musicales. El formato de la instruccion es el siguiente: FLASH index,"(colour,delay)(colour,delay)(colour,delay)..." "INDEX" es el numero del color que va a ser animado. "DELAY" es el retraso, establecido en undiades de cincuentavos de segundo. El color se almacena en formato estandard RGB. La accion de FLASH consiste en tomar cada nuevo color de la lista, y luego cargarlo en el indice durante el tiempo especificado (delay). Cuando se al canza el final de la lista, la secuencia completa de colores se repetira desde el principio. Ten en cuenta que solo se permite un maximo de 16 cambios de colores por cada instruccion FLASH. A con tinuacion un pequeño ejemplo: Flash 1,"(007,10)(000,10)" Este ejemplo alterna el color numero 1 entre azul y blanco cada 10 cincuentavos de segundo. FLASH OFF Anula el efecto de flashing. No olvides que en el "start-up", el color numero 3 se asigna automaticamente a una secuencia de flash para el uso del cursor. Sera una buena idea apagarlo antes de car gar cualquier dibujo desde el disco. 115 SHIFT UP (Rotacion de color) SHIFT UP delay,first,last,flag Este comando rota el valor almacenado en los registros de color, desde el primero (first) hasta el ultimo (last). El primer color de la lista se copia en el segundo, y el segundo en el tercero, y asi sucesivamente hasta que se llegue al ultimo color de la serie Cada pantalla AMOS tiene su propio "set" de animaciones de co- lor. El "shifting" de colores puede ser usado para la creacion de divertidas secuencias hiperespaciales, similares a las que apare- cen en los programas Captain Blood y Elite. Cuando esas animacio- nes se utilizan mediante interrupciones, pueden ser ejecutadas en tanto tu programa este corriendo, sin que lo afecte lo mas minimo "DELAY" es el intervalo de tiempo entre cada etapa de la rota- cion, y se mide en cincuentavos de segundo. "FLAG" controla el tipo de rotacion. Si se situa en "1", el ul timo indice de color de la lista se copiara en el primero, y el primero en el ultimo. Asi los colores rotararan continuamente en pantalla. Cuando se situa en "0", el contenido del primero y el ultimo indices se descartan, y se reemplazan por una copia del primer color de la lista. Por ejemplo: SHIFT UP 100,1,15,1 SHIFT UP 10,1,15,0 SHIFT DOWN (Rotacion de color) Es similar al anterior, con la salvedad de que los colores rotan en direccion contraria. SHIFT OFF (Detiene la rotacion de colores) SHIFT OFF Va anular la rotacion de colores de la pantalla actual producida por cualquiera de los dos comandos anteriores. SET RAINBOW (Define un efecto de arco iris) Define un atractivo efecto de arco iris que puede ser posterior- mente ejecutado mediant el comando RAINBOW. Funciona cambiando la tonalidad de un color en funcion de una serie de ordenes simples. "N" es el numero de tu arco iris. Los valores posibles van des de 0 a 3. "COLOUR" es el indice de color que sera cambiado por la instruccion. A este color se le puede asignar un valor diferente para cada linea horizontal de pantalla (o linea de scan). Advier- te que solo los colores 0-15 pueden ser utilizados mediante este sistema. 116 "LENGTH" establece el tamaño de la tabla donde se almacenaran los colores. Existe una entrada en esta tabla para cada valor de color en pantalla. El tamaño de esta tabla puede oscilar entre 16 y 54.400. Si la longitud es menor que la altura fisica de tu arco iris, entonces el modelo de color sera repetido varias veces en pantalla. Las cadenas de comando r$, g$, b$, cambian progresivamente las intensidades de los componentes rojo (R), verde (G) y azul (B) de tu color final. Esos valores seran cargados en una tabla especial de color. Cada color de la tabla determina la apariencia de una linea simple de scan horizontal de la pantalla. Al comienzo del arco iris, todos los componentes de tu color se cargan inicialmente con el valor 0. Esto podra ser cambiado de acuerdo a la informacion contenida en la tabla. Cualquier comando de cadena puede ser omitido si se desea pero tendras que incluir las comas y comillas en sus posiciones teori- cas. Cada cadena puede contener una completa lista de comandos, que se ejecutaran ciclicamente pra producir el modelo final de arco iris. El formato sera: (n,step,count) "N" establece el numero de lineas que se asignaran a un especifi- co valor de color en el arco iris. Aumentando este numero se cam- biara la altura de cada linea individual del arco iris. "STEP" contiene un numero que se añadira al componente. Este numero sera usado para generar el color de la siguiente linea de la pantalla. Un "step" positivo aumentara la intensidad del compo nente de color, mientras que un valor negativo lo reducira. Cuando un componente individual excede el maximo de 15, se cal culara un nuevo valor a partir de la siguiente formula: Nuevo componente = viejo componente Mod 15 "COUNT" es el numero de veces que la actual operacion sera re- petida. La mejor forma de demostrar este comando es con un ejem- plo: Set Rainbow 0,1,64,"(8,2,8)","","" Rainbow 0,56,1,255 Wait Key El ejemplo anterior crea un nuevo arco iris con el numero 0, y utiliza el indice de color 1. Como puedes ver, SET RAINBOW solo define tu arco iris. Al objeto de mostrarlo en pantalla, necesi- taras utilizar el comando RAINBOW. El efecto "arco iris" primero carga tu color con el valor de 0. Cada 4 lineas de scan, el componente rojo se incrementara auto maticamente en 2. Asi el contenido del color 0 cambiara progresi- vamente desde $000 hasta $E00. Cuando el componente exceda el ma- ximo de 15, se calcula su sobrante o exceso, y el color vuelve al punto inicial (0). El modelo sera ahora repetido debajo de panta- lla. 117 Definiendo un modelo distinto para cada uno de los 3 componen- tes (rojo, verde y azul), podras facilmente generar algunas image nes estelares en tu monitor. Puesto que cada arco iris utiliza un solo indice de color, no hay nada que te impida crear los mismos efectos pero con dos pantallas de colores. Esto es ideal para los fondos de los programas de Arcade, ya que consumen muy poca memo- ria. Ejemplo: Screen Open 0,320,256,2,Lowres Set Rainbow 0,1,128,"(8,1,8)","(8,1,8)","" Rainbow 0,1,30,128 Colour 1,0: Curs Off: Cls 1:Flash Off Locate 0,2: Centre "AMOS Basic": Wait Key Por ultimo, decir que los arcos iris pueden ser tambien anima- dos mediante el poderoso sistema de interrupciones. Vease las ins trucciones de AMAL para mas detalles. RAINBOW (Crea un efecto arco iris) RAINBOW n,base,y,h Muestra el arco iris numero N en pantalla. Si AUTOVIEW esta pues- to en OFF, el arco iris solo aparecera cuando llames al comando VIEW. "BASE" es una copia de tu primer color en la tabla creada con SET RAINBOW. Cambiando este valor ciclara el arco iris en panta- lla. "Y" contiene la posicion vertical del arco iris en formato de coordenadas de hardware. El valor minimo para estas coordena- das es de 40. Si intentas utilizar un valor por debajo de este punto, el arco iris se mostrara desde la linea 40 hacia adelante. "H" contiene la altura del arco iris en lineas de scan. Los arcos iris son totalmente compatibles con el sistema AMOS, inclu- yendo sprites y bobs. Sin embargo, no intentes hacer un arco iris con un color que este siendo usado con las instrucciones FLASH y SHIFT, ya que surgiran alteraciones impredecibles en pantalla. Ten en cuenta que solo un efecto simple de irisacion puede ser mostrado en una linea de scan, incluso si se usaran diferentes colores en pantalla. Normalmente el arco iris con la mayor posicion de pantalla se- ra mostrado primero. Pero si varios arcos iris comenzaran en la misma posicion, entonces el de menor numero de identificacion se- ra dibujado encima de los otros. =RAIN (Cambia el color de una linea indivudal de arco iris) RAIN (n,line)=c C=RAIN(n,line) Este es el mas potente de los comandos de irisacion, ya que te permite cambiar el color de una linea individual de un arco iris a cualquier valor que desees. 118 "N" es el numero del arco iris al que deseas acceder. "LINE" es la linea de scan individual a ser cambiada. Ejemplo: Curs Off: Centre "Margen de Seguridad¡" Set Rainbow 1,1,4097,"","","" For Y=0 to 4095 Rain (1,y)=y Next Y For c=0 to 4095-255 Rainbow 1,c,40,255 Next C Wait Key ZOOM (Magnifica una seccion de la pantalla) ZOOM source,x1,y1,x2,y2 to destination,x3,y3,x4,y4 ZOOM consiste en una simple instruccion que te permite cambiar el tamaño de cualquier region rectangular de la pantalla. "SOURCE" es el numero de pantalla de la que tu dibujo sera tomado. Tambien puedes usar la funcion logica para grabar tu imagen de la panta- lla logica apropiada. El area rectangular afectada por esta ins- truccion es la especificada por las coordenadas x1,y,1,x2,y2. "Destination" contiene el area de destino para tu imagen. Como la fuente, puede ser o un numero de pantalla o una pantalla logi- ca especificada mediante LOGIC. Las dimensiones de este area de pantalla sera tomada de las coordenadas x3,y3,x4,y4. Dichas coordenadas contienen las dimen- siones de un rectangulo en el que el segmento de pantalla sera comprimido. El efecto de esta instruccion depende de los tamaños relativos de los rectangulos "source" y "destination". La imagen fuente es automaticamente rediseñada para que ajuste en el rectangulo desti no. De este modo, la misma instruccion puede ser usada para redu- cir o aumentar tus imagenes. Cambiando la lista del "COPPER" =============================== El coprocesador (COPPER) del Amiga ofrece un total control so- bre la apariencia de cada linea de tu pantalla. Este coprocesador es un procesador separado de su propia memoria interna y unico set de instrucciones. Programando el COPPER, es posible generar facilmente una gran cantidad de diferentes efectos de pantalla. Normalmente el COPPER funciona autonomamente de AMOS, sin embargo cada uno de los efectos del COPPER puede ser directamente ordena- do desde AMOS Basic sin la necesidad de enfrascarse en complica- dos metodos de programacion en codigo maquina. En la practica, esas instrucciones seran mas que suficientes para la gran mayoria de aplicaciones. 119 Obviamente, no todo es tan facil. Los mas expertos programado- res suelen acceder directamente al COPPER para crear sus propios efectos especiales de pantalla. Pero ATENCION!! la lista del COPPER es enormemente dificil de programar, y si no dominas lo que estas haciendo, podras incluso dañar tu ordenador. Antes de embarcarte en experimentos con el COPPER por primera vez, leete alguno de los varios libros de refe rencia al respecto. Una buena explicacion podras encontrar en la Guia del Programador de Amiga de ABACUS. COPPER OFF (Anula la lista estandard del COPPER) COPPER OFF Congela la actual lista de proceso de AMOS y apaga la pantalla visible por completo. Entonces podras crear tus propias visuali- zaciones mediante una serie de instrucciones como son COP MOVE y COP WAIT. Por defecto, todos los listados de Copper definidos por el usuario tienen un limite maximo de memoria de 12 K. De media cada instruccion ocupa mas de 2 Bytes. Asi, existe espacio para unas 6.000 instrucciones. Esto puede aumentarse, si fuera necesario, utilizando una especial opcion dentro de la utilidad CONFIG. Recuerda que todas las instrucciones COPPER se escriben en una lista logica separada que no se visualiza en pantalla. Esto para tu programa, destruyendo su visualizacion mientras se este crean- do la lista del COPPER. Para activar de nuevo la pantalla, necesi taras realizar un "swaping" entre los listados fisico y logico gracias al comando COP SWAP. Es tambien importante que generes tus listados COPPER en orden estricto, comenzando desde la esquina superior izquierda de la pantalla y continuando hacia la esquina inferior derecha. COPPER ON (Reinicia el listado del COPPER) COPPER ON Reinicia el listado del COPPER, mostrando las pantallas AMOS ac- tuales. COP MOVE (Escribe una instruccion MOVE en el listado logico del COPPER) COP MOVE addr, value Genera una instruccion MOVE en el listado logico del COPPER. "ADDR" es la direccion de un registro de 16 Bits que sera cambia- do. Esto debe estar dentro de la zona normal del COPPER (o zona de datas: DATA ZONE $7F-$1BE). "VALUE" es un numero entero que se carga en dicho registro. 120 COP MOVEL (Escribe una gran instruccion MOVE en el listado del COPPER) COP MOVEL addr, value Identica al anterior, solo que "ADDR" ahora se refiere a un gran registro COPPER de 32 BITS. COP WAIT (Instruccion WAIT del COPPER) COP WAIT x,y ¡,x mask, y mask¿ COP WAIT introduce una instruccion WAIT en el listado del copro- cesador del Amiga, que espera hasta que las coordenadas de hard- ware X e Y hayan sido alcanzadas y regresen al control del proce- sador principal. Advierte que la linea 255 es automaticamente ma- nipulada por AMOS. Asi que no te preocupes en absoluto de ella. "X MASK" e "Y MASK" son mapas-BITs que te permiten esperar has ta que una cierta combinacion de bits aparezca en las coordenadas de pantalla. Por defecto ambas mascaras son asignadas automatica- mente a $1FF. COP RESET (Resetea los punteros del listado del COPPER) COP RESET Este comando resetea las direcciones usadas por la proxima ins- truccion del COPPER al principio del listado del mismo. =COP LOGIC (Direccion del listado del COPPER) Addr=COP LOGIC Esta funcion devuelve la direccion absoluta en memoria del lista- do logico del COPPER. Esto te permite "pokear" tus instrucciones COPPER de forma directa dentro del Buffer, posiblemente usando lenguaje ensamblador. Consejos y trucos ================= * Antes de crear una pantalla utilizando un listado de COPPER ya definido por el usuario, necesitaras primeramente localizar una zona de memoria para el apropiado mapa-BIT. Aunque hayas usado RESERVE para este proposito, es mucho mas facil definir una pantalla falsa con el comando SCREEN OPEN. Los registros del COPPER pueden ser cargados con las direcciones necesarias del Map-BIT usando para ello la funcion LOGBASE. Ahora seras capaz de acceder a tu pantalla usando todas las posibilidades graficas de AMOS. Con la idea de reservar la can- tidad necesaria de memoria, selecciona el numero maximo de colo res a usar para esa nueva pantalla. Esto puede ser un despilfa- rro, pero simplifica mucho las cosas. 121 * Es perfectamente valido combinar pantallas definidas por el usuario con bobs AMOS. Si utilizar un doble Buffer, tendras que definir un listado de COPPER separado para cada pantalla (Logi- ca y Fisica). Esto puede evitarse de la siguiente forma: 1- Define tu listado de COPPER pra la primera pantalla 2- Realiza un "swaping" de los listados de COPPER fisico y logi co mediante el comando COP SWAP 3- Nuevo "swaping" de las pantallas fisica y logica con el co- mando SCREEN SWAP. 4- Define tu listado de COPPER para la segunda pantalla Todo esto te asegura que tus bobs se actualizaran correctamente en la nueva pantalla. Todos los comandos estandards AMOS pueden utilizarse, incluido el AMAL.