151 14: A M A L Si deseas generar los suaves movimientos necesarios para un programa arcade, es necesario que cada objeto de la pantalla se mueva docenas de veces por segundo. Esto es muy problematico, in- cluso en codigo maquina o en las versiones Basic mas potentes. AMOS evita este problema incorporando un potente lenguaje de animacion que se ejecuta de forma independiente a tus programas Basic. Este es capaz de generar efectos de animacion a alta velo- cidad que serian imposibles de crear en un Basic standard. El lenguaje de animacion de AMOS (en ingles AMos Animation Language -AMAL-) es exclusivo para AMOS Basic. Puede ser usado para animar cualquier cosa como sprites o una pantalla completa a una velocidad increible. Mediante interrupciones se podran eje- cutar hasta 16 programas AMAL de forma simultanea. Cada programa controla los movimientos de un objeto simple en la pantalla. Los objetos pueden moverse segun modelos complejos predefinidos, creados por un accesorio editor separado. Tambien podras controlar tus objetos directamente con el raton o el joys- tick si fuera necesario. La gran versatilidad del sistema AMAL debe ser vista para ser creida. Principios de AMAL ================== AMAL es, en efecto, solo una simple version de Basic que ha sido cuidadosamente mejorada hasta el maximo de velocidad posible Como el Basic, existen instrucciones para el control del programa (jump, etc); toma de decisiones (If..) y secciones de repeticion o bucles (For...next). La fuerza real se hace patente cuando se ejecuta un programa AMAL. No solo es mas rapido, sino que todos los programas AMAL pueden ser compilados antes de ejecutarse. Los comandos AMAL se introducen usando cortos tokems que con- sisten en una o dos letras mayusculas. Cualquier dato en minuscu- las sera completamente ignorado. Esto te permite "rellenar" las instrucciones AMAL con letras minusculas para hacer el comando facilmente distinguible. Asi el comando "M" debera introducirse como "Move" y la instruccion "X" como "eXit". Las instrucciones de AMAL puede ser separadas por cualquier caracter, incluyendo el espacio. No podras, sin embargo, usar los dos puntos (:) para este proposito, ya que se usan para la defini cion de etiquetas. Te aconsejamos que uses un punto y coma (;) para separar los comandos al objeto de evitar posibles errores de AMAL. 152 Existen dos formas de crear programas AMAL. La primera consis- te en producir tus secuencias de animacion con el programa acceso rio AMAL y grabarlas en un banco de memoria, o bien puedes defi- nir tus animaciones desde el propio AMOS Basic usando el comando AMAL. El formato general de esta funcion es: AMAL n,a$ "N" es el numero de identificacion de tu nuevo programa AMAL. Por defecto se asigna el numero del sprite hardware correspondiente a todos los programas. Asi el primer programa AMAL controla al spri te numero uno, el segundo al sprite 2, y asi en adelante. Podras cambiar esta seleccion cuando lo desees usando el comando CHANNEL "a$" es una cadena que contiene un listado de instrucciones AMAL para ejecutarse en tu programa. He aqui un ejemplo simple: Load "AMOS_DATA:Sprites/Monkey_right.abk" Get sprite palette Sprite 8,130,50,1 AMAL 8,"S: M 300,200,100 ; M -300,200,100 J S" AMAL On 8: Rem activa el programa AMAL numero 8 Direct El programa regresa de nuevo al modo directo gracias al coman- do DIRECT. Intenta teclear algunos comandos Basic en esta linea. Como podras ver el patron de movimientos continua ejecutandose pese a todo, sin interferir con el resto del sistema AMOS. Tam- bien debes notar que hemos usado el sprite 8 para obligar el uso de un sprite computerizado. Todos los sprites computerizados van desde el 8 al 15 y son automaticamente asignados al numero de ca- nal equivalente por el sistema AMAL. Asi, no hay necesidad de nin gun procedimiento especial de inicializacion. A menos que desees restringir el numero de sprites hardware, es preferible usarlos antes que los sprites computerizados en tus programas. Ten presen te como hemos activado el sistema AMAL usando el comando AMAL ON, que tiene el formato: AMAL ON ¡prog¿ en donde "PROG" es el numero de un programa AMAL simple. Si este fuera omitido, entonces se ejecutarian a la vez la totalidad de programas AMAL. 153 AMAL Tutorial ============= A continuacion te mostraremos como trabajar en el sistema AMAL para que te vayas familiarizando con los mecanismos de los progra mas AMAL, sin tener que conocer detalles tecnicos. Hasta ahora nos hemos concentrado en los movimientos de spri- tes, pero los mismos principios pueden utilizarse para las anima- ciones de bobs y pantallas. Debes comenzar por cargar algunos ejemplos en memoria. Los po- dras encontrar en el cajon SPRITES del disco de datas AMOS. Ve al directorio del fichero de Sprites y teclea los siguiente en la ventana directa: Dir "AMOS_DATA" Para cargar un fichero de sprites, teclea la siguiente linea: Load "AMOS_DATA:Sprites/Octopus.abk" 1- Moviendo un objeto Como cabria esperar en un lenguaje de animacion, AMAL facilita la movilizacion de tus objetos de diversas formas. La mas simple de ellas se realiza mediante el comando MOVE: Move (mueve un objeto) M w,h,n El comando -M- mueve un objeto "w" unidades a la derecha y "h" unidades hacia abajo, exactamente en "n" pasos. Si las coordena- das de tu objeto fueran (X,Y), entonces el objeto se moveria pro gresivamente hacia X+W,Y+H. Supongamos que tengas un sprite en las coordenadas 100,100. La instruccion "M 100,100,100" lo movera hasta la posicion 200,200. La velocidad de esta animacion dependera del numero de pasos. Si "N" fuera grade cada movimiento individual del sprite sera mas pequeño y el sprite se movera muy lentamente. Por contra, un va- lor pequeño de "N" originara grandes pasos de movimiento que sacu diran el sprite a lo largo de la pantalla a alta velocidad. He aqui algunos ejemplos del comando MOVE: Rem esto mueve un pulpo por la pantalla mediante AMAL Load "AMOS_DATA:Sprites/octopus.abk" Sprite 8,300,0,1 AMAL 8,"M 0,250,50":AMAL On 8:Wait Key Rem mueve el pulpo hacia abajo y a lo largo de la pantalla Load "AMOS_DATA:Sprites/Octopus.abk" Sprite 10,150,150,1 AMAL 10,"M 300,-100,50":Amal On 10:Wait Key 154 Rem demuestra multiples comandos Move Load "AMOS_DATA:Sprites/Octopus.abk" M$="Move 300,0,50 ; Move -300,0,50" Sprite 11,150,150,1 Amal 11,M$ : Amal On 11: Wait Key Ten presente que hemos escrito Move en lugar de M en ultimo ejemplo, y puesto que las letras "ove" estan en minusculas, seran ignoradas por el sistema AMAL. A primera vista, Move es una potente y poco atractiva instruc- cion. Es ideal para mover objetos como misiles, pero por lo demas es bastante simplona. Realmente, nada mas lejos de la verdad. Esto es debido a que los parametros de la instruccion Move no se limitan a numeros sim ples. Tambien podras incluir complejas expresiones aritmeticas que incorporaran algunas de las mas utiles variedades de AMOS. Por ejemplo: Load "AMOS_DATA:Sprites/Octopus.abk" Get sprite palette Sprite 12,150,150,1: Amal 12,"Move XM-X,YM-Y,32" Amal On 12:Wait Key Esta rutina mueve lentamente el sprite computerizado 12 hasta la actual posicion del raton. X e Y contienen las coordenadas de tu sprite, y XM e YM son funciones que devuelven las actuales coordenadas del raton. Es posible explotar este efecto en juegos como PACMAN para ha- cer que tus objetos "cacen" al del jugador. Ejemplo: Load Iff "AMOS_DATA:IFF/Frog_Screen.IFF",1 Channel 1 to screen display 1 Amal 1,"Move 0,-200,50 ; Move 0,200,50" Amal on 1: Direct CHANNEL asigna un programa AMOS a un objeto particular. Ya ve- remos este comando con mas detalle mas adelante, cuyo formato cla sico es: CHANNEL p TO object n "P" es el numero de tu programa AMAL. Se permiten valores que van desde 0 a 63, teniendo presente que solo los 16 primeros pueden ser ejecutados usando interrupciones. "Object" especifica el tipo de objeto que quieres controlar con tu programa AMAL. Se pueden controlar: Sprite (valores superiores a 7 seran computerizados) Bob (o blitter object) Screen display (usado para mover la pantalla visible) Screen offset (scrolling mediante hardware) Screen size (cambia tamaño de pantalla con interrupciones) Rainbow (anima un efecto arco iris) 155 "N" es el numero del objeto que va a ser animado. Este objeto necesita ser seguidamente definido usando las instrucciones como SPRITE, BOB o SCREEN OPEN. 2- Animacion Anim (anima un objeto) A n,(image,delay)(image,delay).... La instruccion Anim cicla un objeto a traves de una secuencia de imagenes produciendo un suave efecto de animacion. "N" es el nume ro de veces que se repetira el ciclo. Un valor de 0 para este pa- rametro provocara que se realiza continuamente. "image" especifica el numero de una imagen a utilizar en cada secuencia de la animacion. "Delay" determina la cantidad de tiem- po que esa imagen aparecera en pantalla, medida en unidades de cincuentavos de un segundo. Ejemplo: Load "AMOS_DATA:Sprite/Monkey_right.abk":Get sprite palette Sprite 9,150,50,11 M$="Anim 12,(1,4)(2,4)(3,4)(4,4)(5,4)(6,4);" M$=M$+"Move 300,150,150 ; Move -300,-150,75" Amal 9,M$ Amal On 9 Direct Este programa combina el movimiento de un sprite con una anima cion. Advierte como hemos separado los comandos con un punto y co ma. Esto asegura que las dos operaciones seran totalmente indepen dientes una de la otra. Una vez que la secuencia de animacion ha- ya sido definida, AMAL saltara inmediatamente a la siguiente ins truccion, y la animacion comenzara. Es importante no olvidar que Anim solo funciona en conjuncion con sprites y bobs. Asi que no es posible animar pantallas ente- ras con este comando. 3- Bucle simple Jump (redirige un programa AMAL) J label Jump ofrece una forma simple de moverse desde una parte a otra de un programa AMAL. "label" es el destino de tu salto (jump) y debe haber sido definido en algun lugar del programa actual. Todas las etiquetas AMAL son definidas mediante una letra mayuscula seguida de los dos puntos (:), y como las instrucciones, puede rellenarse de letras minusculas para su entendimiento, aun cuando estas son ignoradas por el sistema. 156 Recuerda que cada etiqueta se define usando una SOLA letra, de este modo "S:" y "Swoop:" se refieren a la misma etiqueta. Si tu intentas definir dos etiquetas que comiencen por la misma letra, aparecera un mensaje de error del tipo "label already defined in animation string". Cada programa AMAL puede tener su propio juego de etiquetas. Y es perfectamente valido el uso de etiquetas identicas en diferen tes programas AMAL. Ejemplo: Load "AMOS_DATA:Sprites/Octopus.abk" Get sprite palette For s=8 to 20 step 2:Rem establece 7 sprites computerizados Sprite s,200(s-7)*13+40,1 next s rem: ahora crea 7 programas AMAL For s= 1 to 7 Channel s to sprite 6+(S*2) M$="Anim 0,(1,2)(2,2)(3,2)(4,2);Label:Move"Str$(S*2)"+,0,7;" Amal s,M$ Next S Rem O.K. ahora todos se animan!! Amal On:Direct Mientras que los comandos AMAL no se ejecuten mediante inte- rrupciones, los bucles infinitos pueden ser desastrosos. Asi un contador especial se encarga de contar el numero de saltos de tu programa. Cuando el contador pasa de 10, cualquier salto adicio- nal sera completamente ignorado por el sistema AMAL. NOTA: si dependes de este sistema para ciclar continuamente tu programa, gastaras una gran cantidad de la potencia de tu ordena dor. En la practica, es mucho mas eficiente limitarse solo a un salto por cada VBL. Esto puede evitarse añadiendo una simple pau- sa antes de cada salto de tu programa. Vease el comando PAUSE. 4- Expresiones y variables Let (asigna un determinado valor a un registro) L register=expresion La instruccion L asigna un valor a un registro AMAL. Esta accion es muy parecida al comando normal del Basic, excepto por el hecho de que todas las expresiones son estrictamente evaluadas de iz- quierda a derecha. Los registros son variables enteras usadas para contener los valores intermedios de tus programas AMAL. Los numeros permitidos oscilan desde -32768 hasta +32768. Existen 3 tipos fundamentales de registros: 157 A) Registros internos Cada programa AMAL tiene su propio juego de 10 registros inter nos. Los nombres de esos registros comienzan por la letra "R", se guida de uno de los digitos 0 al 9 (R0 a R9). Los registros inter nos son como las variables locales dentro del AMOS Basic. B) Registros externos Los registros externos son muy diferentes porque contienen sus valores de forma separada al programa AMAL. Esto te permite usar esos registros para pasar informacion entre varias rutinas AMAL. El sistema AMAL te facilita hasta 26 registros externos, con nom- bres que van desde RA a RZ. Los contenidos de cualquier registro interno o externo puede ser conocido desde Basic mediante la fun- cion AMREG. C) Registros especiales Son un juego de tres valores que determinan el status de un objeto. "X,Y" contienen las coordenadas del objeto. Cambiando di- chos registros, podras mover tu objeto a lo largo de la pantalla Por ejemplo: Load "AMOS_DATA:Sprites/Frog_Sprites.abk":Channel 1 to bob 1 Flash off:Get sprite palette: Bob 1,0,0,1 Amal 1,"Loop: Let x=x+1 ; Let y=y+1; Pause; Jump Loop" Amal on 1: Direct "A" almacena el numero de la imagen que va a mostrarse por un bob o sprite. Puedes alterar este valor generando tu propia secuencia de animacion, como sigue: Load "AMOS_DATA:Sprites/Frog_Sprites.abk":Get sprite palette Flash off: Channel 2 to bob 1: Bob 1,300,100,1 M$="Loop: Let A=A+1 ;" M$=M$+"For r0=1 to 5 ; next r0 ; Jump Loop" Amal 2,M$ Amal on 2: Direct El bucle For...Next sera explicado con mas detalles despues. Aqui es usado para ralentizar cada cambio de imagen del bob. Cuan do se ejecuta cada "Next" del bucle, AMAL no continua hasta que se verifique un VBL. Tambien observa el uso del punto y coma (;) para separar las intrucciones AMAL, pese a que el espacio tambien serviria igualmente. 5- Operadores Las expresiones AMAl pueden incluir todas las normales opera- ciones aritmeticas, excepto MOD. Tambien podras usar las siguien tes operaciones logicas en tus calculos: & AND logico ñ OR logico 158 Ten en cuenta que no es posible cambiar el orden de evaluacion cambiando los corchetes "()" puesto que esto ralentizaria tus calculos de forma considerable y reduciria el tiempo disponible para la interrupcion. Teclea el siguiente ejemplo: Load "AMOS_DATA:Sprites/Octopus.abk": Hide Get Sprite Palette Sprite 8,X Mouse,Y Mouse,1 Amal 8,"Loop: Let X+XM ; Let Y+YM ; Pause ; Jump Loop" Amal On 8 Load "AMOS_DATA:Sprites/Octopus.abk": Hide Get Sprite Palette Sprite 8,X Mouse,Y Mouse,1 Amal 8,"Anim 0,(1,4)(2,4)(3,4)(4,4) ; Loop: Let X=XM ; Let Y=YM ; Pause : Jump Loop" Amal On Los ejemplos anteriores simulan efectivamente el comando CHAN GE MOUSE. Sin embargo, este sistema es mucho mas poderoso ya que podras facilmente mover bobs, sprites computerizados, o incluso pantallas usando exactamente la misma tecnica. 6- Tomando decisiones If (rama de decision dentro de una cadena AMAL) If test Jump L Esta instruccion te permite realizar simples comprobaciones den- tro de tu programa AMAL. Si el resultado de la expresion es -1 (cierto) el programa saltara a la etiqueta "L", mientras que de otra forma, AMAL pasara a la siguiente instruccion. Observa como a diferencia de su equivalente Basic, aqui estas limitado a solo un salto despues de la instruccion de comprobacion. Es practica habitual rellenar esta instruccion con comandos en minusculas como "then" o "else". Esto hace mas "legible" la ins- truccion. He aqui un ejemplo: If X>100 then Jump Label else Let x=x+1 Para la comprobacion se pueden emplear expresiones logicas como: <> No igual < Menor que > Mayor que = Igual 159 Ejemplo: Load "AMOS_DATA:Sprites/Octopus.abk" Get Sprite Palette Sprite 8,130,50,1 C$="Main: if XM>100 Jump Test: " C$=C$+"Let X=XM " C$=C$+"Test: If YM>100 Jump Main " C$=C$+"Let Y=YM Jump Main" Amal 8,C$: Amal on: Direct ATENCION: NO intentes combinar varios tests en una misma expre- sion AMAL utilizando "&" o "ñ". Puesto que las expresiones se evaluan de izquierda a derecha, esto generaria un mensaje de error. Asi la expresion X>100ñY>100, debera ser evaluada en el siguiente orden: X>100 Puede ser cierto o falso ñY OR Y >100 chequea si Y>100 El resultado de la expresion anterior no tendra, obviamente, relacion con el valor esperado. Los usuarios que sepan, podran evitar este problema utilizando el algebra booleana. Primero se asigna cada test a un registro AMAL simple, como sigue: Let R0=X>100 ; Let R1=Y>100 A continuacion se combinan esos tests en una expresion simple usando "ñ" y "&" e incluyendolas directamente en la orden If: If R0 ñ R1 Jump L.... Esto puede parecer un poco loco, pero funciona perfectamente en la practica. For To Next (bucle dentro de AMAL) For reg=start To end : : Next Consiste en un estandard FOR...NEXT, muy parecido a su equivalen- te Basic. Esos bucles se pueden explotar en tus programas para mover objetos en complejos modelos visuales. "REG" puede ser cual quier registro AMAL (R0-R9 o bien RA-RZ). Sin embargo, no puedes usar los registros especiales para este proposito. Como en el Basic, el registro despues de que el NEXT sea ejecu tado sera comparado con el contador que hayas especificado en FOR de otra forma aparecera un mensaje de error de sintaxis. Tambien observa que el tamaño del paso es siempre de uno en uno. Adicio- nalmente tambien es posible realizar bucles anidados, uno dentro de otro. 160 Recuerda que cada canal de animacion solo puede ejecutar un bucle simple por cada VBL. Esto sincroniza el efecto de tu bucle con la visualizacion de pantalla, y evita la necesidad de añadir un comando PAUSE antes de cada NEXT. 7- Generando una onda de ataque para un programa Esos bucles pueden usarse para crear complejos sistemas de mo vimiento. El tipo mas facil de animacion es la linea recta. Esto puede lograrse con un simple For...Next, como sigue: Load"AMOS_DATA:Spraites/Octopus.abk":Get sprite palette Sprite 8,130,60,1 C$=For R0=1 to 320 ; Let X=X+1 ; Next R0": Rem mueve sprite Amal 8,C$: Amal On 8: Direct Ahora puedes aumentar este programa, haciendo que tu objeto vaya de aca para alla a lo largo de la pantalla. Load"AMOS_DATA:Spraites/Octopus.abk":Get sprite palette Sprite 8,130,60,1 C$="Loop:For R0= 1 To 320 ; Let X=X+1 : Next R0" C$=C$+" For R0=1 to 320 ; Let X=X-1 ; Next R0 ; Jump Loop" Amal 8,C$: Amal On 8: Direct El primer bucle mueve el objeto de izquierda a derecha, mien- tras que el segundo lo hace al reves. Hasta ahora la animacion ha sido restringida a solo movimientos horizontales. Al objeto de crear una onda de ataque mas realista, es necesario incorporar un componente vertical a esta animacion. Esto puede conseguirse in- cluyendo en tu programa otro bucle: Load"AMOS_DATA:Spraites/Octopus.abk":Get sprite palette Sprite 8,130,60,1:C$=For R1=0 To 10 ;" C$=C$+" For R0= 1 To 320 ; Let X=X+1 : Next R0 ;" C$=C$+"Let Y=Y+8 ;" C$=C$+" For R0=1 to 320 ; Let X=X-1 ; Next R0 ;" C$=C$+"Let Y=Y+8 ; Next R1" Amal 8,C$: Amal On 8 El programa anterior genera un suave patron de ataque bastante basico. 161 - Grabacion de una compleja secuencia de movimiento PLay PLay path Si ya conoces las ondas suaves de ataque de los modernos juegos de arcade, y crees que nunca conseguiras algo parecido, piensate lo de nuevo. El comando PLay de AMAL te permite animar libremente tus objetos mediante practicamente cualquier secuencia de movimi- entos que puedas imaginar. Funciona ejecutando un movimiento pre- viamente definido y almacenado en el banco de memoria de AMAL. Ese modelo de movimiento puede crearse con el accesorio AMAL del disco AMOS. Y simplemente va a grabar una secuencia de los mo vimientos del raton y la introduce directamente en los bancos de memoria de AMAL. Una vez que hayas creado tus secuencias de movi- mientos de esta manera, podras facilmente asignarlas a cualquier objeto de pantalla, reproduciendo perfectamente su modelo origi- nal. Tanto la velocidad como la direccion de tu movimiento puede cambiarse en cualquier momento desde el programa AMOS Basic. La primera vez que AMAL encuentra uncomando PLay, chequea en el banco hasta encontrar el movimiento grabado que se especifica en el parametro ("PATH"). "PATH" es tan solo un numero que oscila desde 1 hasta el maximo numero de modelos que exista en el banco. Si surgiera algun problema durante esta fase, AMAL abortaria por completo la ejecucion de PLay, e iria a la siguiente instruccion de tu cadena de animacion. Despues de que el modelo haya sido inicializado, el registro R0 se cargara con el "tempo" del movimiento. Esto determina el in tervalo de tiempo entre cada paso individual del movimiento. Todo el tiempo se medira en unidades de cincuentavos de segundo. Cambi ando este registro en tu programa AMAL, podras aminorar o acele- rar la velocidad de movimiento de tus objetos. Ten presente que cada paso de movimiento se añade a las actua- les coordenadas de tu objeto. Asi, si un objeto es posteriormente movido mediante las instrucciones para bobs o sprites, comenzara desde la nueva posicion de pantalla. Ademas, tambien es posible animar docenas de diferentes objetos en pantalla, utilizando una simple secuencia de movimientos. El registro R1 ahora contiene la bandera o "flag" que determi- nara la direccion de tus movimientos. Hay 3 posibles situaciones: 1) R1 > 0 = Adelante Un valor de 1 para R1, especifica que el modelo de movimiento se ejecutara desde el principio hasta el final, exactamente en el orden en que ha sido creado (este es el valor por defecto). 162 2) R1 = 0 = Atras Muchas secuencias de animacion requieren que tus objetos se mo vilicen de aca para alla, a traves de tu pantalla en un comple- jo modelo de movimiento. Para cambiar la direccion, simplemente carga R1 con 0. Tu objeto ahora, girara y ejecutara su movimien to original hacia atras. 3) R1 = -1 = Salida Si se detecta una colision en tu programa AMOS, necesitaras detener por completo el movimiento de tu objeto, y tal vez gene rar un efecto de explosion. Esto puede conseguirse colocando en R1 un valor de -1. AMAL entonces abortara la instruccion PLay, e inmediatamente saltara a la siguiente instruccion de tu se- cuencia de animacion. Una solucion ingeniosa es que dichos registros pueden alterar se directamente desde el Basic. Esto te facilita el control de tu modelo de movimientos directamente desde el programa principal. Existe tambien una instruccion especial AMPLAY para hacerte las cosas aun mas faciles. El comando PLay es ideal para el control de los aliens en los juegos de arcade. De hecho, es la instruccion simple mas potente de AMAL. AMAL (llama a un programa AMAL) AMAL n,a$ AMAL n,p AMAL n,a$ to address El comando AMAL asigna un programa AMAL a un canal de animacion. Este programa puede ser tomado desde la cadena "a$", o bien desde el banco de memoria de AMAL. La primera version de esta instruccion carga tu programa desde la cadena "a$" y la asigna al canal "N". a$ contiene una lista de instrucciones AMAL. De forma alternativa puedes cargar tu progra- ma desde una zona de memoria, sita en el banco de memoria 4. "N" es el numero del canal de animacion, y oscila desde 0 a 63 Cada canal de AMOS se puede asignar independientemente a un bob, un sprite o una pantalla. Solo los primeros 16 programas AMAL pueden ejecutarse usando interrupciones. Al objeto de no exceder este limite, necesitas ejecutar tus programas directamente desde el Basic, usando el co- mando SYNCHRO. La version final de la instruccion AMAL es ideal para programa dores avanzados. Simplemente copia el contenido de los registros X, Y e A en un area especifica de memoria. Podras usar ahora esa informacion directamente en tus rutinas de Basic. Ademas es posi- ble explotar el sistema AMAL para animar cualquier cosa, desde un bloque hasta un caracter. El formato es: 163 AMAL n,a$ to address "ADDRESS" debe ser constante y radicar en una zona libre de la me moria, preferiblemente en una cadena AMOS o en un banco de memo- ria. Cada vez que tu programa AMAL se ejecute (50 veces por segun do), se escribiran en ese area de memoria, los siguientes valores Lugar Efecto ----- ------ Address Bit 0 se pone a 1 si X ha cambiado Bit 1 indica que Y ha sido alterado Bit 2 cambia si la imagen (A) ha cambiado desde la ultima interrupcion Address+2 Es una palabra que contiene el ultimo valor de X Address+4 Contiene el actual valor de Y Address+6 Almacena el valor de A NOTA: se puede acceder a esos valores desde tu programa, utilizan do un simple DEEK. Esta opcion invalidara totalmente cualquier asignacion previa de CHANNEL. Comandos AMAL ============= He aqui un listado completo de todos los comandos AMAL dispo- nibles: M (Move) Move deltaX,deltaY,steps A (Anim) Anim cycles,(image,delay)(image,delay)... L (Let) Let reg=exp J (Jump) Jump L I (If) If exp Jump L For To Next For reg=start To end....Next reg PL (PLay) PLay path P (Pause) Pause AU (AUtotest) AU (list of tests) --Vease Sistema AUTOTEST-- X (eXit) eXit (Sale de AUtotest y vuelve al AMAL) W (Wait) Wait (Congela el programa AMAL y solo ejecuta el AUtotest) O (On) On (Reactiva el programa despues de Wait) D (Direct) Direct (Establece la parte del programa que se ejecutara despues de un autotest)