CPDTools (II): Pasando un juego de cinta a disco

Este mes vamos a pasar nuestros discos de Spectrum, tanto de 3“ como de 3”1/2, a formato DSK para poder usarlos con un emulador o distribuirlos por medios digitales al resto de usuarios interesados, en lo que será la segunda y última entrega del análisis que hemos hecho al conjunto de utilidades que componen las CPDTOOLS.

Como complemento a todo esto explicaremos, con un ejemplo sencillo de comprender, cómo pasar un juego de cinta a disco. Esto vamos a hacerlo en un emulador de Spectrum corriendo sobre PC, pero es totalmente aplicable a un Spectrum real.


La instalación de las CPDTOOLS ya la abordamos en el anterior número de Magazine ZX, por lo cual vamos a pasar directamente a la parte práctica.

Lo primero que tenemos que hacer es abrir con un editor de textos el archivo CPDREAD.CFG y mirar si tenemos las opciones adecuadas seleccionadas. Aunque muchos de estos parámetros los podemos introducir por la línea de comandos, lo ideal es tener el archivo adecuado a nuestras necesidades.

En este archivo encontraremos una corta y sencilla serie de opciones que, pese a que se pueden dejar prácticamente como vienen, vamos a recorrer someramente para que podamos hacer nuestras variaciones si lo deseamos.

  • #tracks : Como su nombre indica es el número de pistas a leer del disquete, de momento podemos dejarlo como está, con valor 80.
  • #drive : La letra a la que está asignada nuestra unidad de disco de donde vamos a leer. Si lo hacemos de un disco de 3“ 1/2 lo normal es que esté configurado como 'A', y si tenemos acoplada una unidad de 3” a nuestro PC, lo más lógico es tenerla como 'B'. Ponemos la letra que se corresponda con la unidad que queremos leer y ya está.
  • #sides : El número de caras que tiene el disco. Lo podemos dejar tal cual.
  • #step : Aquí se indica el número de 'tracks' que tiene que saltar el programa por cada lectura de la disquetera. Por defecto viene con un valor de '1', pero si vamos a leer desde la disquetera de 3“, debemos cambiarlo por '2'. De lo contrario no saldrá el DSK correctamente.
  • #mediatype : El tipo de disquetera desde el que vamos a leer. Por defecto tiene el tipo '2' seleccionado, y con ése nos bastará tanto si es para la disquetera de 3” 1/2 cómo para la de 3“. En el mismo archivo vienen el listado de disqueteras soportadas más la opción correspondiente que debemos poner.


Una vez configurado el archivo, salimos del editor grabando los cambios y ya tenemos el CPDREAD listo para su uso.


Ahora viene la hora de crear nuestro primer DSK, tarea muy sencilla gracias a la cual podemos disponer de una copia de seguridad de nuestros discos originales de Spectrum, o compartirlos mediante web o email con nuestros colegas; siempre en caso de que la casa propietaria de los derechos del juego no haya denegado su libre distribución y, valga como ejemplo de esto último, desarrolladores y distribuidores tales como Ultimate, Capcom, etc. De esto os podéis informar en WOS.

Como lo más normal es querer hacer la imagen de un disco de 3”, adecuamos nuestro archivo de configuración a esta característica como indicamos en el paso anterior. Una vez hecho esto, deberemos arrancar nuestro PC en modo MS-DOS o bien utilizar un disco de arranque como indicábamos en la entrega del mes pasado. Introducimos el disco en la unidad de 3“ conectada al PC y tecleamos:

     CPDREAD.EXE midisco.dsk y pulsamos INTRO.

(Por supuesto en el directorio donde tengamos almacenado el programa, que bien puede ser 'C:/CPDTOOLS').

Después de unos segundos, y si nada falla, tendremos un archivo llamado 'midisco.dsk' con el contenido del disco por la cara correspondiente.

Para hacer la copia del segundo lado del disco le damos la vuelta, cambiamos el nombre del archivo, por ejemplo 'midisco_b.dsk' y ejecutamos la orden de nuevo.

Podemos encontrarnos con el caso de querer hacer un DSK de un disco de 3”1/2, grabado como si tuviese dos caras. Nada más sencillo. Volvemos a configurar el CPDREAD.CFG con las opciones idóneas y tecleamos:

     CPDREAD.EXE midisco.dsk 

para la cara 'A' y

     CPDREAD.EXE midisco.dsk S

para la cara 'B', nótese la 'S' que indica al programa que lea de la cara 'B'.

Si no queremos modificar el archivo de configuración, podemos pasarle al programa los parámetros mediante la línea de comandos, por ejemplo:

     CPDREAD.EXE midisco.dsk [tracks] [drive]

En el cual le indicaremos el disco desde el que queremos leer de la misma manera que lo haríamos en el archivo de configuración. Esto queda a nuestra elección.

El programa, en caso de que no le pasemos ninguna opción por línea de comandos, las lee del archivo CFG, con lo cual prevalecen las primeras sobre las segundas.


El conjunto de herramientas que comprende el paquete CPDTOOLS nos va a ser muy útil para preservar nuestros discos o crearlos y, unido esto a la posibilidad de tener una disquetera de 3“1/2 conectada a nuestro Spectrum +3, se abre un amplio abanico de posibilidades.

Como habéis podido comprobar, tanto grabar como leer discos es muy sencillo, y únicamente nos encontramos con un pero bastante importante, que sólo funcione con MS-DOS como sistema operativo, que actualmente está obsoleto y poca gente lo tiene instalado en su PC. La falta de versiones para Linux o Windows le resta bastantes enteros.

Aún así es un pack de utilidades imprescindible si queremos tener una experiencia sensacional con nuestro Spectrum +3.

Pasando un juego de cinta a disco

Cuando adquirimos un Spectrum +3, el principal motivo por el que lo hacemos es para evitar los largos tiempos de espera y los errores en la carga de los programas desde un soporte como es la cinta de cassette, poco fiable y que depende de varios parámetros para su correcta carga, como pueden ser el volumen, la colocación de la cabeza lectora del reproductor de audio mediante el azimut (ese tornillito pequeño que tenemos que girar para hacer subir o bajar la cabeza lectora respecto de la cinta), o el estado de la cinta misma (y la suerte, por qué no decirlo).

A partir del lanzamiento de este modelo muchas empresas creadoras de software sacaron sus productos tanto en cinta de cassette como en disco de 3”. Pero el software anterior, salvo contados packs recopilatorios, no lo tenemos disponible en disco.

Este es el motivo de la creación de este artículo: pasar nuestros juegos preferidos de cinta a disco.


Los programas almacenados en cinta de cassette, en muchos casos, estaban puestos a salvo de la piratería y la copia indiscriminada con diferentes sistemas de protección por software. Carga turbo, eliminación de las cabeceras de información, grabación de la pantalla, basic y código máquina como un solo bloque, y un largo etcétera.

Este texto no pretende ser un manual de cómo desproteger programas, con lo que, en esta ocasión, nos vamos a limitar a los que utilizaban la rutina de carga de la ROM con los comandos típicos del BASIC: 'LOAD' y 'SAVE'.

Antes de decidirnos a pasar un programa a disco, debemos asegurarnos de que mantiene compatibilidad con el Spectrum +3. Varios juegos no funcionan en este modelo de Amstrad o hay que modificarlos para que lo hagan. Por lo cual la mejor manera de asegurarse si nos van a funcionar es cargándolos en el mismo, bien sea un TZX o TAP en el emulador o la cinta original en el +3.

Por comodidad, en vez de trabajar sobre la máquina real, lo haremos sobre un emulador. En concreto vamos a usar FUSE para Linux, ya que es el que el autor usa habitualmente. No obstante, resulta válido cualquier otro que soporte el uso de archivos DSK, como imágenes de disco, y TZX o TAP como cintas, en cualquier plataforma o sistema operativo (MS-DOS, Windows, etc.). Incluso se puede seguir el artículo trabajando directamente el +3 (eso sí, las cargas de cinta se harán más tediosas).


Los programas grabados con los comandos habituales del basic 'LOAD' y 'SAVE' tienen un esquema estándar. Cuando ejecutamos el SAVE “programa” LINE 10, primero se graba una cabecera con la información que necesita la rutina de la ROM para cargar el bloque de datos, y después el bloque de datos propiamente dicho. Para pasar el programa a disco, necesitamos saber la información exacta, y ésta se puede conseguir con un programa lector de cabeceras. Podemos bajarnos un programa que publicó Microhobby en el número 2 con el nombre de 'Listador de cintas', que cumplirá con las funciones requeridas perfectamente, de la web KyENTER. Está grabado en un TAP gracias al webmaster de la misma y nos va a ser de muchísima utilidad.

Imagen 1. El listador de cintas en funcionamiento


Vamos a elegir un clásico para pasar a disco, como es el Manic Miner. Es un juego muy sencillo de grabar en disco siguiendo las indicaciones aquí dadas.

Comenzamos por abrir nuestro emulador y quitar la opción de auto-carga de cintas en caso de que la tuviésemos. Debemos elegir al Spectrum +3 como modelo de hardware que queremos emular.

Abrimos el archivo del 'Listador de cintas' en el emulador y pasamos al BASIC con el menú del +3. Una vez en él tecleamos LOAD “T:” y ENTER, con esto conseguimos que el +3 mande las ordenes de carga a la cinta de cassette y no a la unidad de disco que es a donde van por defecto en este modelo. Tecleamos en esta ocasión LOAD “” y cargaremos el listador en memoria. Una vez cargado, nos saldrá una pantalla azul que nos pregunta por el nombre de la cinta, podemos ponerlo o simplemente dar ENTER, esta información vale realmente para poco; una pregunta similar nos hará respecto a la cara de la cinta y tiene el mismo valor que la anterior. Antes de pulsar ENTER de nuevo, abrimos el archivo TAP o TZX del que queremos sacar la información, en nuestro caso el que lleva el juego Manic Miner, que hemos bajado de WOS. Pulsamos ENTER y al cabo de un par de segundos nos saldrá una pantalla como la de la Figura 1 con parte de la información que necesitamos.

Podemos ver que el Manic Miner está grabado con tres bloques de datos:

  1. BASIC con nombre 'MANICMINER' que se autoejecuta en la línea 1 y tiene una longitud de 142 bytes.
  2. Bytes con nombre 'mm1' que comienza en la dirección 22784 y tiene una longitud de 256 bytes.
  3. Bytes con nombre 'mm2' con comienzo en 32768 y una longitud de 32879 bytes.


Con esta información ya podemos pasar el programa a disco, pero antes tenemos que modificar el cargador BASIC para adecuarlo a nuestro +3.

Reiniciamos el Spectrum (el emulador en este caso) y, desde el BASIC, volvemos a teclear LOAD “T:” y ENTER, y a continuación MERGE “”. Así cargaremos en memoria el cargador del Manic Miner, sin que llegue a ejecutarse gracias al MERGE. Miramos el listado BASIC (que tenemos en la Figura 2) del mismo y es importante que tomemos nota de dos cosas: la dirección del CLEAR y la del USR, que en nuestro caso vienen a ser 24310 para el CLEAR y 33792 para el USR. La primera dirección nos indica el lugar donde colocamos el RAMPTOP para que el BASIC no machaque la información y la PILA del ordenador, y la segunda nos indica la dirección de arranque del programa en código máquina.

Figura 2. Cargador BASIC del Manic Miner


Cuando cargamos un programa de cinta no es necesario indicar el nombre de los bloques que se van a cargar, ya que se supone que van grabados secuencialmente en el mismo orden que los vamos a cargar. Esto no pasa con el +3 y la unidad de disco, debemos indicarle exactamente cómo se llaman los diferentes bloques, en caso contrario no sabría localizarlos. Los nombres que podemos dar a los diferentes archivos en la unidad de disco cambia respecto a como estamos acostumbrados a hacerlo en cinta. En disco se pueden nombrar con el formato de 8+3, es decir, ocho caracteres para el nombre, seguidos de un punto, y tres caracteres para la extensión que nos indique de que tipo de datos está compuesto el archivo. Por ejemplo “manic.bas” para el cargador basic del Manic Miner, “manic.scr” para la pantalla de carga, “manic.bin” para el bloque de datos y código máquina. En cambio, a la hora de nombrar programas en cinta se pueden emplear hasta un total de 10 caracteres, sin extensiones, a nuestra entera disposición.

Con el cargador en memoria tenemos dos opciones, modificar el que tiene el juego original o crear uno nuevo. En este caso simplemente vamos a poner los nombres que deseamos en las órdenes LOAD; los mismos con los que vamos a grabar los bloques posteriormente a disco. El cargador debe quedar como en la Figura 3. Veréis que tiene los comandos tecleados de una forma un tanto especial, con instrucciones tales como VAL, PI, etc. Esto es así para que el programa BASIC ocupe menos en memoria.

Figura 3. Cargador para la versión en disco


Al hablar de disco, nos referimos indistintamente a un archivo DSK cargado en el emulador (para lo cual debemos conseguir un DSK en blanco) o bien un disco virgen en el +3. Para el emulador, podemos coger el archivo 180k.dsk que viene con las CPDTOOLS y hacer una copia con otro nombre.

Abrimos el DSK (vacío) en el emulador y empezamos a grabar los diferentes bloques.

El cargador BASIC lo tenemos en memoria, por lo cual tecleamos SAVE “manic.bas” LINE 10 y pulsamos ENTER. Esperamos unos segundos, y estará grabado en el disco. Los dos bloques de datos deberemos cargarlos ya que no lo hicimos antes.

Ejecutamos CLEAR 3E4 y ENTER, por ejemplo, para evitar que se nos corrompa el bloque que vamos a cargar en 32768 y a continuación LOAD “” CODE: SAVE “manic.scr” CODE 22784,256 y pulsamos ENTER. Con esto cargamos de cinta y despues grabamos a disco el primero de los bloques. Con el segundo hacemos algo similar: LOAD “” CODE: SAVE “manic.bin” CODE 32768,32768 y ENTER. Ya tenemos el programa grabado en disco. Para comprobarlo hacemos CAT y ENTER y debería salirnos algo similar a lo mostrado en la Figura 4.

Figura 4. Listado del disco que acabamos de hacer


Ya tenemos el Manic Miner listo para ser cargado en segundos en nuestro +3. Reseteamos el emulador y tecleamos LOAD “manic.bas” y ENTER. Al cabo de unos segundos, y si seguimos el proceso aquí explicado, tendremos el juego cargado y listo para pegarnos unas partiditas.

Figura 5. Manic Miner pasado a disco



Por supuesto, todo esto que acabamos de realizar lo podemos hacer sobre un +3 real, utilizando cintas y discos reales, etc., con el inconveniente del tiempo de carga. El emulador nos facilita enormemente esta tarea y, además, no olvidemos que podemos grabar el archivo DSK generado a un disco de 3“ o 3”1/2 como explicábamos en esta misma sección el mes pasado.


Miguel A. García Prada
Agosto 2003
MagazineZX #2