Revistas en papel
Anterior
MenĂº
Logotipo

Amiga.InFo Nº 0 - Noviembre/Diciembre 1994 - Amos

NOTA: Pulsando sobre las fotos con borde azul ampliarás la imagen.


Rafael Romero nos introduce a un lenguaje de programación sencillo, potente, y utilizado por muchos, que desplazó rápidamente al Amiga Basic

Este artículo quiere introducir brevemente un cursillo sobre el lenguaje de programación AMOS Basic y explicar las posibilidades que ofrece. Antes de todo, una pequeña aclaración: actualmente hay disponible el AMOS y el AMOSPRO, pero en el texto me refiero a ambos con la palabra AMOS, excepto si hago mención expresa de lo contrario.

El AMOS fue creado en 1990 por François Lionet, un programador francés que había creado para los ATARI-ST un nuevo lenguaje llamado STOS. El STOS se caracterizaba por un aprovechamiento excelente de los gráficos y sonido de los ATARI-ST, y estaba pensado para crear juegos y demostraciones. Viendo de donde procede, es lógico pensar que estaba principalmente pensado para programadores de juegos y demostraciones. Posteriormente ha ido mucho más alla, y con el AMOSPro versión 1.0, aparecido en 1992, se ha convertido en un lenguaje que permite crear casi cualquier programa que se nos ocurra.

Un detalle que hay que agradecer a François Lionet, es que no hace falta tener una copia original de AMOS para trabajar con él. Cuando alguien lo compra, está pagando los manuales de instrucciones y ejemplos, y no el permiso de uso. Si un usuario quiere comercializar un producto desarrollado en AMOS, entonces tiene que comunicarlo y pagar la licencia a EuroPress Software, los cuales son los proveedores y distribuidores del lenguaje en Europa. Pero que nadie se asuste, pues el precio de la licencia es muy bajo. De todas maneras si está interesado en hacer algún programa, le recomiendo que compre la versión original de AMOSPro versión 2.0 (la última por ahora) la cual consta de 7 discos, menú de ayuda en editor, manuales, ejemplos y un programa que permitirá convertir nuestros programas en ejecutables (el compiler), sin necesidad de cargar siempre el AMOSPro para hacerlos funcionar.

Si quiere tenerlo gratis y no le interesan para nada los manuales, puede conseguir las versiones anteriores en casi cualquier BBS de AMIGA (está actualmente disponible la versión 1.36 aunque sin el compiler). Un último comentario: el compiler no es un programa de dominio público y tiene que comprar el programa original. De todas maneras, le recomiendo que se haga con el programa original AMOSPro y el compiler correspondiente.

Es un lenguaje de programación tipo basic, y, curiosamente, la mayoría de los comandos típicos del basic los ha heredado del Sinclair Basic del ZX Spectrum. Lógicamente ha incorporado muchos comandos nuevos que aprovechan las capacidades del Commodore Amiga, sobre todo en lo que se refiere a gráficos. Esta herencia de comandos permitirá comprender más fácilmente el uso de algunos de ellos a los antiguos poseedores de Spectrum.

Este lenguaje se caracteriza por poseer un juego de instrucciones potente y fácil de aprender y es razonablemente rápido para ser un basic. Con AMOS es perfectamente posible hacer aplicaciones, demostraciones de música, animaciones y juegos. Por contra, no aprovecha para nada el sistema operativo y no podemos crear aplicaciones con ventanas y menús de estilo "Intuition", aunque permite crear todo ésto, pero con su estilo propio. Esta falta de entendimiento con el sistema operativo conlleva otro problema muy importante: no saca partido delas resoluciones ECS y mucho menos las resoluciones AGA. A pesar de los rumores que corren por algunas BBS, y como muy bien avisa el creador François Lionet en varios mensajes, el AMOS no las admite y las "versiones" que sí las admiten son versiones modificadas por "hackers" para forzar a que las admita.

