Recambio de la PLA para un Commodore 64

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5270
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: 26 veces
Contactar:

Recambio de la PLA para un Commodore 64

Mensajepor mcleod_ideafix » 11 Jul 2013, 23:12

Advertencia preliminar: este artículo se basa en proyectos ya existentes no creados por el autor. Me he limitado a "completar los huecos", crear y poner a disposición de quien lo necesite toda la información (esquemáticos, ficheros de grabación, etc) para que cualquiera pueda hacerse su recambio de PLA.

El Commodore 64 "panera" anterior a la revisión C de su placa de circuito impreso es un ordenador un tanto delicadito. Los chips más importantes de este equipo, y precisamente los más difíciles de encontrar por ser custom, están fabricados con tecnología NMOS. Sea como fuere, es una tecnología que tiene la mala costumbre de disipar mucho calor en el interior del chip.

Antes de seguir, es conveniente que sepas si tu C64 necesita este recambio o no. Para ello, si al abrirlo te encuentras con un chip como este (destaca sobre los demás porque sus patitas están más juntas de lo habitual: compáralo con la separación de las patitas de la CPU que se encuentra en la imagen a su izquierda)...

Imagen

... entonces no tienes una PLA "delicadita". Esta otra se calienta mucho menos y es menos probable que esté estropeada. La mala noticia es que, en caso de que lo estuviera, su reemplazo es más complicado. En este caso, recomiendo contactar con Frank Buß. En su página web describe un reemplazo para este tipo de PLA, usando una CPLD más grandecita que la que nosotros usaremos en este taller.

Para empezar, si tienes un C64 funcional, lo mejor que puedes hacer por él, antes de que sea tarde, es darle ventilación y favorecer la disipación de calor de los chips que más se calientan. Estos son: el SID, la CPU, las ROM's, la CIA... y el que nos ocupa: la PLA. Este tema de la disipación ha sido tratado en otros hilos así que no hablaré más sobre ello.

La PLA (Programmable Logic Array) es una de las tantas encarnaciones de chips configurables en fábrica o por el usuario (como las PAL, PLD, ULA, GAL, CPLD, etc). Se encarga de aglutinar en ella las funciones de varios chips estándar (al estilo de lo que hace el PFC1306 en las últimas revisiones del Spectrum 48K/Plus/128K/+2 gris) y es responsable entre otras cosas, del mapeado de la ROM y la RAM. He encontrado un documento bastante exhaustivo de lo que es, cómo es, qué tiene dentro, y algo curioso: por qué se calienta tanto así que tampoco me explayaré aquí sobre esto.

En el documento se dice que por la forma en la que está hecha (algunas versiones) este chip es el candidato más plausbile a fallar, y es el primer candidato a repasar si nos encontramos con un C64 que no funciona. Al ser un chip que hace muchas tareas con otros chips del C64 (aunque todas ellas son bastante sencilla), su fallo hace que la máquina no funcione en absoluto, o si tenemos la suerte de verla arrancar, se comporte de forma errática. Lo habitual es que un C64 con fallo en la PLA no muestre imagen ni sonido, como si estuviera completamente muerto.

Este chip, como os imaginareis, ya no se fabrica, aunque de vez en cuando se ven por eBay algunas unidades sueltas de esta PLA "virgen" para ser grabada por el usuario. Aun así, por el referido tema del calentamiento, es preferible una solución a largo plazo, que no nos dé más problemas en este sentido.

Buscando, he encontrado dos formas de sustituir la PLA: usando una EPROM y usando una CPLD.

PLA con EPROM de 64K x 8 (método de Ray Carlsen)

Se describe escuetamente en una serie de ficheros en su página web. La idea es que cualquier circuito combinacional puede ser implementado mediante una ROM, que contendría dentro la tabla de verdad de dicho circuito. En el caso de la PLA, es un circuito que tiene 16 entradas y 8 salidas. No hay realimentaciones ni registros, así que es puramente combinacional. Bajo estas premisas, puede ser implementado por una ROM que tenga 16 bits en el bus de direcciones y 8 bits en el bus datos, o sea, una ROM de 64KB.

Mi versión de dicha implementación es la siguiente: una pequeña plaquita de simple cara que aloja un zócalo para una EEPROM 27C512, y dos tiras de pines que hacen la función de pines de la PLA. Usando el mismo diagrama que publica Ray Carlsen...
Imagen

