Ampliación interna de 16K para VIC-20

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5269
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: 4 veces
Gracias recibidas: 26 veces
Contactar:

Ampliación interna de 16K para VIC-20

Mensajepor mcleod_ideafix » 04 Feb 2013, 18:34

Adquirí un VIC-20 estropeado. La causa era la ROM, así que después de arreglarlo, querría usarlo para ver algún juego que exprima "toda su salsa", y aquí pasa como con el ZX81 o el Jupiter ACE: que los juegos "chachis" necesitan ampliación de memoria.

Después de mirar por algunos sitios, decidí hacerme mi propia ampliación, ya que lo más "sencillo" que había encontrado necesitaba dos chips de memoria, uno encima de cada ROM. Estaba seguro de que se podría hacer con uno solo, y así ha sido.

Estos son los materiales que necesitamos:

- Un chip de memoria 62256 (32Kx8 bits, como el que monta, por ejemplo, el DivIDE)
- Una resistencia de 470 ohmios (puede ser incluso un poco mayor si no teneis de este valor)
- Dos diodos 1N4148
Imagen

Al chip de memoria, previamente le doblaremos algunos de sus pines para afuera, de la forma en la que se ve en la foto. El resto de los pines los dejaremos bien rectos, ya que serán los que se "agarren" al chip sobre el que va a ir éste.
Imagen

Esta es la idea: poner el chip de RAM literalmente encima de uno de los chips de ROM. Yo he escogido el que tiene el BASIC, ya que el otro, el del KERNAL, va sobre zócalo y es el que he cambiado.
Imagen

Hay que asegurarse de que los pines que quedan doblados hacia afuera, no llegan a tocar los pines de la ROM donde se asienta.
Imagen

Antes de "enchufarlo" de forma definitiva, hay que hacer unas conexiones. Se trata de unir con alambre de cobre los pines que se muestran en la foto. Estos pines corresponden al costado derecho del chip (viéndolo desde arriba, con la muesca apuntando hacia arriba, o bien, si tomamos como referencia la segunda foto, el costado superior)
Imagen

Y ahora sí, lo ponemos encima del chip de la ROM. Los pines que no hemos doblado hacia afuera deben hacer buen contacto con sus homónimos en el chip de la ROM. Si no estamos seguros de que vaya a ser así, habrá que dar una gotita de estaño en los sospechosos.
Fijarse que quedan dos pines a cada lado "colgando" fuera.
Imagen

El mismo chip desde otro ángulo, para que se vea bien lo que digo de que quedan pines "al aire".
Imagen

Cogemos la resistencia y soldamos cada extremo como se ve en la imagen, uniendo los dos cablecitos que están soldados a los pines. Nótese que he dejado más "rabito" en la resistencia en un lado que en otro, porque ahí soldaremos más cosas.
Imagen

Ahora hay que localizar UC5 en la placa del VIC20. Es un decodificador, cuyas salidas indican qué banco de memoria se está intentando usar. Nosotros queremos que nuestra RAM se active cuando se quiera acceder al banco BLK1 o BLK2 (pines 13 y 14 de UC5), así que la idea es formar una puerta AND, cuya salida valdrá 0 cuando cualquiera de los pines BLK1 ó BLK2 valga 0. De eso se encargan los dos diodos y la resistencia.
Los diodos hay que soldarlos con el cátodo mirando al chip (la banda negra) como indica la imagen. Si los soldais al revés, no funcionará el invento.
Imagen

Los otros dos extremos de los diodos se unen entre sí y se sueldan al rabito largo que dejamos de la resistencia. Si queremos evitarnos cortocircuitos indeseados, podemos "enfundar" a los diodos con aislante. Si haceis eso, dejad antes un poco "al aire" el pin 14 de UC5 porque ahí volveremos a soldar algo.
Imagen

Llevamos un cable del pin R/W del 6502 (pin 34)...
Imagen

... al pin 27 de nuestra RAM (pin de escritura). Este pin es el que queda en medio de dos que están unidos por el alambre.
Imagen

Ahora, del pin 14 de UC5 que dejamos un poco al descubierto, soldamos un cable...
Imagen

... que irá al pin 1 de nuestra memoria 62256.
Imagen

¡El último cable! Localizad UC6, y soldar un cablecillo desde su pin 2...
Imagen

... al pin 2 de la memoria 62256.
Imagen

Echad un último repaso a todas las conexiones, y especialmente, a que la RAM esté bien agarrada a la ROM. Yo no he necesitado soldarla, pero sí que le he puesto un puntito de pegamento térmico. Otra solución es poner cinta adhesiva de doble cara uniendo los cuerpos de ambos chips.
Imagen

Si todo va bien, el resultado debería ser éste 19967 bytes libres en lugar de los clásicos 3583.
Imagen


Para poder activar o desactivar esta ampliación a voluntad
Si se requiere por compatibilidad con algún juego se puede hacer de esta forma: en lugar de soldar los dos diodos al rabito de la resistencia, soldarlos un terminal de un interruptor que pondreis en algún sitio accesible. El otro terminal del interruptor se suelda al rabito de la resistencia. Con el interruptor cerrado, el circuito queda tal cual lo he explicado. Con el interruptor abierto, los dos diodos quedan "aislados" de la resistencia y la memoria nunca se activa.

Más cosas sobre el mapeo de memoria en el VIC-20
En el VIC20 hay definidos 8 bloques de memoria, de 8KB cada uno. Se denominan BLK0, BLK1, BLK2, ..., hasta BLK7. Se denominan así por las salidas del decodificador UC5 (74LS138) que es quien determina a cuál de los 8 bloques está accediendo el procesador. Estos 8 bloques son los 64KB de memoria total vista por la CPU.

Los bloques "huecos" que tiene el VIC20 corresponden a los bloques BLK1, BLK2, BLK3 y BLK5 (y como se verá a continuación, una porción de BLK0). Como os podeis imaginar, la memoria base está en BLK0. Este bloque de 8KB se subdivide a su vez en 8 bloques de 1KB cada uno, de los cuales están "ocupados" en el VIC20 base los sub-bloques 0,4,5,6 y 7, que son los 5KB de RAM que lleva el aparato. Los sub-bloques 1,2 y 3 no están usados y (creo) que pueden usarse para expandir el aparato a 8KB: son las señales RAM1, RAM2 y RAM3. Una ampliación de 3KB que use esas tres señales no afecta a la ampliación que he descrito.

La ampliación de 16K propuesta "rellena" los bloques BLK1 y BLK2 (8KB cada bloque). Una ampliación de memoria externa que mapee en estos mismos bloques porque use también las señales BLK1 y BLK2 entrará en conflicto con la ampliación interna, salvo que esa ampliación externa tenga jumpers o microswitches para elegir en qué bloques ha de mapearse. En ese caso, si puede elegirse que se mapee bloques distintos, como por ejemplo BLK3 y/o BLK5, no entrará en conflicto.

Con circuitería extra podría haberse aprovechado un poco más del chip de memoria y rellenar también BLK3. Estos tres bloques son contiguos entre sí, y además son los que siguen de forma natural a BLK0, donde comienza la memoria de usuario. Esto significa que toda la memoria que el BASIC puede ver es la que se le dé en los bloques BLK0, hasta BLK3 inclusive (28159 bytes o 27.5KB). Seguramente, en la próxima ocasión que tenga, le haré un "upgrade" a la ampliación de memoria para que use, al menos, 24 de los 32KB.

El último bloque "hueco" es BLK5, que no es contiguo a los demás. Eso significa que no será visible por el BASIC (pero sí por cualquier programa en C/M). Es también el bloque donde suelen mapearse los cartuchos ROM para VIC20, así que una ampliación de 32KB que se mapeara en todos estos bloques BLK1,2,3 y 5 (factible con el chip que tenemos, añadiendo un poco más de circuitería) entraría en conflicto con practicamente cualquier cartucho ROM o RAM por culpa de este BLK5, a menos que la circuitería permitiera desactivar este u otros bloques a voluntad.

El resto de bloques, hasta completar los 64KB, son los bloques BLK4, donde están mapeados los registros de E/S de los diferentes periféricos del VIC20, BLK6 (ROM BASIC, 8KB) y BLK7 (ROM kernel, 8KB).
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
jltursan
Amiga 2500
Amiga 2500
Mensajes: 3704
Registrado: 13 Oct 2006, 19:45
Sistema Favorito: MSX
primer_sistema: Dragon
Ubicación: Serracines, Madrid, España
Gracias dadas: 4 veces
Gracias recibidas: 39 veces
Contactar:

Re: Ampliación interna de 16K para VIC-20

Mensajepor jltursan » 04 Feb 2013, 21:41

Aquí hay una ampliación muy similar a la que comenta mcleod en la que usando integrados similares creo que consiguen el máximo tamaño posible de memoria (40KB):

RAM expansion for the VIC-20

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 397
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600

Re: Ampliación interna de 16K para VIC-20

Mensajepor wilco2009 » 26 Ene 2014, 23:31

Y si hago la ampliación de 40kb y no se ve desde basic, ¿como puedo saber que está funcionando el Blk5?

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5269
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: 4 veces
Gracias recibidas: 26 veces
Contactar:

Re: Ampliación interna de 16K para VIC-20

Mensajepor mcleod_ideafix » 27 Ene 2014, 00:40

Pues desde un programa en código máquina, o con POKE's y PEEK's
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

rgrocha
Spectrum 48K Plus
Spectrum 48K Plus
Mensajes: 36
Registrado: 19 Ago 2013, 22:00
Sistema Favorito: Commodore Amiga
primer_sistema: Spectrum 16Kb/48Kb
Ubicación: Tenerife
Gracias recibidas: 1 vez

Re: Ampliación interna de 16K para VIC-20

Mensajepor rgrocha » 27 Ene 2014, 01:07

Pero tu no paras!! =D> =D>

Me apunto el mod para mi VIC-20!

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 397
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600

Re: Ampliación interna de 16K para VIC-20

Mensajepor wilco2009 » 27 Ene 2014, 08:37

mcleod_ideafix escribió:Pues desde un programa en código máquina, o con POKE's y PEEK's


OK, pero me faltaba saber las direcciones donde se ubicaba BLK 5.
Ya las he encontrado, gracias. ($a000 - $bfff)

Avatar de Usuario
jotego
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 629
Registrado: 16 Ene 2013, 23:25
Sistema Favorito: Atari ST
primer_sistema: Amstrad CPC
consola_favorita: Sony PlayStation 2
Primera consola: Atari Lynx
Ubicación: Valencia (España)
Gracias dadas: 19 veces
Gracias recibidas: 25 veces

Re: Ampliación interna de 16K para VIC-20

Mensajepor jotego » 27 Ene 2014, 11:28

Has escrito que es una ampliación "interna", ¿Cuál es la forma de hacerla externa? ¿Tiene algún zócalo de expansión?

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5269
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: 4 veces
Gracias recibidas: 26 veces
Contactar:

Re: Ampliación interna de 16K para VIC-20

Mensajepor mcleod_ideafix » 27 Ene 2014, 11:32

jotego escribió:Has escrito que es una ampliación "interna", ¿Cuál es la forma de hacerla externa? ¿Tiene algún zócalo de expansión?

Sí, el VIC-20 tiene un zócalo de expansión donde están todas las señales que se usan en la ampliación. De hecho, el cartucho más común para VIC-20 es aquel que incorpora algún tipo de expansión de RAM.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
wilco2009
MSX Turbo R
MSX Turbo R
Mensajes: 397
Registrado: 29 Ago 2013, 15:48
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: ZX81
consola_favorita: Sega Master System
Primera consola: Atari 2600

Re: Ampliación interna de 16K para VIC-20

Mensajepor wilco2009 » 27 Ene 2014, 12:15

jotego escribió:Has escrito que es una ampliación "interna", ¿Cuál es la forma de hacerla externa? ¿Tiene algún zócalo de expansión?


Aquí tienes un esquema de ampliación externa donde figura el bus de expansión del VIC20.
http://www.baltissen.org/newhtm/memv20.htm


Volver a “Taller”

¿Quién está conectado?

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