busco web para crear emuladores

hola últimamente estoy trabajando en la creación de un compilador y supongo que se ha de parecer bastante a un emulador, me gustaría saber si hay alguna web o tutorial para empezar un emulador sencillo y así ver la metodología y como se deberían de hacer.

en caso de no haberlo me gustaría que alguien que haya o esté creando un emulador hiciese un tutorial de como lo ha ido haciendo así como de ficheros que usa y demás.
Chavalinchi, aprende arquitectura de la máquina que quieres emular, date un buen buen curso de programación (en C++) por ejemplo, observa códigos fuente, y luego empezarás a tener una idea de cómo puede ser un emulador [qmparto]

Con esto te quiero decir que crear un emulador no es nada fácil, no es tarea sencilla, tendrás que empezar por cosas más fáciles, y no querer hacer mortales sin saber andar.

Un saludo
el chavalinchi tiene a falta de 1 asignatura la carrera de ingeniero informático superior y trabajo de desarroyador de software... creo que ya puedo pasar al segundo plato, no?
No se por que me da que #1 sabe mas que #2.

PD si pasases mas por el foro sabrias que saulotmalo sabe programar y tiene hecho bastantes cosas, como para aprender como hacer un emulador.
gracias tio, luego te pago la cervecita por defenderme ;) tu tb le pillas lo suyo kyp cuando te propondrás un emulador así "facilito"?
el chavalinchi tiene a falta de 1 asignatura la carrera de ingeniero informático superior y trabajo de desarroyador de software


Me temo que en ninguna asignatura de la carrera te van a preparar para crear un emulador de un sistema medianamente complejo.

Un emulador es MUCHO más complejo de realizar que un compilador corriente. Mientras que con el segundo te limitas a convertir código fuente a código objeto, con el primero debes crear un sistema que traduzca un código objeto totalmente ofuscado a algo potable por otro sistema, aparte de emular con exactitud las siguientes partes del sistema final:
- el mapa completo de registros y memoria, teniendo en cuenta la velocidad de acceso a cada posición, los derechos de acceso y el numero de bytes que supone cada lectura o escritura.
- el funcionamiento exacto del chip gráfico, incluyendo la emulación correcta de escalados y rotaciones, prioridades, las posibles limitaciones del chip y los cambios de los atributos del chip al final de los scan horizontales (esto puede dar unos dolores de cabeza HORRIBLES, aparte de chupar velocidad de proceso a destajo).
- lo mismo para el sonido. Normalmente suele ser más complejo reproducir el resultado debidamente que la emulación en sí.
- las diversas interrupciones y los DMA.
- respuesta correcta ante accesos a la BIOS (si no se incluye aparte).
- las particularidades de la CPU como por ejemplo los tiempos de ciclo por cada instrucción, las excepciones (!!!) y los diversos modos de ejecución.
- las posibles optimizaciones de la CPU como ejecución segmentada (con sus correspondientes excepciones), prefetchers, acceso no secuencial a instrucciones, etc.

No se trata sólo de traducir opcodes sin más. Por si todo esto no fuera poco, la documentación disponible para la mayoría de sistemas es una bazofia, así que muchas veces no queda más remedio que emular a ojímetro.

Te dejo la documentación de uno de los sistemas modernos más sencillos de emular y con mayor documentación disponible: la GBA . Sencillito, ¿eh?

Pero en fin, si dices que te falta sólo una asignatura para ser ingeniero, pues ánimo :) .
a ver... no digo que esté preparado para hacer uno, pero si no empiezo a informarme y a leer nunca estaré preparado. Pero a un ingeniero no le pueden decir como la respuesta que ha dicho este chaval como si yo fuera un niño de teta que no sabe ni lo que ha dicho, claro que sé lo que conlleva emular un sistema, tambien he dado sistemas operativos arquitectura de compiladores y demás que me enseñan como funcionan los sistemas y además me suelo mirar lo que dice strnmrn y suelo entender las partes de código que comenta, así que no soy tan negado como para no empezar.

Muchas gracias por la información de la gba, pero quizas pensaba en algo más como la nintendo o algo así que está emulada por mucha gente y explicar un emulador ya creado.
Hombre, para crear un emulador, primero tienes que conocer muy a fondo la maquina que quieres emular (y eso es lo mas dificil de conseguir: informacion precisa no solo de la forma de operar del hardware, si no de los ciclos de reloj exactos que lleva cada operacion)

Por ejemplo, si estas emulando una CPU tendras que emular todas las instrucciones del procesador con fidelidad, llevando el tiempo que consume cada instruccion y añadiendo ciclos de reloj extras, si se accede a un dispositivo lento (por ejemplo, en el ordenador spectrum, la RAM de video es compartida por la CPU y la ULA, teniendo esta prioridad y penalizando en un 20% si no recuerdo mal, en los accesos del procesador)

Evidentemente, esa temporizacion hay que mantenerla para todo el hardware de la maquina emulada, pero tambien hay que relacionarla con el hardware emulador.

