Ya está, misterio resuelto. Le venía dando vueltas desde ayer y he podido confirmar mi teoría al probarlo. La respuesta va a ser un pelin técnica de información interna de ZEsarUX.
Primero: ZEsarUX arranca en modo real vídeo desactivado. Real vídeo es un concepto del emulador, que quiere decir que cuando está activo, la pantalla se redibuja exactamente igual que en spectrum. Además, con ese modo activo, la lectura de un puerto no asignado, devuelve el byte de pantalla que lee la ula.
Con real video desactivado, la pantalla se redibuja de una manera mucho más rápida, y la lectura de puertos no asignados siempre devuelve el valor 255.
Real vídeo activado consume más cpu que desactivado, por eso el emulador se inicia con esa característica desactivada.
Desde display settings podemos activar manualmente real vídeo, y también si os fijáis hay una opción que dice 'autodetect real vídeo'. Esto básicamente lo que hace que, si esta activado, en determinados eventos se activa automáticamente el real vídeo. Que eventos son esos? Pues un cambio muy rápido de color del borde, cosa que , sin real vídeo activo, no se podría visualizar y por eso el emulador lo activa. Otro caso en que se activa es cuando se lee un puerto no asignado. Cuando eso sucede, se activa real vídeo.
Ahora bien, que es lo que pasa con ese juego? Se inicia el emulador sin real vídeo. Carga el juego y lo que hace es leer un puerto no asignado (probablemente el del joystick kempston). El emulador auto activa el real vídeo, pero el primer valor que lee del puerto es un 255 (debido a que se estaba dibujando la pantalla sin real vídeo y ese es el valor por defecto),
Entonces el juego ve el valor 255 y deduce que no hay interfaz kempston , cosa que habilita las teclas 56780 para jugar. Y aparentemente no vuelve a hacer esa detección de kempston en el juego, solo la hace al iniciarlo.
A partir de ahí el emulador tiene real vídeo activo y las lecturas sobre puertos no usados devuelve el valor que lee la ula de pantalla (una ráfaga de valores 255 y valores de pixeles y atributos de pantalla). La lectura del kempston también devolverá ese valor de la ula, pues el emulador arranca por defecto con emulación de cursores y no emulación de kempston.
Qué pasa al volver a cargar el juego? Muy simple. El juego carga, lee del puerto del kempston, ve que no devuelve 255 y deduce que por tanto hay kempston conectado. Entonces las teclas 56780 no funcionan y solo se mueve la nave con kempston. Hay que decir aquí que si abres el menú del emulador y cambias la emulación de joystick a kempston, podrás mover la nave sin problemas con los cursores.
Con todo esto, si desactivas la opción de auto activar real vídeo, y tienes real vídeo desactivado, y la emulación de joystick de tipo cursors (y no kempston), el juego siempre leerá un 255 en el puerto de kempston y siempre se jugará con teclas 56780.
Comentar aquí que, a nivel técnico, esa detección de kempston me parece un tanto chapucera. La ula como digo retorna valores de pantalla y también valores 255. Entonces el juego asume que, cuando lee un valor diferente de 255 es que hay kempston conectado, deducción completamente invalida. Lo que seguramente sucede en un spectrum real es que esa lectura de puerto se produce en un momento en que la ula lee el border, momento en que siempre retorna 255, y si había kempston pues entonces devolvía diferente de 255 (normalmente un 0 si no tocamos el joystick). Pero bueno debido a que ese juego es muy viejo no vamos a criticar ese método de detección de kempston
En cuanto a cargar en modo 128... Pues ese juego se hizo antes del primer spectrum 128, entonces los efectos de cargarlos en 128 son imprevisibles. Yo lo he probado y el juego funciona pero el sprite de disparo no aparece bien, se ve un sprite completamente aleatorio.
En fin espero no haber sido muy pesado con la respuesta pero el tema no me dejaba dormir, jejejej
Saludos
César