La cosa es en teoría muy simple: quieres emular una CPU-1 (placa Frogger de Konami, que tiene un Z80) en otra CPU-2 (GBA, que tiene un ARM7DMI), usando un pograma llamado emulador, que se ejecutará en la CPU-2.
Básicamente necesitas conocer a la perfersión las instrucciones y funcionamiento de CPU-1 y de CPU-2, y además del lenguaje de pogramación que vayas a utilizar para el emulador (en mi caso yo no utilicé un lenguaje intermediario, sino que direstamente pogramé en ARM7DMI).
Y lo que hay que hacer es crearte una función por cada instrucción de la CPU-1, la cual va a ser ejecutada en la CPU-2. Tiene que realizar exactamente las mismas operaciones, y no sólo eso, sino que en realizar esas operaciones debe tardar exácticamente lo mismo.
Pero como la CPU-2 va mucho más rápida que la CPU-1, ¿qué hacemos en todo el tiempo que sobra? Pos simplemente ejecutar instrucciones NOP, que realmente no hacen nada. ¿Y cuántas instrucciones hay que ejecutar? Aquí es donde está el arte total, jiji. Por suerte, las CPU's traen lo que se llama "interrupciones por HBLANK y VBLANK, uséase, que cá vez que se requiera refrescar la pantalla, salta una interrupción de estas. Esto ocurre tanto en CPU-1 como en CPU-2, por lo que sólo tengo que ponerme a ejecutar NOP's hasta que salte una interrupción de esas.
Por eso, es por lo que le digo a
fvture que por muuuy mal que pogrames un emulador, es imposible que ralentices la emulación. No hay manera. Si CPU-1 va a 30 MHz p.ej. y CPU-2 va a 2GHz p.ej., estamos hablando de un ratio de 60 veces uno más rápido que el otro. Es decir, te debería dar tiempo a emular 60 consolas simultáneamente. O bien una sola, ejecutando miles de millones de NOP's. Es que no hay que hacer nada más. Es más fácil emular bien que mal. La ralentización forzosamente es porque en la placa JAMMA originás tamién lleva ralentización.
En fins, esto implicaría un megatutorial supertesnotrónico, y total, lo más mejón es juegar