Emuladores 101

La emulación es una técnica muy usada en informática para poder dar soporte a software antiguo. Básicamente consiste en hacer que un sistema informático sea capaz de imitar a otro, normalmente con el fin de hacerlo compatible con el software de éste. Esta técnica puede implementarse tanto por software como por hardware, y de hecho puede usarse para imitar el comportamiento de ambos. Trataré en este artículo de dar una visión de los fundamentos de este fenómeno.

El ejemplo práctico más común de emulador sería un programa que se ejecuta en nuestro ordenador que permite utilizar software de un sistema antiguo. Tómese como ejemplo un emulador de Master System para ordenadores con Windows. Consistiría, pues, en un programa que se ejecutaría en nuestra máquina, ejecutaría un programa diseñado para esta consola, volcado en un fichero en nuestro PC. Mediante un mapeo de controles (por ejemplo, asignar los cursores de nuestro teclado al control direccional del mando de la consola) controlaríamos el funcionamiento de la misma. Es decir, podemos jugar al Alex Kidd in Miracle World (1986) en Windows.

Alex Kidd en Wakalabis
Alex Kidd en Wakalabis, un emulador conocido por su creador.

Antes de entrar en detalles, es interesante conocer los inicios de la emulación, que son casi tan antiguos como la informática comercial misma. De hecho, en el amplio sentido de la palabra, los mainframes IBM de los ’60 usarían técnicas similares a la hora de gestionar microcódigo de sistemas antiguos. Estas técnicas consistirían en capas de compatibilidad y de instrucciones adicionales, que permitirían usar el software de máquinas anteriores. Por aquella época se reservaba la palabra «emulador» al hardware o, como mucho, a los añadidos de microcódigo. Naturalmente este estándar de nomenclatura está en desuso hoy día.

Los primeros emuladores por hardware a disposición del público general eran, comúnmente, unos enormes tarjetones que permitían usar software específico para IBM-PC con sistema operativo DOS. Plataformas como Amiga o Apple podían así usar este software. Las tarjetas contenían, típicamente, casi todo el hardware que componía un IBM-PC, como una CPU x86 o controladores de todo tipo. Un ejemplo fue Sidecar, una expansión para los Amiga 1000 que permitía ejecutar software de PC dentro del sistema Workbench con un rendimiento que asombró a todos los presentes en el momento de su lanzamiento. ¡El Flight Simulator de Microsoft funcionando como si tal cosa en una máquina extraña!

Amiga 1000 con Sidecar. Toma cacharro.
Amiga 1000 con Sidecar. Toma cacharro.

La emulación por software, al contrario de lo que podría parecer, se desarrolló casi al mismo tiempo. Al contrario que la emulación por hardware, que usa un ídem dedicado, la emulación por software usa los recursos de nuestra máquina, de forma que requiere mucha más potencia. Esto es lógico ya que tiene que dar soporte tanto a nuestro sistema de explotación, al encapsulamiento del sistema a emular y además debe ejecutar el software emulado. Pese a todas estas dificultades, Amiga contó con un emulador de PC por software llamado Transformer. El rendimiento de éste se valoró como «aceptable», comparándose al de un hipotético 80286 a 300 KHz. No podía competir con los 6 MHz del sistema original, pero era suficiente como para usar software de gestión como Lotus 1-2-3 o similares.

El Softcard, con su procesador Z80.
El Softcard, con su procesador Z80.

Aunque se trata de dos de los ejemplos más espectaculares, no son realmente los pioneros. Anteriormente ya se usaban emuladores de CP/M en Apple II, como el Softcard de Microsoft. Fue el primer hardware de la casa, y hacía que el ordenador de la casa de la manzana usara los, por aquel entonces, estándares industriales en sistemas de control. En el campo del software, los primeros emuladores fueron mayormente emuladores de terminal, como el famosísimo VT100 de DEC. Al fin y al cabo, ¿para qué otro trasto más si podemos emular su funcionalidad con un pequeño microordenador? Antes del declive de los mainframes, prácticamente cualquier computador que se preciase debía emular un terminal. El humilde Commodore 64 tenía un emulador del VT52 (predecesor del VT100) incluído al comprar su módem.

