SIMM's en un 48K o la importancia de tener una ULA fresquita
Publicado: Mar Dic 04, 2007 11:04 pm
Iba a llamar a este post de otra forma, pero la última cosa que probé en este experimento que detallo, me hizo cambiar de opinión (ea! ya lo he vuelto a cambiar).
La cosa comienza después de haber departido con fulas sobre sustituir la RAM del Spectrum con memoria estática "moderna", más fácil de encontrar.
Pues bien, el otro día un compañero de trabajo me dio unas cuantas placas madres de PC, y entre ellas, dos que estaban repletas de chips 41256. Este experimento no tiene nada que ver con estos chips, aunque adelanto que también los he probado con bastante éxito.
Una de las placas llevaba ranuras SIMM de 30 contactos, y entonces me acordé de un experimento que alguien de la scene de MSX hizo, cambiando la memoria de un MSX por un módulo SIMM, soldando directamente desde los contactos del módulo a ciertos puntos de la placa base del MSX.
La discursión con fulas, y mi reciente experimento con los 41256 me llevó a mirar un poco más cómo interaccionan estas memorias con el Spectrum, y vi que claramente se podría usar un módulo SIMM de 30 contactos para reemplazar un banco completo, al menos en teoría.
Así que desoldé unos cuantos zócalos SIMM, y me aseguré una buena cantidad de módulos SIMM.
El resultado fue éste:
Un módulo SIMM, que conecté directamente a los pines de los zócalos de memoria, sin ninguna glue-logic de por medio.
Al enchufar el Spectrum, el resultado fue éste:
Parece que todo iba bien. Sin embargo, al minuto o dos de estar trasteando, comencé a ver "basurilla" en la pantalla:
A medida que pasaba el tiempo, la "basurilla" era ya algo evidente y que empezaba a volver loco a todo el ordenador.
Con la pantalla en negro para que se aprecie mejor, y dejando pasar toda vía más tiempo, la cosa tomó este cariz:
Pensaba que era el módulo de memoria, que estaba mal. Probé con otro y lo mismo, y con otro y lo mismo. Lo más curioso es que esto pasaba no desde el primer momento, sino cuando ya llevaba tiempo el ordenador encendido.
¿El calentamiento de la ULA provoca esto? Para verificarlo, esperé a que el Spectrum con su módulo SIMM estuviera echando rayas por la pantalla a mansalva. Puse el dedo encima de la ULA para absorber algo de calor y... esto fue lo que pasó
El hecho de que la basura aparezca una columna sí, una no, tiene su por qué. Fijaos que sólo hay basura en las posiciones impares de columna (comenzando por la columna 0 donde está el cursor). Los ciclos de lectura de memoria de la ULA son de tal forma que hay cuatro lecturas de memoria seguidas (dos ciclos de RAS y en cada uno, dos ciclos de CAS: se usa el modo página de las DRAM). Es posible que el modo página no funcione correctamente (por causa de la memoria, o por causa del cableado que estoy usando, que no respeta el orden del bus de direcciones) y que lea bien la primera ráfaga de dos bytes, pero no la segunda. Desde luego, tengo que rehacer este invento pero con una placa de circuito de verdad y respetando el orden de los bits del bus de direcciones, pero no deja de ser curioso que el efecto se atenúe cuando se enfría la ULA.
Otra explicación es que realmente haya temporizaciones en la ULA que varíen con la temperatura. Cuando la ULA "habla" con memorias más lentas (de 120 y 200 ns), las pequeñas diferencias de tiempo son amortiguadas por la relativa lentitud de estas memorias, pero cuando la ULA se encuentra con una memoria rápida, es posible que esos defectos de temporización salten a la vista.
La cosa no sería muy grave si no fuera porque es que ASI no hay quien pueda echar una partida al Astro 2008
La cosa comienza después de haber departido con fulas sobre sustituir la RAM del Spectrum con memoria estática "moderna", más fácil de encontrar.
Pues bien, el otro día un compañero de trabajo me dio unas cuantas placas madres de PC, y entre ellas, dos que estaban repletas de chips 41256. Este experimento no tiene nada que ver con estos chips, aunque adelanto que también los he probado con bastante éxito.
Una de las placas llevaba ranuras SIMM de 30 contactos, y entonces me acordé de un experimento que alguien de la scene de MSX hizo, cambiando la memoria de un MSX por un módulo SIMM, soldando directamente desde los contactos del módulo a ciertos puntos de la placa base del MSX.
La discursión con fulas, y mi reciente experimento con los 41256 me llevó a mirar un poco más cómo interaccionan estas memorias con el Spectrum, y vi que claramente se podría usar un módulo SIMM de 30 contactos para reemplazar un banco completo, al menos en teoría.
Así que desoldé unos cuantos zócalos SIMM, y me aseguré una buena cantidad de módulos SIMM.
El resultado fue éste:
Un módulo SIMM, que conecté directamente a los pines de los zócalos de memoria, sin ninguna glue-logic de por medio.
Al enchufar el Spectrum, el resultado fue éste:
Parece que todo iba bien. Sin embargo, al minuto o dos de estar trasteando, comencé a ver "basurilla" en la pantalla:
A medida que pasaba el tiempo, la "basurilla" era ya algo evidente y que empezaba a volver loco a todo el ordenador.
Con la pantalla en negro para que se aprecie mejor, y dejando pasar toda vía más tiempo, la cosa tomó este cariz:
Pensaba que era el módulo de memoria, que estaba mal. Probé con otro y lo mismo, y con otro y lo mismo. Lo más curioso es que esto pasaba no desde el primer momento, sino cuando ya llevaba tiempo el ordenador encendido.
¿El calentamiento de la ULA provoca esto? Para verificarlo, esperé a que el Spectrum con su módulo SIMM estuviera echando rayas por la pantalla a mansalva. Puse el dedo encima de la ULA para absorber algo de calor y... esto fue lo que pasó
El hecho de que la basura aparezca una columna sí, una no, tiene su por qué. Fijaos que sólo hay basura en las posiciones impares de columna (comenzando por la columna 0 donde está el cursor). Los ciclos de lectura de memoria de la ULA son de tal forma que hay cuatro lecturas de memoria seguidas (dos ciclos de RAS y en cada uno, dos ciclos de CAS: se usa el modo página de las DRAM). Es posible que el modo página no funcione correctamente (por causa de la memoria, o por causa del cableado que estoy usando, que no respeta el orden del bus de direcciones) y que lea bien la primera ráfaga de dos bytes, pero no la segunda. Desde luego, tengo que rehacer este invento pero con una placa de circuito de verdad y respetando el orden de los bits del bus de direcciones, pero no deja de ser curioso que el efecto se atenúe cuando se enfría la ULA.
Otra explicación es que realmente haya temporizaciones en la ULA que varíen con la temperatura. Cuando la ULA "habla" con memorias más lentas (de 120 y 200 ns), las pequeñas diferencias de tiempo son amortiguadas por la relativa lentitud de estas memorias, pero cuando la ULA se encuentra con una memoria rápida, es posible que esos defectos de temporización salten a la vista.
La cosa no sería muy grave si no fuera porque es que ASI no hay quien pueda echar una partida al Astro 2008