Una de las particularidades que tiene el PC es que no se encuentra limitado por la estructura de costes y precios de una consola de videojuegos, por lo que en potencia de cálculo es muy superior a estas. No obstante, a los PC le cuesta horrores llegar a ejecutar emuladores de sistemas antiguos con una potencia mucho menor, pero ¿por qué las CPU de PC tienen problemas a la hora de emular ciertas consolas?
Estamos en 2021 y pronto hará quince años del lanzamiento de PlayStation 3 y Xbox 360 al mercado doméstico y a día de hoy no tenemos un solo emulador que permita ejecutar los juegos de dichas consolas en nuestros PC sin problemas de rendimiento, incluso haciendo uso de un Intel Core de última generación o una CPU AMD Zen. Lo cual contrasta con el hecho que consolas de generaciones anteriores tardaron mucho menos tiempo en ser emuladas sin problemas en PC.
¿A qué se debe este fenómeno? ¿Acaso las CPU para PC cada vez evolucionan más lentamente? o ¿Existen otros factores que dificultan la creación de un emulador de estas consolas que tenga un rendimiento óptimo?
¿Por qué las CPU actuales no pueden emular bien a ciertas consolas?
Las consolas de videojuegos son enormes cajas negras en el sentido que buena parte de su hardware esta sin documentar, a los fabricantes no les hace falta hacerlo por el hecho que no van a licenciar la tecnología a terceros. Esto nos da una idea general de lo que hace cada componente, pero no cómo lo hace exactamente y saberlo es esencial para montar un emulador.
En el caso de los sistemas más antiguos se ha hecho suficiente ingeniería inversa para saber su funcionamiento. La gran mayoría ha sido gracias a la combinación de conocimientos de la arquitectura y análisis de los chips con paciencia y un microscopio electrónico. El problema es que a medida que los chips son más complejos, el tiempo y el esfuerzo para el análisis no compensa, por lo que se busca dentro de los emuladores soluciones alternativas en forma de mecanismos por software ejecutados por la CPU (en el emulador) que realizan la misma tarea, pero no de la misma forma que el hardware original.
Es como si quisiéramos preparar el mismo plato, pero bajo dos recetas distintas, la diferencia es que la consola original hace uso de un hardware especializado, mientras que el emulador hace uso de la CPU de nuestro PC para realizar esa misma tarea. Es cierto que la mayoría de emuladores en la actualidad para renderizar utilizan lo que llamamos un wrapper, el cual se encarga de traducir la lista de la pantalla en la API propietaria de la consola a algo que la GPU de tu PC puede entender. El problema es que una consola no solo se compone por CPU y GPU y hay una serie de elementos propietarios en ella que han de ser emulados por la CPU de nuestro PC.
Si lo que tiene que emular la CPU entonces pasa a ser alto tan complejo como hardware programable, como son núcleos de un procesador enteros, entonces la complejidad aumenta enormemente. No es lo mismo emular una unidad de función fija que toda una CPU, y más con una complejidad de varias decenas de millones de transistores.
¿Cómo puede una CPU emular a una consola sin perder rendimiento?
Una de las cosas que más prometen de cara al futuro son los FPGA embebidos o eFPGA, los cuales se diferencian de los convencionales por estar en una APU o SoC. Buena parte de los problemas de la emulación son cosas menores que se solucionarían si se pudiese añadir una implementación vía hardware de los chips originales. Como no podemos coger el sistema original e implementar sus chips en nuestro PC la solución más cercana es el uso FPGA para que simule el hardware original. Por lo que el futuro de la emulación pasa por la combinación de tecnologías de hardware programable, ya sea vía FPGA, CPLD o una combinación de ambos.