Lo que se suele hacer, es que el emulador procese todas las instrucciones y operaciones hasta completar un frame (tambien se puede utilizar el tiempo que se tarda en dibujar una linea en pantalla).

Por ejemplo, si una maquina trabaja con video PAL y actualiza la pantalla 50 veces por segundo, conociendo el reloj del sistema, se puede averiguar el numero de ciclos de reloj en 1 segundo/50 frames y ejecutar todas las instrucciones hasta completar ese numero de ciclos y luego salir fuera del emulador para permitir que el sistema emulado, visualice los graficos, lea un PAD o se sincronice.

Si el emulador trabaja mas rapido que la maquina original, tendremos una emulacion satisfactoria, pero si trabaja mas lento, se pueden recurrir a diversos trucos para acelerarlo, como la recompilacion dinamica, que consiste en traducir el codigo maquina a emular a codigo maquina de la maquina emuladora.

Esto tiene el inconveniente de que si una instruccion es modificada durante el tiempo de ejecucion (por ejemplo, en el spectrum no era raro esto), el codigo emulado no será correcto y el emulador fallará, pero se suele ganar bastante en velocidad porque se evitar tener que interpretar las instrucciones maquina.

Offtopic:

Por cierto, estuve mirando el formato del FOF para adaptarlo a mi programa musical y utiliza un fichero MIDI para el tema de pulsar las notas. Me ha costado lo suyo poder interpretar este fichero correctamente, porque desconocia el formato MIDI y el FoF está escrito en python, lenguaje que yo desconozco.

Pero con la ayuda de un editor hexadecimal, algo de info que encontré en una web y una poca dosis de intuicion, he conseguido interpretar bien los ficheros, incluidos los del pack de Guitar Hero que incluyen unos ficheros MIDI un tanto "raros" :).

A ver si puedo instalar el entorno de compilacion para PS2 y crear un programa similar al FoF para PS2.
Antonio92 escribió:Chavalinchi, aprende arquitectura de la máquina que quieres emular, date un buen buen curso de programación (en C++) por ejemplo, observa códigos fuente, y luego empezarás a tener una idea de cómo puede ser un emulador [qmparto]

Con esto te quiero decir que crear un emulador no es nada fácil, no es tarea sencilla, tendrás que empezar por cosas más fáciles, y no querer hacer mortales sin saber andar.

Un saludo


Hmm, ¿owned tal vez?
Juas, el chaval ha metido la pata hasta el fondo.

He estado mirando un poco esa informacion sobre el hardware de GBA y no he pispado ni chapa. Supongo que al estar solo a mitad de carrera no sirve de mucho XD .

Por cierto, voy a hacer un off-topicazo del copon, pero queria preguntarle a Hermes si ha leido el privado que le mandé. [comor?]
zeroshcr escribió:Por cierto, voy a hacer un off-topicazo del copon, pero queria preguntarle a Hermes si ha leido el privado que le mandé. [comor?]


Pues si y no: lo leí, pero entre que era tarde cuando lo hice y que un clavo saca a otro (y a veces parece que todo el mundo se pone de acuerdo para mandarme un MP XD)

Luego me bajo el codigo, para ver si te has olvidado añadir algo, si es cosa de las librerias que usas o tal vez es culpa del metodo de carga que estes usando (esto ultimo suele darse si no reseteas el IOP y tratas de cargar modulos)

Eso si: te prevengo que yo tenia unos compiladores muy antiguos y unas librerias adaptadas, que no es lo mismo que usar ps2sdk (en general, las librerias tienen bugs que se muestran especialmente, cuando el proyecto tiene cierta complejidad). Asi que no se si podre ayudarte (de momento, mi ordenador no tiene ningun compilador, ni librerias de PS2, pues hace tiempo que perdí gran parte de lo que tenia de PS2 y llevo muucho tiempo sin programar nada para PS2 y tendré que sacudir el polvo a las neuronas XD)
si te interesa aki puedes buscar informacion tecnica sobre el hardware de varias consolas
http://www.emulatronia.com/secciones/doctec.htm
esto es perfecto, muchas gracias :D
Menos preguntar y mas programar, quiero un emulador de n64 para psp a fullspeed y lo quiero para ayer!!! XD que digo para ayer, en cuanto termine de cenar espero q lo tengas terminado [qmparto]

Yo te recomendaria darle un vistazo a algun source de los muchos emus disponibles, asi puedes hacerte una idea mas o menos de por donde van los tiros
saulotmalo escribió:esto es perfecto, muchas gracias :D


Me estoy iniciando en este mundo de la programación de PSPS y lo primero que busque fue un emulador para no tener que depender de la PSP siempre. No hay ninguno termiando (almenos que yo sepa, si lo hay por favor decirmelo) pero se que hay uno llamado PSP Player o algo así que esta sin terminar y que el autor ha dejado los fuentes para que se continue con su trabajo. ESta desarrollado en .NET

Espero que esto pueda servirte
Aquí te dejo un par de enlaces:

http://www.speccy.org/sromero/spectrum/articulos/htprogemu/

http://personals.ac.upc.edu/vmoya/emulation.html

