"Downgrade" de un +3 para solucionar un fallo en su ULA

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5280
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 5 veces
Gracias recibidas: 29 veces
Contactar:

"Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor mcleod_ideafix » 15 Oct 2012, 18:42

Este +3 tenía (y sigue teniendo) un fallo insalvable: la ULA está estropeada. Aún así... ¡funciona!

Al principio diagnostiqué esto, pero al hacer más pruebas, parecía que la ULA no estaba mal... tanto es así que una vez que cambié las memorias (¡¡tenía las 4 mal!!) llegué incluso a poder ejecutar la ROM original de 48K a través del Interface II (sí, si alguien no lo sabía, es posible usar el Interface II y sus cartuchos en un +2A/+3... quitando antes las dos ROM s internas del ordenador ;-) )

Con la ROM de un 48K ejecutándose a través de un cartucho de Interface II, pude cargar (a través del conector CINTA/SONIDO) el King s Valley, que se ejecutó perfectamente, incluso con sonido de 128K.

Imagen

Pero al quitar el interface II y volver a poner las ROM s originales, nada de nada. Pensé entonces que eran las ROM s las que estaban mal, pero no. El Z80 tampoco, así que vuelta a la ULA: con una ROM externa (la del Interface II) funciona, con la suya, no. ¿Qué pasa con las ROM s?

Pues pasa que quien las selecciona es la ULA. Vuelta a la ULA pues.

El fallo de esta ULA, más concretamente, es que uno de sus pines, ROMOE2, aparece como conectado permanentemente a 0 voltios, es decir, cortocircuitado a masa. El chip se calienta mucho, supongo que debido a ese cortocircuito.

Si ese pin está permanentemente a 0 voltios, significa que la ROM B (que contiene las páginas 3 y 4 de la ROM) está permanentemente seleccionada. Cuando se arranca la máquina, ésta intenta paginar la ROM 0, pero entra en conflicto con la ROM 3 que también "aparece" en el bus.

Afortunadamente, he podido encontrar una solución, al menos de compromiso, que permite enseñar este ordenador en Retromallorca, funcionando "con lo mínimo".

Para empezar, tenía que comprobar que el cortocircuito estaba dentro de la propia ULA y que sólo afectaba a ese pin. Para ello, no hubo más remedio que... ¡desoldarlo!

Imagen

El fallo sólo afectaba al pin indicado... Podía probar mi solución. Volví a soldar la ULA usando un binocular de 10 aumentos, hilo fino de estaño, flux, y mucho pulso. Eso sí, me cuidé de aislar el pin "conflictivo":

Imagen

Mi idea es la siguiente: en un Spectrum 128K y +2 gris hay un registro situado en 7FFD que indica, entre otras cosas, cuál de las dos ROM s se va a usar: la ROM 0 o la 1. Esto lo hace con un bit. Si está a 0, se selecciona la ROM 0, y si está a 1, pues la 1. En estas máquinas hay un único chip de ROM de 32KB. Los 16KB primeros son la ROM 0, y los 16KB altos, ROM 1.

En los +2A/+3 hay otro registro, en 1FFD, que proporciona otro bit de selección de la ROM. Con éste y el anterior, tenemos dos bits para seleccionar una de cuatro posibles ROM s.

Para mantener la compatibilidad hardware con el 128K/+2 gris, este bit adicional es el bit de mayor peso de los dos que seleccionan la ROM. El de menor peso sigue estándo en el registro 7FFD.

Es decir, que si el bit de mayor peso vale 0, con el bit que tengo en 7FFD selecciono la ROM 0 o la 1, que están en el chip ROM A.
Si ese bit de mayor peso vale 1, entonces selecciono la ROM 3 ó la 4, ambas en ROM B.

Cuando la máquina se resetea, el bit en 1FFD siempre vale 0, así que si nadie lo toca, con el bit que hay en 7FFD seleccionamos una de las dos ROM s en ROM A. Este comportamiento es el que es común para todas las máquinas de 128K s.

Lo que pasa, y esto es fuente de algunas incompatibilidades, es que el software que hace este tipo de cosas "espera" encontrar la ROM del BASIC en ROM 1, cuando en el +2A/+3, la ROM 1 contiene el chequeador de sintáxis del 128K.

Pero... ¿qué pasaría si en el lugar del chip que ocupa ROM A pongo la ROM de un 128K o un +2 gris? El código en esa ROM no sabe nada del puerto 1FFD, así que sólamente tocaría el puerto 7FFD para seleccionar la ROM 0 ó la 1. Jamás intentaría acceder a la otra ROM... porque cuando se hicieron estas máquinas no existía tal ROM.

La idea es, por tanto, sustituir las dos ROM s originales del +3 por una ROM conteniendo una copia exacta de la ROM del +2 gris español. Esta ROM contiene la ROM 0 (128K) y ROM 1 (48K). Cuando el sistema arranque, lo hará de la ROM 0, y para pasar a la otra ROM, sólo tocará el registro 7FFD, con lo que pasaría a la ROM 1, en el mismo chip. El otro zócalo se quedaría vacío. ¿Funcionará?

Imagen

Pues va a ser que sí :)

Imagen

Claro que no todo es ideal. El +2 gris no sabe nada del +3DOS, ni del hardware de la disquetera, así que, a menos que se cargue algún programa en RAM que use a bajo nivel la disquetera, estará "de adorno".

Alguien se preguntará si sería posible en este entorno ejecutar el CP/M. Pues teóricamente es posible: si un programa se carga de cinta conteniendo el código de bootstrap de CP/M hasta el momento en que se pasa a modo all-RAM (desactivando todas las ROM s), el resto puede botar de la disquetera, ya que CP/M no usa para nada las ROM s de Amstrad. Y el modo all-RAM sigue siendo posible en esta máquina aunque le hayamos hecho un "downgrade" a +2 gris ;-)

