Si de videojuegos hablamos, juegos salen todos los años. Salen tantos que hasta me animaría a declarar que hoy salgan más juegos por día de los que una persona dedicada podría jugar. Aún así hay veces en que uno simplemente quiere jugar un clásico de antaño, como también algún juego nostálgico.

El tema, es que los videojuegos a diferencia de otros medios artísticos, es que depende de un ecosistema específico para funcionar.

Por ejemplo, meter un juego de PS3 en una PS4 resulta en error. Ni hablar un juego de PS4 en PS3.

Pero si hablamos de otros medios, como la música, si meto la colección de rock nacional de mi viejo en mi nueva torre musical, la música se escucha igual a como se escuchaba hace 40 años.

¿Como puede ser que la música vieja funcione con los reproductores nuevos, pero un juego del año pasado no ande en nuestra nueva consola? Primero una buena analogía.

¿Que diferencia hay entre acceder a un juego o a una canción?

Ya varios sabrán, que la música se puede disfrutar de diversas maneras. Si quisiera, no se, escuchar un tema de Justin Bieber, podría pagar la entrada y verlo en vivo. Como también podría ir a una tienda y comprar el CD original. Como también podría comprar el tema en alguna tienda digital (QEPD ITunes), como también podría extraer el archivo .wav del disco, escucharlo en servicios como Spotify o Youtube, o hasta podría conseguir archivos mp3 de maneras poco legitimas.

Desde el lado del consumidor, es tan simple como poner tiempo o plata y escuchar la música que desea. Y aunque hayan limitaciones como necesitar de una lectora de CDs para leer CDs, las soluciones suelen ser tan simples como ir y comprar una.

Y eso es, porque para el consumidor, todo lo que pasa dentro de la computadora funciona como por arte de magia. A un punto que cualquier usuario informático da por asumido que cualquiera de sus artefactos modernos tiene la capacidad de reproducir música. No tiene ni que pensar en formatos, ni en tipos de archivos, doble clic y a todo volumen.

Lo que el usuario desconoce es que toda la magia pasa en el codec.

Un codec (corto para codificador y decodificador) es una especie de traductor que te transforma “un conjunto de bytes” en onda de sonido.

Cada formato sea mp3 o flac, tiene un códec particular, que únicamente sirve para ese formato, siendo imposible reproducir un flac con un codec de mp3.

Y si bien el Winamp, el Aimp, o el Windows Groove reproducen casi todo tipo de formatos, a un nivel digital, estos formatos no podrían ser mas distintos entre si. Por mas de que suene raro, reproducir un flac no tiene nada ver con reproducir un mp3, esto es invisible para el usuario por que por suerte en el siglo XXI no necesitamos de un programa dedicado para reproducir mp3, o wav, o flac. Solo necesitamos que el reproductor de musica haya implementado los codecs en su código.

El codec, no es mas que una serie de instrucciones para pasar de un archivo multimedia de Windows a una onda de sonido. Estos codecs vienen siempre en pares y de dos gustos, el que crea archivos, y el que lee archivos. El primero te lo venden y el segundo normalmente lo “regalan”, por que si habria que pagar para escuchar un tipo de formato de musica, volveriamos todos a usar mp3.

Lo único que tiene que hacer un reproductor musical es incluir estos códecs de lectura en su código y el 90% del problema ya estaría resuelto, donde cualquier problema de compatibilidad se resuelve gracias a que estos formatos suelen estar intensamente documentados.

La existencia de codecs permite que los archivos musicales sean agnósticos a la plataforma. Generando esta facilidad al usuario de querer y consumir. La única desventaja, es que cada plataforma tiene que implementar su propio conjunto de codecs. Pero no es algo que un ingeniero bien pago, o un entusiasta del código libre no pueda hacer.

Y si de recursos hablamos, lo unico que necesita un programa para reproducir música es acceso al driver de sonido, acceso a tus archivos, decenas de megabytes de ram, y un procesador lo infimamente potente para reproducir en “tiempo real”.

Es por esto que escuchar un disco del 80 es (casi) la misma tarea que escuchar un disco del 2020.

Pero como verán,

Jugar un juego de los ’80 no podría ser mas distinto que jugar un juego del 2020

Por que lamentablemente, los videojuegos antes de ser juegos son ejecutables, y los ejecutables a diferencia de la música no son agnosticos de la plataforma que los ejecuta.

Lo que viene es una serie de contenidos teóricos dignos de un manual universitario pero voy a tratar de explicarlo lo mas civilmente posible.

Un procesador es como una persona, existen un montón, y vienen de todos los tipos y tamaño. Los procesadores como las personas hablan distintos idiomas. Aquellos procesadores que hablan el mismo idioma se los considera compatibles.

Por ejemplo, es altamente probable que la computadora que estés usando para leer esta nota utilice un procesador que sea compatible con las arquitecturas “x86”, “x86-64” o “ARM”.

En China hablan chino, y acá hablamos español. Comunicarnos entre nosotros es posible mediante traductores digitales, pero esa comunicación va a ser lenta, incomoda y poco precisa.

Algo parecido pasa con las arquitecturas de procesador.

Si bien podemos lograr que un programa compilado para ARM (Android) ande en x86 (Windows), necesitamos de un traductor para que se puedan relacionar.

Este traductor no es otro que un emulador, un programa dedicado a emular una arquitectura ajena al procesador y adaptar su ejecución para que ande en la arquitectura deseada. En la mayoría de las condiciones un emulador no tiene que hacer mas que eso, traducir una linea de código pensada para un procesador y ejecutarla en otro. Esto funciona, pero es lento incomodo y poco preciso. Pero funciona y el 99% de los casos que funcione es suficiente. Pero hay una particularidad de los videojuegos que hace que una tarea relativamente simple se transforme en una pesadilla.

La palabra clave es tiempo real

Cuando hablamos de jugar en condiciones dignas hablamos normalmente de 60 cuadros por segundo (FPS, o Frames Per Second en norteamericano). Si procesamos 60 cuadros en un segundo, estamos procesando un cuadro en 1/60 de segundos. Unos miseros 0.016 segundos, unos 16 milisegundos por cuadro. En solo 16 milisegundos un emulador debe:

  • Interpretar que botón toco el jugador
  • Traducir esa entrada a la arquitectura que funciona el procesador de la plataforma
  • Procesar las consecuencias de los movimientos, que usualmente mueven un personaje o hacen un ataque, o etc.
  • Traducir el resultado de esa acción de la arquitectura original, a la arquitectura donde esta siendo ejecutado el emulador.
  • Mostrar la salida en forma de audio, en forma de imagen y si tenes suerte en forma de vibración.

Esto implica acceder a los drivers de sonido, los drivers de video, y los drivers de tu gamepad.

y si bien estos pasos narrados están hiper simplificados, pensar que tiene que hacer todo eso en 16 milisegundos es abrumante.

Emular una arquitectura es un dolor de cabeza, pero lograr que una arquitectura ande en tiempo real es una tarea inmensa.

Artesanos como Chicuelo hacen productos en base a emuladores.

Y quizá varios desconocen, pero las computadoras no vienen con un solo procesador. Tenemos nuestro procesador principal en forma de “CPU”, la placa de vídeo, la placa de sonido, el disco duro, la lectora de CDs, y si hilamos fino hasta la memoria ram tiene una mini computadora adentro. Muchas veces desconocemos que muchas partes de nuestra computadora tienen una mini computadora adentro (con rom, ram inputs y outputs).

Cada procesador por mas pequeño o burdo que sea debe ser correctamente emulado (y en tiempo real) para garantizar la correcta ejecución del programa.

Se pone peor.

La constante competencia y la necesidad de superar gráficamente a sus contrincantes, llevo a implementaciones mucho mas complejas que tu típica computadora. Dos buenos ejemplo de esto son la Play Station 2, con un procesador principal y dos coprocesadores y la Sega Saturn que contenía siete, SI SIETE co-procesadores.

Siete coprocesadores a emular, aparte de audio, video, input, en 16 mili-segundos. Y lo peor no es hacerlos andar, si no sincronizarlos entre si.

Normalmente la sincronizacion entre co-procesadores se hace en un pequeño cristal de cuarzo en la placa madre con una velocidad específicamente elegida para esa tarea, el cual también hay que emular porque de verse desincronizada alguna de estas partes el juego mas que juego pasaría a ser un mega glitch. Es por eso el problema de la emulación no se resuelve solo con fuerza bruta, sino que se necesita una cantidad inmensa de tiempo e ingenio humano. Podríamos tener una supercomputadora de la nasa pero si el emulador no esta perfectamente programado, es probable que el resultado final diste de ser bueno.

Ahora ¿recuerdan 10 párrafos mas arriba donde hablaba que los codecs musicales estaban inmensamente documentados?

En el mundo de los videojuegos, si hay algo que escasea es la documentación oficial de las consolas, especialmente cuando se trata de los chips privados de la empresa. Es ahí donde entra la magia de la ingeniería inversa. Pues verán, existe una serie de aficionados cuyo hobby consta de abrir y estudiar una consola, mediante el uso de osciloscopios, multitesters, flasheadores de memoria con tal de documentarla de la forma mas precisa posible. Eso significa, que para que vos puedas jugar a tu juego favorito de Mario en la computadora, primero vinieron varios de estos mega geeks de la electrónica a estudiar, documentar y explicar el funcionamiento de esta maquina, para que luego una serie de programadores (usualmente de manera amateurs) programe un “traductor” que vaya de lo estudiado previamente a un lenguaje mas popular com C++, Java, o Python. Este codigo despues se puede compilar para distintas plataformas, donde funcionan como un analogo de los codecs, pero con muchisimos problemas de compatibilidad. Es por eso que existen ports de emuladores populares como la play 1 o de gameboy advance para Android, PSP o para la switch, pero suelen requerir de años de optimizaciones para lograr los magicos 60 FPS.

La cantidad de trabajo y dedicación que tiene que existir para poder emular una consola es inmensa. Y si analizamos todo desde arriba, que una serie de “hackers” logre no solo entender si no implementar un sistema del cual oficialmente no tienen información alguna, es casi un milagro. La emulación moderna de videojuegos es algo que lógicamente no debería existir, pero existe gracias a la mano de muchos entusiastas que comparten una sola visión: la de preservar los videojuegos para el futuro. Una visión, que lamentablemente no parece alinearse por completo a los intereses de la industria y los propios fabricantes.

Así que la próxima vez que uses un emulador, sabe que hubo gente muy capaz y muy bondadosa que dedico años de su vida para que podamos disfrutar y preservar un poco mas de las glorias de nuestra niñez.

Y antes de que me vengan a prender fuego por hacerles leer casi 1900 palabras, sepan que hay un buen motivo para esta bomba de teoría. Ya que en las próximas semanas vamos a estar subiendo manuales que expliquen de la forma mas humana posible y desde cero el arte de emular consolas, ya sea en PC, Android o hasta en otra consola.

11 Comentarios

  1. Shengdi

    Felicitaciones por esas explicaciones tan bien hechas, y entendibles pa’ todo el mundo.

    Genial artículo, y a eso sumarle que la mayoría de emuladores son gratuitos, y esa gente trabajó todo ese tiempo nada más por amor al arte.

  2. Pablo

    Justo hace poco encontré el ClassicBoy para Android y me pareció una maravilla todo lo que emula y lo bien hecho que está. Excelente artículo

  3. Calipso

    Excelente artículo. Sabía algo de emuladores pero hoy aprendí que es un códec.
    Me preguntó si vas a hablar de filtros, savestates y plugins en algún momento.
    Entiendo que no toques esos temas en la nota por qué si no más que una nota era un tratado.

  4. javier17k

    como siempre alt-tab (tecnovortex) aportando excelente información al mundo me he leidoo si no es que todos sus artículos y me encanta fue uno de os primeros blogs por lo cuales gracias a sus posts mi pasión por la informática fue aun mas llevadera
    saludos desde México

  5. maxavatar

    NOTON! felicitaciones Narzo

    emus = accesible retrogaming

  6. Leandro

    Espero con ansias los manuales, hace rato que tengo ganas de armar una pc con juegos que jugaba de chico para jugar con mi hijo.

    Muchas gracias!

  7. Maik

    Excelente nota.

    Gracias por el esfuerzo, se agradece. Y si quieren seguir con este tipo del notas más profundas me encanta.

    Y de paso tiro un tema si no tenés, explicame como si tuviera 5 los smart contracts. Lo leo em hackernoon pero lo necesito como está este articulo

  8. Diego M.

    Desde que apareció el MAME (lo usé en aquellas épocas que salía una versión nueva por semana y aceptaba más juegos) que SACOA empezó a morir.

    Gracias a los emuladores pude volver a jugar a un juego de Family Game que le habian traído a un amigo desde Japón en el año 88.

    Y sin ir más lejos, ayer baje un emulador de Comodore Amiga. Gratuito y funciona perfecto.

    Un emulador permite mantener intacta la magia de los grandes juegos de antaño. Donde no importaba si había sombras detalladas o si el sol reflejaba en las superficies. Es volver a la época en la que uno se reunía en lo de los amigos a jugar.

    Groso post.

  9. Julián

    Me encanto la nota el tema de los emuladores es genial.

    Por mas notas como ésta.

Dejar respuesta

Please enter your comment!
Please enter your name here