AMIGALANDIA

AMIGALANDIA --- Blog Retrospectivo Amiga/MorphOS

jueves, 19 de julio de 2012

Introducción a los Emuladores de Amiga





Un "emulador", es un sistema diseñado para ofrecer la funcionalidad de un sistema diferente emulando algunos de sus componentes. Este artículo explica algunos componentes que forman parte del la emulación de programas Amiga en un PC, poniendo especial énfasis en el hardware de Amiga.



El Amiga Original



El Amiga 1000 fue el primero de la saga y contaba con un procesador de la serie 68k de Motorola, presentando además un juego de chips dedicados (llamados Agnus, Denise y Paula). Dicha combinación es lo que le hizo ser un muy potente ordenador multimedia en 1986. El juego original de chip se llamó OCS. Nuevas versiones posteriores mejoradas de los chips serían ECS, y AGA.


El sistema operativo del Amiga se ejecuta en este hardware. Las primeras versiones del SO requerían el juego completo de chips Amiga, incluyendo las partes responsables en la generación de gráficos. Las versiones más nuevas (p.ej 3.x) soportan además tarjetas gráficas RTG (Gráficos Redirigibles), mucho más potentes (además de muchos más modos de vídeo) que los chips gráficos internos.
En origen siempre se apostó porque el software (p.ej aplicaciones/productividadjuegos, y demos) utlizase con plenitud tanto el sistema operativo como las características subyacentes en el chipset. La consecuencia de esto era un software impresionante, que sin embargo estaba fuertemente atado al hardware.


Emulación de Amiga

El entorno Amiga incluído en Amiga Forever consiste en una combinación de emulación de la CPU y los custom chips del Amiga, además del sistema operativo que se ejecuta sobre ese hardware emulado. La mayor parte de la emulación del hardware está basada en proyectos de código abierto como UAE o Fellow, que se integran sin fisuras en Amiga Forever (código fuente incluído).
Hay otros componentes de Amiga Forever licenciados como el subsistema RTG (que permite acceder a tarjetas gráficas estándar de PC como si fueran tarjetas de Amiga), y otras mejoras que se pueden utilizar como expansiones del Amiga original (AHI, TCP/IP, SCSI, etc), así como diversos módulos de software que las primeras compañías Amiga habían licenciado con anterioridad pero que habrían expirado en caso de renovarlas.

Hasta Amiga Forever cuenta con ciertas limitaciones. Al estar basado en software, Amiga Forever no puede emular las interfaces físicas hardware del Amiga. No suele ser algo problemático, puesto que el emulador soporta varias opciones para emplear periféricos originales de Amiga, como leer viejos disquetes de Amiga, o por otra parte transferir programas y datos desde un ordenador Amiga si fuera necesario.


Otras aproximaciones a la emulación


