
Pues eso, como reza el título voy a contaros cómo he aumentado la capacidad de mi Vic20 hasta el límite máximo posible, 40Kb de RAM.
Lo primero comentaros que he seguido este esquema publicado en la página "Ruud's Commodore site".
Esta es una página que os recomiendo encarecidamente a los amantes de commodore, ya que hay un montón de proyectos hardware para C64 y Vic20.
También quiero dar las gracias a mccleod por su estupendo post sobre la ampliación del vic20 a 16Kb que me ha permitido conocer un poco más la memoria del Vic20.
Para empezar hay que decidirse si se quiere hacer una ampliación interna o externa. A mí me costó decidirme ya que, aunque las ventajas de hacerla interna son muchas, me daba palo modificar mi vic20, violando su arquitectura original.
Por un lado la ampliación interna hace la ampliación más portable, no teniendo que llevar a todas partes una incómoda mochila, además de que así se queda disponible el bus para conectar cartuchos o cualquier otro interface y no es necesario fabricarse un conector edge para el circuito.
Por el lado contrario una ampliación interna te obliga a modificar la carcasa para sacar los microinterruptores que permiten anular la ampliación, además de que hay que meterle mano al vic20 con el soldador y buscar un sistema de anclaje interior para la placa.
Al final me he decidido por la ampliación interna y aquí paso a exponeros los resultados.
Los microinterruptores son necesarios ya que la ampliación de memoria se pega de leches con algunos cartuchos

El Vic20 viene de fábrica con 5Kb de RAM, de los cuales 3583 bytes están disponibles para el usuario, ya que el resto estaba usado para la pantalla y variables del sistema.
La memoria del Vic20 es un poco enrevesada, de hecho pienso que el diseñador del VIC-20 iba cargado de sustancias alucinógenas cuando la diseñó. -507

Resulta que, no acabo de entender bien con que fin, el Vic-20 divide la memoria en huecos de 8Kb numerados como BLK0....BLK7. En total los 64Kb que puede direccionar el 6502, por lo que no se gana mucho dividiendo en bloques la memoria. Al menos no en mi opinión.
Cuando tenemos un Vic20 nuevo de "Trinqui", tenemos vacíos los bloques BLK1, BLK2, BLK3 y BLK5, por lo que sobre estos bloques podemos añadir más RAM.
Por otro lado, se ve que los amigos de Commodore, volvieron a tomarse un tripi a la hora de seleccionar la RAM a poner en su cacharro, porque en lugar de poner 4Kb u 8Kb, dijeron ni pa ti ni pa mi, y pusieron 5 flamantes Kb de RAM en el BLK0, y después de eso se fueron a dormir la mona, descojonandose de todos los que después iban a preguntarse porqué cojones han puestos precisamente 5Kb de RAM en un Vic20.