Con la máquina ya más... operativa, probé más juegos. Ahora, un peso pesado: Rainbow Islands, en modo 128K. Para cargarlo he usado el ruido que genera el propio emulador Spectaculator cuando carga juegos, porque el intérprete de TZX de Spectaculator respeta los comandos "stop tape".

Imagen

Y a modo de frikada, comprobar que en esta ULA "pocha" la temporización se sigue manteniendo incluso con la temperatura elevada: la Shock Megademo funciona, y las barritas de color coinciden en emulador y máquina real.

Imagen

Contento con el resultado, y aprovechando que en la última visita al laboratorio, cuando soldé de nuevo la ULA, encontré una vieja placa madre de PC con un 80286 en zócalo, resolví aprovechar ese disipador para mejores empresas... (nótese que al principio, cuando terminé el diagnóstico, marqué la ULA como "muerta", con su calavera y sus dos tibias) :-D

Imagen

Parece que lo han hecho para esta ULA. ¡Encaja perfectamente! No soluciona el problema del calentamiento, pero lo mitiga, permitiendo que así esta ULA pueda durar un poquito más de lo que se espera...

Imagen
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
sinclair200
Amstrad CPC 464
Amstrad CPC 464
Mensajes: 56
Registrado: 30 Jun 2014, 01:38
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum +2
consola_favorita: Sega Master System
Primera consola: Sega Game Gear
Gracias recibidas: 2 veces

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor sinclair200 » 20 Oct 2015, 11:31

Joer colega, que envidia me da leer tus post..... =D>

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1027
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor scooter » 20 Oct 2015, 14:00

Ahora te falta rehacer la funcionalidad de esa línea con una gal y volverás a tener un +3.
¡Ánimo que tu puedes con eso y más!

"Sólo" necesitas un biestable y un decodificador (más o menos)

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5280
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 5 veces
Gracias recibidas: 29 veces
Contactar:

Re:

Mensajepor mcleod_ideafix » 20 Oct 2015, 15:44

scooter escribió:Ahora te falta rehacer la funcionalidad de esa línea con una gal y volverás a tener un +3.
¡Ánimo que tu puedes con eso y más!

"Sólo" necesitas un biestable y un decodificador (más o menos)


Eso ya díselo al dueño original de este ordenador. Hace 3 años de esta reparación. Me pregunto si esa ULA sigue viva...
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1027
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor scooter » 20 Oct 2015, 18:54

Esto ha sido reflotar un hilo y lo demás son tonterías

tic
Amiga 1200
Amiga 1200
Mensajes: 1205
Registrado: 24 Sep 2007, 15:34
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: Re:

Mensajepor tic » 24 Oct 2015, 11:01

mcleod_ideafix escribió:
scooter escribió:Ahora te falta rehacer la funcionalidad de esa línea con una gal y volverás a tener un +3.
¡Ánimo que tu puedes con eso y más!

"Sólo" necesitas un biestable y un decodificador (más o menos)


Eso ya díselo al dueño original de este ordenador. Hace 3 años de esta reparación. Me pregunto si esa ULA sigue viva...


Pero bueno y digo yo, teniendo en cuenta las grandes dotes que tienes soldando y desoldando.(yo no seria capaz de desoldar un chip con las patas tan pequeñas ni a la de 3). ¿No habria sido mejor cambiarle la ula por una nueva?. Mas sabiendo que es reparación temporal y la ula esta condenada ya.

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1027
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor scooter » 24 Oct 2015, 11:34

Si, claro. El problema es que, que yo sepa, NO HAY ulas nuevas. Sólo la puedes sacar de otro +3
El día que aparezca en el fondo de un almacén una caja de ulas será la revolución.

tic
Amiga 1200
Amiga 1200
Mensajes: 1205
Registrado: 24 Sep 2007, 15:34
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor tic » 25 Oct 2015, 11:47


Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5280
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 5 veces
Gracias recibidas: 29 veces
Contactar:

Re: Re:

Mensajepor mcleod_ideafix » 25 Oct 2015, 17:24

tic escribió:Pero bueno y digo yo, teniendo en cuenta las grandes dotes que tienes soldando y desoldando.(yo no seria capaz de desoldar un chip con las patas tan pequeñas ni a la de 3). ¿No habria sido mejor cambiarle la ula por una nueva?. Mas sabiendo que es reparación temporal y la ula esta condenada ya.

Hoy en día quizás haya un pequeño stock de ULA's, pero hace 3 años, no. Yo al menos no tenía ninguna de recambio, así que esa opción no era viable.
En ottra ocasión, un poseedor de un +3 estropeado, al diagnosticarle yo que era la ULA, lo que hizo fue darme un +2A completito, con su ULA en buen estado, para que se la quitara y se la pusiera al suyo. No recuerdo si tengo documentada esa reparación por algún sitio, pero sí, pude hacer trasplante de ULA. No es nada fácil, y no porque sean muchas patitas, sino porque la placa de circuito impreso no es de mucha calidad y no soporta bien los ciclos de desoldado y soldado.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

tic
Amiga 1200
Amiga 1200
Mensajes: 1205
Registrado: 24 Sep 2007, 15:34
Gracias dadas: 9 veces
Gracias recibidas: 16 veces

Re: "Downgrade" de un +3 para solucionar un fallo en su ULA

Mensajepor tic » 26 Oct 2015, 11:41

Vaya, yo pensaba que las placas base fabricadas por amstrad eran buenas placas base joe con los de orion. Claro que ahora que lo pienso hace unos años tuve un video keinessel y una tv keneissel(orion vaya). Y eran mas malos que el hambre se murierón solos.


Volver a “Taller”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado