Revistas en papel
Anterior
MenĂº
Logotipo

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

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

BUSES, CPU's, MEMORIAS, E/S, DMA's y ¿ALGO MAS?

¿Alguna vez has sentido curiosidad por saber qué se esconde dentro de la carcasa de tu Amiga? ¿Sabes qué es un procesador, memoria CHIP o un CIA? Hummm...Puede que hayas oído hablar alguna vez de ellos, pero...¿y de canales DMA o de custom chips VLSI? ¿No? En esta sección, F. Martin nos comentará cada mes todo lo relacionado con el 'hardware', es decir, los componentes electrónicos del AMIGA: veremos la función y la programación individual de cada uno y cómo interactúan para conseguir realizar las tareas internas de un ordenador. Estudiaremos la arquitectura del Amiga.

Actualmente, muchos son los usuarios de ordenadores Amiga de habla hispana que no poseen información alguna de este magnífico ordenador. Esta sección pretende, en la medida de lo posible, llenar ese vacío conocido por todos los que han buscado y no han encontrado información suficiente acerca del 'hardware Amiga'.

Tanto los programadores (expertos o no) como los usuarios que tienen curiosidad por saber algo más sobre la máquina que tienen en las manos, pueden utilizar esta sección como guía de consulta o referencia sobre temas concretos de los componentes que integran y forman el Amiga.

La primera impresión que tuve al trabajar con un Amiga fue la de sorpresa, debida a la facilidad de manejo y a su admirable capacidad gráfica y de sonido. El entorno multitarea a través de pantallas y ventanas ofrece al usuario unas prestaciones mayores que en otros sistemas, y ésto es debido al diseño particular y personalizado que los ingenieros aplicaron al crear en 1985 el Amiga. Desde esa fecha han ido apareciendo versiones mejoradas del hardware y del sistema operativo, que añadían nuevas capacidades (sobre todo gráficas) hasta llegar actualmente a los modelos con arquitectura de 32 bits y chips AGA.

Frente a esta diversidad de modelos de Amiga que existen, y aunque son compatibles entre ellos, he creído conveniente explicar cada uno de los bloques de forma independiente al modelo concreto utilizado por el lector. Esto no implica que lectores con un A1200 o A4000 se vean discriminados, todo lo contrario, para estos modelos recientes he prestado especial atención, comentando las diferencias con los modelos básicos (A1000, A500, A600, A2000, A3000) y explicando todas las nuevas capacidades gráficas cuando sea necesario.

De igual forma cuando me planteé que nivel debía utilizar para poder explicar las funciones y la forma de programar cada uno de los chips del Amiga, tuve que establecer unos 'límites' para no convertir el artículo en documentos de 2000 páginas ilegibles. Este nivel está situado entre el sistema operativo (justo debajo) y los registros (posiciones de memoria) que cada dispositivo posee para su control y programación. No he explicado el sistema operativo, ya que es tema de otra sección que podéis encontrar en esta misma revista, ni tampoco la parte electrónica, que pertenece también a otra sección.

Desde este punto de vista, se podría abusar y decir que únicamente se ve el Amiga como unos conjuntos de registros, cada uno con una determinada función dentro del sistema. Cada chip es controlado por uno o varios de estos registros, y será tarea nuestra programarlos para que den los resultados que deseemos.

Comentaré algunas ventajas de esta forma de acceso mediante registros:

  • El acceso directo a los registros suele ofrecer una visión al programador de las posibilidades reales de cada componente del Amiga.

  • Se obtiene mayor eficiencia y código más compacto en los programas. La velocidad de ejecución es prácticamente la máxima que se puede obtener del Amiga.

  • Se puede acceder fácilmente a dispositivos hardware que de otra forma se convertiría en una tarea complicada, sino imposible.

Sin embargo, la programación directa del hardware trae algunos problemas en un sistema multitarea, donde pueden coexistir varios programas ejecutándose simultáneamente que utilizan los mismos recursos (los mismos componentes del sistema). Este tipo de acceso puede provocar un caos en el sistema operativo si no se presta atención y se modifica el contenido de los registros de forma descuidada. En este punto es importante diferenciar la forma más conveniente de programar:

  • Si nuestro programa ha de correr en multitarea con el sistema operativo (workbench y demás) u otros programas, no es nada recomendable utilizar directamente los registros (es más, está prohibido por Commodore). Una forma de estar totalmente seguros de que nuestro programa no va a interferir con otros, es accediendo al hardware directamente a través de llamadas al sistema operativo. Sin embargo, de esta forma se pierde velocidad y se limitan las posibilidades aunque es la forma más utilizada.

  • Por el contrario, si nuestro programa ha de tomar control absoluto del ordenador, sin necesidad de utilizar el sistema operativo, la forma más conveniente es la programación directa del hardware.

He comentado la forma de programar, pero no el lenguaje de programación. Aquí, de nuevo, tuve que elegir entre un lenguaje como Modula II, Pascal, C o E y el lenguaje ensamblador. Los primeros no ofrecen posibilidad a la hora de programar y acceder a niveles bajos del sistema, a excepción de C y E, que sí están preparados para trabajar con direcciones y datos a nivel de bits. Pero el código resultante de C o E no es tan eficiente y compacto como el resultante de programar en código ensamblador (¡A parte de que es necesario tener el compilador!). Por esta razón, todos los ejemplos contenidos en esta sección están en ensamblador, y además ofrecemos al lector no sólo abundantes programas, sino un entorno donde se pueden modificar y utilizar los ejemplos ya tecleados, incluídos en los discos de la revista, junto con diversas utilidades como un ensamblador y editor de dominio público. De esta forma, el lector está preparado para programar inmediatamente, ya sean los ejemplos o sus propios programas.

Mes a mes iremos recorriendo y explicando detalladamente cada parte, mostrando las posibilidades que cada chip o circuito integrado tiene y la forma de programarlo. Pero para iniciar este interesante viaje, el primer paso es coger el avión y dar un "vuelo de reconocimiento" sobre conceptos básicos y componentes relacionados con los ordenadores. Así conoceremos el que será nuestro lugar de trabajo habitual... ¡y qué mejor para centrarnos en el tema que 'diseñar a "grosso modo" un ordenador!


'DISEÑEMOS' UN ORDENADOR

Imaginemos que por un rato somos ingenieros de una empresa fabricante de ordenadores y que hemos recibido el proyecto de diseñar un ordenador dentro de la categoría de ordenadores personales. Nos situamos en una sala de reuniones de nuestra empresa (año 1985), donde el equipo de ingenieros está discutiendo en una primera reunión que componentes, partes y características han de formar nuestro ordenador. No es´tan entrando en detalles, sino estableciendo criterios y bases generales de una primera fase de diseño. Veamos lo que podemos aprender de ellos:

  • En primer lugar, necesitamos un circuito que pueda entender las instrucciones de un lenguaje de programación, ejecute programas y procese la información de una forma rápida y sencilla, es decir, hay que buscar un microprocesador. Podemos diseñarlo nosotros, pero sería costoso y lento, y por otra parte, en el mercado actual parece que tienen mucho éxito los microprocesadores de la empresa Intel y Motorola. Ya veremos más adelante cuál de ellos se adapta mejor a nuestro esquema.

  • También necesitamos un circuito que nos permita almacenar los datos y los programas, pero ha de ser rápido puestoque los datos han de ser accedidos continuamente por el procesador y otros componentes, y además de forma aleatoria y directa, es decir, necesitamos una memoria DRAM (Dynamic Random Access Memory). Estas memorias están divididas en casillas donde se almacena individualmente la información (de tamaño 8 bits). Cada casilla tiene su dirección que la identifica, y de esta forma, cuando queremos acceder al contenido de una de ellas, únicamente tenemos que entregarle a este circuito una dirección (un valor numérico) e indicarle si queremos leer o escribir en esa casilla. En caso de lectura, nos entregará inmediatamente el contenido de la casilla, en caso de escritura, nosotros le proporcionaremos también el dato a escribir. El procesador, entre otros, accederá a la memoria generando direcciones y leyendo o escribiendo en el contenido de ellas. Hay varios tipos de DRAMs en el mercado, pero la que necesitamos nosotros es la más utilizada y económica (Tipo DIP: Dual In line Pin).

Por otro lado, ahora que tenemos un procesador y una memoria, necesitamos algún medio para introducir la información, es decir, dispositivos de Entrada/Salida (E/S) de datos como pueden ser un teclado, ratón, pantalla, unidad de disco, disco duro, puertos externos serie y paralelo...y sus respectivos circuitos que lo controlen y permitan el acceso a ellos.

Con estos dispositivos nos aseguramos que la información va a estar almacenada de forma permanente y segura, y que podrá ser recuperada y modificada con facilidad (aunque con menos velocidad que la memoria DRAM). También permitimos que se introduzcan datos de forma directa por el usuario, utilizando un teclado y un ratón. Ya consideraremos si utilizamos controladores de dispositivos que existan en el mercado, o los diseñamos nosotros.


FIGURA 1. Muestra de la configuración básica que los ordenadores suelen tener. Se observa los tres buses y conectados a ellos la memoria, la cpu, y la Entrada/Salida.

Ahora estamos preparados para esbozar un primer esquema donde aparezcan estos tres bloques: el procesador, la memoria, y los dispositivos de Entrada/Salida. Sin embargo. todavía no hemos comentado un punto importante: la forma de interconectar estos módulos entre sí. Podemos utilizar un sistema de conexión típico que utiliza líneas eléctricas (buses) para comunicar los diferentes bloques. La idea es que en la placa donde residen los componentes conectamos un bloque con otro a partir de 'cables' o 'pistas' trazadas en la propia placa. Hay que tener cuidado en estepunto, puesto que cuantas más líneas posea nuestro diseño, más difícil y caro será fabricarlo. Por lo tanto, no podemos dedicar buses diferentes para comunicar entre ellos la memoria, procesador y dispositivos E/S.

Actualmente existe una técnica que utiliza únicamente tres buses y permite conectar un número elevado de componentes entre sí de forma simple y económica. Veamos que tipo de buses son:

  • Bus de datos: Este bus proporciona un camino para mover los datos entre los módulos que forman el sistema. Por ejemplo, la memoria obtiene de este bus los datos que deposita el microprocesador en el mismo bus, y viceversa. Cuantas más líneas posea este bus, mayor será la cantidad de información que podrá ser transferida simultáneamente (normalmente suelen ser de 16 ó 32 bits).

  • Bus de direcciones: Es usado para determinar el destino y origen de los datos colocados en el bus de datos. Por ejemplo, si la CPU quiere leer un dato de memoria, coloca su correspondiente dirección en este bus y avisa a la memoria de este hecho. Después, la memoria le colocará el dato asociado a esa dirección en el bus de datos y la CPU lo leerá. La anchura en bits de este bus limita la cantidad de direcciones accesibles. (Por ejemplo, si es de 24 ó 32 bits, se consiguen 2^24 ó 2^32 direcciones diferentes).

  • Bus de control: Todas las señales de control entre los diversos componentes, como por ejemplo señales de sincronización, permiso de Lectura/Escritura, activación, relojes... se reúnen en este bus.

En un principio, parece conveniente que utilicemos sólo buses de este tipo, puesto que simplificará en gran medida el diseño. Ahora que sabemos como conectaremos los bloques, hagamos un diagrama en papel que nos ayude a tener una visión gráfica de nuestro primer diseño (Mostrado en la figura 1). Se puede intuir de forma aproximada el funcionamiento básico de este esquema:

El procesador se encarga de leer y ejecutar los programas de memoria para obtener unos resultados, que serán enviados a los dispositivos de E/S convenientemente o almacenados en la memoria. Para ello, se emplean los buses como medio de transferencia de la información. Es importante observar que todos los componentes comparten los mismos buses y por lo tanto, nos encontramos con una limitación seria: durante el acceso de dos componentes al bus (uno para recibir y otro para enviar) el resto de los bloques han de desconectarse para no colisionar con los datos que están siendo transmitidos. Afortunadamente, los circuitos están preparados para este tipo de desconexiones. Cuando no son utilizados, automáticamente entran en un estado denominado de "alta impedancia'. muy similar a lo que podría ser extraer o desconectar físicamente el componente del bus.


FIGURA 2. Se observa la principal diferencia entre el esquema de la fig.1: Aparecen buses locales al procesador y a los dispositivos de E/S separados por un árbitro de memoria. El bloque denominado "custom chips" es el más importante puesto que permite realizar todas las tareas gráficas y de sonido, así como de E/S de forma independiente a la CPU.

Sin embargo, el siguiente ejemplo nos descubre otro problema en la configuración de la figura 1:

Imaginemos que el microprocesador necesita datos que estén en la memoria. El protocolo típico que suele seguir para conseguirlos es apropiarse de los buses si están libres... pero ¿y si están ocupados por otro componente? Podría darse el caso de que un dispositivo de E/S estuviera transfiriendo directamente datos de disco a memoria. El microprocesador no tiene más que dos soluciones: pararse y esperar o robarle los buses al dispositivo. Esto significa que o bien nuestro programa deja de ejecutarse (!!!) o el dispositivo deja de leer de disco. En un ordenador, los accesos a disco, o más todavía a memoria, son continuos y muy frecuentes, por lo tanto la ejecución de nuestro programa se´ra interrumpida constantemente, disminuyendo el rendimiento final. Esto hay que evitarlo.

Este problema se puede extender a cualquier combinación posible de acceso a los buses por parte de los distintos bloques, así que debemos solucionarlo de alguna forma. Reflexionando sobre el tema nos podríamos preguntar si es más conveniente buscarle una solución complicada o simplemente establecer, por ejemplo, una prioridad de acceso a los buses, dando más privilegio a los componentes que tengan accesos frecuentes y necesiten tiempos críticos de respuesta, como puede ser el procesador y la memoria. Esta solución no es la más óptima. Hay componentes que la mayoría del tiempo estarían parados a la espera de que se les ceda los buses (por ejemplo los dispositivos E/S) e incluso una vez que los posean, puede ocurrir que un componente con mayor privilegio ¡se los robe!

Quizás, en lugar de utilizar prioridades, podríamos asignar a cada componente un determinado tiempo de acceso a los buses, durante el cual los demás permanecen desactivados. Una vez se consuma el tiempo asignado se cederán los buses a otro componente que esté en espera. De esta forma, todos los bloques tendrán oportunidad de transferir información. Ok, parece lógico, pero ¿quién determina el tiempo que ha de estar cada uno de los componentes o decide que se ha excedido el tiempo de posesión? Los propios componentes no pueden decidir por sí solos, así que es necesario un circuito adicional que coordine y controle los acceso: necesitamos un árbitro de buses. Esta solución nos atrae, pero enseguida descubrimos que para poder repartir los buses en el tiempo los componentes conectados a ellos han de estar preparados...han de ser síncronos...y este tipo de componentes son caros y complicados de diseñar. De nuevo no hemos dado con la solución óptima.

Parece evidente que utilizando un único sistema de buses el problema no tiene una solución rápida y sencilla. ¿Y si añadimos más buses? Podemos obtener un compromiso entre número de buses, el corte y el rendimiento conseguido si dedicamos exclusivamente tres buses del mismo tipo que los anteriores a la memoria y procesador, y otros tres a los dispositivos de E/S y memoria. De esta forma todos trabajarían al 100% de su velocidad ya que no existirían colisiones.

Eso sí, la memoria hay que dividirla en dos bloques totalmente diferentes, puesto que si es compartida de nuevo aparecen problemas de colisión. Pero si tenemos dos memorias separadas y no están compartidas por los componentes, ¿como consigue el procesador obtener los datos que un dispositivo de E/S ha dejado en la memoria que le corresponde?

Tenemos que unir los buses de las dos partes para que en caso necesario, el procesador pueda acceder a la memoria asignada a los dispositivos de E/S. (Para estos últimos no es necesario que accedan a la del procesador o volveríamos al principio). La unión de los buses podemos realizarla a través de un árbitro de memoria que permita de forma opcional (y cuando convenga) acceder al procesador a los dispositivos de E/S y su memoria. OK!!! Parece que hemos dado con la solución, veamos, a priori, que dos ventajas clave tiene:

  • Permite en el mejor de los casos trabajar a la máxima velocidad que los componentes puedan dar. Esto es importantísimo. En el peor de los casos, el único que verá disminuido mínimamente su rendimiento será el procesador, puesto que esperará a que el árbitro le ceda los buses.

  • Mediante esta configuración, podemos dar más independencia a las actividades que los dispositivos de E/S han de realizar. Se descarga al procesador de tareas que no son propias de él, como la lectura del teclado, acceso a pantalla o carga directa en memoria de datos que proceden de una unidad de disco (DMA: Acceso direto a memoria). Incluso podemos incluir algún coprocesador gráfico que ejecute sus propios programas...

Con esta nueva configuración de los buses y bloques, hemos de volver a retocar el esquema de la figura 1 para convertirlo en el de la figura 2.

Basándonos en esta estructura, es hora de que retrocedamos a dos cuestiones que hemos dejado en el aire y que ahora podemos resolver: ¿Qué procesador utilizamos? ¿cómo y qué dispositivos de E/S implementamos?

La elección de los procesadores a los que podemos acceder (por su coste y comercialización) sólo tiene dos opciones: Intel o un Motorola. Un Intel proporcionaría compatibilidad con los ordenadores que actualmente están mas extendidos (son la opción más barata), y esto es una ventaja que rápidamente se convierte en desventaja cuando observamos el diseño primitivo y poco afortunado de los i80x86. Con buses multiplexados, memoria segmentada, registros implícitos, lenguaje máquina complicado y poco flexible. E/S no mapeada en memoria... convertiríamos nuestro diseño en un vulgar ordenador compatible repleto de parches, además de tener que volver a comenzar de nuevo todo el proceso de diseño con más problemas que soluciones.

Veamos que ofrece un Motorola 680x0:

  • Lenguaje máquina potente y completo. Libertad total en el uso de los registros internos y programación sencilla.

  • Buses sin multiplexar, es decir, puede direccionar directamente un espacio continuo de memoria de como mínimo 16 Mbytes.

  • Los dispositivos de E/S están mapeados en memoria, y se accede a ellos como si una posición de memoria se tratara.

  • Arquitectura interna de 32 bits.

  • Es posible varios modelos que funcionen a distintas velocidades y contienen mejoras internas que aumentan el rendimiento. Todos los modelos son compatibles en el lenguaje máquina de forma ascendente.

  • Facilidades para ser integrado en un sistema multitarea.

Este procesador se adapta totalmente a los requisitos de nuestro diseño, así que, será la mejor elección.

En cuanto a los dispositivos de E/S, hemos de discutir que posición tomamos:

1) Dejamos unos puertos con zócalos preparados para permitir conectar directamente a los buses estos dispositivos y que otros fabricantes se dediquen a diseñarlos, como puedan ser controladores de vídeo, disco, disco duro, teclado, puerto serie, paralelo, sonido... Es decir, fabricamos una placa vacía donde sólo estén implementados los buses, el procesador, la memoria y algún circuito adicional secundario. Esta es la posición más cómoda y desde luego la más económica. Pero dejar aspectos tan importantes en manos de terceros puede ocasionar la aparición de multitud de tarjetas incompatibles entre sí, que puede producir un caos en el usuario frente a esa diversidad. Los programadores tendrían que estar constantemente modificando sus aplicaciones para abarcar al máximo todo tipo de tarjetas diferentes. NO conseguiríamos un sistema homogéneo y completo que todo usuario pueda utilizar desde un principio. Evidentemente, el coste de una placa vacía sería ridículo, y el éxito de ventas estaría asegurado. Pero somos ingenieros (¿recuerdas?) y realmente no nos importa el éxito, cuando viene dado por otros motivos que no son calidad y potencia, sin perder la sencillez y eficacia para el usuario. Además, este tipo de máquinas vacías actualmente se comercializan ya, así que si seguimos esta línea nos convertiremos en uno de ese número infinito de empresas que plagian un diseño y colocan su logotipo alardeando de que son "PC compatible". Esta opción no sigue nuestra filosofía, así que la descartamos.

2) Diseñamos nosotros mismos los dispositivos básicos de E/S potenciando al máximo todas sus características. Es caro y representa un tiempo de desarrollo del proyecto mucho más largo. Sin embargo, podemos implementar todo tipo de circuitos que se adapten totalmente a nuestro diseño y que realicen tareas concretas a gran velocidad de una forma sencilla y elegante. Esta opción es la que debería escoger todo ingeniero que no esté presionado por motivos económicos o temporales. Total libertad para crear chips especiales dedicados a aspectos como gráficos, vídeo, sonido, puertos de comunicación...etc.

Crearemos 'custom chips', es decir, chips especiales y personalizados para el diseño de nuestro proyecto. Pero... ¿por qué no empleamos el procesador en tareas de imagen, sonido y perifericos?

Si aumentamos su velocidad, por ejemplo a 16, 33 o mejor aún a 66 Mhz, siempre nos sobrará tiempo de procesador para ejecutar otras tareas como presentar gráficos, transferencias de datos, acceso a periféricos... ¡NO! No podemos basar nuestro diseño únicamente en el procesador, y menos aún confiar en que el aumento de la frecuencia de reloj nos salvará en un futuro. Además, a medida que aumentamos la velocidad también aumenta la potencia consumida. y ¡¡¡ el calor disipado!!!. Los sistemas de refrigeración que habría que emplear serían muy voluminosos y caros. Un procesador funcionando a 66 Mhz podría tener serios problemas en estos y otros muchos aspectos que, aunque si es posible solucionarlos, no es el camino que debemos seguir...

Por otro lado, tareas como acceder a pantalla, mover gráficos, o transferir datos a disco ocuparían demasiado tiempo para el procesador, puesto que también ha de ejecutar programas y realizar funciones propias de él. Estaría excesivamente sobrecargado como para soportar multitarea real de una forma decente. Imaginaros que ha de mover un bloque de datos de 4Mbytes, evidentemente que lo puede hacer, pero no de la forma más eficiente (un chip diseñado para mover bloques puede alcanzar hasta 8 megas/seg).

El procesador lo dedicaremos exclusivamente a obtener la máxima velocidad de ejecución de programas. Como consecuencia, podremos implementar un mecanismo que nos permita repartir el tiempo de procesador entre diferentes programas, es decir, multitarea. Pero si queremos sólo el procesador para dedicarlo a los programas... ¿Quién se va a dedicar a las tareas restantes? La respuesta parece evidente, puesto que ya la sabemos: 'custom chips'. Circuitos independientes del procesador que lo complementen y estén dedicados exclusivamente a imagen, sonido, y periféricos.

Diseñados para propósitos concretos y para obtener la máxima eficacia en sus tareas. Que cuadripliquen o quintupliquen la velocidad del procesador en esas tareas. Este nuevo bloque se refleja en la figura 2, denominado 'custom chips'. Comentemos algunas características importantes que podríamos implementar en estos chips:

  • Sería imprescindible poder mostrar imágenes con alta resolución y a todo color.

  • Tener un circuito dedicado exclusivamente a mover datos gráficos de considerable volumen a una velocidad mínima de varios megabytes por segundo.

  • Posibilidad de generar polígonos y rellenarlos como mínimo a la velocidad de 1 millón de pixels/segundo... etc..etc.

- Volvamos a la realidad (ahora estamos en 1994). Algunos lectores habrán reconocido en el primer esquema la estructura típica de un PC (IBM o compatible) y también habrán observado que las soluciones que íbamos descartando ¡son las que han utilizado estos ordenadores!. Desde aproximadamente los 70 hasta hoy día, los principios en que se basan los PCs no han cambiado. Únicamente han evolucionado en un aspecto: Aumentar la potencia de sus procesadores con diseños complicados a base de elevar la frecuencia de funcionamiento.

El diseño de la figura 2 se creó aproximadamente en 1985. Por aquel entonces, apareció en el mercado el Amiga 1000. Hoy día, el esquema ha evolucionado y mejorado en muchos aspectos, pero sigue manteniendo la misma filosofía: "Procesador-Memoria-Buses Dedicados-Custom Chips". Llegados a este punto, es conveniente que especifiquemos las características técnicas de los Amiga actuales, para que todos podamos tener una misma vista global aproximada de sus capacidades.


ESPECIFICACIONES TECNICAS

El mundo Amiga está compuesto por diferentes modelos, aunque siempre se ha intentado conservar la compatibilidad entre todos ellos, compartiendo la misma base hardware, es decir, las mismas capacidades de sonido y gráficos. A cada modelo nuevo desarrolado se le han implementado todas las características del anterior, y además se le han añadido mejoras, como ha ocurrido ente los modelos NO AGA (A500, A2000, A3000...) y AGA (A1200, A4000).

Evidentemente existen diferencias, algunas de ellas muy importantes, como son los procesadores que llevan incorporados (M68000 / M68020 / M68030 / M68040) o la capacidad de expansión interna y externa, es decir, máxima cantidad de memoria permitida. el número de puertos donde colocar tarjetas internas, controladoras de todo tipo, genlocks, módems...etc. En las siguientes tablas mostramos los componentes y características que todos los Amiga incorporan.