... he rutado en la placa los pines de la EEPROM a los correspondientes de la PLA. Dos de ellos, el 1 y el 19, no se usan realmente, así que se dejan sin conectar. Este es el esquemático. Más simple imposible: rutar pines de un zócalo al otro:
Imagen

Y esta, la plaquita. Las pistas en rojo significan que cuando se fabrique esta placa, las pistas no deben pintarse "en espejo" como suele ser lo habitual en las placas de simple cara, sino que se imprimirán en el cobre tal cuál se ven.
Imagen

Una vez hecha y con los agujeritos para las dos tiras de pines y el zócalo ya hechos, queda así (del zócalo no usaremos todos los agujeros para evitar tener que usar vías y placas de doble cara)
Imagen

Un detalle de la placa ya montada. Las pistas que van de EEPROM a PLA y que son directas (una al lado de la otra) las hago lo suficientemente anchas como para que al poner el zócalo, doble los pines del mismo hacia afuera y lo suelde encima de la misma pista, en lugar de hacerlos pasar por el agujerito correspondiente. Esto es, sueldo el zócalo como si fuera un componente de montaje superficial.
Imagen

La EEPROM que he usado es, como decía, una Winbond 27C512. La marca quizás es lo de menos. Lo importante es la velocidad de acceso. Según el documento de la PLA ya referido, ésta tiene unos tiempos de propagación máximos de 50ns, así que sería conveniente usar una EEPROM que tuviera esos tiempos, o menores. Yo he usado una EEPROM de 45ns de tiempo de acceso. Como vereis después, con relativo éxito. El sistema arranca y es usable. No se cuelga ni se resetea.
Imagen

Pero algo no debe andar bien con los accesos a la RAM de color, porque aparece basura. No me he puesto a mirar qué provoca esto, pero por la naturaleza de esta "basura" da a entender que se producen ciclos de escritura a la RAM de color cuando no deberían producirse. La PLA genera la señal GRW que es precisamente la que controla la escritura en la RAM de color, así que tendré que mirar qué pasa ahí. Si dejo pasar un tiempo, por ejemplo, lo que tarda en cargarse Cybernoid, veo cosas como ésta:
Imagen

Para los interesados, pongo a disposición el esquemático y placa en formato Eagle, y el fichero de 64KB que hay que grabar en la EEPROM.

PLA con CPLD (método de xAD/Nightfall y FPGAArcade)

Bueno, pues esta primera aproximación a la PLA es lo que hice hace ya un tiempo. Resulta que buscando otras cosas, encontré esta otra página, donde xAD / Nightfall presenta un diseño de reemplazo de PLA pero esta vez basado en una pequeña CPLD, la XC9536 que es la más pequeña de las que fabrica(ba) Xilinx. Digo fabricaba porque la versión de 5V está ya descatalogada. Probablemente funcione igual de bien con la versión XL, de 3,3V .

En la página, sin embargo, no encontré ninguna información adicional: ni ficheros, ni código en VHDL o Verilog para la CPLD, ni esquemáticos ni placa. Sí que pude ver que en la página de FPGAArcade discutían de varias alternativas (basicamente las mismas que estamos debatiendo aquí) para implementar la PLA. Ellos de hecho venden un módulo que es enteramente idéntico al que ha hecho xAD/Nightfall, pero el de ellos está basado en una CPLD de la serie MAX7000 de Altera, también a 5V.

Decía que no había encontrado esquemáticos ni nada en la página de xAD. Por fortuna, las fotos de la plaquita tenían suficiente resolución como para poder copiar el diseño de las pistas. Al ser también un circuito de simple cara, sólo tuve que "adivinar" qué pistas habría por debajo de la CPLD, así que decidí hacer una versión de ese circuito. El esquemático que dibujé fue éste:
Imagen

La placa, de simple cara y también preparada para ser impresa en cobre sin hacer espejo, es ésta:
Imagen

Lo que llevó, después de fabricarla, a que quedara tal que así:
Imagen

Una vez soldada la CPLD, el pequeño condensador, y las dos tiras de pines que hacen de patitas de la PLA...
Imagen

Practicamente idéntica a la de xAD/Nightfall, mostrada a continuación. A la mía simplemente le añadí un pequeño condensador de desacoplo.
Imagen

Esta plaquita se graba poniéndola en el zócalo de la PLA y dando alimentación. Por supuesto, cuando esto ocurre, el Commodore 64 que aloja a esta PLA aparece "muerto". Para configurarla tengo que soldar unos cables finos desde 6 puntos concretos de la placa...
Imagen

...hacia el programador JTAG
Imagen

Es curioso observar cómo el Commodore 64 parece muertecito. Entonces coges y programas la CPLD. La barra de desplazamiento del software del programador va avanzando 2%, 10%, 15%, ..., 50%, 75%, 90%, Finished! y cuando eso ocurre, al cabo de un par de segundos, el C64 vuelve a la vida :)
Imagen

A diferencia de lo que me pasó con la versión basada en EEPROM, con la CPLD no he tenido problemas extraños con la RAM de color. Hay que tener en cuenta que con la CPLD tienes muchos más parámetros que ajustar, y todo eso influye en cómo se comporta el circuito al final: puedes elegir que las señales hagan transiciones rápidas o lentas (Slew rate fast o slow), dejar los pines no conectados a 0V, etc. Y sin olvidar que esta CPLD, para el circuito cargado, tiene un retardo de propagación de señales máximo de 5,8ns. Esto es, casi 8 veces más rápido que la EEPROM. Pude cargar y jugar sin ruidos en la pantalla al Cybernoid:
Imagen

Como en el caso anterior, pongo a disposición los esquemáticos y la plaquita de simple cara en formato Eagle, más el fichero JED que hay que grabar en la CPLD XC9536-VQ44.

Añadido: código fuente de la descripción de la PLA:

Código: Seleccionar todo

----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date:    03:24:43 07/11/2013
-- Design Name:
-- Module Name:    c64_pla - Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity pla_c64 is

  port (
    pe_i       : in  std_logic;         -- pin  1
    a13_i      : in  std_logic;         -- pin  2
    a14_i      : in  std_logic;         -- pin  3
    a15_i      : in  std_logic;         -- pin  4
    va14_n_i   : in  std_logic;         -- pin  5
    charen_n_i : in  std_logic;         -- pin  6
    hiram_n_i  : in  std_logic;         -- pin  7
    loram_n_i  : in  std_logic;         -- pin  8
    cas_n_i    : in  std_logic;         -- pin  9
    romh_n_o   : out std_logic;         -- pin 10
    roml_n_o   : out std_logic;         -- pin 11
    io_n_o     : out std_logic;         -- pin 12
    grw_n_o    : out std_logic;         -- pin 13
    charom_n_o : out std_logic;         -- pin 15
    kernal_n_o : out std_logic;         -- pin 16
    basic_n_o  : out std_logic;         -- pin 17
    casram_n_o : out std_logic;         -- pin 18
    oe_n_i     : in  std_logic;         -- pin 19
    va12_i     : in  std_logic;         -- pin 20
    va13_i     : in  std_logic;         -- pin 21
    game_n_i   : in  std_logic;         -- pin 22
    exrom_n_i  : in  std_logic;         -- pin 23
    rw_n_i     : in  std_logic;         -- pin 24
    aec_n_i    : in  std_logic;         -- pin 25
    ba_i       : in  std_logic;         -- pin 26
    a12_i      : in  std_logic          -- pin 27
  );

end pla_c64;

architecture equ of pla_c64 is

  signal roml_n_s, romh_n_s,
         io_n_s,
         grw_n_s,
         charom_n_s,
         kernal_n_s,
         basic_n_s,
         casram_n_s           : std_logic;

begin

  roml_n_s <= not (
    (loram_n_i and hiram_n_i and a15_i and not a14_i and not a13_i and not aec_n_i and rw_n_i and not exrom_n_i) or
    (a15_i and not a14_i and not a13_i and not aec_n_i and exrom_n_i and not game_n_i)
  );

  romh_n_s <= not (
    (hiram_n_i and a15_i and not a14_i and a13_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (a15_i and a14_i and a13_i and not aec_n_i and exrom_n_i and not game_n_i) or
    (aec_n_i and exrom_n_i and not game_n_i and va13_i and va12_i)
  );

  io_n_s <= not (
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and not exrom_n_i and not game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and not exrom_n_i and not game_n_i) or
    (a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and exrom_n_i and not game_n_i) or
    (a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and exrom_n_i and not game_n_i)
  );

  grw_n_s <= not (
    (not cas_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i)
  );

  charom_n_s <= not (
    (hiram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and game_n_i) or
    (loram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (va14_n_i and aec_n_i and game_n_i and not va13_i and va12_i) or
    (va14_n_i and aec_n_i and not exrom_n_i and not game_n_i and not va13_i and va12_i)
  );

  kernal_n_s <= not (
    (hiram_n_i and a15_i and a14_i and a13_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and a15_i and a14_i and a13_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i)
  );

  basic_n_s <= not (
    (loram_n_i and hiram_n_i and a15_i and not a14_i and a13_i and not aec_n_i and rw_n_i and game_n_i)
  );

  casram_n_s <= (
    (loram_n_i and hiram_n_i and a15_i and not a14_i and a13_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and a15_i and a14_i and a13_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and a15_i and a14_i and a13_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (hiram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and game_n_i) or
    (loram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and not charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (va14_n_i and aec_n_i and game_n_i and not va13_i and va12_i) or
    (va14_n_i and aec_n_i and not exrom_n_i and not game_n_i and not va13_i and va12_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (hiram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and not exrom_n_i and not game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (loram_n_i and charen_n_i and a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and not exrom_n_i and not game_n_i) or
    (a15_i and a14_i and not a13_i and a12_i and ba_i and not aec_n_i and rw_n_i and exrom_n_i and not game_n_i) or
    (a15_i and a14_i and not a13_i and a12_i and not aec_n_i and not rw_n_i and exrom_n_i and not game_n_i) or
    (loram_n_i and hiram_n_i and a15_i and not a14_i and not a13_i and not aec_n_i and rw_n_i and not exrom_n_i) or
    (a15_i and not a14_i and not a13_i and not aec_n_i and exrom_n_i and not game_n_i) or
    (hiram_n_i and a15_i and not a14_i and a13_i and not aec_n_i and rw_n_i and not exrom_n_i and not game_n_i) or
    (a15_i and a14_i and a13_i and not aec_n_i and exrom_n_i and not game_n_i) or
    (aec_n_i and exrom_n_i and not game_n_i and va13_i and va12_i) or
    (not a15_i and not a14_i and a12_i and exrom_n_i and not game_n_i) or
    (not a15_i and not a14_i and a13_i and exrom_n_i and not game_n_i) or
    (not a15_i and a14_i and exrom_n_i and not game_n_i) or
    (a15_i and not a14_i and a13_i and exrom_n_i and not game_n_i) or
    (a15_i and a14_i and not a13_i and not a12_i and exrom_n_i and not game_n_i) or
    (cas_n_i)
  );


  -----------------------------------------------------------------------------
  -- Output enables
  -----------------------------------------------------------------------------
  roml_n_o   <= roml_n_s   when oe_n_i = '0' else 'Z';
  romh_n_o   <= romh_n_s   when oe_n_i = '0' else 'Z';
  io_n_o     <= io_n_s     when oe_n_i = '0' else 'Z';
  grw_n_o    <= grw_n_s    when oe_n_i = '0' else 'Z';
  charom_n_o <= charom_n_s when oe_n_i = '0' else 'Z';
  kernal_n_o <= kernal_n_s when oe_n_i = '0' else 'Z';
  basic_n_o  <= basic_n_s  when oe_n_i = '0' else 'Z';
  casram_n_o <= casram_n_s when oe_n_i = '0' else 'Z';

end;
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: Recambio de la PLA para un Commodore 64

Mensajepor scooter » 12 Jul 2013, 00:41

¡Muy bueno!
Recuerdo la diferencia de "calefacción central" a "polo norte" cuando pasé del c64 al c128.

Ánimo ahora a hacer un VICII+, ya que estás con la ULA+ lo tienes "chupao" :lol: ;)
ya sabes, lo normal, con resolución vga a 256 colores y salida hdmi es suficiente. :mrgreen: :mrgreen:

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5270
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: 26 veces
Contactar:

Re: Recambio de la PLA para un Commodore 64

Mensajepor mcleod_ideafix » 12 Jul 2013, 00:44

scooter escribió:¡Muy bueno!
Recuerdo la diferencia de "calefacción central" a "polo norte" cuando pasé del c64 al c128.

Ánimo ahora a hacer un VICII+, ya que estás con la ULA+ lo tienes "chupao" :lol: ;)
ya sabes, lo normal, con resolución vga a 256 colores y salida hdmi es suficiente. :mrgreen: :mrgreen:


Necesitaría tener mucho más dominio del C64 de lo que tengo, como para siquiera empezar a pensar en hacer un recambio del VIC-II. Como mínimo, el mismo dominio que tengo del Spectrum, y eso me llevó unos cuántos años...
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: Recambio de la PLA para un Commodore 64

Mensajepor scooter » 12 Jul 2013, 00:52

Bromas aparte se ve que hay un VIC III hecho en una fpga en ep proyecto c-one, lo que no tengo ni idea es si quedó como código abierto, abandonado o que.
http://c64upgra.de/c-one/
http://en.wikipedia.org/wiki/C-One

Edito. ¡¡No había leido tu firma!! ¡¡¡Me parto!!! <XX <XX <XX <XX

Avatar de Usuario
josepzin
Amiga 2500
Amiga 2500
Mensajes: 2741
Registrado: 12 Ene 2009, 14:36
Sistema Favorito: C64
primer_sistema: ZX81
Ubicación: Carthagonova
Gracias dadas: 1 vez
Gracias recibidas: 7 veces
Contactar:

Re: Recambio de la PLA para un Commodore 64

Mensajepor josepzin » 12 Jul 2013, 05:41

Apenas tenga mis C64 a mano voy a abrirlos y ver que tienen dentro, y además refrigerar esos chips!

Avatar de Usuario
marcos64
Amiga 1200
Amiga 1200
Mensajes: 1162
Registrado: 03 Sep 2011, 07:53
Gracias dadas: 4 veces
Gracias recibidas: 14 veces

Re: Recambio de la PLA para un Commodore 64

Mensajepor marcos64 » 12 Jul 2013, 15:41

La prueba de fuego de todos los sustitutos de la PLA es al utilizar cartuchos en el puerto de expansion. Con REUs, Action Replays, 1541Ultimate y muchos otros es donde mas problemas aparecen.

scooter escribió:Recuerdo la diferencia de "calefacción central" a "polo norte" cuando pasé del c64 al c128.


Pues el 128 se calienta bastante mas que el C64, solo hay que ver la diferencia en la fuente de alimentacion. Otra cosa es que al ser mucho mas grande disipe mejor ese calor.
http://marcos64.orgfree.com/
Actualizacion 11/6/2015: Añadida Load'N'Run numero 3.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5270
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: 26 veces
Contactar:

Re: Recambio de la PLA para un Commodore 64

Mensajepor mcleod_ideafix » 12 Jul 2013, 15:54

marcos64 escribió:La prueba de fuego de todos los sustitutos de la PLA es al utilizar cartuchos en el puerto de expansion. Con REUs, Action Replays, 1541Ultimate y muchos otros es donde mas problemas aparecen.

Sí. De hecho en el documento este que he leído sobre las interioridades de la PLA se presenta otro reemplazo un poco más sofisticado que el que he hecho, y que intenta acercarse lo más posible a los tiempos de propagación de señales de una PLA original. El autor dice precisamente que lo ha probado en más de 20 placas de C64, incluidas las KU, que por lo visto son las más puñeteras en cuanto a timmings, y también habla de la incompatibilidad de muchos reemplazos de PLA cuando se pinchan cosas por el slot de expansión.

Yo no tengo cartuchos sofisticados... si acaso un cartucho de un juego, y un cartucho casero (no lo hice yo) con algo que parece ser un Action Replay (el cartucho es negro, sin ninguna identificación, y con dos botones rojos. La placa de circuito impreso tampoco tiene identificación). Probaré el reemplazo de la PLA con CPLD con estos dos cartuchos, a ver si detecto problemas. ¡¡Gracias por el apunte!!
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

jepalza

Re: Recambio de la PLA para un Commodore 64

Mensajepor jepalza » 12 Jul 2013, 18:49

Calidad donde la haya: estupendo Mcleod_Ideafix, así da gusto =D>

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

Re: Recambio de la PLA para un Commodore 64

Mensajepor scooter » 12 Jul 2013, 21:57

La del 128 si que era un tochazo; el chip mas grande de todos y se quedó corto. De hecho tiene los registros para 256kB pero no los pines :lol:

Avatar de Usuario
zitror
Amiga 2500
Amiga 2500
Mensajes: 5271
Registrado: 02 Jul 2006, 00:16
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
Ubicación: El interior de un Z80
Gracias dadas: 160 veces
Gracias recibidas: 66 veces
Contactar:

Re: Recambio de la PLA para un Commodore 64

Mensajepor zitror » 14 Jul 2013, 20:04

¡Genial McLeod, como siempre! :D
(C) 1.982 Sinclair Research Ltd

La buhardilla de Zitror


Volver a “Taller”

¿Quién está conectado?

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