Otra desventaja de no aprovechar el sistema operativo, es que todas las novedades que se van incorporando al sistema tampoco pueden ser aprovechadas. Por ejemplo, si un usuario dispone del duplicador de discos Xpk, el cual permite duplicar la capacidad del disco duro, el AMOS no puede acceder al disco duro (o partición) donde esté siendo aplicado el Xpk, con la consiguiente molestia de o poder leer todos los ficheros que deseemos. El creador del AMOS ha prometido que, en la próxima versión de éste, ya estará integrado plenamente en el sistema operativo y podremos disfrutar del entorno del Workbench, también desde AMOS, así como crear aplicaciones con un aspecto más profesional.

De todas maneras, estas carencias pueden ser subsanadas ampliando las posibilidades iniciales de AMOS. Sí, se le pueden añadir nuevos módulos, que, poco a poco, van mejorando las características del lenguaje. Como ejemplo sirva el módulo de manejo de gráficos vectoriales voodoo3d, el cual se puede incorporar a cualquier AMOS versión 1.34 o superior, y por supuesto AMOSPRO. Con este módulo se pueden crear "demos" vectoriales como algunas de las que solemos ver en nuestro ordenador de vez en cuando, y que asombran, sobre todo, a usuarios de otros equipos. Además de éste, actualmente están disponibles los siguientes:

  • ldos: Mejora el acceso a ficheros y matrices del AMOS e incorpora comandos nuevos para manejo de AREXX. No es necesario en el AMOSPRO.

  • lser: Permite acceder al puerto serie y aprovecharlo desde AMOS. Tampoco es necesario en el AMOSPRO.

  • craft2: Multiplica espectacularmente la velocidad del AMOS y añade nuevos comandos gráficos. Ideal para hacer demos y juegos. No es compatible con AMOSPRO. Es imprescindible para programadores de juegos y demos.

  • compiler: Este módulo es necesario para poder hacer ejecutables nuestros programas. Con ésto, ganamos velocidad y nos aseguramos de que nadie eche vistazos indiscretos al listado de nuestro programa. Hay versiones para AMOS y AMOSPRO.

  • tome: Muy útil para programadores de juegos. Nos ofrece comandos que facilitan el manejo de mapeados de juegos. No es compatible con AMOSPRO.

  • tracker: Con él podemos leer módulos compatibles con noisetracker, protracker, etc.., y, por supuesto, escucharlos. No es necesario en AMOSPRO.

Ahora, voy a comentar las variables y los tipos disponibles. Si usted ya conoce el lenguaje basic de "otros" sistemas, lo siguiente le sonará.

Un nombre de variable válido es aquel que no coincide con ninguna palabra clave de AMOS. Cuando estamos editando un listado de programa, el editor chequea automáticamente la línea que hemos introducido, capitaliza las instrucciones de AMOS y pone en mayúsculas las variables. Esto va muy bien a la hora de buscar instrucciones y variables a ojo. Por ejemplo, son nombres de variables válidos los siguientes: contador, índice, cuenta libro, etc. Nosotros no tenemos que preocuparnos de tener que escribir en mayúsculas o capitalizar ya que el editor lo hace automáticamente.

Los tipos de datos disponibles en AMOS son los siguientes:

  • BOOLEANO: Sólo permite dos valores: TRUE (equivalente numérico -1) y FALSE (equivalente numérico 0). Su declaración puede ser cualquier letra o palabra que no coincida con una palabra clave de AMOS. A las variables de tipo booleano se les puede asignar los valores lógicos True y False, otras variables de tipo booleano y el resultado de operaciones booleanas.

Ejemplo:

A=True : Rem la variable A toma por valor cierto
B=A
C=(10>20) : Rem En este caso C toma valor False
Print A : Rem imprimimos el valor de A en pantalla
Resultado-> -1

Nota:Como las variables booleanas tienen un valor numérico que conocemos podemos aprovechar ésto para hacer expresiones matemáticas que dependan de un valor booleano. Es perfectamente válido lo siguiente

A=True
Print A*180
Resultado-> -180

aunque no recomiendo su uso.

  • NUMERICO: Rango en precisión simple 1 E-14 a 1 E+15. Rango de precisión doble 1 E-307 a 1 E+308. No se puede trabajar con los dos tipos de precisión a la vez, sólo con uno. Hay que declarar la precisión al comienzo del programa, siendo por defecto precisión simple.

Además del tipo de precisión, hay que tener en cuenta que se dispone de dos tipos de datos numéricos: enteros y reales. Los reales son más precisos, pues admiten decimales pero por contra son más lentos al efectuar cálculos.