Putty es, probablemente, el emulador de terminal más popular en Windows.
Putty es, probablemente, el emulador de terminal más popular en Windows.

Hoy en día, los emuladores de terminal se siguen usando ampliamente. De hecho en entornos *nix son realmente ubícuos, tanto para uso local como para manejar servidores remotos. Se sigue usando, pese a los años, emuladores de Vt100, aunque naturalmente encapsulado en sockets o paquetes de red en lugar de gruesos cables. Pero todo esto es ya otra historia…

Las aplicaciones de los emuladores son variadas. En el ámbito profesional ésta suele el prototipado, tanto de software como hardware. Las ventajas sobre la depuración en hardware real son evidentes: al tener completo control sobre la máquina, podemos depurar de formas inimaginables en un hardware discreto. Tendríamos acceso a la memoria en cualquier momento, incluso entre ciclos. Esto puede aplicarse tanto al prototipado de hardware (el cual, a su vez, puede ser software o implementarse mediante una FPGA, aunque esto sea estirar el término) tanto al de software. La penalización a los emuladores es siempre la misma: se requiere una máquina varias veces más potente que la que se pretende emular, y los resultados pueden variar con respecto a la máquina real. Aún con todo, hoy en día es impensable el desarrollo de microcontroladores sin emuladores, por ejemplo.

Minimig, un emulador de Amiga implementado en una FPGA.
Minimig, un emulador de Amiga implementado en una FPGA.

El ámbito más conocido, y sin duda que cuenta con más forofos es el de emular sistemas domésticos completos. Uno de los ejemplos más antiguos de este aspecto de la emulación lo vimos en MSX, que fue capaz de ejecutar con más o menos suerte los juegos de ColecoVision. O el emulador de MSX para Amiga, o el de C64 para ese mismo sistema. Estos emuladores, no obstante, han pasado al olvido ya que las plataforman que hospedaban este software han quedado completamente obsoletas. Centrémonos, pues, en la emulación con sistemas actuales.

En el primer ejemplo menciono el poder jugar al Alex Kidd en nuestros PCs. Los emuladores, sin embargo, son mucho más variopintos: hasta las impresoras pueden emular modelos más antiguos para poder funcionar con sistemas heredados. Podemos emular redes con el fin de establecer un túnel cifrado de comunicaciones, unidades de DVD para no tener que gastar un ídem, o incluso podemos escribir un envoltorio para usar una tarjeta gráfica OpenGL con un programa escrito para Glide. En el panorama lúdico, por supuesto, podemos emular consolas, ordenadores, máquinas recreativas, circuitería de pinballs o incluso máquinas tragaperras.

Pinball de Indiana Jones, funcionando como el del recreativo pero en Windows.
Pinball de Indiana Jones, funcionando como el del recreativo pero en Windows.

En el ejemplo típico anteriormente mencionado, podemos cargar un cartucho de Master System y jugar en Windows. Los lectores más inteligentes habrán caído en la cuenta que su PC del Pryca no tiene una ranura para cartuchos, por lo que esta parte del hardware debe emularlos también. Por lo general, los sistemas de almacenamiento o de datos no pueden usarse como tal, por lo que sus datos son volcados a nuestros PCs con un hardware especializado, dando como resultado un fichero o conjunto de ficheros que contienen los datos, codificados mediante algún estándar o simplemente como un chorizo de datos binarios. Normalmente se componen de una cabecera y uno o más bancos de memoria, pero con sistemas complicados pueden almacenarse otros parámetros más oscuros, como la geometría física del medio.

Super Magic Drive, un costosísimo aparato que permitía volcar juegos de MegaDrive a disquettes.
Super Magic Drive, un costosísimo aparato que permitía volcar juegos de MegaDrive a disquettes.

Los emuladores de sistemas lúdicos es, naturalmente, la aplicación más interesante para los usuarios domésticos. Por añoranza o por simple ganas de viciarse como un mangurrino, es posible disfrutar de juegos desde el amanecer de los tiempos a sistemas relativamente modernos. Normalmente son desarrolladores independientes los que, por mero amor al arte (videojueguil), crean mediante ingeniería inversa programas emuladores de sus consolas favoritas. Pero las grandes compañías han visto un filón en esto, y por ejemplo podemos disfrutar de juegos de PlayStation original en nuestra PlayStation 4, PSP o en móviles. También Nintendo saca partido, y en Wii o WiiU es posible adquirir juegos antiquísimos para hacerlos funcionar como si tal cosa en nuestra consola. Incluso, a veces, han llegado a usar emuladores independientes en algunas reediciones, caso del emulador Kgen de Steve Snake por parte de SEGA; o de DosBOX por muchísimas compañías.

