Revistas en papel
 Amiga World Nº20 - Abril 1991
Anterior
MenĂº
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

En la teoría las
cosas parecen
sencillas, pero
en la práctica es
muy diferente.
Un programa no
sólo depende de
la correcta
sintaxis en
Ensamblador,
también depende
de manejar con
acierto el resto
del hardware.

Los cuadernos del
Ensamblador

 

Por F. Javier Rodríguez

Amiga World

 

CAPÍTULO VII

Es por esto por lo que un programa creado para Amiga no podrá funcionar en un Atari ST o Macintosh (salvo efectuando varias modificaciones) aunque estos también tengan el procesador 68000. Por lo tanto el siguiente paso que daremos en "Los cuadernos del Ensamblador" será conocer las direcciones importantes del Amiga, así como las funciones de las mismas. También aprovecharemos para desarrollar los primeros programas en este lenguaje.

Antes de comenzar estudiaremos las posiciones de memoria (Bancos) ocupados por la RAM en su configuración base, esta cambiará dependiendo de las ampliaciones que posea su equipo (me refiero a las ampliaciones de tipo RAM y tarjetas como pueden ser la Aceleradora o la BridgeBoard (1)). También veremos las posiciones de memoria utilizadas por los Custom Chips, así como las dos CIAs encargadas de controlar los perifericos soportados por el Amiga (Teclado, unidades de disco, ratón, Joystick...).

Con algunos de estos 'periféricos' nos detendremos a ver su funcionamiento, ya que el control de estos es especialmente interesante en cualquier tipo de programa (como por ejemplo la lectura del teclado prescindiendo de las funciones del sistema).


¿Dónde está la RAM?

Seguramente en más de una ocasión se habrá preguntado lo mismo, ya que al contrario de otros ordenadores (generalmente los de ocho bits) la RAM o los datos que contiene esta no siempre se encuentran en las mismas posiciones de memoria. Un ejemplo claro es el vector que apunta a la RAM de vídeo, la cual varía dependiendo de la memoria que posea su ordenador, así como de los programas que se estén ejecutando en el momento de activar un nuevo programa que utilice su propia memoria de vídeo (nueva pantalla Custom).

Igualmente los Buffers (2) de disco, así como los de otros dispositivos, nunca se encontrarán en las mismas posiciones de memoria; sino que estos se reubican cada vez que se hace un reset en el sistema o este se arranca por primera vez mediante el encendido.

Es por esto por lo que no se debe realizar un 'Pokeo' (3) directo a memoria, sino que se tiene que consultar mediante las funciones de la librería la cantidad de memoria disponible. Igualmente otras funciones se encargan de informar sobre la situación de la memoria dedicada a vídeo (en el cado de que se encuentre ejecutándose más de un programa, se puede obtener la información correspondiente a cada una de las pantallas de vídeo). En caso de 'Pokear' directamente a memoria, sin consultar previamente, la respuesta más segura será un GURU, para a continuación tener que resetear el ordenador.

Obviamente es necesario conocer, por lo menos, los sitios donde no se debe 'hurgar', por ello se publica a continuación el mapa de memoria del Amiga, aunque sea de una forma esquemática (más avanzado el curso se verá cada uno de los bloques de una forma más detallada):

MAPA DE MEMORIA

    Dirección   Descripción

$000000-$03FFFF

 

256Kb de memoria Chip.

$040000-$07FFFF

 

256Kb de memoria Chip (mediante ampliación opcional).

$080000-$0FFFFF

 

512Kb de memoria Chip extendida (a 1MB).

$100000-$1FFFFF

 

Reservada.

$200000-$9FFFFF

 

8MB de espacio AutoConfig (dedicado a expansiones de memoria FAST).

$A00000-$BEFFFF

 

Reservada.

$BFD000-$BFDF00

 

CIA B (8520)

$BFE001-$BFEF01

 

CIA A (8520)

$C00000-$DFEFFF

 

Reservada.

$C00000-$D7FFFF

 

Expansión de memoria interna.

$D80000-$DBFFFF

 

Reservada.

$DC0000-$DCFFFF

 

Reloj en tiempo real (Registros de control).

