Manual de Basic Spectrum 48k.

Capítulo 20

Almacenamiento en cinta

Resumen

  • LOAD, SAVE, VERIFY, MERGE

Los métodos básicos para utilizar la grabadora de cassette para conservar (SAVE), cargar (LOAD) y verificar (VERIFY) programas se dan en el fascículo de introducción. Esta sección debe ser objeto de lectura e intentarse realizar los procedimientos antes de seguir más adelante.

Hemos visto que LOAD borra el anterior programa y las variables existentes en el ordenador antes de cargar los nuevos procedentes de la cinta; hay otra sentencia, MERGE, que no hace lo mismo. MERGE sólo borra una variable o línea de programa anterior si ha de hacerlo porque haya una nueva con el mismo nombre o número de línea. Introduzca por el teclado el programa de "dados" incluido en el capítulo 11 y consérvelo en cinta, como "dice" (dados). Ahora introduzca y ejecute lo siguiente:

   1 PRINT 1
   2 PRINT 2
10 PRINT 10
20 LET x = 20

y luego, proceda como para la verificación, pero sustituyendo VERIFY "dice" por:

MERGE "dice"

Si efectúa el listado del programa, puede ver que han sobrevivido las líneas 1 y 2, pero que las líneas 10 y 20 se han sustituido por las del programa de dados. x también ha sobrevivido (pruebe PRINT x).

Ya ha visto formas sencillas de las cuatro sentencias utilizadas con la cinta de cassette:

SAVE registra el programa y las variables en cassette.

VERIFY comprueba el programa y las variables en cassette con respecto a los ya existentes en el ordenador.

LOAD borra del ordenador todos sus programas y variables anteriores y les sustituye por otros nuevos extraídos de cassette.

MERGE es como LOAD con la salvedad de que no borra una variable o línea de programa anterior, a no ser que haya de hacerlo porque su nombre o número de línea sea coincidente con una nueva procedente del cassette.

En cada una de ellas, la palabra clave va seguida por una cadena; para SAVE ello proporciona un nombre para el programa en cinta, mientras que para las otras tres, comunica al ordenador qué programa buscar. Mientras realiza la búsqueda, imprime el nombre de cada programa que encuentra. Hay un par de peculiaridades interesantes para todo ello.

Para VERIFY, LOAD y MERGE, puede proporcionar la cadena vacía como el nombre para buscar; entonces, el ordenador no tiene que preocuparse del nombre, sino que toma el primer programa que se encuentra.

Una variante en SAVE adopta la forma:

SAVE cadena LINE número

Un programa conservado con su empleo se registra de tal forma que cuando sea objeto de nueva lectura por LOAD (pero no MERGE) salta automáticamente a la línea con el número dado, con la que se ejecuta por sí misma.

Hasta ahora, los únicos tipos de información que hemos almacenado en cassette han sido programas junto con sus variables. Hay, asimismo, otras dos tipos denominados matrices y bytes.

Las matrices se tratan con pocas diferencias.

Puede conservar matrices en cinta con el empleo de DATA en una sentencia SAVE, mediante:

SAVE cadena DATA nombre de matriz()

La cadena es el nombre que la información tendrá en la cinta y opera en exactamente la misma forma que cuando conserva un programa o bytes ordinarios.

El nombre de la matriz especifica la matriz que desea conservar, por lo que es simplemente una letra seguida por $. Recuerde los paréntesis en lo sucesivo; podría considerar que son lógicamente innecesarios pero, no obstante, ha de ponerlos para hacerlo más fácil para el ordenador.

Están claras las funciones independientes de la cadena y del nombre de la matriz. Si dice, por ejemplo:

SAVE "Bloggs" DATA b()

entonces, SAVE toma la matriz b del ordenador y la almacena en cinta con el nombre "Bloggs". Cuando teclea:

VERIFY "Bloggs" DATA b()

el ordenador buscará una matriz de números almacenada en cinta con el nombre "Bloggs" (cuando la encuentre, escribirá "Matriz de números: Bloggs") y la comprobará con respecto a la matriz b en el ordenador.

LOAD "Bloggs" DATA b()

encuentra la matriz en la cinta y luego (si hay espacio para ella en el ordenador) borra cualquier matriz ya existente, denominada b y carga la nueva matriz procedente de la cinta, a la que llama b.

No puede utilizar MERGE con matrices almacenadas.

Puede almacenar matrices de caracteres (cadenas) de la misma forma. Cuando el ordenador está buscando la cinta y encuentra una de estas, escribe "Matriz de caracteres": seguida por el nombre. Cuando carga una matriz de caracteres, no borrará solamente cualquier matriz de caracteres anterior con el mismo nombre, sino también cualquier cadena con el mismo nombre.

