Estoy tratando de confirmar que algún emulador de Spectrum "soporte" una correcta emulación del puerto $FF en Spectrum +3, es decir, que ciertos juegos no funcionen.
Por citar algunos ejemplos, estoy probando con el Speculator y el Duet, uno de los programas incompatibles con esta máquina. El TZX que estoy empleando lo carga correctamente en modo 48K, mientras que en modo +3, el juego parece colgarse en la pantalla inicial (no cambia los mensajes de la última línea).
¿Es el anterior el comportamiento real del juego en un +3?, ¿alguien recuerda que hacían en el +3 juegos de cinta como ese, el Arkanoid o el Renegade?
Emulación del puerto $FF
- zup
- Amiga 2500
- Mensajes: 3012
- Registrado: 04 Sep 2009, 20:07
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Nintendo DS/3DS
- Primera consola: Nintendo GameBoy
- Ubicación: Navarra
- Gracias dadas: 86 veces
- Gracias recibidas: 356 veces
- Contactar:
Re: Emulación del puerto $FF
Creo que casi todos los emuladores modernos soportan el puerto $ff (aunque no sé la precisión de la emulación). Si Duet funciona en modo 48k, es que no está afectado por el "bug" de los +2A/+3.
Las tres incompatibilidades que te puedes encontrar:
- Uso de las direcciones 23296 a 23552. En el 48k, aquí va el buffer de la impresora y no suele haber nada; en todos los 128k están las rutinas de paginación. Dependiendo de lo que haga el juego, puede funcionar o no en modo 128k. En modo 48k, funcionarán siempre. Ejemplo: Scuba dive.
- Uso de interrupciones. Dependiendo del modo de interrupciones, algunos juegos no funcionan bien en los +2A/+3. En modo 48k, funcionan bien. Ejemplo: Confuzion (de este, hice una versión "parcheada" para +3).
- Uso del puerto $ff. Aquí si que la hemos cagado. Arkanoid (hay varias versiones, algunas están corregidas) se cuelga por completo, ya que espera eternamente a que el puerto $ff cambie de valor. Estos juegos no funcionarán ni en modo 48k ni en modo 128k. Creo que Cobra también cae en esta trampa, aunque también hay versiones corregidas.
Creo que la única forma de saber si el programa se ha colgado por eso es mirar si está leyendo este puerto. Tendrás que arrancarlo, esperar a que se cuelgue y después mirar qué está haciendo en el depurador.
Después de descargar Arkanoid de WOS (la versión original):
Mirando con ZX Spin 0.7, el +3 se cuelga. Si vas al depurador, verás que se mete en un bucle infinito entre $848f y $8498... esperando un cambio en el puerto que nunca llega. Spectaculator 8 y fuse 1.0.0.1 también se cuelgan como unos campeones.
Duet también se cuelga, intentando leer el puerto $ff. Lo hace tanto en modo 48k como 128k (todo correcto). ¿Es posible que se hubiera corregido este error en alguna versión y que la tuya lo tenga ya corregido?
Las tres incompatibilidades que te puedes encontrar:
- Uso de las direcciones 23296 a 23552. En el 48k, aquí va el buffer de la impresora y no suele haber nada; en todos los 128k están las rutinas de paginación. Dependiendo de lo que haga el juego, puede funcionar o no en modo 128k. En modo 48k, funcionarán siempre. Ejemplo: Scuba dive.
- Uso de interrupciones. Dependiendo del modo de interrupciones, algunos juegos no funcionan bien en los +2A/+3. En modo 48k, funcionan bien. Ejemplo: Confuzion (de este, hice una versión "parcheada" para +3).
- Uso del puerto $ff. Aquí si que la hemos cagado. Arkanoid (hay varias versiones, algunas están corregidas) se cuelga por completo, ya que espera eternamente a que el puerto $ff cambie de valor. Estos juegos no funcionarán ni en modo 48k ni en modo 128k. Creo que Cobra también cae en esta trampa, aunque también hay versiones corregidas.
Creo que la única forma de saber si el programa se ha colgado por eso es mirar si está leyendo este puerto. Tendrás que arrancarlo, esperar a que se cuelgue y después mirar qué está haciendo en el depurador.
Después de descargar Arkanoid de WOS (la versión original):
Mirando con ZX Spin 0.7, el +3 se cuelga. Si vas al depurador, verás que se mete en un bucle infinito entre $848f y $8498... esperando un cambio en el puerto que nunca llega. Spectaculator 8 y fuse 1.0.0.1 también se cuelgan como unos campeones.
Duet también se cuelga, intentando leer el puerto $ff. Lo hace tanto en modo 48k como 128k (todo correcto). ¿Es posible que se hubiera corregido este error en alguna versión y que la tuya lo tenga ya corregido?
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!
Además vendo cosas!
- jltursan
- Amiga 2500
- Mensajes: 4028
- Registrado: 13 Oct 2006, 19:45
- Sistema Favorito: MSX
- primer_sistema: Dragon
- Ubicación: Serracines, Madrid, España
- Gracias dadas: 57 veces
- Gracias recibidas: 157 veces
- Contactar:
Re: Emulación del puerto $FF
Buena explicación, ¡gracias!
El caso es que me expliqué mal; cuando describía el comportamiento del emulador, al decir "modo 48K" me refería a que emulaba un gomas y por tanto veía funcionar el Duet, no así en el modo 48K del propio +3, en el que se colgaba
Ahora ya he podido probar en mi +3 el Duet mediante un snapshot SNA (no lo he conseguido con un Z80) y efectivamente, el Speculator se cuelga en el mismo punto que el auténtico +3.
El asunto es que necesitaba una forma fiable de testear el "fix" para el problema del puerto mediante la resistencia de 470Ohm; así, una vez instalada podré comprobar cual es su efecto
-- Actualizado 01 Ene 2014, 13:22 --
Pues ya esta hecha la modificación en el +3 y he de decir que funciona de lujo
Como se puede consultar por ahí, se trata únicamente de unir los pin 17 (D7) de las RAM 4464 que están en IC4 e IC6 mediante una resistencia de 470 ohmnios. Al parecer ese valor puede variar en función de las memorias (yo tengo montadas ahora mismo de 100ns, no se si es la velocidad o la marca lo que influye); pero en principio ya he comprobado que los 470 ohmnios funcionan correctamente y al menos el "Duet" me ha funcionado perfectamente en el +3
La única duda que queda en el aire es si me habré cargado algún otro software por haber modificado el valor que se lee en el puerto...
El caso es que me expliqué mal; cuando describía el comportamiento del emulador, al decir "modo 48K" me refería a que emulaba un gomas y por tanto veía funcionar el Duet, no así en el modo 48K del propio +3, en el que se colgaba

Ahora ya he podido probar en mi +3 el Duet mediante un snapshot SNA (no lo he conseguido con un Z80) y efectivamente, el Speculator se cuelga en el mismo punto que el auténtico +3.
El asunto es que necesitaba una forma fiable de testear el "fix" para el problema del puerto mediante la resistencia de 470Ohm; así, una vez instalada podré comprobar cual es su efecto

-- Actualizado 01 Ene 2014, 13:22 --
Pues ya esta hecha la modificación en el +3 y he de decir que funciona de lujo

Como se puede consultar por ahí, se trata únicamente de unir los pin 17 (D7) de las RAM 4464 que están en IC4 e IC6 mediante una resistencia de 470 ohmnios. Al parecer ese valor puede variar en función de las memorias (yo tengo montadas ahora mismo de 100ns, no se si es la velocidad o la marca lo que influye); pero en principio ya he comprobado que los 470 ohmnios funcionan correctamente y al menos el "Duet" me ha funcionado perfectamente en el +3

La única duda que queda en el aire es si me habré cargado algún otro software por haber modificado el valor que se lee en el puerto...
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados