Número 1 - Julio 2003 ZX Certified webmaster speccy.org
 
En esta sección queremos enseñar a programar juegos en BASIC mediante el empleo de pequeños ejemplos y soluciones a los problemas que se nos pueden plantear. No pretende ser un profundo curso de BASIC, pero si unas prácticas que complementen nuestros conocimientos previos en el lenguaje, por mínimos que sean, o que puedan servir como ejercicios simultáneos al aprendizaje sobre un libro que podamos leer.

Para poder encontrar una explicación profunda a cada comando que utilicemos, el mejor sitio es el manual del propio Spectrum, sobre todo el que se entregaba con la versión de 16k y 48k con tapas naranjas.

También vamos a utilizar alguna utilidad externa que funciona sobre PC, como puede ser el caso del BAS2TAP, que nos facilite la tarea, ya que, siendo realistas, es más fácil programar en un archivo de texto en el PC y luego probar sobre un emulador, que tener que soportar tiempos de espera en cargas y grabaciones, etc.

Hoy vamos a centrarnos en la carga y grabación de nuestros programas y el uso del BAS2TAP, un programa sencillo pero potente que nos va a ser de mucha utilidad a la hora de programar sobre nuestro PC.


CARGA Y GRABACIÓN DE PROGRAMAS EN EL ZX-SPECTRUM

Lo primero que vamos a aprender es a grabar y cargar nuestros programas en cinta y disco con un Spectrum, en cualquiera de sus modelos.

Escribimos un pequeño programa de ejemplo en nuestro Spectrum:

- PROGRAMA 1 -
10 PRINT "Hola mundo"
20 GO TO 10

Este sencillo programa (aunque corto y simple, no deja de serlo), nos sirve perfectamente para nuestros fines, practicar el uso de los comandos de carga y grabación en nuestro Spectrum.

GRABACIÓN Y CARGA EN CINTA

  • Grabación.

    Simplemente, una vez introducido el programa, tecleamos [SAVE "prueba"] y pulsamos [ENTER], el Spectrum nos mostrará el siguiente mensaje: [Start tape, then press any key], hacemos lo que dice el mismo, pulsamos rec y play en la grabadora y pulsamos cualquier tecla. En unos segundos tendremos grabado el programa en cinta (recordad que el comando SAVE se teclea tal cual en los modelos de 128K, pero que se introduce pulsando la tecla 's' en los modelos 48K).

    Otra opción es indicarle que el programa se autoejecute una vez cargado, sin necesidad de teclear [RUN] para que comience a funcionar, esto lo conseguimos simplemente de la siguiente manera: [SAVE "prueba" LINE 10]. Con esto conseguimos que al cargar el programa se comience a ejecutar por la línea 10. Lógicamente podemos cambiar el número de línea, o poner [LINE 0] para que arranque por la primera línea que encuentre de programa, independientemente del número que tenga. Este valor debe estar comprendido entre 0 y 9999, ya que este último valor es el perteneciente a la última línea que podemos introducir normalmente en un programa BASIC.

  • Verificación.

    Rebobinamos la cinta al comienzo de la grabación, tecleamos [VERIFY "prueba"] y pulsamos [ENTER] y play en el cassette. Si todo va bien, nos devolverá en mensaje de conformidad, y en caso de que falle, el famoso error de carga, con lo cual tendríamos que retomar el punto anterior y volver a grabar el programa de nuevo. Por supuesto, tendremos que tener el programa que hemos grabado en memoria todavía y sin modificar, ya que de otra forma generaría un error de carga por no corresponderse el programa en memoria con lo grabado en cinta. Para introducir VERIFY en modo comando se utiliza la tecla 'R' estando en modo extended. Es decir, pulsamos Caps+Symbol y luego Caps+R.

  • Carga del programa.

    Prácticamente lo mismo que en el apartado de verificación, solo que cambiando el VERIFY por [LOAD "programa"]. Si lo grabamos con la opción [LINE] el programa se ejecutará solo al terminar la carga, si no hicimos esto, tendremos que teclear [RUN] + [ENTER] una vez terminada la carga (RUN se introduce como 'r' en modo 48K). Hay que tener en cuenta que si tenemos otro programa en BASIC en memoria, se borrará al cargar el nuevo encima. Nótese de nuevo que LOAD se introduce pulsando la tecla 'j' en modo comando del 48K.

  • Unión de programas.

    Otra opción que tenemos es unir un programa disponible en la memoria del Spectrum con otro que tengamos en cinta. Esto se logra tecleando [MERGE "programa"] (que se introduce pulsando Caps+T en modo Extended de 48k). Pero hay que tener unas ciertas precauciones debido al funcionamiento de este comando, que nos puede hacer perder líneas de programa en memoria. Normalmente, si las líneas que tenemos en memoria, coinciden por las que tenemos en cinta, las sustituye por estas, y si no coinciden las intercala unas con otras. Esto lo vamos a entender mejor mediante un sencillo ejemplo. Si en memoria tenemos el PROGRAMA 1 que usábamos como primer ejemplo, y en cinta uno tal que:
