como funcionan los emuladores
Respuestas a la pregunta
Respuesta:
Éste programa será ejecutado por el procesador principal, y es precisamente un emulador. El programa irá leyendo los datos del fichero con el programa escrito para la SuperNintendo, encontrará las instrucciones y las traducirá (por ejemplo, usando una tabla con las equivalencias) y enviará las órdenes correctas al chip del PC. Obviamente, las cosas no son tan sencillas porque típicamente el número de instrucciones para controlar un procesador sobrepasa la centena, y si tenemos en cuentra que en una misma máquina podemos encontrar alrededor multitud de chips diferentes, la cosa se complica bastante. Además hemos de tener en cuenta que hay cosas que el chip gráfico de una SuperNintendo puede hacer y el PC no, por ejemplo rotar los colores de la pantalla, o dibujar figuras transparentes. De esta forma, para traducir un sólo codigo de la SuperNintendo que diga "dibuja esta figura transparente" debemos usar varios códigos para provocar el mismo efecto en el PC (por ejemplo, 1.coger la figura, 2.hacer una operación aritmética con el fondo y 3.dibujarla). Esto es lo que ralentiza la emulación y como consecuencia los programas que en una SuperNintendo a 7 MHz de velocidad corren rápidamente, en un Pentium a 100 MHz pueden ir algo lentos.
Respuesta:
No existe una única forma de convertir esa lista de instrucciones. Dependiendo del sistema a emular y de lo que se quiera lograr con el mismo, los autores han tomado y siguen tomando distintas estrategias o técnicas para emular el hardware por software.
La primera, es la que utilizaron los primeros emuladores que conocimos, aunque es una técnica que usan muchos emuladores modernos. Se los conoce como emuladores de bajo nivel (conocidos como LLE por las iniciales de Low Level Emulator), pues emulan el hardware completamente por software, tratando de recrear el funcionamiento hasta el ultimo detalle.
Para esto, el programa crea virtualmente uno o más procesadores virtuales, sean estos la CPU, el chip de vídeo o sonido u otros; y cada uno se encargaba de ejecutar las instrucciones que estaban en el programa en código máquina. Cada procesador virtual es una pieza de código pensado para que responda de la misma forma que el chip real cuando se le envíen las instrucciones.