CARACTERÍSTICAS TÉCNICAS GENERALES DE LOS AMIGA
  • Microprocesador Motorola de 16/32 bits. Todos los modelos (MC68000/10/20/30/40) son compatibles a nivel de lenguaje ensamblador, ofreciendo cada uno de ellos un juego de instrucciones adicional que aumenta las prestaciones y velocidad de proceso, siendo el modelo base el MC68000 (16/32 bits) y el modelo actual más avanzado el MC68040 (32 bits). La frecuencia de funcionamiento está comprendida entre 7 Mhz y 25 Mhz, aunque hay disponibles aceleradoras funcionando a 40Mhz y 50Mhz. El coprocesador matemático M68882 y la unidad de manejo de memoria MMU están integrados en el mismo chip MC68040 (A4000), mientras que en el MC68030 únicamente lo está la MMU, y externamente está disponible el coprocesador matemático. Los MC68000/MC68020 los tienen disponibles de forma externa.

  • Memoria expandible como máximo (si se utiliza el procesador nativo, sin aceleradoras) a 10 Mb en A500/A600/A2000/A1200 y a 4 Gigas en modelos con arquitectura de 32 bits (A3000/A4000). El modelo A4000 posee un mínimo de 6 mb en placa madre, mientras que los A3000/A1200 poseen 2Mb. Esta memoria es continua, y es accedida de forma sencilla y directa por el microprocesador, sin ningún tipo de segmentación, multiplexación de direcciones/datos o cualquier otro esquema adicional.

  • Sistema operativo multitarea y rutinas de soporte gráficas, de sonido y animación incluidos en una memoria ROM de 256kb en A500/A2000 y 512kb en A600, A3000, A4000, y A1200.

  • Unidad de disco interna 3,5" de doble cara, con una capacidad de 880kb en disco ya formateado, con posibilidad de conectar hasta tres unidades adicionales que puedan ser de 5,25". En el A4000 se incorpora unidad de alta densidad (1,76 mb), mientras que en los restantes modelos es opcional.

  • Dos puertos de comunicaciones, uno serie (RS 232C) y otro paralelo, totalmente programables.

  • Dos puertos reconfigurables para periféricos como ratón, joysticks, lápiz óptico, e incluso posibilidad de conexión para montajes electrónicos propios.

  • Puertos de vídeo con salida simultánea de vídeo compuesto, analógica o digital RGB (Red Green Blue).

  • Puertos para la salida de sonido estéreo de los cuatro canales de audio.

  • Controladora interna de disco duro tipo SCSI (A3000) o IDE (A600 / A1200 / A4000). Opcionalmente existen controladoras de tipo SCSI II.

  • Teclado profesional con keypad numérico, diez teclas de función y teclas de cursor. Cada teclado está configurado según el país, aunque existe posibilidad de reconfigurarlo por software.

  • Puerto compatible para tarjetas PCMCIA II, como ampliaciones de memoria DRAM y SRAM, módems, discos duros, CDROMs...etc (Sólo en modelo A600/A1200).

  • Puerto interno donde están disponibles todas las señales de los buses y del microprocesador para posibles tarjetas con ampliaciones o cambios de microprocesador no necesariamente Motorola. También pueden ser, por ejemplo, Intel y dar compatibilidad total con MSDOS, obteniendo dos sistemas con programas en multitarea.

AMIGA CUSTOM CHIPS
Todas las especificaciones anteriores suelen ser comunes en todo tipo de ordenadores, sin embargo, hay que prestar especial atención a los denominados 'custom chips' diseñados y personalizados exclusivamente para trabajar en un entorno multitarea. Estos, diferencian al Amiga de todos los demás ordenadores, consiguiendo un alto rendimiento del sistema gracias a ellos.

Estos tres chips (llamados, Agnus o Alice, Paula, Denise o Lisa) están diseñados para desarrolar tareas conjuntamente en temas como vídeo, sonido, acceso directo a memoria (DMA) o gráficos.

En este punto, hay que diferenciar sus versiones, puesto que Agnus y Denise son incorporado en A500/A2000 siendo la primera versión. Despues, se mejoraron algunas características y aparecieron los ECS (Enhanced Chip Set) en A500+/A600/A3000, para por último llegar a los AGA (Advanced Graphics Arquitecture, también denominados AA 'Advanced Amiga chip set'), donde Agnus pasa a ser Alice y Denise se renombra como Lisa. desarrollándose destacadas mejoras gráficas, y una arquitectura de 32 bits total del sistema en A1200 y A4000. A pesar de que los chips AGA están muy diferenciados de sus predecesores, mantienen total compatibilidad con ellos. El chip Paula se ha mantenido casi sin cambios en esta evolución.