- PROGRAMA 2 -
 5 REM Esto es una prueba
20 GO TO 5

El resultado que obtendríamos sería:

- PROGRAMA 3 -
 5 REM Esto es una prueba
10 PRINT "Hola mundo"
20 GO TO 5

Con lo cual vemos que, como la línea 5 no estaba en memoria, se incluye sin machacar nada, pero la 20, que está tanto en memoria como en la cinta, es sustituida por la grabada en cinta.

Con [MERGE] también podemos evitar que los programas grabados con la opción [LINE XXXX] se ejecuten al cargar, si teniendo la memoria sin nada, hacemos [MERGE "programa"] al finalizar la carga de el mismo, nos devolverá el control sin empezar a correr el programa. Útil si no queremos estar pendiente de cuando termine para pulsar [BREAK]. Por supuesto, si tenemos algo en memoria funcionará con las propiedades del comando, mezclando y sustituyendo líneas y nos devolverá el control.

NOTA: Estos comandos tienen más opciones, entre ellas guardar programas o datos como bytes, arrays, etc. Cuestiones que explicaremos si llega el momento de utilizarlos. Por el momento con estas explicaciones nos va a valer para ir creando nuestro juego.

GRABACIÓN Y CARGA EN DISCO EN UN SPECTRUM +3

Los comandos son los mismos básicamente que en la opción de cinta, lo único que cambia es el destino hacía donde grabamos y desde donde cargamos, lo cual se lo debemos indicar para que los busque en el sitio correcto, es decir, el disco del +3 o la cinta de cassette, por ejemplo. También cambia ligeramente el nombre que le podemos dar al programa, ahora le podemos poner terminaciones del tipo .bas para programas en BASIC.

Por defecto el +3 manda la salida y entrada de datos de los comandos comentados a la disquetera, "a:". Esto se puede modificar muy fácilmente. Si queremos usar la cinta en lugar de la disquetera, tecleamos [LOAD "t:" + ENTER], el ordenador nos responderá con un mensaje de conformidad y a partir de este momento, cada vez que utilicemos un comando de carga se dirigirá a la cinta de cassette, y si lo que necesitamos es grabar en cinta, hacemos lo mismo pero con el comando [SAVE "t:" + ENTER]. En el momento que queramos volver a orientar el envío de datos al disco, ponemos los mismos comandos anteriores, pero cambiando la letra que corresponda a la unidad deseada, [a:] para la disquetera del +3, [b:] si tenemos una segunda disquetera externa, como la de 3 1/2, [t:] para la cinta de cassette.

Los nombres de los programas, como comentábamos antes, pueden poseer una terminación que los identifique unos de otros. Es decir, podemos poner [SAVE "programa.bas"] para un programa en BASIC, [SAVE "programa.bin" code 30000,4000] para un bloque de bytes o [SAVE "pantalla.scr" SCREEN$] para las pantallas de presentación. La única norma que tenemos que seguir es respetar el límite de 8+3 caracteres por nombre, estilo MS-DOS.

Una opción que tenemos es, dando el nombre adecuado, hacer que un programa se cargue solo con la opción [LOADER] del menú del +3. Para esto debemos grabar el programa como [SAVE "DISK" LINE XXXX], siendo line opcional, como explicamos al comienzo del artículo. Este programa lo podemos usar como menú de acceso a los demás archivos, o cualquier utilidad que se nos ocurra.

Tenemos más comandos para utilizar en el +3 y la unidad de disco.
  • Formateo de los discos: Antes de utilizar un disco, deberemos darle un formato. Esto se consigue con el comando [FORMAT]. Un disco sin formato no es legible para el sistema operativo, por lo cual deberemos dárselo nosotros, tarea muy sencilla que se consigue tecleando [FORMAT "A:" + ENTER], esperamos unos segundos y repetimos el proceso con la otra cara del disco. Hay que ser muy cuidadosos con el uso de este comando, ya que al utilizarlo perderemos el contenido de la cara del disco al que lo apliquemos.
  • Listado de los archivos contenidos en un disco: El comando [CAT + ENTER] nos saca un listado de los archivos que tenemos en el disco, ordenados alfabéticamente.
  • Borrado de ficheros: Con el comando [ERASE "programa.bas"] borraremos del disco el archivo nombrado, sin posibilidad de recuperarlo, por lo cual hay que tener mucha prudencia en su uso.
