Lo primero feliz año nuevo!!!, a ver si este año es mejor que el 2021.
He hecho una análisis de un juego que no funciona en este
core, el
Tapper. En este caso, llegamos a la pantalla de menú y es posible modificar las opciones, pero al iniciarlo se queda colgado en este punto:
Si lo depuramos, tenemos que el punto donde se cuelga es en la siguiente instrucción
JNZ:
Como puede observarse, se comprueba la variable ubicada en
0x44c3 y mientras no sea 0 se queda en bucle. Más arriba en el código, se puede ver también que se ha establecido a 1 pero aparentemente no se observa ningún cambio entre los dos puntos. Sin embargo, añadiendo una traza en ese punto, en el momento en que se queda colgado no vale 1, sino que he podido comprobar que vale
0FEh. Esto es lo que me desconcierta, ¿dónde y cómo se está modificando este valor?. Si queremos evitar que se quede colgado, es tan sencillo como parchear el juego de la siguiente manera, por ejemplo:
Ahora ya superamos esta pantalla y podríamos jugar:
Aunque parcialmente, ya que no funciona la música del juego y cuando la partida termina, esta vez se queda colgado en la pantalla inicial
de bienvenida:
Lo que me lleva a pensar que este método de espera se aplica en varios puntos. De hecho, en un
PCXT real o en el
PCEM, antes de continuar en estos puntos transcurre un breve espacio de tiempo.
Analizamos por tanto los puntos donde se hace referencia al mismo:
Y vemos que son varios puntos donde este valor cambia y hay un bucle. Yo diría que algún temporizador en segundo plano está cambiándolo porque hay más zonas del código donde el valor inicial y el bucle se establecen de forma seguida:
Buscando referencias a llamadas al
timer 8259 de un
PCXT, nos encontramos un par de ellas, una de ellas aquí:
y otra en un punto muy cercano y de aspecto similar. También he visto que se llama un par de veces a una rutina relacionada con
DMA:
Y si ahora nos fijamos en las carencias propias del
Next186:
Todo empieza a tener más sentido. Es muy probable que tanto la música en bucle, como los tiempos de espera entre pantalla y pantalla no funcionen debido a estos temas. Pero lo difícil en este caso no es la identificación del problema, sino cómo establecer la solución correcta que no pase por parchear el juego, ya que estoy seguro que estos pueden estar afectando a otros juegos y programas con diversos efectos asociados que hacen que no sean compatibles con el
core.