La notación para variables enteras es la misma que para las variables booleanas (de hecho, las variables booleanas son un caso especial de este tipo de variables) mientras que, para las variables reales, la declaración es la siguiente

nombre_variable# =1.0

donde nombre_variable es cualquier secuencia de caracteres que no corresponda con una palabra clave del lenguaje, el símbolo # (SHIFT+3) indica variable numérica real y el valor asignado es otra variable de tipo real o un número real con decimal, aunque los decimales sean 0. ¡Atención! Si no se pone este símbolo, #, después del nombre de la variable, el intérprete no dará ningún error, tratando a la variable como una variable de tipo entero.

Ejemplo:

Rem Ejemplos números enteros
B=1 : Rem Asignamos el valor 1 a la variable B
B=2+1 : Rem Asignamos a B el resultado de la suma
B=A+C : Rem Asignamos a B el resultado de sumar A y C

Rem Ejemplos números reales
B#=1.0 : Rem Atención al símbolo y a la asignación con decimal
B#=2.0+1.0
B#=A#+C#

También podemos "mezclar" los dos tipos de variables numéricas si hace falta, pero hay que tener en cuenta a qué tipo de variable hacemos la asignación.

nombre_variable_real = nombre_variable_entera#

nombre_variable_entera = nombre_variable_real#

¡Atención! en el segundo caso al hacer la asignación el valor es redondeado.

Ejemplos:

A=1 : Rem A variable entera.
B#=1.5 : Rem B# variable real.
Print A+B# : Rem Si no asignamos el valor, AMOS siempre devuelve un valor real.
Resultado-> 2.5

C=A+B# : Rem C variable entera, al hacer la suma se redondea.
Print C
Resultado-> 2

C#=A+B#
Print C#
Resultado-> 2.5

Las operaciones que admiten las variables enteras y reales son las mismas que admiten números. Son la suma, resta, división, etc..., además de las funciones trigonométricas.

Nota: Podemos tener dos variables que se llamen igual pero sean de diferente tipo. En el ejemplo anterior la variable entera C es diferente de la variable real C#.

  • CADENA: Permite almacenar hasta 65536 caracteres en una variable. Las variables de tipo cadena (o string) se declaran de la siguiente forma:

    nombre_variable$ = "texto"

donde nombre_variable puede ser cualquier palabra que no coincida con una palabra clave de AMOS. El símbolo $ (SHIFT+4) indica que la variable es de tipo cadena. A las variables de cadena se les puede asignar una cadena, que es un texto entre comillas, u otra variable de cadena.

Ejemplos:

A$="AMOS v. 1.34"
B$=" PRO"
C$=A$
Print C$
Resultado-> AMOS

Nota: Las cadenas admiten comparaciones y la función suma, además de muchas funciones especiales sólo para cadenas. La suma, en cadenas, se entiende como una concatenación.

Ejemplo:

A$="AMOS"
B$="PRO"
C$=A$+B$
Print C$
Resultado-> AMOSPRO

Podemos transformar datos de tipo numérico en cadena y viceversa con las funciones Str$ y Val.

  • MATRIZ(x1,x2,...,xn): Nos permite almacenar nuestros datos en una tabla del tipo definido. La tabla puede ser de una o más dimensiones y tiene que ser declarada al principio de nuestro programa. No se pueden definir tablas que contengan más de un tipo de datos. Las tablas pueden ser booleanas, numéricas o de cadenas. Antes de poder guardar datos en una matriz hay que declararla con el comando

    Dim nombre_tabla(tamaño)

Los índices en una matriz van de 0 a tamaño, ambos inclusives.

Ejemplos:

Dim TABLA(10)
TABLA(0)=1
TABLA(1)=4
TABLA(10)=14
Print TABLA(0),TABLA(1),TABLA(10)
Resultado-> 1 4 14

Estos son todos los tipos de datos que admite AMOS. Además, nos permite reservar zonas de memoria para poder guardar datos que nos interesen. Las zonas de memoria se pueden reservar temporalmente o para todo el tiempo que esté en marcha nuestro programa, pero ésto lo explicaré en otra ocasión.

