Planeo crear un emulador Sega Master System en los próximos meses, como un proyecto hobby en Java (sé que no es el mejor lenguaje para esto, pero lo encuentro muy cómodo para trabajar, y como usuario frecuente tanto de Windows como de Linux, pensé que una aplicación multiplataforma sería genial). Mi pregunta se refiere al recuento de ciclos;Pregunta sobre la precisión del recuento cíclico al emular una CPU
He revisado el código fuente de otro emulador Z80, y para otros emuladores también, y en particular, el ciclo de ejecución me intriga: cuando se invoca, se pasa un int como argumento (digamos 1000 como un ejemplo). Ahora entiendo que cada código de operación requiere un número diferente de ciclos para ejecutarse, y que a medida que se ejecutan, el número de ciclos se reduce a partir de la cifra total. Una vez que el número de ciclos restantes es < = 0, el bucle de ejecución finaliza.
Mi pregunta es que muchos de estos emuladores no tienen en cuenta que la última instrucción que se ejecutará puede llevar el número de ciclos a un valor negativo, lo que significa que entre bucles de ejecución uno puede terminar con , Se ejecutan 1002 ciclos en lugar de 1000. ¿Es esto significativo? Algunos emuladores explican esto al compensar el siguiente ciclo de ejecución y otros no, ¿qué enfoque es el mejor? Permítanme ilustrar mi pregunta ya que no soy particularmente bueno en poner a mí mismo a través de:
public void execute(int numOfCycles)
{ //this is an execution loop method, called with 1000.
while (numOfCycles > 0)
{
instruction = readInstruction();
switch (instruction)
{
case 0x40: dowhatever, then decrement numOfCycles by 5;
break;
//lets say for arguments sake this case is executed when numOfCycles is 3.
}
}
Después del final de este ejemplo particular, looping, numOfCycles estarían en -2. Esto solo será una pequeña inexactitud, pero ¿importa en general en la experiencia de las personas? Apreciaría la comprensión de alguien sobre este. Planeo interrumpir la CPU después de cada fotograma, ya que esto parece apropiado, así que 1000 ciclos es bajo. Lo sé, esto es sólo un ejemplo.
Muchas gracias, Phil
Gracias :-) Vi este artículo hace unos días y fue una lectura muy interesante. Parece que puedo ignorar este problema: ¡recorté mi trabajo pero debería ser divertido! :-pag – PhilPotter1987