A continuación se muestran las funciones principales y las posibilidades que los custom chips nos proporcionan, distinguiendo cuando sea necesario las diferencias entre los modelos de Amiga:

  • Gráficos de alta resolución generados a partir de bitplanos, con capacidad para soportar los dos estándars de vídeo PAL y NTSC,

    • En los A500/A2000, se usan normalmente resoluciones de:

      • 320x256 no entrelazado

      • 320x512 entrelazado con 32 colores en pantalla

      • 640x256 no entrelazado

      • 640x512 entrelazado en pantallas con 16 colores.

    • En los A500/A2000 existen modos de vídeo adicionales que permiten ver hasta 4096 colores simultáneos en pantalla (HAM6) o conseguir mayores resoluciones como por ejemplo pantallas completa o "overscan".

    • En los A600/A500+/A3000 se tienen todas las resoluciones del punto anterior, y además, modos de 1280x512 y 800x600 (16 colores máximo).

    • En los A1200/A4000 se obtienen todas las anteriores resoluciones, y además modos programables entre un rango de resoluciones de 320x200 a 1280x1024 puntos (con frecuencias de rastreo horizontal y vertical también programable) con 256 colores en pantalla de una paleta de 16,7 millones de colores. Con un monitor de tipo A2024 se obtiene una resolución de 1024x1024 puntos. Existe un modo gráfico denominado HAM8 donde se dispone, de forma simultánea, de los 262.144 (218) colores en pantalla y en cualquier resolución.

  • Un coprocesador de pantalla (denominado Copper y localizado en Agnus/Alice) que permite cambiar los valores de los registros de otros custom chips, en sincronización con el haz de electrones del monitor. Esto permite efectos especiales como cambiar la paleta de colores a partir de cierta coordenada de pantalla, u obtener varias pantallas con diferentes resoluciones, colores y demás atributos, o generar una interrupción al M680x0 sincronizada con el haz de electrones... El coprocesador puede trabajar varias veces por pantalla, en cualquier coordenada de una línea determinada o durante el intervalo en el que el haz desaparece por el final de la pantalla y aparece de nuevo por el principio (blanking interval). El coprocesador puede acceder directamente a todos los registros de los otros custom chips dejando libre al microprocesador M680x0 para otras tareas.

  • Organización de los colores en bancos de registros donde se almacenan sus valores. Para cada punto (pixel) de pantalla, la combinación de los bitplanos correspondientes produce un número que selecciona (indexa) un determinado registro de color dentro del banco.

    • 32 registros de 12 bits, divididos en 4 bits para el rojo, 4 para el verde y 4 para el azul. Estos cuatro bits indican la intensidad de los tres colores base para formas una combinación de ellos y mostrarla en pantalla. Este sistema permite obtener una paleta de 4096 colores (2^4 Red x 2^4 Green x 2^4 Blue = 2^12)

    • En los modelos A1200 y A4000, el ancho de los registros anteriores es ampliado a 25 bits, divididos en 8 bits para rojo, 8 para el verde y 8 para el azul, y para completar, uno para genlock. La combinación de estos valores de intensidad produce un nuevo color de una paleta de 16.777.216 colores (2^8 x 2^8 x 2^8 = 2^24). De igual forma, se han añadido registros, formando un total de 256. Estos están divididos en 8 bancos de 32 registros, para mantener la compatibilidad.

  • Objetos gráficos denominados 'sprites' dirigidos totalmente por el hardware (Denise/Lisa), obteniéndose gran velocidad y facilidad de movimiento. Estos sprites son independientes del fondo (background) de la pantalla, ya que poseen su propio mapa de bits y registros de color y pueden aparecer sobre o debajo de pantalla sin depender de su modo gráfico y sus colores. A su vez, cada sprite es independiente de los otros, ya que se utilizan 8 canales DMA. Después de producir la última línea de la imagen de un sprite, un canal DMA puede ser reusado para producir otra imagen de otro sprite, en cualquier lugar de la pantalla (con al menos una línea horizontal de diferencia entre cada nuevo uso).

    Existe una prioridad que puede ser dinámicamente controlada para cada objeto e incluso, la posibilidad de detectar colisiones. Es decir, el sistema puede controlar y modificar (a voluntad del programador) la prioridad entre los sprites y los bitplanos de fondo (playfield). De esta forma, se controla que objeto u objetos aparecen sobre o debajo del fondo en cualquier momento. Cuando diversos sprites aparecen moviéndose en pantalla, es posible que existan colisiones entre ellos, puesto que en un determinado momento dos o más objetos pueden coincidir en la misma coordenada gráfica. Estos casos pueden ser detectados automáticamente por el sistema e indicados al programador para que su programa reaccione en consecuencia a una determinada colisión. Las características gráficas de estos objetos gráficos son las siguientes:

    • 16 bits de ancho con una paleta de 16 colores (cuando los sprites son emparejados). Trabajan en modo de baja resolución con 16 pìxels de ancho y un número ilimitado de pixels en altura.

    • Además, en los modelos A1200 y A4000 pueden ser mostrados en diferentes resoluciones y tener un ancho de 16, 32 ó 64 bits (pixels) e ilimitados bits de altura. Pueden usar 16 colores de una paleta de 256.

  • Parte del chip Agnus (Alice en A1200/A4000) es utilizado para alojar un circuito especial empleado para mover o manipular bloques de datos a alta velocidad. Denominado 'Blitter', ha sido diseñado para recoger datos de hasta tres fuentes diferentes y combinar estos datos de 256 maneras posibles (aplicando operaciones lógicas) y opcionalmente salvar el resultado de la combinación en una zona destino. Utiliza 4 canales DMA propios e independientes entre ellos. Es posible configurarlo en un modo especial para trazar líneas en zonas rectangulares de memoria, y aplicar modelos (patterns) a estas líneas. De igual forma, puede ser empleado para el rellenado de áreas de memoria, aplicando modelos si se desea. El blitter puede realizar determinadas tareas con mucha más eficiencia que el microprocesador M680x0, puesto que opera a 28 Mhz con capacidad para mover hasta cuatro megabytes por segundo y trazar líneas a la velocidad de 1 millón de pixels por segundo. La alta frecuencia de funcionamiento posibilita al programador la generación y animación en tiempo real de gráficos 2D y 3D, empleando las funciones de trazado rápido de líneas para formar complejos polígonos y la función de rellenado para obtener objetos sólidos. De igual forma, es posible definir infinitos bloques gráficos ('bobs') y moverlos por pantalla rápidamente. Estos bloques tienen las mismas características que las pantallas, la misma resolución, colores y tamaño variable.

  • Sonido (en chip Paula) consistente en cuatro canales digitales con programación independiente del volumen y velocidad de muestreo (sampling rate). Los canales obtienen la información vía acceso directo a memoria (DMA). Una vez inicializados, pueden emitir una forma de onda determinada sin necesidad de que el microprocesador M680X0 intervenga en ello. Dos canales son asignados a cada una de las dos salidas estéreo externas de audio. Los canales pueden trabajar entre ellos para producir modulación en amplitud o en frecuencia (FM o AM), e incluso, simultáneamente los dos tipos de modulación. Actualmente existen ampliaciones de las capacidades de sonido, ofreciendo calidad de 16 bits en sampleo (calidad CD) y 16 canales, así como interfaz MIDI.

  • Controlador (en chip Paula) de unidad de disco vía DMA basado en la lectura o escritura de pistas completas. Esto significa que se pueden leer hasta 5600 bytes en una revolución simple del disco (11 sectores de 512 bytes cada uno). Este controlador actúa de forma independiente al microprocesador M680x0, liberándole de la tarea relativamente lenta de acceder a disco.


