EdgeM
08/01/2008, 11:20
Buenas :D
Estoy haciendo mi primer emulador desde cero, y la verdad es que en dos o tres días ya está bastante avanzado, y funcionan algunos juegos... aunque tiene truco, ya que emula al sencillote Chip-8 xDDDDD
El caso es que elegí un "sistema" -realmente es una especie de máquina virtual- sencillo, para centrarme más en cómo funciona el emulador en sí, que en preocuparme en depurar cada instrucción de algo más complicado.
Mi problema, es que no sé como implementar una buena forma de controlar "el paso del tiempo". En el bucle principal de la emulación, ejecuto un número de instrucciones del procesador virtual, leo del teclado, actualizo la pantalla, y calculo el tiempo que tengo que "dormir" en cada frame hasta el siguiente.
Para ello, miro el tiempo al principio del bucle, y al finalizar las tareas, y hago un SDL_Delay(1) hasta que llego a los 17ms (aproximadamente) de cada frame. Sin embargo, he visto que la granularidad de esta función es muy alta, y por eso mi control no es muy preciso. He visto que hay otras funciones como SDL_framerateDelay, pero no sé si tienen un problema similar...
¿Algún consejo? :D
Estoy haciendo mi primer emulador desde cero, y la verdad es que en dos o tres días ya está bastante avanzado, y funcionan algunos juegos... aunque tiene truco, ya que emula al sencillote Chip-8 xDDDDD
El caso es que elegí un "sistema" -realmente es una especie de máquina virtual- sencillo, para centrarme más en cómo funciona el emulador en sí, que en preocuparme en depurar cada instrucción de algo más complicado.
Mi problema, es que no sé como implementar una buena forma de controlar "el paso del tiempo". En el bucle principal de la emulación, ejecuto un número de instrucciones del procesador virtual, leo del teclado, actualizo la pantalla, y calculo el tiempo que tengo que "dormir" en cada frame hasta el siguiente.
Para ello, miro el tiempo al principio del bucle, y al finalizar las tareas, y hago un SDL_Delay(1) hasta que llego a los 17ms (aproximadamente) de cada frame. Sin embargo, he visto que la granularidad de esta función es muy alta, y por eso mi control no es muy preciso. He visto que hay otras funciones como SDL_framerateDelay, pero no sé si tienen un problema similar...
¿Algún consejo? :D