Super cartucho INTERFACE 2


 

Introducción

    El interface 2 fue un dispositivo creado por la empresa Sinclair que permitía a los Spectrum la utilización de cartuchos ROM y dotaba al Spectrum de 2 puertos para joystick. En los cartuchos ROM se podían almacenar programas ocupaban el espacio de la ROM original permitiendo una carga casi instantánea. Este era el aspecto del IF2 Y de los cartuchos:
 

( foto extraída de planet sinclair )


    No fue un invento con mucho existo. Tenía como ventaja el tiempo de carga casi instantáneo pero como gran desventaja el coste de los cartuchos (en comparación con el precio de los juegos en cinta). Solo se producieron 10 juegos para este formato.

    Su diseño es bastante simple y limitado. Una señal inhabilita la ROM interna y en su lugar funciona la ROM del programa. Esto presenta el problema de que solo podemos usar programas de 16K y, debido a su sencillo diseño, las patillas que presenta el cartucho está exenta de muchos señales del bus de datos.

    La falta de estas señales provoca que no sea fácil crear cartuchos más grandes de 16K. Con esta idea nació este proyecto, crear un cartucho que permita almacenar varios programas ( de 16K) seleccionable por el usuario.

Diseño

    La idea que se me ocurrió fue la utilización de parte de la primera ROM como direccionamiento. Es decir, cuando el programa software accediese a ciertas direcciones, el hardware entraría en funcionamiento. Esta zona de funcionamiento está situada en los 8 K superiores de la página 0 ( a partir de la dirección 2000h). dejando los primero 8K para un programa usuario.
 


    El primer prototipo no llegó a funcionar. Explicación de porque no funciona

    Con los resultados del primer prototipo, se llego a la segunda implementación que si funciona aunque es menos potente y requiere más hardware. El esquema básico es el siguiente :

Fa se puede escribir como Fa = A14 + A15 + MERQ. Con esta señal habilitaremos la lectura de la ROM.
Fb es el reloj del circuito hardware y puede ser escrito como Fb = A14 + A15 + MERQ + /A13 + Circuito bloqueo.
El circuito de bloqueo tiene una misión sencilla. Cuando se halla seleccionado una ROM, la salida dará un nivel alto ( dado que las páginas validas son de la 1 a la 15) y impedirá que el reloj CLK cambie de valor. Puede ser expresada como Circuito bloqueo = A14 + A15 + A16 + A17.

Esta versión si funciona. Explicación de porque si funciona

Funcionamiento teórico.


Paso 1. Cuando se enciende el Spectrum, la resistencia y el condensador permiten a los flip-flop D resetearse a 0. Pasado un tiempo el condensador se carga y permite a los flip-flop funcionar

Paso 2. El programa software ejecuta una instrucción como esta: LD (2009h),A. Lo que realmente estamos haciendo es poner el valor '9' en las líneas de direcciones A0-A3 y el circuito hardware se prepara para almacenarlo.

Paso 3. MERQ pasa de 0 a 1 disparando los flip-flop. Los primeros 4 cargan el valor '9' y los 4 segundos el valor ' 0'

Paso 4. Realizamos la instrucción JP 2000h. Con esto provocamos que el circuito hardware se prepare para saltar.

Paso 5. El Z-80 lee la instrucción almacena en la dirección 2000h y pasa MERQ de 0 a 1 disparando los flip-flop. Los 4 primeros cargan un valor ( indiferente) y los 4 segundos cargan el valor '9'

Paso 6. Al tener un valor distinto de 0 los 4 segundos flip-flop bloquean el reloj dado que siempre tendrá un valor '1'. No será posible cambiar los valores de los flip-flop permitiendo al programa almacenado en la página 9 correr libremente.

Software

    El programa necesario es muy sencillo. En forma de organigrama nos queda así:


MUY IMPORTANTE : La instrucción que existe en la posición 2000h es JP HL. HL debe tener el valor '0000'. De esta manera se ejecutará un salto a la posición cero y comenzará a leer el programa que vamos a utilizar. La razón de usar JP HL es que esta instrución solo ocupa un byte ( E9) y  el Z-80 no tiene que leer más posiciones de memoria para ejecutar la instrucción. Si la instrucción ocupase 2 byte no funcionaría porque leería el contenido de la 2001H ¡¡ de la página seleccionada !!
 

  Introducción   Diseño con TTL Diseño con GAL   Funcionamiento y documentación