Tuto, fix para el zx omni rev.2 problemas de reinicio por decodificacion del AY

Cursos, reparaciones, fichas, tutoriales, etc.

Moderador: Fundadores

Responder
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1921
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 81 times
Been thanked: 113 times

Tuto, fix para el zx omni rev.2 problemas de reinicio por decodificacion del AY

Mensaje por mad3001 »

Pues aquí estamos, esta vez con un fix al ZX Omni rev.2 de retroradionics.

El problema encontrado es que hay juegos que usan el AY para hacer sonidos o poner música y que cuando se arrancan o bien se resetean o se quedan colgados y / o comportamientos erráticos.

Al habla con Habi (Habisoft creador del es.pectrum, y diversos inventos para el PCW que podeis ver en su página), resulta que este omni tiene un bug que hace que, si el juego en cuestión no genera la tabla completa de IM2 (por ejemplo entre 0xFE00 y 0xFF01) en determinadas condiciones que mejor no me extiendo para no aburrir.... el AY pone "morralla" en el bus de datos y cuando el Z80 acepta la interrupcion en modo IM2, crea una dirección que no es 0xFEFF y, si la tabla IM2 tiene valores 0 pues la dirección de salto será 0x0000 (osea un reset en toda regla)... o si la tabla tiene otro valor pues saltará allá.

El fix en este caso es sencillo aunque requiere desoldar un pin de un chip smd (U4, 74HC138) y conectarlo al /M1 para que el AY no "devuelva" datos.

Imagen Imagen
Imagen Imagen

Video con el zx omni lanzando Gauntlet (que solo usa #FEFF ) y funcionando
Volviendo a los origenes... programa en assembler
Avatar de Usuario
dandare
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3718
Registrado: 09 Feb 2016, 15:09
Ubicación: I Register
Been thanked: 6 times

Re: Tuto, fix para el zx omni rev.2 problemas de reinicio por decodificacion del AY

Mensaje por dandare »

Excelente investigación del problema y muy elegante la solución. Enhorabuena.

En resumen, el INTACK que ofrece el Z80 (IOREQ y M1 a 0, pero RD y WR a 1) se interpretaba por el AY del Omni como una lectura de entrada salida. En determinadas situaciones en las que el bus de direcciones llevaba los bits adecuados, el AY se activaba y devolvía datos al bus, precisamente porque no tenía en cuenta si RD estaba activado o no. Sólo se fijaba en WR.
Al limitar las respuestas del AY cuando M1 está a 1, se evita que responda en el INTACK del Z80, brillante.
Imagen
Imagen
Responder

Volver a “Cursos y Tutoriales”