domingo, 25 de junio de 2017

Sinclair ZX Spectrum 48K: Conexión PC y Uso

Una vez preparado el ZX Spectrum 48K para utilizar vídeo compuesto lo voy a conectar a mi ordenador portátil usando una capturadora de vídeo en ese formato. Además en lugar de usar una grabadora de casetes para leer y escribir datos voy a utilizar la entrada y salida de audio del portátil.

Para poder conectarlo a la capturadora, una USB Avermedia DVD Ezmaker 7, para poder verlo en el portátil, solo tuve que conectar el cable con dos RCA macho a la capturadora.


Para que funcionara en Linux tuve que añadir un archivo de configuración de udev en /etc/udev/rules.d con las siguientes líneas:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="07ca", ATTRS{idProduct}=="c039", RUN+="/sbin/modprobe cx231xx" ,\
RUN+="/bin/sh -c 'echo 07ca c039 0 1f4d 0102 > /sys/bus/usb/drivers/cx231xx/new_id'"

ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="07ca", ATTRS{idProduct}=="c039", \
RUN+="/sbin/rmmod cx231xx_alsa", RUN+="/sbin/rmmod cx231xx", \
RUN+="/bin/sh -c 'echo 07ca c039 > /sys/bus/usb/drivers/cx231xx/remove_id'" 

Tanto mi televisor como la capturadora tienen entradas para dos canales de audio pero el ordenador no tiene ninguna salida de audio, utiliza un altavoz interno para el sonido. Los conectores Jack son solo para leer y escribir datos en la grabadora.

Yo en lugar de utilizar una grabadora conecté las conexiones EAR y MIC a los conectores de auriculares y micrófono respectivamente del portátil mediante un cable con un conector Jack en cada extremo. Primero una conexión y luego la otra ya que solo tengo un cable de este tipo.


De esta forma quedan los dos ordenadores conectados y listos para poder utilizar el portátil como pantalla y grabadora para ver la imagen, cargar un juego y grabar datos.


El ZX Spectrum carece de interruptor de encendido y apagado, supongo que para reducir costes. Al conectar el adaptador de corriente el ordenador arranca, se ejecuta la programación de la ROM y lo primero que aparece es el mensaje "© 1982 Sinclair Research Ltd". Las siguientes imágenes están tomadas con la capturadora, usando el programa Zapping.
 

Una vez que sale ese mensaje se dispone de un interfaz de línea de comandos con el que se puede ejecutar cualquier comando de BASIC o escribir programas. Para cargar un programa grabado en casete se presiona la tecla "LOAD", que escribe el comando del mismo nombre, seguida del nombre asignado al programa entre comillas. Si no se indica el nombre del programa el ordenador carga el primero que encuentra en la casete.


Una vez escrito el comando con sus parámetros se presiona la tecla "ENTER" y el ordenador empieza a leer la entrada de audio (EAR). En ese momento hay que reproducir la casete. Esto se debe hacer de forma manual, ya que el Spectrum no tiene ninguna forma de indicar a la fuente de audio que empiece a reproducir.

En mi caso, como uso el portátil, lo que he hecho es bajarme el juego "Star Trek", desarrollado por la empresa Mikro-Gen Ltd en 1982. Este es uno de los juegos cuya empresa desarrolladora ha dado permiso a la web www.worldofspectrum.org para su distribución.

Los juegos están disponibles en formato TZX y TAP. Para poder cargar ese juego en el ordenador es necesario convertirlo a audio con alguno de los programas disponibles. Yo descargué el archivo TAP y utilicé el comando tape2wav incluido con el emulador Fuse. El archivo de audio se puede abrir con cualquier programa de edición de audio, como por ejemplo Audacity, para ver su contenido.



Los datos se guardan en binario utilizando pulsos de audio. Los ceros como 2 pulsos de una duración de 855 ciclos del procesador cada uno (244 microsegundos aproximadamente) y los unos el doble, 2 pulsos de 1710 ciclos (489 microsegundos aproximadamente). Cada bloque de datos está precedido por un tono guía y dos pulsos de sincronización que indican al ordenador el comienzo de un bloque de datos. Hay dos tipos de bloques de datos: datos y cabecera con información sobre un bloque de datos. Este sistema permite la transmisión y grabación de datos con cualquier sistema de audio. En los años 1980 se hicieron populares las emisoras de radio que transmitían juegos y programas.

Una vez preparado el archivo de audio, conectado el cable desde la salida de audio del portátil a la entrada de audio (EAR) del Spectrum y ejecutado el comando LOAD, se debe reproducir el archivo de audio en el portátil, asegurándonos de que el sonido sale por dicha salida conectada al Spectrum.

Entonces el ordenador debe encontrar la cabecera del juego y comenzar a cargarlo. Si no lo encuentra quizás tengamos que subir o bajar el volumen del audio hasta encontrar un nivel adecuado.


La resolución de pantalla es de 256x192 puntos más un borde de 48 puntos arriba y en los laterales y 56 puntos abajo. La información de cada punto de la imagen se escribe en la memoria RAM, en los primeros 6912 bytes de la memoria estándar, y el chip ULA la escanea periódicamente para crear la imagen a mostrar por pantalla. Por esta razón, en el diseño del ordenador, la resolución elegida para la pantalla estaba limitada por la memoria RAM que se pudiera incluir sin aumentar demasiado el precio del ordenador.

Como la memoria RAM era muy costosa, los creadores del ordenador tomaron varias decisiones de diseño para minimizar la memoria necesaria para la imagen y dejar más espacio libre para los programas. Los puntos solo pueden ser de 7 colores con dos niveles de brillo y de color negro, que es el punto apagado. Esto hace un total de 15 colores distintos que se pueden codificar usando 3 bits para el color y 1 bit para el brillo.

Para reducir aún más la memoria necesaria el color no se asigna a puntos individuales sino a bloques de 8x8 puntos, en total 256/8x192/8 = 32x24 bloques = 768 bloques. Así por un lado se guarda la información de los puntos activos e inactivos en alta resolución (256x192 puntos) usando un bit por punto, en total 49152 bits = 6144 bytes = 6 KiB y por otro lado los atributos de los bloques en baja resolución (32x24 bloques), usando un byte (8 bits) por bloque, en total 768 bytes (0,75 KiB). Los 6144 bytes de los puntos y los 768 bytes de los bloques suman los 6912 bytes reservados en la memoria para la imagen.

Cada bloque tiene cuatro atributos: color de tinta (3 bits) para los puntos activos, color de papel (3 bits) para los puntos inactivos, brillo (1 bit) y parpadeo (1 bit). El parpadeo se realiza intercambiando los colores de tinta y papel. Para guardar el color, brillo y parpadeo de todos los puntos individualmente sería necesaria mucha más memoria.


Para reducir aún más la memoria necesaria todo el borde es del mismo color, ya que se da por hecho que es una parte sin contenido. Esto permite tener una imagen un poco más grande (352x296 puntos) sin necesidad de usar más memoria RAM, al almacenar el color del borde con solo 3 bits y en el chip ULA.

Si se cambia suficientemente rápido el color del borde o de los bloques se pueden hacer efectos como las rayas que se muestran en la carga de los programas. 



Una vez cargado el juego lo ejecuta y se muestra una pantalla de presentación mostrando el nombre del creador del juego, la empresa y el año de publicación. Luego se muestra información sobre el juego y finalmente se puede empezar a jugar.




El archivo TZX o TAP con el juego también se puede utilizar en un emulador, como por ejemplo Fuse u otros muchos que existen para cualquier sistema operativo.


Una vez arrancado el ordenador, además de poder cargar programas ya hechos podemos escribir nuestros propios programas en Sinclair BASIC, un dialecto de BASIC. El ordenador además del manual del equipo incluía un manual de programación en este lenguaje. Y en las revistas de informática de la época como Sinclair User se incluían impresos programas en BASIC que el usuario podía escribir manualmente en su ordenador.

Para escribir un programa se debe comenzar escribiendo un número de línea seguido de los comandos a ejecutar en esa línea. El número de línea le indica al ordenador que en lugar de ejecutar los comandos tiene que añadir esa línea al programa. Una vez escrita la línea se presiona "ENTER" y el ordenador la coloca en la pantalla en el lugar correspondiente ordenada por el número de línea. Para editar una línea ya escrita se escribe una nueva línea con el mismo número de la línea a modificar y se reescribe según se desee. De esta forma el ordenador provee un sencillo editor de código BASIC con el que escribir los programas.

A continuación se muestra un programa muy sencillo que en la línea número 10 asigna el valor 10 a la variable "a" y en la línea 20 imprime el valor de dicha variable.


Una vez escrito el programa se puede ejecutar pulsado la tecla del comando "RUN" y a continuación "ENTER". En la siguiente captura se puede ver como se imprime el valor de la variable "a", que es 10. En la parte de abajo se indica con el código "0 OK" que el programa se ejecutó correctamente.


Cuando el programa ya está completo se puede grabar en una casete utilizando el comando "SAVE" seguido del nombre que le queremos dar al programa y que podremos utilizar después con el comando "LOAD" para cargarlo.


Después de escribir ese comando y pulsar "ENTER" el ordenador nos pedirá que pongamos una casete a grabar y que una vez esté grabando pulsemos una tecla para que el ordenador empiece a enviar por la salida "MIC" el programa codificado en pulsos de audio como se explicó anteriormente. En mi caso conecté el cable entre la salida "MIC" del Spectrum y la entrada de micrófono del portátil.


Una vez transmitido completamente el programa, el ordenador informa con la siguiente pantalla, con el código "0 OK" en la parte de abajo, que se grabó correctamente.


Ya podemos parar la grabadora o cualquier otro sistema con el que se esté grabando. El audio grabado tiene el mismo formato que el producido al pasar los archivos TZX o TAP a audio, con la diferencia de que se pueden apreciar las imperfecciones al tratarse de una grabación real. Este audio se puede convertir a TZX o TAP usando el programa adecuado.


Esto es lo necesario que hay que saber para un uso básico del ordenador. Otro día probaré a programar algo más complejo en BASIC o en ensamblador, utilizar alguna aplicación o comprar algún aparato que conectar al bus de expansión.

3 comentarios:

  1. Llegué a este artículo dando por sentado que por fin habría encontrado la solución al problema que tengo, pero, para mi sorpresa, precisamente lo que yo necesitaba saber es lo que has obviado en tu artículo.
    Tengo un ZX Spectrum + y compré la capturadora NeTway EZ172, que es muy parecida a la que muestras.
    Bien, no hay forma posible de sacar la señal del Spectrum hacia la capturadora.
    He probado:
    -Usando un vídeo reproductor, intentando sintonizar la señal desde el conector de antena y no sintonizaba nada.
    -Desde el mismo reproductor, por entrada de Línea 1 o 2, usando un conector adaptador de cable de antena a RCA, para conexión directa. Tampoco.
    -Directamente a la capturadora mediante este conector adaptador. Nada.
    -Realizando el mod de vídeo compuesto. Conseguí que se viera imagen, pero muy distorsionada. A veces, si me salgo del canal y entro de nuevo puede ser que consiga una imagen fija, pero muy pocas veces.(esto solo conectandolo a traves del video; directamente a la capturadora nunca conseguí nada)
    No se por que lo hace, si es que no se sincroniza bien con el vídeo o qué se yo, pero me está volviendo loco.

    Hasta me aconsejaron de soldarle un condensador de 100uf al mod de vídeo compuesto para intentar estabilizar esa señal, pero nada de eso funciona.

    ¿POdrías extenderte un poco en esa parte de conexión/sincronismo? Me parece la parte más crucial y la que puede dar el mayor número de problemas,como es el caso, o explícame en el comentario para ver que conexiones/adaptadores has usado para transformar el cable coaxial del Spectrum para conectar a la capturadora, y como has conseguido que se vea correctamente a la primera, por que en mi caso es tarea casi imposible.
    Gracias.

    ResponderEliminar
    Respuestas
    1. Antes de este artículo escribí otro donde explico como saqué la señal de vídeo compuesto con un mod muy sencillo, simplemente puentear el modulador de televisión dejándolo desconectado.

      ¿Tu que mod usaste? ¿Mantuviste conectado el modulador de televisión? Quizás te haga algún tipo de interferencia.

      Eliminar
  2. Decir que conectándolo a una tv analógica normal se ve perfectamente, pero es que necesito pasarlo a través de la capturadora.

    ResponderEliminar