Las malas lenguas dicen (y esto no es cachondeo) que es que tenían chips de sobra de memoria RAM estática de 1Kbx4bits, por lo que debieron hacer una división de lo que les sobraba por los equipos que querían fabricar y así de inteligentemente debieron de actuar para repartir la memoria. -507 -507
Debido a que pusieron 5 y no 8 Kb, dejaron disponibles 3Kb adicionales más en BLK0, por lo que al final tenemos posibilidad de aumentar en 8*4=32Kb (BLK1..BLK5) + 3Kb en BLK0 35KB, que unidos a los 5Kb que vienen de fábrica se quedan en 40Kb.
Pues bien, como los amigos de Commodore aun no estaban contentos con la cosa, dijeron ¿porqué no la liamos un poco más y hacemos que el CBM basic no pueda acceder a BLK5?.
De esa forma podemos tener hasta 40Kb pero lo máximo a lo que podemos aspirar a que aparezca como disponible en la pantalla inicial es 28259bytes o 27,5Kb.
Bueno, pues una vez contado todo este rollo comenzamos con el tema. Según el esquema de Ruud necesitamos los siguientes componentes:
- 1 placa de prototipos.
- 1 chip de RAM estática de 8K x 8 bits (6264)
- 1 chip de RAM estática de 32K x 8 bits (62256)
- 8 resistencias de 10K (o una red de 8 resistencias)
- 1 chip de 2 puertas AND de 4 entradas (74LS21)
- 1 bloque de 8 microinterruptores
- Algo de cable.
Si observáis el esquema, el bus de direcciones del vic20 solo dispone de 13 líneas, por lo que en principio sólo podemos direccionar 8Kb que corresponde con el tamaño de bloque. El resto lo seleccionamos con las señales BLK1, BLK2, BLK3 y BLK5.
10 /BLK 1 Memory block 1 Chip select for block 1; active-low, if address on bus is within $2000-$3FFF.
11 /BLK 2 Memory block 2 Chip select for block 2; active-low, if address on bus is within $4000-$5FFF.
12 /BLK 3 Memory block 3 Chip select for block 3; active-low, if address on bus is within $6000-$7FFF.
13 /BLK 5 Memory block 5 Chip select for block 5; active-low, if address on bus is within $A000-$BFFF.
El bloque 0 (BLK0) no está presente en el bus, pero aun así pueden aprovecharse los 3Kb que nos faltan por rellenar mediante 3 señales extra (RAM1, RAM2, y RAM3) que permiten acceder a cada bloque de 1Kb de los que tenemos libres en el bloque 0.
14 /RAM 1 RAM 1 Chip select for RAM (memory area $0400 - $07FF)
15 /RAM 2 RAM 2 Chip select for RAM (memory area $0800 - $0BFF)
16 /RAM 3 RAM 3 Chip select for RAM (memory area $0C00 - $0FFF)
Como veis es de locos.

Pues bien, como os he dicho antes usamos dos chips de RAM. El de 32Kb lo usaremos para rellenar los bloques BLK1, 2, 3 y 5 y el de 8Kb lo usaremos para rellenar los 3Kb que nos faltan del bloque 0.
Adicionalmente necesitaremos un chip de puertas AND para gestionar las señales de control de acceso a memoria y un bloque de 8 microswitches para permitirnos desactivar o activar cada bloque de memoria por razones de compatibilidad.
Empezaremos soldando zócalos y demás componentes.
Seguiremos soldando la maraña de cables correspondiente, siguiendo el esquema y comprobando con el polímetro todo el cableado para asegurarnos que está OK.
Metemos los chips en sus correspondientes zócalos:
Y pasamos a abrir el Vic20.
Como podéis ver la caja está medio vacía, por lo que tenemos sitio de sobra para colocar la placa.
El acceso al bus también es bastante sencillo, por lo que podremos soldar sin problemas.
Este podría se un buen sitio para colocar la placa, por lo que después de interponer un trozo de material aislante para evitar problemas, pasamos a fijarlo con adhesivo "Muntack".
Para llevar las señales hasta el bus necesitaremos un cable plano de 44 hilos. Como no tengo ninguno de tantos hilos he utilizado dos trozos.
Soldamos todos los cables......
Y antes de cerrar la caja pasamos a probar, dejando los 8 switches en on.
Eureka!!!.

NOTA: jejeje, es lo que tiene hacer las cosas en diferido, os he ahorrado ni se sabe la de repasos a la placa -507 -507
Para comprobar que también funciona BLK5 echaremos mano de algunos POKES y PEEKS a las direcciones de memoria donde debería de estar la RAM.
Disculpad el cambio de método de visualización pero es que mi PC lo tenía ocupado mi hijo con sus deberes. jejejeje -507
Como podéis comprobar hago un poke en dos posiciones de memoria correspondientes a BLK5 y al hacer un PEEK a sus correspondientes posiciones de memoria leo los mismos valores, por lo que también funciona dicho bloque.

Llegados a este punto hay una cosa que debo cambiar en el circuito, y es que he soldado los microswitches a la placa y debería haberlos sacado fuera para dejarlos accesibles, por lo que los desueldo y con la ayuda de otro cable plano de 16 hilos los saco fuera de la caja.
Cerramos la caja y a disfrutar de la nueva memoria de nuestro queridisimo ordenador.