El almacenamiento de bytes se utiliza para fragmentos de información sin ninguna referencia a lo que se aplica la información que podría ser: una imagen de televisión o gráfico definido por el usuario o algo que haya elaborado por si mismo. Se muestra con el empleo de la palabra CODE, como en:

SAVE "imagen" CODE 16384,6912

La unidad de almacenamiento en memoria es el byte (un número entre 0 y 255) y cada byte tiene una dirección (que es un número entre 0 y 65535). El primer número después de CODE es la dirección del primer byte que ha de almacenarse en cinta y el segundo es el número de bytes a almacenar. En nuestro caso, 16384 es la dirección del primer byte en el fichero de presentación visual (que contiene la imagen de televisión) y 6912 es el número de bytes en la misma, por lo que estamos conservando una copia de la pantalla de televisión (haga la prueba). El nombre "imagen" opera lo mismo que los nombres para programas.

Para volverle a cargar, utilice:

LOAD "imagen" CODE

Puede poner números después de CODE en la forma:

LOAD nombre CODE comienzo, longitud

En este caso, la longitud es simplemente una medida de seguridad; cuando el ordenador ha encontrado los bytes en cinta con el nombre correcto, no obstante, rehusará cargarles si hay más que la longitud de los mismos, puesto que, evidentemente, hay más datos de los que esperaba y podría el ordenador sobreescribir algo que no tuviera usted intención de modificar. Dará el informe de error R Tape loading error. Puede omitir longitud y, entonces, el ordenador efectuará la lectura de cuantos bytes haya.

Comienzo indica la dirección en donde ha de volverse a cargar el primer byte y que puede ser diferente de la dirección en la que fue conservado, aunque si son las mismas puede omitir comienzo en la sentencia LOAD.

CODE 16384, 6912 es tan útil para conservar y cargar la imagen que puede sustituirle por SCREEN$, por ejemplo:

SAVE "imagen" SCREEN$
LOAD "imagen" SCREEN$

Este es un caso raro para el que no operará VERIFY. Tenga en cuenta que VERIFY escribe los nombres de lo que encuentra en la cinta, de modo que en el momento en que llega a la verificación se ha cambiado el fichero de la presentación visual y falla la verificación. En todos los demás casos, debe utilizar VERIFY siempre que emplee SAVE.

A continuación se da un resumen de las cuatro sentencias utilizadas en este capítulo.

Nombre significa cualquier expresión de cadena y se refiere al nombre con el que se almacena la información en cassette. Debe estar constituido por los caracteres de impresión en ASCII, de los que sólo se utilizan los 10 primeros.

Hay cuatro clases de información que se pueden almacenar en cinta: programa y variables (juntas), matrices de números, matrices de caracteres y bytes puros.

Cuando VERIFY, LOAD y MERGE están buscando información en la cinta con un nombre dado y de una clase dada, imprimen en la pantalla la clase y el nombre de toda la información que encuentran. La clase se indica por "Programa:", "Matriz de números:", "Matriz de caracteres:" o "Bytes:". Si nombre era la cadena vacía, toman el primer lote de información de la clase adecuada, haciendo caso omiso de su nombre.

SAVE

Conserva información en cinta bajo el nombre dado. El error F se produce cuando el nombre está vacío o tiene 11 o más caracteres.

SAVE siempre pone un mensaje "Start tape, then press any key" (ponga en marcha la cinta, luego pulse cualquier tecla) y espera a que se pulse una tecla antes de conservar algo.

  1. Programa y variables:

    SAVE nombre

    es la forma normal.

    SAVE nombre LINE número de línea

    conserva el programa y variables de tal forma que la carga LOAD se sigue automáticamente con

    GO TO número de línea

    SAVE nombre LINE es equivalente a SAVE nombre LINE 1, de modo que cuando se cargue el programa, se ejecute por sí mismo desde el principio.

  2. Bytes:

    SAVE nombre CODE comienzo, longitud

    conserva la longitud en bytes que comienza en la dirección comienzo.

    SAVE nombre SCREEN$

    es equivalente a

    SAVE nombre CODE 16384, 6912

    y conserva la imagen de televisión.

  3. Matrices:

    SAVE nombre DATA letra()

    o

    SAVE nombre DATA letra $()

    conserva la matriz cuyo nombre es letra o letra$ (ello exige no tener ninguna relación con nombre).

VERIFY

