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:
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:
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