HABLEMOS DE TECNOLOGÍA...


FIGURA 3. Si tomamos como ejemplo de integración en placa los últimos modelos de Amiga, como el A1200/A4000, observaremos que es muy elevada, puesto que los principales circuitos de todo el ordenador residen en media docena de pastillas (chips) de silicio. En este esquema (a escala) de la placa base del A1200 los chips cuadrados (custom chips) denominados "lisa, gayle, alice..." contienen en su interior cinetos de miles de transistores. COmo anécdota. comparar el tamaño del chip MC68EC020 frente a cualquier custom chip...más de uno de nosotros se habrá llevado una gran sorpresa al comprobar que el microprocesador de 32 bits pasa casi desapercibido entre los "mastodontes" como "alice" o "lisa". También hay que comentar que todos los chips están soldados directamente en la superficie de la placa (sin zócalo, excepto las dos ROMs del S.Operativo) y por lo tanto aquellas reparaciones casera o montajes que podríamos realizar en un A500/A2000/A3000 (¡como cambiar las martirizados CIAs!) son imposibles actualmente en un A1200/A4000. Requieren soldadores especiales y sobre todo muy caros.

Si observamos a simple vista el interior de cualquier Amiga, la primera impresión que se puede tener es la de curiosidad al comprobar que la placa madre, lejos de estar repleta de componentes electrónicos, está casi vacía y recorrida por infinidad de pistas. Sin embargo, hay una docena de pastillas de silicio negras, rectangulares o cuadradas, que esconden en su interior el motor del Amiga. En cada una de estas pastillas, circuitos integrados o 'chips', residen principalmente transitores de tamaño microscópico, que procesan a nivel de bit toda la información que entra y sale.

Este sería el nivel más bajo al que podemos llegar: el nivel de transistores. Pero este nivel es demasiado bajo para nosotros, y lo dejamos a los diseñadores de circuitos integrados de Commodore... Las funciones, la programación y las interconexiones entre cada uno de estos chips será nuestro nivel de trabajo, aunque de vez en cuando bajaremos o subiremos de nivel para explicar el porqué de algunos detalles.

La moderna tecnología empleada para fabricar estos chips permite que el nivel de integración en una base de silicio de 1cm2 sea muy alto, del orden de 100.000 a 1.000.000 transistores, situándose en la escala VSLI (O Very Large Scale Integration), utilizada actualmente por la mayoría de fabricantes de ordenadores. Gracias a esta tecnología, es posible compartir y aprovechar el espacio de una pastilla para colocar circuitos con funciones totalmente diferentes, por ejemplo, el chip de Amiga Agnus se compone de varios circuitos distintos (¡ya veremos más adelante para que sirven!). ¡Ojo! Cuando observamos los chips del Amiga vemos que algunos son considerablemente grandes, por ejemplo, algunos de hasta 4cm x 4cm y 8cmx3cm, pero todo el corazón del chip reside en un área de silicio de aproximadamente 1 cm2, el resto de superficie es empleada para poder colocar en ella las 'patitas' o pines de conexión al exterior (mientras más pines tenga un chip, mayor será su tamaño...aunque también juega un papel importante la cantidad de calor que el chip tiene que disipar mientras está en funcionamiento.

A medida que Commodore ha ido lanzando nuevos modelos de Amiga, el diseño y fabricación de las placas ha ido evolucionando: primero usó la típica placa con los componentes en una cara y soldados pro la opuesta, pistas en las dos, y componentes colocados en zócalos..(por ejemplo los A500 o A2000), y actualmente utiliza la moderna técnica SM (Surface Mounted), donde los componentes ya no residen en zócalos, sino que están soldados directamente en las superficie de la placa, sin atravesarla (por ejemplo en el A600, A1200 y A4000). Esta última técnica es mucho más fiable en todos los aspectos y principalmente permite economizar espacio ocupado, hecho evidente cuando vemos que el tamaño de la placa de un A500 es ¡el doble que la de un A1200!

El hecho de disminuir espacio en placa a medida que se va integrando con escalas más elevadas y tecnologías de fabricación nuevas, permitirá, en el futuro no muy lejano, incorporar en el Amiga más "custom chips" que a buen seguro incrementarán todas las excelentes capacidades gráficas y sonoras, así como potencia de cálculo que actualmente posee. Todos tenemos en mente palabras como DSP, AAA, RISC...y más de uno puede que no sepa exactamente su significado, pero sí que sabe que el futuro apunta en esa dirección.

Para finalizar, adelanto que en los próximos números de Amiga.InFo comentaremos de forma particular y en profundidad cada uno de los componentes "hardware" que integran los Amiga.

El primero de ellos será "el microprocesador" y más concretamente la familia Motorola 68000/10/20/30/40. Así pues, en el siguiente número de AI discutiremos sobre partes que componen un procesador, diferencias entre las versiones, e incluso hablaremos de los coprocesadores matemáticos M68881 y M68882...


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