Comprueba la información en cinta con respecto a la información existente en memoria. La falta de verificación da el informe de error R Tape loading error (error de carga de cinta).

  1. Programa y variables:

    VERIFY nombre
  2. Bytes:

    VERIFY nombre CODE comienzo, longitud

    Si los bytes de nombre en cinta son más en número que en longitud, entonces, da el error R. De no ser así, comprobarles con respecto a los bytes en memoria que comienzan en la dirección comienzo.

    VERIFY nombre CODE comienzo

    comprueba los bytes de nombre en cinta con respecto a los que hay en memoria que comienzan en la dirección comienzo.

    VERIFY nombre CODE

    comprueba los bytes en nombre en la cinta con respecto a los que hay en memoria que comienza en la dirección a partir de la cual se conservó el primer byte de cassette.

    VERIFY nombre SCREEN$

    es equivalente a:

    VERIFY nombre CODE 16384, 6912

    pero, casi con toda certeza, dejará de verificar.

  3. Matrices:

    VERIFY nombre DATA letra()

    o

    VERIFY nombre DATA letra $()

    comprueba el nombre de matriz con respecto a la letra o letra$ de matriz en memoria.

LOAD

carga nueva información a partir de la cinta, borrando de la memoria la anterior información.

  1. Programa y variables:

    LOAD nombre

    borra el anterior programa y variables y carga el nombre de variables y programa a partir de la cassette; si el programa se conservó utilizando SAVE nombre LINE, el ordenador realiza un salto automático.

    El error 4 Out of memory se produce si no hay espacio para el nuevo programa y variables. En este caso, no se borran el anterior programa y variables.

  2. Bytes:

    LOAD nombre CODE comienzo, longitud

    Si los bytes en nombre de la cinta son más en número que en longitud, entonces da un error R. De no ser así, los carga en memoria empezando en la dirección comienzo y recubriendo cualquier cosa que hubiera anteriormente.

    LOAD nombre CODE comienzo

    carga nombre en bytes desde cinta en memoria, empezando en la dirección comienzo y recubriendo cualquier cosa que hubiera con anterioridad.

    LOAD nombre CODE

    carga el nombre en bytes desde cinta en memoria empezando en la dirección a partir de la cual se conservó el primer byte de cinta y recubriendo los bytes que estaban allí en memoria con anterioridad.

  3. Matrices:

    LOAD nombre DATA letra()

    o

    LOAD nombre DATA letra $()

    borra cualquier matriz ya denominada letra o letra $ (según sea adecuado) y forma una nueva a partir de la matriz almacenada en cassette.

    El error 4 Out of memory se produce si no hay espacio para matrices nuevas. No se borran las matrices anteriores.

MERGE

Carga la nueva información desde cassette sin borrar la anterior información de la memoria.

  1. Programa y variables:

    MERGE nombre

    funde el nombre del programa con el ya existente en memoria, recubriendo cualesquiera variables o líneas de programa en el anterior programa cuyos nombres o números de línea no están en concordancia con los del nuevo programa.

    El error 4 Out of memory se produce a no ser que haya suficiente espacio en memoria para la totalidad del anterior programa y variables y la totalidad del nuevo programa y variables que se cargan desde la cinta.

  2. Bytes:

    Imposible.

  3. Matrices:

    Imposible.

Ejercicios

  1. Haga una grabación en cassette en la que el primer programa, cuando se carga, imprime un menú (una lista de los demás programas en la cassette), le pida que elija un programa y luego, lo carga.

  2. Tome el gráfico de piezas de ajedrez del capítulo 14 y luego, teclee NEW y se seguirán conservando. Sin embargo, no se conservarán cuando se desconecte el ordenador; si desea mantenerles, debe conservarlos en cinta, utilizando SAVE con CODE. La forma más fácil de conservar los veintiún gráficos definidos por el usuario mediante:

    SAVE "ajedrez" CODE USR "a", 21 * 8

    seguida por:

    VERIFY "ajedrez" CODE

    Este es el sistema de conservación de bytes que se empleó para la conservación de la imagen. La dirección del primer byte a conservar es USR "a", la dirección del primero de los ocho bytes que determinan la configuración del primer gráfico definido por el usuario y el número de bytes a conservar es 21 * 8 (8 bytes por cada uno de los 21 gráficos).

    Para una nueva carga, normalmente utilizaría

    LOAD "ajedrez" CODE

    Sin embargo, si están volviendo a cargar en un Spectrum con una cantidad de memoria diferente o si han desplazado el gráfico definido por el usuario a una dirección distinta (ha de hacer esto deliberadamente con el empleo de técnicas más avanzadas), ha de tener más cuidado y utilizar:

    LOAD "ajedrez" CODE USR "a"

    USR permite el hecho de que el gráfico debe cargarse de nuevo en una dirección diferente.

Manual de Basic Spectrum 48k.