Hark0 escribió:Joss escribió:Yo no lo veo una pérdida de tiempo. Solo comentar que has elegido un método bottom-up para investigar, y no uno top-down, osea coger algo que ya existe e ir mirando como está hecho.
Sobre lo de coger algo que existe... siempre he perseguido hacerme un emulador de ZX... tengo muchos libros sobre el Z80, etc... y hay toda la info que uno quiera... pero, primero me interesaba ENTENDER todo (todo eso sin contar que un ZX tiene un montón de instrucciones, registros, etc), por ejemplo pensé en lo siguiente:
Como prueba de concepto, está bien, no deja de ser interesante. Para mi, emular una Z80 es relativamente sencillo, comparado con otros procesadores mucho más complejos. Que tenga muchas instrucciones solo resulta tedioso a la hora de depurar la emulación de la CPU, especialmente si pretendes ser puntilloso con la exactitud. No es tontería ser puntilloso, al menos para mi, pues quiero tener un grado de certidumbre grande de que me puedo fiar de la emulación de la CPU para que, cuando un programa falla, sospeche de la emulación de la máquina únicamente. Si no, es para volverse tarumba.
Ahora bien, como programador de un modesto emulador de ZX Spectrum te digo que el demonio está en los detalles. Una cosa es emular a la Z80 y otra muy diferente emular a la Z80 de la manera en que está usada en el Spectrum. El 90% de los programas te van a funcionar con una emulación relativamente sencilla. El otro 10% es otro cantar y de ese 10% hay un 2% que te costará la vida que funcionen bien (para mi, el ejemplo palmario es la Paralaktica Demo). No solo hay que emular las instrucciones, sino emular la secuencia exacta de pasos que realiza la CPU en cada instrucción para que todo suceda cuando debe suceder. En el Spectrum, están fuertemente interrelacionados la CPU, la ULA y la memoria, de manera que hacer una implementación limpia es difícil porque es un sistema fuertemente acoplado. Lo que es a mi, me llevó más tiempo comprender decentemente esas interacciones que cualquier otra cosa.
Respecto al lenguaje, da un poco igual. Todo depende de lo que busques y de la ayuda que te proporcione como herramienta de programación, que es de lo que se trata. Después de muchos años pensando en hacer un emulador en C++ usando la librería Qt, opté por hacerlo en Java, no solo para que fuera transportable, sino para que lo fuera sin complicaciones (léase, que no hubiera que compilar docena y media de librerías primero). Gracias a eso, sé que el emulador funciona inmediatamente y sin hacer nada especial en Windows, MacOS-X, Linux, Solaris x86 y zOS/Linux (lo que no significa que no haya tenido que hacer nada para que funcione bien en el de siempre.....). Es más, diría que si tienes en mente aprender algún nuevo lenguaje o plataforma, te plantees escribir tu emulador en ese lenguaje. Matarás dos pájaros de un tiro y, total, tampoco tienes prisa, igual te da tardar 2 meses que 2 años en escribir tu emulador porque, lo que importa,es que lo hagas.

Saludo y ánimo con ese emu.
José Luis