Aunque no permita definir tipos de datos, sí permite una cosa que es muy valorada hoy en día: la programación estructurada. Si no comprende a que me refiero, no se preocupe pues con el ejemplo le quedará claro. Le basta saber, de momento, que con la programación estructurada es bastante más fácil programar algoritmos complejos y largos.

Ahora, como lo prometido es deuda, paso a dar un ejemplo. Primero explico el programa en un lenguaje similar al pascal y luego doy la versión en AMOS.

Versión en lenguaje algorítmico:

Programa fondo_animado;

procedimiento Crear_Bobs()
borrar_pantalla
lapiz:=3
Para dadio:=1 hasta 8
(*Dibujamos círculos de origen 8,8 y radio de 1 a 8 *)
Circle 8,8,radio
(*Cogemos una porción de pantalla y la guardamos *)
(* como objeto gráfico *)
Get Sprite 0,N,0,0 To 31,31
borrar_pantalla
finPara N
Para radio:=7 hasta 1 paso -1
Circle 8,8,N
Get Sprite 0,15-radio,0,0 to 31,31
borrar_pantalla
finPara N
fin Crear_Bobs;

procedimiento _AnimarPantalla()
A:=2;
Repetir
lapiz:=4; papel:=2;
(* Seleccionamos un tipo de relleno para los procedimientos *)
(* El signo negativo indica que nos referimos a una imagen *)
(* del banco de objetos gráficos *)
relleno:=-A;
(* Dibujamos un rectángulo *)
Bar 0,0 To 320,200;
Si a>15 entonces a:=2;
sino a:=a+1;
finSi
hasta Pulsar_Botón_ratón=Cierto;
Borrar_banco_de_objetos_gráfico;
fin _AnimarPantalla;

(* Inicio del programa principal *)

Abrir_pantalla (0,320,200,16,Lowres);
Cambiar_Atributos_Pantalla;
Crear_Bobs();
_AnimarPantalla()

fin fondo_animado.

Ahora la versión en AMOS:

Rem --- Cortar desde aquí ---
Rem Coger el programa y grabarlo como ejemplo1.asc
Rem Usar la opción "Merge Ascii" del menú de carga y luego "Run"
Rem Este programa crea un fondo animado.
Rem Los parpadeos es posible evitarlos, como ya se verá más adelante
Rem Programa principal

Rem Abrir pantalla
Screen Open 0,320,200,16,Lowres
Flash Off
Curs Off
Proc CREAR_BOBS
Proc _ANIMARPANTALLA
End

Procedure CREAR_BOBS
Cls 0 : Rem Borramos la pantalla
Ink 3 : Rem Seleccionamos color del lápiz gráfico
For N=1 to 8
Circle 8,8,N : Rem Dibujamos un círculo de radio N
Rem Guardamos una porción de pantalla en el banco de objetos
Get Sprite 0,N,0,0 to 31,31
Cls 0
Next N
For N=7 to 1 Step -1
Circle 8,8,N : Rem Dibujamos un círculo de radio N
Rem Guardamos una porción de pantalla en el banco de objetos
Get Sprite 0,15-N,0,0 To 31,31
Cls 0
Next N
End Proc

Procedure _ANIMARPANTALLA

Rem Imprimimos una línea de texto, centrada, en pantalla
Centre "Para comenzar pulse una tecla."
Rem Bajamos una línea
Print Cdown$
Centre "Para acabar pulse un botón del ratón."
Rem Esperamos la pulsación de cualquier tecla
Wait Key
Rem Escondemos el gráfico del cursor del ratón
Hide
A=2
Repeat
Ink 4,2
Rem Escogemos tipo de relleno para dibujar
Set Pattern -A
Rem Dibujamos un rectángulo
Bar 0,0 To 320,200
Rem Equivalente a lo siguiente
Rem IF A>15 THEN A=2
Rem ELSE A=A+1
Rem ENDIF
Add A,1,2 to 15
Until Mouse Click
Rem Borramos el banco de objetos
Erase 1
Rem Hacemos aparecer el cursor del ratón
Show

End Proc

Rem --- Acaba aquí ---

Bueno, aquí acaba esta pequeña introducción. Si le ha parecido interesante el AMOS siga leyendo los siguientes capítulos.


Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal