SUPERUPGRADE: MANUAL DE USUARIO
Las características del interface son las siguientes:
- Ampliación a 128/256/512Kb de RAM seleccionable por jumpers
- 2 conexiones de joystick multinorma (Kempston,Sinclair, Cursor)
- Botón de Reset
- Botón de NMI
- Memoria flash de 512Kb conteniendo hasta 32 ROMs de diferentes sistemas o juegos.
- Chip de sonido AY.
- Entrada de audio para mezclar el sonido del speaker con el del AY.
- Salida de video compuesto.
- Expansor de bus.
- Compatible con divIDE
- Posibilidad de add-on de ampliación para selección de las ROMs por software.
- Grabación de la memoria flash desde el propio Spectrum.
Como podéis ver le queda muy poquito para convertirlo en un +3. La carencia más evidente es la disquetera, pero todo se andará. ;)
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.
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.
ROM BIOS Y SELECCIÓN DE LA ROM ACTIVA
La memoria flash de nuestro interface tiene una capacidad de 512Kb. Teniendo en cuenta que las ROMs más pequeñas que existen para Spectrum ocupan 16Kb (como la original el gomas), eso hace que quepan un total de 32 ROMs de ese tamaño.
Pero claro, hay otras versiones como el 128Kb y el +2 gris que ocupan 32Kb e incluso las del +2a/+3 64Kb, por lo que depende del tipo de ROMs que tengamos en el chip la cantidad ROMs que podremos tener variará.
Para poder albergar tanto las memorias 16Kb como las más grandes de 32Kb ó 64Kb, el chip está dividido en trozos de 16Kb cada uno de los cuales podemos grabar con la ROM que deseemos.
Adicionalmente, los bloques de 16kb vienen agrupados en otros bloques más grandes de 64Kb que a partir de ahora llamaremos slots, por lo que tendremos un total de 8 slots en el chip.
A la hora de guardar una ROM de 64Kb, no podemos empezar en donde queramos, tendremos que ocupar un slot, mientras que en el caso de las ROMs de 32Kb deberemos utilizar bien las ROMs 0 y 1 de un slot concreto (semi-slot inferior) o bien las ROMs 2 y 3 del slot (semi-slot superior)
El slot activo es seleccionable con los jumpers, JP3, JP4 y JP5, mientras que para seleccionar el bloque de 16Kb dentro de un slot necesitaremos de la ayuda del software.
El sistena incorpora una ROM BIOS situada en la el primer bloque de 16Kb.
Aunque inicialmente dicha ROM BIOS estaba pensada principalmente para la selección de la ROM por software con la ayuda del add-on (que luego veremos), se han añadido algunas funciones que pueden ser empleadas perfectamente en la versión básica del interface. Entre estas están las herramientas de diagnóstico y una opción muy interesante que nos permitirá seleccionar la ROM activa dentro del slot que tengamos seleccionado con los jumpers.
El espacio quedaría distribuido como sigue:
MANEJO DEL BIOS
La pantalla principal del BIOS del superupgrade nos muestra un listado con las ROMs incluidas en la memoria flash.
Para arrancar una de ellas, seleccionaremos la letra correspondiente y pulsaremos "ENTER".
En la versión 0.2 del BIOS se ha añadido un submenú de utilizades, al que se accede pulsando "V" y "ENTER", desde el menú principal.
En dicho menú disponemos de utilidades para testear nuestro interface:
- TEST DEL TECLADO: nos mostrará visualmente las teclas que estamos pulsando y los tres bits superiores de cada semifila.
Para el teclado solo se usan los bits 0 a 4, mientras que el bit 6 es usado para la entrada EAR.
Para terminar el test pulsaremos BREAK.
- TEST DEL JOYSTICK: Nos permitirá hacer un test completo del joystick, pidiendo que pulsemos secuencialmente cada uno de los botones del joystick. Cuando lleguemos al test de Sinclair deberemos pulsar usar los dos joystick simultaneamente.
En el caso de que pulsemos "BREAK" pasaremos al siguiente botón aunque no hayamos pulsado el botón correcto.
- TEST DE RAM: Realizará un test del paginado de la RAM, indicando cuantas páginas de memoria tenemos disponibles.
No se trata de un test completo de la integridad de la RAM, ya que solo comprueba el paginado.
- TEST DE AUDIO: Hará sonar una escala musical por cada uno de los tres canales del AY.
- SELECCIÓN DE PÁGINA DE ROM: Esta opción está pensada para los usuarios que no inserten el add-on.
Recordemos que la memoria está dividida en bloques de 64Kb que son seleccionable por jumpers, y que en cada bloque de 64Kb nos caben 4 páginas de 16Kb.
Pues bien, si después de arrancar el menú cambiamos los jumpers a la ROM deseada, esta opción nos permitirá seleccionar la página de 16Kb que queremos ejecutar.
Una vez selecionada la página deseada, el sistema nos pedirá que pulsemos una tecla, tras lo que el spectrum se reiniciará ejecutando el programa contenido en la página seleccionada.
A modo de ejemplo y para clarificar un poco el tema, vamos a incluir una tabla de posición de los jumpers / rom a seleccionar del set de ejemplo que se ha mandado ya pregrabado en el kit.
Con los jumpers sólo podemos cambiar entre 8 bloques de 64Kb (a partir de ahora slots), por lo que dependiendo de la posición de los jumpers, cuando hagamos reset con los jumpers en una posición determinada, el sistema nos arrancará con la ROM 0 del slot seleccionado.
Para arrancar las otras tres ROMs del slot será necesaria la opción de selección de ROMs del menú de herramientas.
Los jumpers no están en orden por lo que igual resulta un poco confuso su manejo. Seguidamente voy a poner una tabla que intenta clarificarlo.
Como vemos hay ROMs que ocupan varios bloques de 16Kb, por lo que en estos casos solo tendrá sentido arrancar el primer bloque de los que lo componen. Si seleccionamos por ejemplo la segunda ROM del +3 lo más normal es que se cuelgue el sistema.
En la tabla vemos, en las tres primeras columnas, la posición que tenemos que poner en los jumpers para seleccionar un slot determinado.
Por ejemplo, las ROMs del +2 gris están en el Slot 2, por lo que tendremos que poner los jumpers en las posiciones arriba, abajo, arriba, empezando a contar por el jumper superior de los tres de selección de ROM.
Para esta ROM en concreto no será necesario el selector, ya que ocupa la posición 0 de este slot. Será suficiente con poner los jumpers y pulsar reset.
En el caso de una ROM que no ocupe la posición 0 de un Slot, sí necesitaremos el selector. Ese es el caso de la ROM del spectrum, que está en la posición 1 del slot 0, por lo que con los jumpers en la posición abajo abajo arriba, seleccionaremos la opción de selección de ROMs y pulsaremos el 1, y como en este caso no nos hace falta cambiar los jumpers al pulsar una tecla aparecerá la ROM del gomas.
El caso del Planetoids es el mismo, pero en este caso deberemos seleccionar la ROM2 desde el menú de cambio de ROMs y luego de cambiar los jumpers a la posición arriba arriba arriba, pulsar una tecla.
AGREGANDO NUESTRAS PROPIAS ROMS
Las ROMs que vienen grabadas en el chip son solo un ejemplo.
Nosotros podemos sustituirlas por las que queramos, pero deberemos tener en cuenta las siguientes indicaciones.
Las ROMs deben tener exactamente 16Kb, 32Kb ó 64Kb. Si disponemos de una ROM de un juego que ocupa menos deberemos completarla hasta los 16Kb con un editor hexadecimal.
La primera posición debe siempre ocuparla la ROM BIOS.
Desde dicho BIOS tenemos un menú que nos permitirá arrancar las ROMs por soft solo sí tenemos instalado el add-on.
En el caso de que vayamos a utilizar el add-on, en la ROM 0, tenemos ciertos parámetros que deberemos modificar para cada una de las ROMs y que nos indicaran como se comportará dicho programa. Estos datos ocupan un byte por ROM y se localizan en $020E..$022D correspondiendo con las ROMs 0 a 31 (también se cuenta el propio BIOS).
En la tabla anterior podemos ver que los bits 0 a 4 de cada uno de los bytes nos indica el número orden de la ROM (0..31), mientras los bits 5, 6 y 7 nos van a permitir definir el comportamiento de la ROM.
Los bits 5 y 6 nos permiten desactivar el paginado de la ROM total o parcialmente y están relacionados con el tamaño de la ROM en cuestión.
Por ejemplo para el caso de la ROM de un gomas que ocupa un solo bloque de 16Kb deberíamos desactivar completamente el paginado, ya que no nos interesa que se ejecute nada fuera de ese bloque de 16Kb, por lo que ambos bits deberían estar a 1.
En el caso de una ROM de 32Kb deberemos dejar activa la paginación que se realiza a través del puerto $7FFD que gestiona el cambio entre el bloque 0 y el 1, pero deberemos desactivar el cambio a las ROMs 2 y 3 que se gestionan con el puerto $1FFD. Por tanto el bit 5 lo pondremos a 0 y el 6 a 1.
Por último para el caso de las ROMs del +3 nos interesará dejar activo el paginado al completo, por lo que dejaremos ambos bits a 0.
El bit 7 nos permitirá desactivar el divIDE para los casos en que queramos arrancar una ROM incompatible con divIDE sin necesidad de desconectarlo.
Pogamos como ejemplo contenido de dicho byte para las ROMs del ROMSET de ejemplo:
Los textos que nos aparecerán en el menú se localizan en $000F..$020E y están formados por un byte $0F y el texto de 15 caracteres de longitud para cada una de las opciones.
Hay que tener cuidado no machacar ni el byte $0F ni el texto de la siguiente opción.
La siguiente tabla nos muestra la posición de comienzo de cada texto del menú.
Una vez tengamos todos los archivos a incluir debemos juntarlos todos en el orden deseado, sumándolos con lo orden "COPY /B" o con un editor hexadecimal asegurandonos que el archivo final tiene exactamente 512Kb (524.288 bytes)
Os pongo como ejemplo el archivo bat que he utilizado yo para generar el archivo .bin a grabar.
del rom*.bin
copy /b BIOS.ROM+48.rom+inves.rom+tk90x.rom rom.bin
copy /b rom.bin+"plus3-spanish.rom" rom.bin
copy /b "rom.bin"+"plus2-spanish.rom"+"128-spanish.rom" "ROM.bin"
copy /b rom.bin+ "sm8es3eE.rom" rom.bin
Copy /b rom.bin+Ace_ROM.bin+tk95.ROM+gw03.rom+OPENSE.ROM rom.bin
Copy /b rom.bin+ZXTESTROM.BIN+backgammon.rom+testrom128.bin rom.bin
copy /b rom.bin+spaceraiders.rom+chess.rom+planetoids.rom+Popeye.rom rom.bin
copy /b rom.bin+qbert.rom+roj.rom+LocoMotion.rom+Gyruss.rom rom.bin
dir rom.bin
Si no os queréis complicar, una manera muy sencilla es utilizar como base el archivo que os he incluido yo como ejemplo y modificarlo con un editor hexadecimal.
Si utilizamos un editor hexadecimal, deberemos tener en cuenta que las ROMs deberán ir en las siguientes posiciones:
GESTION DE LOS PUERTOS DEL 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 +3
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 slot 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:
Funcionamiento del puerto nuevo puerto del add-on $43B
Para poder realizar su función, el add-on hace uso de un nuevo puerto que ha sido solicitado al ZXI specification group.
El puerto concedido para dichas tareas es el puerto $043B.
Dicho puerto es un puerto de solo escritura y tiene como funcionlidad principal poder seleccionar activa la ROM dentro del chip de 512Kb, además de poder desactivar el divIDE y el paginado estándard a través de los puertos $1FFD y $7FFD.
En la tabla siguiente se resume la funcionalidad.
Los bits 0..1 correspondería con la página de ROM y los bits 2..4 con el número del slot.
El cambio de página ROM a través de este puerto funcionará aún en el caso de que se haya desactivado el paginado a través de los puertos $1FFD y $7FFD.
El bit 5 nos permitirá desactivar el paginado a través del puerto $7FFD.
El bit 6 nos permitirá desactivar el paginado a través del puerto $1FFD.
El bit 7 nos permitirá desactivar el divIDE. Realmente este puerto lo que hace es filtrar las señales /MREQ y A15 no dejándolas pasar hacia el bus de expansión (poniendolas a +5V), teniendo como efecto que el divIDE nunca detecta que estamos ejecutando direcciones de la ROM, por lo que nunca se activará aunque lo tengamos conectado.
EL BUS DEL SPECCY SUPERUPGRADE
El bus del superupgrade no coincide uno a uno en su parte trasera y delantera. Esto es así debido a que hay algunas señales que son tranbsformadas para entregarlas a los demás periféricos de una manera más conveniente para el funcionamiento del interface.
Abajo dejo unas tablas descriptivas del bus del spectrum y del superupgrade, en las que podemos ver estas diferencias.
Las imágenes del bus del spectrum han sido tomadas prestadas del trastero del spectrum. :)
GRABACIÓN DE LA MEMORIA FLASH DESDE EL SPECTRUM
Actualmente estamos en pleno desarrollo de una herramienta de grabación de la memoria flash desde el propio spectrum.
El siguiente programa lo ha desarrollado antoniovillena y consiste en un software de línea de comandos que, a partir de un archivo de ROM de hasta 64Kb nos generará un archivo tap listo para ejecutar en nuestro spectrum.
Dicho archivo tap puede ser convertido a wav y cargado por audio, o bien también puede ser cargado directamente desde el divIDE.
Si se decide utilizar la carga por audio, una buena idea podría ser actualizar la ROM del spectrum (que en el ejemplo está instalada en el bloque 0, rom 1) con la ROM cargandoleches como primer paso, y a partir de ese momento utilizarla siempre para cargar los taps de las roms que vamos a quemar en nuestra flash.
En la carpeta deberemos tener el archivo "SuperUpgrade.exe" y el archivo "SuperUpgrade.bin".
La sintaxis del programa es como sigue:
SuperUpgrade <outputfile> <roms> <inputfile1> <inputfile2> .. <inputfilen>
<outputfile> Output TAP file
<roms> 4 digit number, X to preserve. 0123 full 64K, XXX3 only ROM3
<inputfileX> Input binary file/s
Es decir, para generar un tap con las ROMs del +3 hariamos lo siguiente:
SuperUpgrade hola.tap 0123 plus3en41.rom
Una vez generado el tap, puedo pasarlo a la CF de mi divIDE o bien cargarlo por audio, y una vez cargado en el spectrum, nos aparecerá una pantalla como la siguiente:
En el caso de que tengamos el "Add-on", simplemente deberemos pulsar una tecla entre 0 y 7 coincidiendo con el slot donde queramos grabar la/s ROM/s.
Si por el contrario no disponemos del "Add-on", deberemos cambiar los jumpers a la posición deseada y entonces pulsar una tecla.
Actualmente, nuestro compañero pachuquín, está desarrollando un frontend que en principio estaba pensada para facilitarnos la generación de ROMSETs para grabar desde una grbadora de EPROMs, pero que pronto incorporará también la utilidad de antoniovillena y nos permitirá generar los taps desde un entorno gráfico más amigable.
No hay comentarios:
Publicar un comentario