$DFF000-$DFFFFF

 

Registros de los Custom Chips.

$E00000-$E7FFFF

 

Reservada.

$E80000-$E8FFFF

 

Espacio para Autoconfig, (dedicado a tarjetas).

$E90000-$EFFFFF

 

Espacio AutoConfig secundario (normalmente para Tarjetas I/O de 64Kb).

$F00000-$FBFFFF

 

Reservada.

$FC0000-$FFFFFF

 

256K del Sistema en ROM.

Como habrán observado, en el esquema de memoria, algunos de los bloques se encuentran marcados como 'Reservada'. De igual forma entre las direcciones $FC0000 y $FFFFFF (recuerde que se trata de valores en Hexadecimal) se encuentran las funciones de la ROM. En cualquiera de los dos casos no se debe intentar 'machacar' dichas posiciones de memoria; en el caso de los bloques que comprenden las CIAs ocurre lo mismo, así como el espacio Autoconfig para tarjetas.

Los únicos bloques de memoria con los cuales se pueden realizar 'experimentos' de escritura directa son los propios de RAM (CHIP o FAST), aunque se deba tener cuidado de no machacar nada importante como programas que en ese momento se encuentren ejecutándose o datos que el sistema almacena en dichas posiciones de memoria ubicadas en RAM.

En cualquiera de los casos no intente demasiadas veces acceder directamente a memoria; en su ordenador puede no pasar nada, pero en el momento que intente ejecutar el mismo programa en otro ordenador con distinta configuración, lo más seguro es que tenga que acabar 'reseteando' (arrancar en caliente) el mismo.

Sin lugar a dudas la forma más eficaz de tratar la memoria, sin correr riesgos, es utilizando las funciones del sistema encargadas de informarnos sobre los bloques de memoria que se encuentran libres; dichas funciones se están publicando actualmente en la serie de artículos 'las librerías del Amiga' y, desde luego, se utilizarán en más de una ocasión para los programas que se realicen en este cursillo.


Los primeros Programas

Desde luego no todos los programadores utilizan el mismo MacroEnsamblador. Actualmente existe en el mercado un amplio número de MacroEnsambladores donde poder elegir, cada uno de ellos con distintas posibilidades, más rápidos, más sencillos; en definitiva: más o menos potentes.

1   Este tipo de tarjetas son de Autoconfiguración; es decir que, mediante Hardware, estas reflejan sus posiciones de memoria directamente en el ordenador desde el momento de su inserción, ocupando unas determinadas posiciones de memoria. En el caso concreto de la BridgeBoard no se puede ampliar el Amiga 2000 a más de 7MB RAM (6MB de memoria FAST y un mega en placa madre), ya que de lo contrario se machacarán las posiciones de memoria dedicadas a la configuración de la tarjeta, y por tanto esta no funcionará emitiendo el mensaje 'Janus Setup Failure' cuando se arrancase el ordenador.

En este cursillo se utilizará, como se comentó en un principio, el DevPac 2. El motivo es muy sencillo, al igual que el resto de los usuarios, también tengo mis predilecciones por uno u otro programa. De todas formas a continuación comentaremos las similitudes entre este y otros MacroEnsambladores utilizados mayoritariamente. También veremos las correspondencias en algunas de las funciones para de esta forma 'compatibilizar' los listados que se publiquen entre la mayoría de los 'Macro' posibles.

El DevPac 2, es una versión mejorada del programa con el mismo nombre desarrollado por HISOFT. Este se puede definir como un paquete de ayuda al programador; ya que en un mismo conjunto nos podemos encontrar con un Editor, un Ensamblador, un Linkador (en este caso de Dominio público) y un Debuger, así como un completo manual de referencia en el uso de estos cuatro programas.

El editor del DevPac2 no es uno de los mejores que se pueden encontrar en el mercado, ya que entre sus características destaca su lentitud. Este editor también carece de la típica barra de scroll, con la cual desplazarse a lo largo del texto; con lo cual esta operación resulta bastante lenta, así como también carece de la posibilidad de definir macros y otras ayudas de edición. En el aspecto positivo se puede encontrar el fácil acceso tanto al Ensamblador como al Debuger, mediante dos de las opciones incluidas en el menú del editor; así como la posibilidad de poder ejecutar el programa ensamblador, con retorno al editor una vez finalizada la ejecución de este.