Existen otras formas de acercamiento para conseguir un cierto grado de compatibilidad con el Amiga original, como por ejemplo el proyecto AROs que trata de ser compatible con el sistema operativo reescribiendo el propio sistema (es decir, sin emplear el sistema operativo original, y funcionando tanto en hardware Amiga "real", como en sistemas completamente diferentes, mientras que otros proyectos de emulación (p.ej Amithlon) intentaron hacer que las nuevas versiones del sistema operativo Amiga funcionasen en un hardware emulado con limitado soporte para los chips Amiga. Amiga Forever incluye una emulación completa del hardware original del Amiga, más ciertos añadidos, aparte de una selección de varios SO, por ello creemos que ofrece una opción superior para ejecutar software Amiga en hardware moderno.
Hay varios tipos de emuladores para muchos sistemas, con más o menos los mismos acercamientos a la emulación de los sistemas apuntados (Mac, Atari ST, etc.). Básicamente, y en diferentes niveles, algunos emuladores imitan el hardware de un ordenador, mientras que otros emulan su sistema operativo. Emular este último significa reemplazar el sistema operativo original con una "imitación", que permita evitar el copyright y otros aspectos legales referentes al "aspecto" del código original, por ejemplo, y además suele ofrecer una ejecución más rápida de las funciones del sistema, puesto que las nuevas funciones se pueden escribir específicamente para el sistema anfitrión, no funcionando en modo emulado. En el caso del Amiga, y considerando también que las patentes originales han expirado, se suele pensar que una "imitación" sin licencia puede ser un acercamiento viable que evite conflictos de legalidad.
Lo peor de este acercamiento es la escasa compatibilidad con respecto al sistema operativo original porque, por definición, el nuevo sistema operativo no es exactamente lo mismo que el original, con sus más o menos documentadas idiosincrasias, efectos colaterales en algunos casos, incluso pequeños bugs que pueden ser explotados por aplicaciones conocedoras de ellos. Además, en el caso del Amiga, emular el sistema operativo sólo resuelve un pequeña parte de la historia, porque desde el lanzamiento del Amiga, Commodore instó a los programadores con la excitante arquitectura del Amiga, para que accedieran directamente al hardware para explotar características como las de los chips "blitter" y "copper", sprites, modos de pantalla HAM, etc. Estas capacidades, que hicieron al Amiga tan especial y superior al nacer, no son proporcionadas por el sistema operativo, son parte de los chips del Amiga, y a ellos se accede directamente mediante software.

Las diversas implementaciones de software emulador de Amiga Forever intentar soportar a fondo el hardware del Amiga. De este modo no sólo se pueden seguir ejecutando juegos y aplicaciones en un nuevo ordenador sin cambio alguno, sino que hace posible que el sistema operativo original del Amiga y sus ROMs funcionen en el emulador, y que también nuevo software de Amiga pueda ser ejecutado en él, con resultados predecibles y seguros.

Amiga Forever incluye las ROM originales y los componentes del sistema operativo con sus actualizaciones, pero además incluye y soporta sistemas operativos que corren en hardware Amiga, pero que ya no están siendo desarrollados. Por ejemplo, se incluye laROM Dialoga 2.0 de Logica (un sistema de disagnóstico empleado por centros de reparación Amiga), y puede a su vez ejecutar la versión 68K de AROS, así como otros sistemas operativos basados en procesadores 68k.


El entorno de Amiga Forever se ejecuta en paralelo con el sistema anfitrión (p.ej  Windows,Mac OS o GNU/Linux).
Aprovecha su sistema gráfico, sonoro y sus sistemas de ficheros, su protección de memoria, la memoria virtual, el sistema de ventanas, etc. Por ello, se puede ejecutar el emulador de Amiga en una ventana, o a pantalla completa. En la mayoría de los casos, el Amiga emulado puede leer y almacenar ficheros en el sistema operativo huésped, puede imprimir, o incluso puede colgarse y mostrar un "Guru" (aunque este no provocará el cuelgue del sistema en que se hospeda). Se puede resetear al igual que cualquier Amiga. Incluso podríamos tener Workbench 1.3 en una ventana, y otra ventana con Workbench 3.1 al lado. En todo caso, cada Amiga emulado cuenta con su propia ventana o pantalla.

Rendimiento

La sobrecarga asociada a la emulación del hardware Amiga mediante software es tal que los elementos emulados son entre 5 y 20 veces más lentos de lo que serían los componentes originales si corrieran a la misma velocidad en el hardware anfitrión. El eficiente, rápido y elegante AmigaOS, fue diseñado para funcionar sin retardos en el hardware de 1985. Desde entonces, muchas plataformas y procesadores han doblado su velocidad a los 12 o 24 meses. La sensación general (subjetiva) es que los emuladores UAE y Fellow en un Pentium 133 (de 1997, cuando se publicó Amiga Forever 1.0) asemejan la velocidad de un Amiga 500, proporcionando suficiente velocidad para su uso en tareas como proceso de textos o gráficos como Personal Paint. Ofrece un rendimiento aceptable como portátil Amiga. Para utilizar el sonido y los refrescos de pantalla y efectos de los custom chips utilizados en muchos juegos, se necesita algo más de potencia. A tope de utilización de CPU y recursos del chipset, se puede emular un Amiga 1000 en tiempo real mediante un PC de más de 1 GHz (los custm chips en tiempo real), y la CPU puede ir más rápido (si se desea).
Otras partes de la emulación, como el sistema de ficheros, pueden ser más rápidas que en el Amiga original cuando mapeamos la partición Amiga en el sistema de ficheros anfitrión. Sobre un Pentium 133MHz, se puede emular la CPU 68000 al doble de velocidad de un Amiga 500. Si se añaden los custom chips, su uso intensivo penaliza mucho el rendimiento como ocurre en algunos juegos. Un Pentium Pro o Pentium II a 200MHz rinde como un Amiga 3000/030, con una rápida respuesta del sistema de ficheros, y veloz dibujado de ventanas al utilizar controladores RTG. Como ejemplo de tarea de intenso esfuerzo de CPU, al compilar Personal Paint con SAS/C en UAE en un Pentium PRo/200 MHz tarda cerca del doble que un Amiga 4000/040. Sistemas Intel a 300 MHz probados con los juegos más exigentes  han ofrecido todos los frames por segundo sin saltos, y con sonido perfecto. Pocos son los juegos y demos que requieren sistemas con más potencia.


The Amiga custom chips have only one important emulation requirement, which is to be able to run in real time. For timing reasons, it would not be practical to speed them up beyond their original performance. Once this is achieved, all the power of the host CPU(s) can focus on emulating the Amiga 68K CPU. In practical applications, already in the 1990s the Unix version of UAE running on an Alpha CPU system had already shown to be faster than a similarly equipped Amiga 4000 with a 68060 CPU. Of the two, the Amiga 4000 was the more expensive system.
Compared to the superior performance of emulation components such as the CPU, the file system, and the Picasso96 RTG graphics subsystem, sound lies on the less fortunate end. On the Amiga, sound is synchronized with the display in such a way that unless a full video frame rate is achieved in real time (50 frames per second), then audio cannot be output smoothly. Again, audio emulation can be of acceptable quality on a 133 MHz  Pentium CPU, if the application does not make intensive use of other custom chip features. Also, Amiga Forever includes AHI drivers to produce high-quality audio without resorting to the emulated custom chips.
In 1997, when computers were much slower than they are now, Bernd Schmidt, chief designer and author of the UAE emulator, described some performance issues of the custom chips as follows:
All timings I give here were measured on my machine, a 90 MHz Pentium, using SVGAlib, with the FASTER_CPU and DONT_WANT_SOUND options... For games and demos, the CPU speed does not matter, but the average frame time is important... A real A500 has a constant frame time of 20 ms (50 Hz). If you have a game/demo that has lots of blitter activity, many copper/sprite effects, dual playfields and scrolling, no one can help you. Fortunately, this case is extremely rare. Normal games that have a number of blitter objects, scrolling and maybe some sprites run at 1/3-1/4 the speed of an A500 in the worst case, some run at 1/2 the speed. Lowering the frame rate helps enormously here, and at 1/5 frame rate, about everything runs somewhere between 50% and 100% the speed of an A500. This still isn't the full story (I bet you start to see why the question is hard to answer). A real A500 without fast memory gets slowed down to about half its speed in Hires 16 color mode. More bitplanes also slow UAE down, but not quite as much, so it can be several times faster than an A500 in that mode."
Frequent questions about Amiga emulation include the performance impact of having to emulate custom chips, in addition to the CPU, and why the emulators don't try to emulate a more powerful "68K" CPU, like a 68060, or why the AGA chip set is not emulated, but only the original chip set is. As outlined above, most Amiga programs, first of all the operating system, make direct or indirect use of the Amiga custom chips. On the other hand, it must be considered that when a program does not make specific use of a custom chip's functionality, this does of course not need to be emulated, so there is little or no performance penalty. To the contrary, specifically emulating certain aspects of the Amiga custom chips allows the emulation software to recognize certain specialized tasks, and to better emulate these by using similar and specific capabilities on the host environment, if possible (e.g. for blitting, which for example is very fast using the Picasso96 extensions for UAE). As for the CPU, it would not be very practical to try to emulate advanced parts of the CPU such as the cache RAM, or the MMU (memory management unit), because these are already fully provided (not emulated) to the entire emulation environment by the host CPU. As a result, it is for example possible to emulate an Amiga with 64 Mbytes of Amiga "fast" RAM and 8 Mbytes of "chip" RAM on a computer having only 32 Mbytes of RAM, and the host operating system (using the host CPU's MMU), will take care of disk-to-memory swapping as necessary. The Amiga operating system does not require a MMU, so apart from Amiga virtual memory utilities, which are not necessary because virtual memory is provided by the host environment, the main applications that could still benefit from an emulated MMU are development tools such as "Enforcer". Indeed, such useful functionality is part of the emulation engine.
As for the 68K CPU type, the Amiga emulation software supports the instruction set of the Motorola 68020 CPU with FPU (floating point unit), which makes it possible to run even programs designed for newer CPUs, since they share the same instruction set as the 68020 (which had major additions since the original 68000). A few new instructions and addressing modes have indeed been added to newer CPUs of the 68K line, but there is no known 68K Amiga software on the market which requires these without also being available in a 68000 or 68020 version. To the contrary, certain instructions which run properly even on the 68000 are "illegal" on the 68060, which results in many applications (including older versions of the operating system) failing to run on the 68060. This explains why several owners of Amiga computers with a 68060 CPU resort to an emulator to run old software which would otherwise fail. With consideration to different 68K microprocessors, such as the 68030, 68040 and 68060, it should be kept in mind that the major performance boost comes from the improved speed and efficiency of the newer microprocessors, and not from new instructions. Again, this increase in computing power can be provided not by emulation, but by a faster host CPU. Both the Fellow and UAE emulators come with special options and versions so that some very old software which absolutely requires a "pure" 68000 (and not a 68020) can run on the emulator.
Versions of the emulation software that run on x86 CPUs include a "just-in-time" (JIT) compiler, originally developed by Bernd Meyer, which can make the emulation of the CPU on average at least 10 times faster than without JIT.
The emulation software included with Amiga Forever also includes a virtual display card, which directly accesses the graphics hardware of the host system using high performance DirectX calls, and comes with fully licensed Picasso96 drivers, which are RTG-compliant, meaning that they can be used by all Amiga programs which support the Amiga RTG (Retargetable Graphics) specification, which was originally conceived at Commodore, and then became a de-facto standard with the help of several Amiga developers. Performance profiling tests have shown that some programs spend as much as 50% of their execution time not in their own code, but in the system graphics routines. Mapping these calls as efficiently as possible to the graphics system of the host environment (which can easily be 100 or more times more powerful than the original Amiga graphics hardware), rather than to the emulated Amiga custom chips, results in an impressive performance boost for the entire emulation environment.
Multiprocessing systems (i.e. with two or more CPUs, also referred to as "SMP") improve the performance of the emulation, because the load of the operating system and other applications can be better distributed, relieving the CPU(s) which run the emulation. This improvement always occurs, even if the emulation software itself does not actively exploit certain SMP features.
The RAM requirements to run the emulation software are not different than those of any other software. All Amiga Forever components have been successfully tested on a system with 16 Mbytes of RAM. The Amiga emulation requires about as much RAM as a real Amiga, plus some memory necessary to run the emulation software itself (a few Mbytes).
Operating systems such as Windows, which support virtual memory, make it possible to emulate an Amiga with more RAM than is actually available on the system. If the emulation is configured for more RAM than is available, then the operating system will swap unused RAM to hard disk, and then from hard disk to "real" RAM, as necessary. This is not the fastest way to run an Amiga, but it is better than not having the desired amount of RAM at all.