2012-06-21 19 views
7

Duplicar posible:
How do emulators work and how are they written?¿Cómo aprendo a escribir un emulador de consola?

me gustaría intentar escribir un emulador de gameboy básica, o tal vez incluso NES. Conozco los conceptos básicos de C y soy bastante bueno en Java, así que conozco los conceptos básicos necesarios para la programación. Sin embargo, lo que no sé es cómo las personas procesan todos los datos en un programa C y crean un emulador. Sé que debo aprender de la fuente, pero es difícil ver un montón de líneas de código sin saber por qué están allí y qué se supone que deben hacer. ¿Dónde se supone que debo comenzar si quiero aprender a escribir un emulador así?

He buscado en Internet, pero solo he encontrado tutoriales confusos que contienen demasiados errores para resolverlos por mi cuenta. ¿Dónde se supone que debo comenzar?

+1

Tengo una colección de simuladores http://github.com/dwelch67 Lo que hay que aprender primero es el lenguaje ensamblador para la cpu de destino, luego trabajar en un desensamblador que desmonta en orden de ejecución , en algún momento puede comenzar a convertirlo en el simulador de conjunto de instrucciones. Luego tienes que hacer emuladores para todos los periféricos. Por lo tanto, necesitará buenos documentos para el sistema que está emulando. –

+0

Otro enfoque es un traductor binario estático, SBT. http://www.dwelch.com/ipod/asteroids.htm es uno que hice para el ipod (clásico). Tengo mucho más trabajo en eso desde ese lanzamiento, aunque no publicado en ninguna parte. Un buen tutorial sobre el tema. http://www.gtoal.com/sbt/ también puede hacer una traducción dinámica, traducir sobre la marcha en lugar de estática. No probaría dinámico hasta que puedas hacer estático. –

Respuesta

6

No es así. Usted emula el HARDWARE. No tiene que "procesar" en absoluto los datos del programa, necesitará escribir un código que imita la CPU, el hardware de gráficos, los dispositivos de entrada, etc.

Un buen primer paso sería probablemente escribir una Z- Emulador de máquina, que aunque no era una consola, en realidad era el primer "emulador" generalizado. Fue utilizado para todas las aventuras de texto infocom (zork, etc.). Dado que se trata de un formato de juego orientado a texto, no hay mucho que emular en términos de gráficos o sonido, el único dispositivo de entrada es el teclado, y no tiene que preocuparse por la velocidad/sincronización de la ejecución.

Está muy bien documentado aquí: http://www.gnelson.demon.co.uk/zspec/preface.html

En realidad es un proyecto me refiero a mí mismo para llevar a cabo uno de estos días, simplemente nunca han encontrado el tiempo.

+0

Una cosa que siempre me he preguntado es dónde exactamente uno encuentra las especificaciones para un sistema en particular. Algunos sistemas, como usted mencionó, están muy bien documentados, pero ¿qué tal un proyecto como [Dolphin Emu] (http://dolphin-emulator.com/)? ¿Realmente Nintendo lanza la arquitectura de su consola para que todos la vean? – voithos

+0

Montones y montones de trabajo duro e ingeniería inversa. A veces, comenzando desde, por ejemplo, pinouts en las fichas, que a veces van tan lejos como las sondas de pegado en el hardware real mientras el sistema está en funcionamiento. –

1

Probablemente empiece recopilando información sobre el hardware que desea emular. La CPU es probablemente la pieza más grande y la más fácilmente disponible, por lo que es un punto de partida razonable.

Un emulador de CPU básicamente lee bytes de un programa, decodifica instrucciones individuales y las ejecuta. Por lo general, asigna una gran matriz para representar la memoria del dispositivo y algunas variables para representar los registros de la CPU. Simula la ejecución de instrucciones haciendo operaciones una a la vez en esos "registros"/ubicaciones de memoria.

También deberá encontrar información sobre las E/S en el dispositivo que está tratando de emular, por ejemplo, puertos o ubicaciones de memoria que representan entradas de botones particulares, qué direcciones representan la pantalla, etc. un dispositivo más nuevo (pero generalmente no la mayoría de los anteriores) tendrá un procesador de gráficos separado que necesita emular también. No solo tendrá que emular ese procesador en sí, sino también cómo está conectado a la CPU principal.

1

Un emulador de consola es un proyecto realmente grande, y predigo que no será muy divertido para la mayoría; tienes que obtener un lote de lote justo antes de que los juegos comiencen a correr.

Puede ser más divertido encontrar un proyecto de código abierto existente que esté tratando de emular una consola, y ver si puede encontrar alguna forma de mejorarlo.

Pero si solo está buscando un proyecto muy educativo, tengo otra sugerencia: escriba su propio intérprete de Scheme, o escriba su propio intérprete de FORTH. Ambos son lenguajes minimalistas y elegantes (¡y ambos con reglas de sintaxis convencionales!).Puedes escribir tu propio Scheme o FORTH desde cero y ejecutar programas en cuestión de días.

Estos no son juguetes, y escribirlos será educativo.

¡Imagínese: obtener una copia de SICP [1] y ejecutar los programas en un sistema que usted mismo haya escrito! ¡O obtener una copia de un libro de FORTH y hacer los problemas en un sistema que usted mismo escribió!

Si está interesado en estos proyectos, busque "escribir un intérprete de esquema" y/o "escriba un intérprete de FORTH".

P.S. Cuando comencé a usar computadoras, pasé mucho tiempo pirateando FORTH, y me enseñó mucho. Las lecciones que aprendí de eso me han ayudado a través de los años.

[1] http://sicpebook.wordpress.com/

Cuestiones relacionadas