
Quiero compartir con vosotros un proyecto que tenemos en marcha en va-de-retro y que ahora mismo tenemos en fase de lanzar el prototipo.
El proyecto sólo lo hemos lanzado en va-de-retro, retrowiki y ahora aquí.
Dicho proyecto consistiría en fabricar un interface conectable al bus del Spectrum que convirtiera un Spectrum 16/48Kb en lo más parecido posible a un Spectrum +3.
En el caso de un Spectrum 16Kb no habría que tocar el Spectrum para nada, limitándonos a insertar el interface para empezar a disfrutar de las nuevas características.
En el caso de un Spectrum 48Kb habría que hacer una pequeña modificación interna para deshabilitar la RAM alta del Spectrum, osea convertirlo en un 16Kb. Que no os asuste esto, ya que se trata de un simple puente.
Las características que va a tener el interface son las siguientes:
- Ampliación a 128Kb o 512Kb de RAM, dependiendo del chip que se compre.
- 2 conexiones de joystick multinorma (Kempston/Sinclair, Cursor)
- Botón de Reset
- Botón de NMI
- Incorporación de las ROMs del proyecto +3e para poder conectar un interface IDE.
- Chip de sonido AY.
- Entrada de audio para mezclar el sonido del speaker con el del AY.
- Salida de video compuesto.
- Expansor de bus.
Como podéis ver le queda muy poquito para convertirlo en un +3.
La idea es que funcionen todos los juegos de 128Kb que no necesiten acceso a floppy y que no usen los modos de Shadow RAM (realmente muy pocos).
Si incorporamos un interface IDE o un divIDE, podríamos ejecutar también los juegos de disco.
Con la ampliación a 512Kb es de esperar que puedan ejecutarse algunos juegos de los clones rusos tipo Pentagon.
Las placas son de 10x10 y no llevan ningún componente SMD, por lo que pueden ser montadas por cualquiera que tenga un soldador y ganas. No hace falta ser un experto.
Como primer paso vamos a hacer un lote de 30 placas que servirán de prototipo, para corregir los errores que pudieran haber, por lo que los que estéis interesados en formar parte de este primer lote de 30 os podéis apuntar aquí.
El precio calculado rondará aproximadamente los 20€, aunque esto no lo sabremos hasta que no tengamos precios definitivos de los componentes y de las placas.
He realizado un prototipo parcial con placas de prototipo para probar el interface de joystick, la RAM y la ROM y después de algunas correcciones, aparentemente todo funciona como se esperaba.
De momento están apuntados los siguientes nombres procedentes de Va-de-retro y Retrowiki:
Sinclair
Flopping x 2
Wilco2009
Antoniovillena
Mikes
Tacha
Kripton67
Izaro
dancresp
Jltursan
Ron
Vidamia
stratotrasto
fermars
zx4ever
kikems
Nandove
garillete
drachco
va-de-retro
leander (dos kits)
jgilcas (dos kits)
Telekita
agusti
JULIO
Cdvazquez
Quedan 0 disponibles.

Seguidamente os dejo la info del proyecto (si queréis ver las imágenes mejor si las abrís en una pestaña nueva):
Placa

Esquema

Archivos de la placa en formato jpg e eagle además de un listado de componentes:
https://drive.google.com/file/d/0B69T2l ... sp=sharing
Como la idea es probablemente lanzar un concurso de programación para juegos de 512Kb, aquí os dejo también algo de información técnica de ayuda para programar el interface.
Para la selección de las páginas de ROM y RAM en los Spectrum de 128Kb se utilizan los puertos $7FFD (32765) y $1FFD (8189).
El cambio de página de ROM o RAM se realiza pasando el valor adecuado al puerto correspondiente mediante un OUT, teniendo en cuenta que cada bit de dicho valor tiene el siguiente significado:
Puerto $7FFD
- Los Bits 0..2 componen un número de 3 bits que nos permite seleccionar una página de entre las 8 posibles de la RAM del 128Kb.
- El bit 3 está relacionado con la shadow RAM y permite seleccionar la pantalla que se va a visualizar. Tener el bit 3 a 0 le dirá a la ULA que se muestre la pantalla convencional, mientras que si está a 1 significará que se muestre la Shadow RAM. Esta característica no está soportada en el interface.
- El bit 4 permitirá seleccionar entre las dos ROMs posibles en el Spectrum 128K y el +2 gris. Estando a 1 se selecciona la ROM del 48Kb y a 0 la del 128Kb.
En el caso de los +2A/+3 se tendrá en cuenta también otro bit que veremos luego formando entre los dos un número de 2 bits que nos permitirá seleccionar una de las 4 ROMs disponibles.
- El bit 5 nos permitirá deshabilitar el paginado.
- Los bits 6 y 7 no se usan.
Puerto $1FFD:
- El bit D0 nos permitirá seleccionar entre el modo de gestión de memoria del +3 o de CPM
- Si tenemos seleccionado el modo CPM Los bits D1 y D2 nos permitirán modificar la distribución de la RAM según lo siguiente (Esta característica no está soportada en el interface):

- Si el bit 0 es igual a 0 el bit D2 será la parte alta de selección de la ROM, junto con el D4 del puerto $7FFD. Podemos ver este bit (D2 $1FFD) como selección del chip A ó B dentro del +3 y el D4 de $7FFD como el selector de la parte baja o alta del chip.
- D3 sirve para activar o desactivar el motor del disco.
- D4 es la señal de strobe del puerto paralelo.
- D5 a D7 no se usan.
Paginación en el Pentagon
En el Pentagon se añaden dos bits más para la selección de la página de RAM correspondientes a D6 y D7 del puerto $7FFD, quedando dicho puerto de la siguiente manera.

En nuestro interface se soporta este modo de paginación disponiendo de 5 bits (32 páginas) para la selección de página.
Distribución de las páginas en el espacio de direcciones.
El espacio de direcciones ocupado por la página seleccionada es generalmente $C000-$FFFF, pero existen algunas páginas que tienen un tratamiento especial.
La distrubución exacta se resume a continuación.

- El banco número 2 siempre estará visible en el rango $8000-$C000, pero también será accesible en $C000-$F000 si tenemos seleccionada la página 2.
- El banco número 5 corresponde con la memoria de pantalla $4000-$8000 en un +2/+3. En nuestro interface no está soportado y es un banco más. Esto podría ser implementado en el futuro según las indicaciones de mcleod_ideafix.
- El banco número 7 corresponde con la ShadowRAM y su contenido se visualizará si D3 está a uno en el puerto $7FFD. En nuestro interface no está implementado y el banco 7 es una página más. Además es imposible de implementar sin cortar bastantes pistas y modificar interiormente el Spectrum. Afortunadamente no hay muchos programas que aprovechen esta característica, por otro lado muy interesante.
Distribución de las ROMs en el interface
En el +2/+3 las 4 ROMs vienen repartidas en dos chips (A y B) almacenando dos ROMs cada uno de ellos.

En nuestro interface almacenamos las cuatro ROMs en un solo chip distribuyendose su espacio de la siguiente manera:

Hay que tener en cuenta que el direccionamiento de la tabla es desde el punto de vista del chip, pero la ROM seleccionada siempre se accederá mediante el rango de direcciones estándar $0000-$3FFF.
Por último un listado de qué función tiene cada ROM:

ENLACES
DIARIO DE MONTAJE
MANUAL DE MONTAJE