No obstante a lo anterior, pese a que las compañías normalmente tienen emuladores mucho más precisos (toma claro, teniendo los diseños originales cualquiera…), la emulación independiente es mucho más interesante. Pocos son los sistemas que, hoy en día, no puedan ser emulados en una máquina x86 con Windows. Una ausencia destacada es la XBox de Microsoft, que pese a tener un hardware parecido a un PC. No obstante se trata de un sistema complejo, cuya CPU tiene diferencias al x86 y sobre todo la GPU de Nvidia es, aún hoy, mayormente desconocida. La imposibilidad práctica de realizar ingeniería inversa es, en este caso, el mayor impedimento para desarrollar un emulador de esta consola. La Xbox 360 y Xbox One, no obstante, hacen funcionar sus juego sin esfuerzo, gracias al emulador propietario de Microsoft. Fuera de esto, casi cualquier sistema se puede emular de una forma más o menos fidedigna.

Normalmente la emulación de un sistema pude hacerse de dos formas: a alto nivel y a bajo nivel. A alto nivel, más que emular el sistema en sí, simularíamos el sistema operativo y las llamadas del sistema, así como la memoria y los programas. Un ejemplo de esto fue el emulador UltraHLE, que en un Pentium III de 500 MHz (y una tarjeta 3D VooDoo) era capaz de hacer funcionar en Windows los principales juegos de Nintendo 64. Así, esta técnica requiere de muchos menos recursos, pero es muy imprecisa y requiere de correcciones y apaños ad hoc para cada programa, al no emularse el sistema en su totalidad. Otra ventaja es que no requiere de una emulación precisa de sus componentes y controladores, tan sólo del resultado que producen dada una petición determinada.

A veces, los emuladores hacen lo que pueden.
A veces, los emuladores hacen lo que pueden.

Por contra, la emulación a bajo nivel nos lleva a emular todos sus componentes a nivel de instrucciones y ciclos, aunque esto varía de una aproximación a otra. En muchos de los casos basta con emular componentes con separado y «conectarlos» virtualmente, otras es necesario ajustar al milímetro la sincronización entre componentes, simular el bus al completo con sus latencias y arbitradores, etcétera. Se puede emular un nivel arbitrariamente bajo, tanto es así que un grupo ruso está haciendo un gigantesco proyecto para emular la PlayStation original… ¡A nivel TTL! Mientras más bajo el nivel, más fidedigna es la emulación y más recursos necesita. Tanto es así que Higan, un emulador de Super Nintendo 100% preciso a nivel de sincronización, requiere un procesador tipo dual core a 3 GHz. No está mal para una consola de 1990. ZSNES, por contra, funcionaba relativamente bien en un Pentium MMX a 200 MHz, aunque con aproximadamente un 60% de compatibilidad, dado que su emulación no era ni de lejos precisa.

Además de las aplicaciones directas, la emulación tiene otras muchas ventajas. Sobre todo en el aspecto lúdico, la más destacada es la de conservar sistemas y software antiguo, aún cuando el hardware original no esté disponible. Hoy en día es difícil encontrar una cinta del Army Moves para Amstrad CPC, y si lo hacemos es dudoso que funcione, o que el ordenador esté en buen estado de funcionamiento, y esto va a peor cada año. Gracias a los emuladores es tan sencillo como usar un programa y un volcado de la cinta que alguien hiciese en su día.

La otra gran ventaja de los emuladores está quizás reservada a los más forofos de los jugadores. Teniendo un acceso total a la máquina, es común que estos programas permitan guardar y recuperar estados completos de la misma, intervenir directamente en la memoria o incluso mejorar sus capacidades. Por ejemplo, es común que los juegos 3D emulados tengan más resolución, suavizado de texturas, etc. Pueden permitirnos también tener juego online en sistemas arcaicos, eliminar bloqueos regionales o acelerar (y decelerar) los juegos. Por último, al tener formatos relativamente accesibles como medio de datos, en muchas ocasiones es posible realizar modificaciones a software antiguo. Por ejemplo, muchos hackers han traducido juegos japoneses al inglés. Un ejemplo muy interesante es una versión del Zelda 64 en resolución FullHD con texturas mejoradas, o las traducciones del japonés a idiomas occidentales de juegos como Star Ocean.