UTILIZACIÓN DE BAS2TAP

BAS2TAP es un programa creado por Martijn van der Heide, conocido por ser el responsable de la web World of Spectrum, que nos va a permitir escribir un programa BASIC en un editor de texto, sobre PC por ejemplo, y crear un archivo TAP que se pueda cargar en el emulador que usemos habitualmente, e incluso pasarlos a cinta con los programas destinados al efecto y cargarlo en un Spectrum real. BAS2TAP está disponible para plataformas Linux, PC/MS-DOS, Amiga y Mac OS X. El autor de este artículo lo ha probado en Linux y MS-DOS con un resultado optimo en ambos casos, en las otras dos plataformas no ha sido posible por no disponer de las máquinas.

Las ventajas de programar utilizando este sistema son evidentes y no las vamos a enumerar todas, pero solo con decir que vamos a evitar los tiempos de carga y grabación en el Spectrum, y que los resultados van a ser inmediatos sobre el emulador, creo que pocas justificaciones más necesitamos.

Una vez descargado el programa de su web, lo descomprimimos en una carpeta y queda listo para su uso. En el archivo [bas2tap.doc] que acompaña a la distribución encontramos las instrucciones y otros datos útiles, aquí vamos a explicar someramente lo que nos hace falta saber.
  • Vamos a comenzar a programar: abrimos nuestro editor de textos favorito, vim para Linux, Bloc de Notas en Windows, etc. e introducimos el PROGRAMA 1 que utilizamos antes, por ejemplo. Los comandos BASIC del Spectrum debemos teclearlos en mayúsculas, o al ejecutar el BAS2TAP nos generará una serie de errores, que podemos evitar pasando un parámetro que luego comentaremos, a la hora de ejecutarlo. También podemos dejar líneas en blanco entra las escritas de código para clarificar el mismo, aunque esto genera una serie de alertas (warnings) a la hora de crear el archivo .TAP, no tiene mayor importancia.

    Una vez tengamos el programa BASIC preparado salvamos el archivo .txt con el nombre que deseemos, a ser posible en formato 8+3, por ejemplo: "programa.txt" y lo alojamos en la carpeta donde tengamos descomprimido el BAS2TAP.

  • El siguiente paso es generar el archivo .TAP que cargaremos en el emulador. BAS2TAP hay que utilizarlo desde consola de texto, tanto si estamos en Linux como en Windows, ya que para este último S.O. no hay versión y corre bajo MS-DOS.

    Tecleamos [bas2tap programa.txt] y, siempre que no tengamos errores de sintaxis en el listado, nos creará un archivo programa.tap en pocos segundos.

    Otra opción que le podemos poner es [-c] con lo que ignorará si tenemos los comandos escritos en mayúsculas o minúsculas. [bas2tap -c programa.txt]

    También podemos poner el nombre del archivo tap, diferente al txt de entrada: [bas2tap programa.txt minero.tap], con lo cual generará un archivo minero.tap.

    En caso de que dejemos líneas en blanco entre el código BASIC para poder verlo con más claridad, nos generará alertas al crear el tap, podemos decirle al programa que no nos las muestre con [bas2tap -w programa.txt].

    Y, por último, si queremos que el tap, se autoarranque al cargarlo en el emulador, igual que con la opción LINE del BASIC en el Spectrum: [bas2tap -aXX programa.txt] donde XX es la línea por la que queremos que se ejecute el programa.
Por supuesto esta utilidad tiene más opciones que podemos utilizar, y que tenemos descritas en el archivo bas2tap.doc que acompaña a la distribución del mismo. Pero con estos simples pasos aquí reflejados son suficientes para empezar a trabajar con este buen programa de Martijn van der Heide.

CONCLUSIONES

En esta entrega nos hemos limitado a ver unos conceptos básicos que necesitaremos utilizar cada vez que queramos programar, como es el almacenamiento de nuestro código en un soporte permanente, ya que la memoria RAM de nuestro Spectrum se borra en cuanto deja de recibir corriente eléctrica. El mes que viene empezaremos a crear de cero nuestro primer juego, e iremos ampliándolo poco a poco y metiendo opciones y efectos que lo hagan más atractivo.

LINKS


MIGUEL
 
Volver arriba
(c) 2003 Magazine ZX