2   Los Buffers son posiciones de memoria RAM utilizados para el paso transitorio de datos entre la memoria del ordenador y los periféricos. En el caso de los Buffers de disco estos son de 512 Bytes por cada uno, por lo que si se encuentran 20 Buffers dedicados a la unidad 'DF0:', se estará consumiendo 20*512Bytes = 10.240 Bytes (10Kb de memoria Ram aproximadamente).

3   Se puede definir 'pokear' a la acción de introducir valores en las posiciones de memoria indicadas por el usuario.

Entre las funciones que si ofrece el editor, se encuentra la de saltar a una línea en concreto del texto, buscar y reemplazar, marcar bloques y operar con estos, etc. Una opción interesante incorporada en el menú pull-down es la definición de configuración, mediante la cual se puede seleccionar la realización de backups del listado, tamaño del buffer de texto, posibilidades de redimensionar la ventana, así como otras.

Como se comentó anteriormente, se puede acceder al Ensamblador mediante la opción incluida en el Editor, aunque a este también se puede acceder mediante una llamada desde el CLI.

El Ensamblador incluido en DevPac2 es muy completo, soprotando todo el set de instrucciones incluidas en el 68000; así como el ensamblado de MACROS definidas por el usuario.

La definición de Macros resulta una función muy interesante a la hora de programar en Ensamblador, ya que mediante estas se consigue una mayor estructura del programa, así como una reducción en el esfuerzo realizado por el programador.

La velocidad del Ensamblador es bastante rápida, dependiendo también del tamaño del listado a ensamblar, así como la cantidad de 'includes' realizados.

Entre las opciones con las que cuenta el Ensamblador se encuentran las de generar el programa ejecutable o linkable, así como la de sacar el listado por pantalla, impresora o a disco. El programa resultante puede ser almacenado tanto en memoria como en disco, así como no salvar este. Esta última posibilidad es especialmente interesante si solamente se desea comprobar los errores del listado.

Sin lugar a dudas
la forma más
eficaz de tratar
la memoria,
sin correr riesgos,
es utilizando las
funciones
del sistema

En la definición de etiquetas no hay apenas restricciones. Salvo unas cuantas, de uso interno del programa, se pueden definir etiquetas de todo tipo; incluyendo la posibilidad de que se diferencien las etiquetas en caja baja o alta. Otra de las funciones de gran ayuda es la función REPT, mediante la cual se pueden realizar lazos o REPeticiones con extrema sencillez.

Las opciones de ensamblado que contiene el programa son entre otras las de expansión de macros, optimización en los direccionamientos y creación de la tabla de símbolos, etc.

La primordial función del Linkador es la de unión entre diversos 'trozos' de programa para la formación del programa total ejecutable; así como la realización de un programa ejecutable a partir de uno ensamblado. Su manejo es similar al Alink (Linkador del MacroAssem), siendo cómodo y funcional.

Al igual que el Ensamblador, el Debuger puede ser ejecutado de dos formas, una desde la opción incluida en el Editor, y la segunda desde la llamada de este desde el CLI. El Debuger es un programa muy apreciado por los programadores, ya que con la ayuda de este se pueden determinar los errores de un programa con la ejecución paso a paso.

El Debuger incluido en DevPac puede resultar un poco complicado al principio, ya que el acceso a las diferentes opciones no se realiza mediante la selección de estas en los menús Pull-Down (de los cuales carece), sino que se accede a ellas mediante diferentes comandos o sentencias tecleadas en la 'caja de diálogo'.

El Debuger se encuentra estructurado en tres ventanas, las cuales muestran las diferentes divisiones del programa a repasar. Dichas divisiones son las de registros, desensamblado, memoria y desensamblar memoria o código.

Al igual que otros Debugers existentes (y tal vez más prácticos), se puede definir diversos puntos de parada a lo largo del programa; consiguiendo de esta forma que sólo se ejecute el programa hasta un punto determinado.


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