Aunque no lo parezca, es el Zelda 64 de N64. Modificado, claro.
Aunque no lo parezca, es el Zelda 64 de N64. Modificado, claro.

Por último y no menos importante, la emulación está muy presente a la hora de crear máquinas virtuales, muy útiles sobre todo en el ámbito empresarial. Esta especialización suele llamarse virtualización, dado que es un proceso altamente optimizado. Simular varias máquinas dentro de otra es muy útil a la hora de dar muchos servicios distintos, a distintos clientes, desde un sólo equipo informático. Además permite abaratar costes, dado que los recursos físicos a menudo se comparten. Otros usos en este ámbito puede ser por ejemplo emular un protocolo SATA sobre una red, para modularizar el sistema de almacenamiento de una empresa.

Emulando un na NES en un PC con Linux virtual emulado dentro de Windows XP emulado en Windows 7. INCEPTIOn.
Emulando una NES en un PC con Linux virtual emulado dentro de Windows XP emulado en Windows 7. INCEPTION.

La única desventaja de la emulación, sobre todo desde el punto de vista de las compañías de software, es la piratería. Si bien un software puede ser completamente legal y no distribuírse junto con recursos protegidos por derechos de copia, el volcado del software a Internet y la facilidad para copiarlo ha hecho que esté disponible rápidamente para cualquiera, en general sin pagar un duro. Este punto de vista está en disputa, ya que los aficionados arguyen que se trata de software y hardware abandonado y que no les ocasiona pérdidas, ya que no existe un cese de lucro. Una posición conocida es la de Nintendo, que ha declarado en ocasiones que los emuladores son ilegales y que promueven activamente la piratería, aunque no dan referencias legales de ello. Sony, por su parte, demandó a los creadores de Bleemcast!, el emulador de PlayStation para Dreamcast, alegando que existía una competencia desleal. Todos sus casos fueron desestimados, aunque el desgaste legal acabó con la compañía del emulador.

Esto... es una captura de un amigo.
Esto… es una captura de un amigo.

Hasta aquí lo fundamental en su historia y funcionamiento. Quisiera ahora recomendar mis favoritos, para disfrute y asombro del personal. Me considero un forofo de los sistemas tradicionales, pero trataré de repasar lo más relevante del panorama. Por ahora me centraré en la emulación sobre Windows, para móviles y otras plataformas lo dejaremos para otro día. Es necesario advertir que este resumen puede quedar obsoleto en pocos meses, dependiendo del avance de la escena, con que si lees este artículo en 2043, ¡no te lo creas todo!

Para mi consola superfavorita, la Sega Mega Drive, existen alternativas interesantes. La primera es Exodus, un emulador 100% fidedigno que requiere un maquinón, y muchísimas opciones de depuración para los más expertos. Mejor aún podemos usar Kega Fusion, que tiene una interfaz mejor, no requiere tanta máquina y tiene un montón de opciones funcionales de todo tipo. Funciona prácticamente con todo el catálogo de la 16 bits de Sega, y además los de Master System y Game Gear.

Kegafusion

Para su contrapartida nintendista, hemos mencionado Higan. La emulación es, a falta de otra palabra mejor, perfecta. Lamentablemente requiere una máquina muy potente y su interfaz no es precisamente intuitiva. Una alternativa es Snes9x, que es muy compatible y con mejor interfaz. Además es muy rápido, funcionará en casi cualquier PC con Windows.

También hay vida para las 8 bit de Nintendo. El emulador PuNES es uno de los que mejor funcionan, pero hay un montón más. Otro de los más pupulares es el Nestopia UE, que funciona hasta en un microondas. De Game Boy tenemos BGB, que por supuesto hace funcionar cualquiera de sus modelos clásicos. Higan también hace funcionar algunas de estas consolas, pero vale la pena usar alternativas específicas en este caso.

