Los cartuchos del Interface II


  ¿Qué es la Interface II ?

    Poco después de la aparición de nuestro querido Spectrum, Sinclair lanzo al mercado el Interface II, básicamente era un adaptador para dos joysticks y un conector para cartuchos de juegos, concretamente para juegos de 16k.

   Este es el aspecto del Interface II:

    Con su lanzamiento Sinclair lanzó una serie de diez cartuchos de juegos de 16K para este adaptador, no fue un éxito que digamos, en parte por el precio y en parte por lo escaso y pobre de dichos juegos que tuvieron que competir con la consola Nintendo y compañía.

    Má

s adelante veremos como crear copias de los cartuchos para este adaptador y algunos nuevos, nunca comercializados antes.

     Los cartuchos que se lanzaron en su día son:

   JetPac         Cookie            Chess             Hungry Horace          Horace Skiing
  Tranz Am      Planetoids        Pssst              BackGammon          Space Raiders

Éste es el aspecto de uno original:

   El funcionamiento era muy básico, introducías el cartucho en el adaptador con el ordenador apagado, encendías y ya estaba el juego cargado y funcionando. Como en realidad el programa que se está ejecutando lo hace sobre los primeros 16K, necesitó que estos juegos, que ya existían en formato cassette, se adaptasen para funcionar en un rango diferente de memoria, además no podían usar las rutinas de la ROM pues el catucho sustituía a ésta en el mapa de memoria. Lo que quiero decir con esto es que no basta con tomar un juego de 16 K y grabarlo en EPROM para que funcione, pues de la misma forma los juegos de cassette están programados para funcionar en otro rango de memoria  diferente, normalmente a partir de la dirección 5B00H.

   Un truco para solventar este problema es, partiendo de un juego de 16K, escribir una rutina que vuelque el contenido del área baja de memoria, donde hemos grabado dicho programa, sobre las direcciones adecuadas de la RAM, y luego saltar sobre ella, de esta forma la ejecución se realiza sobre las direcciones para las que el programa fue pensado originalmente. Hay que asegurarse previamente que dicho programa no usa las rutinas de la ROM original del Spectrum.

   Más adelante te cuento como asegurarse de esto de una forma muy fácil usando un emulador.

   ¿Cómo funciona ?

   El interface II se divide en dos partes, la interface de joystick y el conector del cartucho. Lo que vamos a tratar aquí es la parte del cartucho.

   El funcionamiento era muy básico, pero eficaz. La EPROM del cartucho sustituía la ROM interna del Spectrum de forma que esta dejaba de ser accesible para la máquina. Esta sustitución se produce gracias a la señal /ROMCS que se encuentra disponible en el mismo conector del cartucho. Cuando el cartucho no está instalado y la ULA del Spectrum decide utilizar los 16 K mas bajos (es decir de la dirección 0000 a la 16383) activa esta señal (Activa a nivel bajo, es decir activa cuando tiene 0 Voltios) Esta señal informa a la ROM interna de que es con ella con la que se desea comunicar, pues bien, cuando el cartucho está insertado cortocircuita esta señal que genera la ULA a +5V de forma que la ROM interna queda desactivada totalmente.

    Solo necesitamos saber cuándo tiene nuestra EPROM que estar activa, para lo cual disponemos de las señales de dirección A14 y A15 así como de la línea de control    /MEMRQ. Cuando las líneas de dirección A14 y A15 están a 0 es por que se está accediendo a la zona baja de memoria, es decir a los primeros 16K, y si el acceso es a memoria y no a I/O, es decir /MEMRQ a nivel bajo, entonces es el momento de activar la EPROM. El montaje electrónico es muy sencillo, debemos hacer un OR lógico de A14,A15 y /MEMRQ para controlar la activación de la EPROM (pin 20 /CE -Chip enable) y la señal /MEMREQ puede controlar directamente la lectura de dicha memoria (pin 22 /OE -Output Enable).

   Consultar el esquema teórico del cartucho/copia  para mas información:

 

   Observa cómo es el propio cartucho quien conecta la señal /ROMCS a +Vcc. Si usamos una EPROM de 16 K el jumper debe conectar los pines 2 y 3 del JP1. Si la EPROM es de 32K este jumper selecciona cual de los dos bloques de 16 K está activo, en otras palabras, podemos grabar dos juegos de 16K en una EPROM de 32K y seleccionar con este jumper cual de ellos debe estar activo.

   En el caso de un juego de 32K, montaremos el circuito RC que está ligado al conector JP2. Mas adelante, en el apartado de juegos de 32K, explicaremos este punto.

   Si la EPROM sustituye la ROM interna, la pregunta del millón puede ser :

   ¿Puedo cambiar el sistema operativo del Spectrum grabando uno nuevo para
   él en un cartucho?

   Respuesta:
   Sí, de hecho existen varios Sistemas Operativos disponibles en Internet que solucionan bugs del Bios original , le dan nuevos comandos y funciones, alguno incluso con un nuevo editor y rutinas para hacer pokes etc.

   Quiero una Interface II ¿ Qué puedo hacer ?

   Las soluciones para conseguir un Interface II son básicamente dos:

     Quiero cartuchos para este Interface ¿Qué puedo hacer?

     Puedes encontrar cartuchos en distintas subastas de internet, www.ebay.com, por ejemplo. También puedes proponerme cambiar algo de material de ordenadores de los 80 por uno hecho por mi, y por último puedes hacerte uno tú mismo.

     Mas adelante puedes encontrar toda la información necesaria para construir tu propio cartucho. Ten en cuenta que hay que programar una EPROM para poder completarlo, puedes pedir que te la programen en la misma tienda donde compras la EPROM, en muchas disponen de este servicio y por poco dinero, programarla tú mismo o pedirme la EPROM ya programada. Este último punto necesitará de previa negociación de las condiciones (prefiero cambio de material a dinero).

     Aquí tienes en tamaño grande los esquemas y algunas fotos para hacerte una idea:

     La lista de componentes es la siguiente:

     La línea  amarilla es un cable aislado, es decir sin retirar la camisa para evitar cortos.

     Fotos de la placa antes de montar los componentes por ambas caras:

     Cara de los componentes:


    La otra cara :


     Pon atención al detalle de la soldadura de la mitad inferior de la EPROM, los pines del zócalo deben ir doblados y soldados en superficie a la placa, lógicamente no hay que taladrar, además, perforaríamos las pistas de la otra cara.

     Este es el aspecto de la placa totalmente montada:

     Importante:

     Si decidimos utilizar la memoria 27128 (16K) debemos poner el Jumper entre los pines 2 y 3, en caso que usemos una 27256 (32K) con dos juegos grabados (uno en cada bloque de 16K) podremos usar el Jumper para seleccionar que juego queremos activar e incluso podremos conectar un conmutador externo para seleccionarlos cómodamente, en la siguiente foto se puede apreciar dicho conmutador en la parte izquierda de la caja que protege el cartucho, en este caso selecciona entre el  JetPac y el PSSST.

     Con caja de protección, aunque no es necesaria, mejora mucho el aspecto final:

    ¿Juegos de 32K en un cartucho de 16K?¿Cómo es posible?

     Cuando era usuario del Spectrum allá por los comienzos de los 80, soñaba con algún sistema para cargar los juegos sin tener que esperar durante mas de 15 minutos rezando para no ver al  final de la carga el temido “Tape loading error”

     Ahora que tengo conocimientos y tecnología suficiente, me he entretenido en crear un cartucho para este Interface 2 pero que soporte juegos de 32K, como por ejemplo el famoso Knigh Lore de Ultimate.

     Hay que tener en cuenta que cuando tengamos un cartucho instalado en el slot del interface II la ROM interna estará desactivada, con lo cual cualquier programa que utilice  rutinas de la ROM fallará con un bonito cuelgue.

     A parte de esto, en los cartuchos originales los juegos estaban modificados para poder ejecutarse en la parte baja de la memoria, y o bien no usar llamadas a la ROM (Pues en realidad la están sustituyendo)  o bien incluir las rutinas de ésta que se necesiten.

     Por fortuna averiguar que programas no usan la ROM es fácil, con un emulador  de Spectrum y un fichero ROM previamente borrado, es decir , con 16384 ceros, cargamos los programas en formato Z80 o SNA, si el programa se ejecuta correctamente está claro que no usa la ROM, en caso contrario se colgará.

     He probado varios programas algunos de los que funcionan sin ROM son: Knight Lore (Por supuesto), Alien 8, Pentagram, Gun Fright, ManicMiner, Pijamarama, Etc. En el caso del Knight Lore además de ser mi favorito, necesita menos de 32 K, esto lo hizo ideal para hacer el prototipo.

     ¿Cómo podemos hacer que se ejecute un programa de 32K en tan solo 16 K?, bueno en realidad no se puede,  el proceso en líneas generales es el siguiente. Proveemos al cartucho de un circuito de retardo RC, formado por dos resistencias, 100k,1M y un condensador de 10uF (JP2 en el esquema ) que nos va ha entregar tras el encendido 0 voltios y tras unos 3 segundos +5V. Esta tensión se aplica al pin de dirección A14 disponible en las memorias de 32K para seleccionar uno u otro bloque de 16 K. De esta forma, al encender tendremos disponibles 16K durante 3 segundos, y tras este retardo tendremos disponible los otros 16 K de forma indefinida.

     Tras la fase de encendido dispondremos pues de tres segundos para mover el contenido del primer bloque de16 K a la RAM, , eso si , en la dirección exacta en la que este programa estaba diseñado para ejecutarse,

     Luego esperar en un bucle continuo a que pase el tiempo sobrante hasta completar los tres segundos y entonces tomar el siguiente bloque de 16 K que ahora esta ya disponible y llevarlo también a la RAM justo a continuación del primer bloque, una vez en este punto solo resta saltar a la dirección de ejecución y ya esta.

     Como puedes imaginar, ésto requiere estudiar detenidamente el programa a convertir a
     cartucho.


     Dicha rutina la tienes comentada a continuación:
     |----------------------------------------------------------------
     | Addr | Opcodes     | Instruction   |
     |----------------------------------------------------------------
     | 0000 | F3 -- -- -- | di            | Desactiva Interupciones
     | 0001 | 3E 00 -- -- | ld a,00       | A=0
     | 0003 | D3 FE -- -- | out (FE),a    | Border 0 (Negro)
     | 0005 | 32 00 40 -- | ld (4000),a   -
     | 0008 | 21 00 40 -- | ld hl,4000    |
     | 000B | 11 01 40 -- | ld de,4001    | CLS
     | 000E | 01 FF 1A -- | ld bc,1AFF    |
     | 0011 | ED B0 -- -- | ldir          -
     | 0013 | 21 00 3A -- | ld hl,3A00    -
     | 0016 | 11 00 58 -- | ld de,5800    | Pone el mensaje Wait cargando
     | 0019 | 01 FF 02 -- | ld bc,02FF    - un área de atributos.
     | 001C | ED B0 -- -- | ldir          -
     | 001E | 01 D0 3F -- | ld bc,3FD0    -
     | 0021 | 21 2C 00 -- | ld hl,002C    | Carga el resto de la rutina
                                          - y los 16k primeros en 60DC
     | 0024 | 11 DC 60 -- | ld de,60DC    - así el programa estará en
     | 0027 | ED B0 -- -- | ldir          - 6100, justo tras la rutina.
     | 0029 | C3 DC 60 -- | jp 60DC       | Continua la ejecución en RAM.
     | 002C | 3A 00 00 -- | ld a,(0000)   | Esto se ejecuta en  60DC (RAM)
     | 002F | FE 07 -- -- | cp 07         | Espera a que cambie en bloque
                                          - en 16k
     | 0031 | 20 F9 -- -- | jr nz,002C    -
     | 0033 | 3E 01 -- -- | ld a,01       -
     | 0035 | D3 FE -- -- | out (FE),a    | Border 1 (Azul)
     | 0037 | 3E 0A -- -- | ld a,0A       -
     | 0039 | 06 FF -- -- | ld b,FF       -
     | 003B | 11 00 00 -- | ld de,0000    |
     | 003E | 10 FB -- -- | djnz 003B     | Este bucle espera para
                                          | garantizar que el
     | 0040 | 3D -- -- -- | dec a         | circuito RC este fijo (no
                                          | oscile).
     | 0041 | FE 00 -- -- | cp 00         |
     | 0043 | 20 F6 -- -- | jr nz,003B    -
     | 0045 | 01 00 40 -- | ld bc,4000    -
     | 0048 | 21 00 00 -- | ld hl,0000    | Carga el segundo bloque a RAM
     | 004B | 11 03 99 -- | ld de,9903    |
     | 004E | ED B0 -- -- | ldir          -
     | 0050 | XX XX XX    | XXX           - Esta es la primera instrucción
                                            del programa Knight Lore

     Para la realización de este cartucho de 32K podemos usar la misma placa que para el de 16K, sin cambiar nada,  tan solo tenemos que poner una memoria 27256 en lugar de la 27128, y sustituir el jumper por el circuito de retardo RC montado sobre un conector de tres contactos.

     Detalle del circuito RC montado sobre el conector:

     No es necesario nada más para tener un fantástico cartucho 32 K con un juego inédito para este formato,  Knight Lore, puedes descargarte el archivo con el contenido para la Eprom en la sección de descargas.

     Espero en un futuro crear nuevos contenidos para este cartucho.

     Nota Importante: Una vez que el cartucho esta funcionando, el circuito RC permanece cargado, por eso si reseteamos el Spectrum el cartucho no mapeará el primer bloque y no funcionará, no tiene ningún peligro para el ordenador, sencillamente no funciona. Por esto debemos esperar aproximadamente 20 segundos a que se descargue el condensador antes de volver a encender de nuevo.

     ¿Puedo usar la interface para algo mas interesante?

     Como ya adelantábamos antes, puedes cambiar el sistema operativo del Spectrum sin tener que abrirlo, y regresar al original con solo desconectar el cartucho. Que yo sepa hay al menos cuatro S.O. diferentes para Spectrum 48K.

     El mas interesante tal vez sea IMC-ROM escrito por Ian Collier, que además de dar nuevas funciones y comandos, incluye una rutina para la interrupción NMI que le permite actuar como “Volcador de toda la memoria a cinta” algo así como un  desprotector, copiador de programas. Nueva función List y Continue, permite escribir los comandos letra a letra en lugar de con una sola pulsación, ya sabes, con el cursor en modo K pulsas la P y aparece PRINT.

     Puedes encontrarlos en la red, si necesitas mas info escríbeme un e-mail.

 

     Descargas

 
draw-bn.zip Esquema electrónico del cartucho
zxcart.zip Diseño teórico y práctico en formato EAGLE 4.0
carts.zip Los 10 cartuchos que se publicaron en formato Cart-ROM
knight.zip El clásico "Knight Lore" adaptado para funcionar en cartuchos de 32K (Exclusiva El Trastero)

 

 

    Gracias a / Thanks to:

    Fernando G. Fonseca por su amistad y apoyo incondicional en todos los proyectos locos que emprendo.

    José Manuel (El WebMaster) por animarme a escribir sobre mis trastos y brindarme un espacio para ello en su página.

    Philip Mulrane for share with us all the information he obtained reading carts, and making the measures I asked for in a real one.

     Madrid 5 Marzo 2002

     Disclaimer

     Lo siento, no se como titular esto en Español, pero ya sabéis lo que quiero decir.

    Yo comparto esta información, y la contenida en el resto de ficheros sin garantía ninguna y por supuesto sin responsabilidad de los daños que pueda causar su uso indebido o inadecuado. Lo que te puedo decir es que todo funciona perfectamente y nunca se me ha estropeado ningún Spectrum en los experimentos, pero... tú mismo.

Volver