Lo ideal según he leido es que empieces emulando el space invaders, que es muy simple. En en segundo enlace hay otro enlace a un tutorial para emular space invaders.

Saludos, y que apruebes la que te queda.
Yo recomiendo que empiezes con algo facil, como el chip8
http://www.zophar.net/chip8.html. Luego cuando veas como funciona un emulador puedes pasarte a la gb monocromo,master system,nes(tienes infinidad de mappers a emular).

De todas formas tener el titulo de ingeniero no implica saber programar, te lo dice uno que tiene la diplomatura.

Un saludo
joer la gente de EOL como están de preparados.

animo tio !!
javato escribió:
De todas formas tener el titulo de ingeniero no implica saber programar, te lo dice uno que tiene la diplomatura.


Desgraciadamente eso ya lo sé... pero 5 años estudiando algo te enseñan además ahora tengo curro de programador y tal así que algo sé yo esto sólo es a nivel de ir mirandome cosas porque si no empiezas con cosas pekeñas no llegas a grandes...
javato escribió:Yo recomiendo que empiezes con algo facil, como el chip8
http://www.zophar.net/chip8.html. Luego cuando veas como funciona un emulador puedes pasarte a la gb monocromo,master system,nes(tienes infinidad de mappers a emular).

De todas formas tener el titulo de ingeniero no implica saber programar, te lo dice uno que tiene la diplomatura.

Un saludo


Desviandome un poco y no lo digo con mala intencion pero yo no me meto en Ing. informatica superior ( empiezo este año :D ) ni en la tecnica para aprender a programar aunque ai asignaturas de programacion el 1º año tengo 1 despues seran en las practicas supongo, si quiero que me enseñen a programar me meto en un FP si me meto en la carrera es para saber sobre estructuras de computadoras de redes... que me enseñen a realizar infinidad de calculos que por mi solo no sabria hacer ni aplicar ni de coña :) lo importante esque te den las herramientas despues cada uno se diferencia en como aplicarlas.

Saulotmalo ya iras comentando como te va con esto.
despues de ver un poco como estaba el tema y tal creo que me alejaré de los emuladores hasta que tenga más base por suerte soy una persona que le gusta informarse de temas asi que voy leyendo un poco si consigo tener más nivel empezaría con uno pequeño y seguramente para pc por el tema de los recursos luego ya se vería... jeje

sobre lo de la carrera... yo creo que es cierto no nos enseñan a programar en mi caso me han enseñado ( algo mas de lo que sabía ) a buscarme la vida yo soy una persona que no me gusta perder el tiempo cuando me quedo atascado busco por donde salir y suelo encontrar una salida creo que esa es una de las caracteristicas que necesita un buen informatico y creo que mi jefe piensa igual por el sueldo que me ha ofrecido pese a no tener experiencia ni carrera ;)
No se pienso k kizas no deberias dejarlo de lado hay bastante mas informacion de la k a primera vista puedas ver, es cuestion de buscar, como t han dicho debes de conecer mucho el hardware de la maquina, pero eso es mera documentacion tecnica a implementar en algoritmos, muy cercano a desarrollo de sistemas operativos, que supongo habras estudiado.

La cuestion es empezar por una maquina ya emulada, como has comentado, nes seria una buena opcion, no creo que sea necesario que emules si quiera el microprocesador y sus opcodes podras usar cualquiera creado por otro, en serio creo que es mas cuestion de pesadez que dificultad, va con 2 cojones animo!

Los limites estan donde tu te los pongas :)
Acabar informatica no significa saber programar...de acuerdo pero hay muchos casos en los si q se sabe :). Yo soy ingeniero informatico y considero q sali de la carrera sabiendo programar bastante bien (tambien es cierto q los ultimos 3 años de carrera los pase currando tb de programador grafico). No se que emulador querras hacer (el compilador q estas haciendo supongo q sera para Procesadores de lenguaje :p ) pero mi recomendacion es q empiezes por una maquina muy muy sencila. Yo hace unos años me hice un emulador de un procesador inventado unicamente para ver q problemas podia tener (temas de temporizadores, interrupciones gestion de memoria, etc).La arquitectura y detalles del procesador lo saque de la asignatura de Arquitectua de computadores (teniamos una arquitectura teorica muy simple q servia para dar las clases de la asignatura). Despues pase a un emulador del micro 8088 en el q solo emulaba micro+memoria. Desgraciadamente acabe tan hasta los cojones de ese proyecto q lo abandone. Sin embargo me sirvio para conocer las dificultades que tiene la emulacion. Mi recomendacion es q empiezes haciendo pruebas con arquitecturas teoricas de las q seguro puedes encontrar en los apuntes de muchas universidades y luego pases a un micro no muy complejo (el 8088 pense q iba a ser muy simple pero me lleve una sorpresa :p).
Gracias, aunque la verdad la idea de preguntar era informarme para dejarlo en la cola de trabajos pendientes de momento creo que seguiré con los juegos y tal jeje.

un saludo
Buscate los documenteos de Marat Fayzullin sobre emuladores,te vendrán bien como introducción.

http://fms.komkon.org/EMUL8/
26 respuestas