1000 euros en hardware para jugar al Tetris de Game Boy de 1989. ¿Por qué no?
1000 euros en hardware para jugar al Tetris de Game Boy de 1989. ¿Por qué no?

Como gran aficionado a juegos de PC antiguos, DosBOX es imprescindible. Este software emula un PC con DOS, todo sin necesidad de complejísimas configuraciones o necesitar licencias de MS-DOS. Esto nos permite utilizar juegos que ya no son compatibles con las versiones modernas de Windows, y incluso se ha usado con fines comerciales para vender interminables reediciones en Steam y otras plataformas.

Un gran frente son los emuladores de ordenadores de los ’80. Para mí, la plataforma estrella son los ordenadores Amiga. El emulador estrella es WinUAE, que permite construir casi cualquier configuración comercial o personalizada, y hace funcionar la práctica totalidad del catálogo de esta increíble línea de computadoras. Su uso es bastante complejo para gente que no haya tenido un Amiga real, aunque su hermano FS-UAE trata de aliviar esto, funcionando además en un mayor rango de sistemas. No obstante el mayor de los problemas es que necesitamos tanto software como un volcado de una ROM, el KickStart, el cual es difícil de obtener legalmente. Para ello, la compañía Cloanto vende un paquete licenciado que incluye emuladores, las ROMs necesarias y un puñado de juegos, todos preconfigurados y listos para disfrutarse. Esta distribución se llama Amiga Forever, y está disponible desde 10 cochambrosos euros.

Amiga Forever es cómodo y lo trae todo listo para jugar.
Amiga Forever es cómodo y lo trae todo listo para jugar.

Por último, un emulador para gobernarlos a todos. Un emulador para encontrarlos. Un emulador para atraerlos a todos y atarlos en… Windows, MacOSX y Linux, mayormente. No hablo de otro que de MAME, que comenzó siendo un emulador de un puñado de máquinas recreativas y que hoy emula cientos de sistemas y miles de juegos arcade. Anteriormente se trataba de dos programas separados, MAME y MESS, encargado de sistemas domésticos. Las últimas compilaciones aúnan la funcionalidad de ambos, convirtiéndolo en toda una institución dentro del mundo de Internet. Su prioridad es la exactitud en la emulación, por lo que algunos sistemas pueden requerir ordenadores muy rápidos o directamente no ser usables. Muchos de sus núcleos de emulación están prácticamente sin empezar, pero algunos son sencillamente el mejor disponible para cualquier plataforma. Hay una guía bastante interesante, NonMAME, que nos dice la mejor alternativa en caso de que la haya. Para recreativas no hay comparación con ningún otro: desde el PacMan hasta el Metal Slug; y desde Atari 2600 hasta X68000; MAME es y seguirá siendo el rey.

No acepte imitaciones
No acepte imitaciones

Terminaremos este curso introductorio hablando de las llamadas ROMs. El término surge porque, al emular sistemas de cartuchos, hace falta un volcado de la memoria ROM de los mismos, de lo que viene el término. Por extensión, se ha venido llamando ROM (de forma más o menos incorreta) para imágenes de disquettes, de cintas, de CDs o incluso de memorias EPROM integradas en placas. La mayoría de los emuladores necesitan algo que ejecutar, por lo que aceptarán estos ficheros en los diversos formatos. El software, por lo general, suele estar protegido por copyright, por lo que no suele ser legal su distribución sin permiso, salvo algunas liberadas por sus dueños legítimos. La única opción legal en Europa es volcar nuestros propios juegos, algo que requiere conocimientos específicos y hardware especializado. No obstante, conozco una página en la que es posible buscar y encontrar dichos ficheros gratis, podéis acceder aquí.

Tras este informativo reportaje, puede el lector considerarse como alumno aventajado en los emuladores, lo que le da pleno derecho a entrar en foros y chats enunciando las antiquísimas palabras:

HOIGAN PORFA BOR DONDE DESCARGO LOS ROOMS DE LA PLEI

En otra ocasión, si el tiempo y el trabajo lo permiten, escribiré sobre emuladores de móviles o cosas así. Hasta entonces, disfruten.

PS: Un recurso indispensable a la hora de buscar información sobre la emulación es el wiki de Emulation General.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.