emulation - retroarch - Lo que hace que construir emuladores de consola de juegos sea tan difícil
retroarch ios (4)
He estado leyendo acerca de las personas que construyen un emulador para Wii y parece que dado que no es nada más que un GameCube reforzado, o el Nintendo64, entonces ¿qué hace que los emuladores de construcción para estos sistemas sean tan difíciles?
En una pequeña nota lateral, el hardware para estos sistemas es sorprendentemente bajo:
Wii:
CPU 729MHz PPC
Memoria 88MB
GPU de 243 MHz
N64:
CPU de 93,75 MHz (64 bits)
Memoria de 4MB
La arquitectura de la CPU para consolas de videojuegos a menudo es algo exótica en comparación con su máquina de escritorio promedio. La emulación significa realizar en el software todo lo que hizo el hardware original. Es decir, mientras que la consola original puede tener chips dedicados de gráficos, audio, etc., así como una CPU con un conjunto de instrucciones diferente, el emulador debe realizar todas las funciones de estos recursos paralelos a velocidad.
A menos que la GPU de la consola sea vieja, es casi seguro que debe emularse en la GPU de la máquina host, ya que las tarjetas gráficas modernas, incluso las baratas, tienen muchas veces el rendimiento (para cargas de trabajo de gráficos) de las CPU multinúcleas más caras. Esta dificultad se suma al hecho de que la comunicación entre la CPU, la GPU, cualquier otro DSP integrado y la memoria probablemente se optimizaron en la consola para aprovechar las características específicas de la configuración del hardware y, por lo tanto, estos recursos también deben coincidir con la velocidad.
Combinando todas estas dificultades, generalmente se sabe poco sobre las características específicas del hardware de la consola, ya que esto se mantiene muy en secreto por diseño. La ingeniería inversa es cada vez menos viable para los aficionados.
Para poner las cosas en perspectiva, un simulador arquitectónico (un programa que puede ejecutar, por ejemplo, un programa PowerPC en una máquina x86 y recopilar toda clase de estadísticas al respecto) puede ejecutarse entre 1000x y 100000x más lento que en tiempo real. Una simulación RTL (una simulación de todas las compuertas y flip-flops que componen un chip) de una CPU moderna generalmente solo puede ejecutarse entre 10 Hz y unos pocos cientos de Hz. Incluso una emulación muy optimizada probablemente sea entre 10 y 100 veces más lenta que el código nativo, lo que limita lo que se puede emular de forma convincente en la actualidad (especialmente dada la interactividad en tiempo real implícita en un emulador de consola de juegos).
Es solo porque el programa del juego está escrito para ese hardware en particular, por lo que puede utilizar todos sus beneficios de hardware. Incluso si tiene una supercomputadora, no puede ejecutar correctamente un programa en particular que no puede comunicarse con el hardware de la supercomputadora. La misma situación si ejecuta juegos de PC en consolas como PS3 / 4 o xbox One. El único emulador que funciona al 99% es el emulador Snes y PS1.
Hay una serie de razones por las cuales la emulación es difícil.
- Emular un sistema requiere mucha más potencia que el sistema objetivo
A veces, el sistema host necesita un orden de magnitud más de potencia (velocidad) que el sistema de destino. Esto es fácil de entender si considera que la máquina host necesita hacer todo el trabajo del sistema original y luego trabajar un poco más para administrar todas las comunicaciones entre los componentes y al mismo tiempo compartir los recursos del sistema con otras aplicaciones. Esta es la razón por la que se necesita un procesador de 2GHz para emular fielmente un SNES que funciona a apenas 21MHz.
- A veces los conjuntos de instrucciones y / o el funcionamiento del subsistema son desconocidos para las personas
La mayoría del hardware es esencialmente una caja negra y la comprensión de cómo funciona se resuelve a través de la ingeniería inversa, lo que requiere mucho tiempo y paciencia. Sin mencionar que las empresas hacen todo lo posible para dificultar la ingeniería inversa y las empresas han mejorado mucho en esta era posterior a la Playstation 1.
- La falta de personas construyendo emuladores
La emulación es un área bastante específica que requiere mucho conocimiento práctico en muchos dominios. Para ser sincero, no hay muchas personas capaces de emular muchos de los sistemas modernos. Emular estos sistemas requiere mucho tiempo y esfuerzo, y solo los más dedicados lo harán.
Escribir emuladores es difícil porque debe replicar exactamente / completamente / por completo dicho comportamiento de hardware, incluido el comportamiento del sistema operativo en el software.
Escribir emuladores para consolas antiguas era en algunos casos más difícil que escribir emuladores para consolas modernas. Porque, muchas consolas modernas usan alguna forma de Linux o * nix, así que una vez que el hardware es emulado, el software es una cuestión de descargar la BIOS de la máquina y manejar el control.
Las consolas antiguas lo hacían todo en hardware, lo que significa que la ingeniería inversa desempeñaba un papel mucho más importante. Necesitabas hackers de bajo nivel muy buenos para ayudarte a documentar cómo funcionaba la antigua consola y qué significaba cada número mágico.
Hoy en día, hay menos números mágicos, pero en cambio, tarjetas GFX estándar y CPU. Aunque el hardware moderno tiene muchas más instrucciones y doodads brillantes para emular. Mucho de lo que hacen las consolas más modernas está bien documentado, a diferencia de las consolas antiguas.