Mensajepor luiscoco » 09 May 2017 15:08
Bueno pues, el concepto básico es imitar las piezas de hardware por medio de software en un computador mas rápido y que pueda con el trabajo, en los FPGA es igual, solo que lo que codificas o programas en el core, es un programa que cambia las puertas lógicas del controlador haciendo que este se comporte como uno o varios chips reales, por lo tanto al final y si haces el core bien, tendrás hardware igualito (en funcionamiento) al original, claro por afuera se ve el chip FPGA y lo demás que lleva, estas imitaciones de hardware también se pueden hacer con muchos transistores, como originalmente fueron o incluso con circuitos analogicos como un CPU analogico que siempre me intrigo (que los hay).
Así imitas la zona de memoria, hoy en dia es super facil tomas 64kb en una so 2 variables y ya tienes la RAM de una de nuestras máquinas, una ROM es algo similar, luego imitas el CPU, le creas en tu software emulador unas rutinas que le dicen a tu imitación de cpu en cual posición está, Program counter, con un integer sobra, y varias variables como registros del CPU, luego cada vez que tu rutina de CPU lee la RAM/ROM ejecuta lo que está escrito que seguramente será ordenar la información de otra manera en la misma RAM, también existen ciertas posiciones de memoria especiales, los puertos, que al accesarlos manejas otros chips, para estos también necesitas crear rutinas que imiten el funcionamiento de estos chips de puertos.
Si el equipo a imitar es un Amiga tendrás que imitar muchos custom Chip, si es una COCO o un ZX81, tiene menos hardware que imitar.
Luego y lo más importante es que lo que imites debe hacerse a la misma velocidad del equipo que imitas, no solo la funcionalidad sino la velocidad esto es primordial para un buen emulador.
Por supuesto la salida de video y de audio es también muy importante para que todo salga bien
Estamos hablando que hay que ver muy bien en qué máquina se está procesando y saber su velocidad, para después hacer los ciclos exactos para la máquina en cuestión.
Aunque lo más difícil es hacer que funcione en varios equipos como PC-Windows, Linux, MAC, Android y demas, por eso casi siempre hay un emulador o varios para cada plataforma.
Modernamente, también es más difícil trabajar esto, debido a la cantidad de lenguajes en los que se hacen emuladores, C, C+, C# son parecidos, pero se puede hacer hasta en basic, también es muy bueno en JAVA y se puede hacer en muchos más.
También influyen la cantidad de técnicas de programación y estilos en un software libre, además de la cantidad de librerías que puedes utilizar y si es entre varios, pues en ponerse de acuerdo y elegir lo mejor ya es un desafío.
Yo creo que tardo más en entender como lo hizo otro que hacerlo desde cero, pero como no conozco todo, seguro me tranco, como estoy ahora, jeje