"A la fuerza ahorcan" o "El hambre agudiza el ingenio"

Antonio Rodríguez Hernández.
Agosto 1989

Esto es la historia de una necesidad. No se si ya realmente va a remediar a algún colega, pero como he recibido varias cartas y llamadas telefónicas instándome a ello me siento en la obligación de hacer público el método empleado por mi para tener copia de seguridad de los programas en Mdv almacenándolos en cintas de cassette normales.

Esto ocurrió en una época en que los Mdvs pasaron de 1200 Ptas. a 675 (Precios de El Corte Ingles). Esta circunstancia alivió a muchos el grave problema de tener copias de seguridad de sus programas a un precio decente, pero el hecho de que consiguiera relacionarme con varios colegas e intercambiase unos cuantos programas vino personalmente a agravar el mío. Así que hubo que atornillarse el ingenio y con más interés que conocimientos (Ahora se un poquito más, solo un poco) lanzarse a la búsqueda de un método que, de una manera económica, me evitase la angustia del "XXX Medio incorrecto"

Quiero hacer hincapié en que el método es casi rudimentario, que cualquier programador medianamente experto lo hubiese hecho mejor, que la programación, como queda claro al analizar el método, no es mi fuerte, pero que, bueno, la verdad es que funciona y funciona bien, así que aplicaremos el lema de que un programa es bueno si hace aquello que esperamos de él.

En primer lugar diré que el método empleado consiste en comunicar el QL con un Spectrum + Interface 1 a través de las respectivas RS-232. Por supuesto hay que confeccionarse el cable adecuado a los conectores de que se dispongan (En mi caso tengo multiplexados los conectores "raros" del QL con otros tipo D de 9 pins) con la disposición conocida como Modem Nulo: 2 con 3, 3 con 2, 4 con 5, 5 con 4 y 7 con 7 ( o sus equivalentes según conector).

Con el fin de hacerlo lo más automático posible y no tener problemas con identificación de fin de ficheros y otros problemillas anexos al método, se me ocurrió utilizar una rutina que viene en el Mdv de demostración que te dan cuando compras el cassette de Mdv del Spectrum y que se llama "COPIER".

Esta rutina crea unas extensiones al BASIC del Spectrum que permite hacer copias en cassette de un fichero que tengamos en el Mdv sin preocuparnos del tipo que sea ni de su longitud y recuperarlo después de cinta de cassette a Mdv de una forma automática.

Estas extensiones,entre otras, son:

* MOVE "m";1;a$ TO "c" (Pasa el fich.a$ del Mdv1 a "cassette")

* MOVE "c";;" " TO "m";1 (Pasa el primer fich. que venga de cinta a mdv1)

Esto tiene la ventaja que en la recuperación los nombres de los diferentes ficheros de la cinta son los mismos que los originales, restaurándose el Mdv del Spectrum tal cual como era cuando lo pasamos a cinta.

Además este programa tiene la ventaja de que cuando el fichero sobrepasa los 36 Kbytes lo graba en cinta en dos partes como PART1 y PART2 e incluso en PART3 si es necesario, quedando limitada la capacidad del método solo por la capacidad del cartucho de Mdv que utilicemos (Entre 91 a 93 Kbytes).

Como os habréis dado cuenta ya, lo original de mi idea fue que si yo tenía un cartucho de Mdv del Spectrum y podía pasarlo a cassette de una manera fácil y semiautomática estaba claro que para resolver mi necesidad solo me faltaba ya el pasar el Mdv del QL al formato del Mdv del Spectrum.

Y manos a la obra.

Me hacían falta dos programas, uno para cada micro, que me gobernasen las puertas serie en ambos sentidos ya que de nada me servia pasar los ficheros al Spectrum si después no podía recuperarlos al QL.

En el programa para QL que llamé TRANSQL y en su línea 120, carga un fichero llamado "ramdisk" de 8192 Bytes que no es otro sino el fichero G.B. que viene en el emulador de CP/M de QLSOFT y que en realidad es una Ramdisk dinámica muy rápida y cómoda ya que se adapta en todo momento a la extensión de la memoria libre y no hace falta formatearla ya que su extensión es variable.

La verdad es que desde que la descubrí la incluí en el BOOT de arranque del ordenador de manera que la tengo siempre cargada ademas del Toolkit II y otras rutinas menores.

A continuación os listo TRANSQL:

100 CLS #2:CLS #1:CLS #0:MODE 8

110 a=RESPR (8192)

120 LBYTES mdv1_ramdisk,a

130 CALL a,0,0,0,0,0,0,0,a+5120

140 CALL a+6144

150 CALL a

160 MENU

170 DEFine PROCedure CASSQL

180 BAUD 9600:CLS #0:CLS #1:CLS #2

190 INPUT "¿Nombre?..";a$

200 COPY ser1 TO "ram1_"&a$

210 COPY "ram1_&a$ TO "mdv1_"&a$

220 DELETE "ram1_"&a$

230 MENU

240 END DEFine

250 DEFine PROCedure QLCASS

260 BAUD 9600:CLS #0:CLS #1:CLS #2

270 OPEN_NEW #8;RAM1_catalogo

280 DIR #8,mdv1_

290 CLOSE #8

300 OPEN_IN #8,ram1_catalogo

310 INPUT #8,a$

320 INPUT #8,a$

330 IF EOF(#8)=1:GO TO 460

340 PAUSE 50

350 INPUT #8,a$

360 CSIZE 3,1:CLS:AT 5,0:PRINT "Prog: ";a$

370 CSIZE 0,0:AT 18,30:PRINT "(S/N)"

380 c$=INKEY$

390 IF c$="s" OR c$="S":GO TO 420

400 IF c$="n" OR c$="N":GO TO 330

410 GO TO 380

420 COPY "mdv1_"&a$ TO "ram1_"&a$

430 COPY "ram1_"&a$ TO ser1

440 DELETE "ram1_"&a$

450 GO TO 330

460 CLS:CLOSE #8

470 DELETE ram1_catalogo

480 DEFine PROCedure MENU

490 CLS #0:CLS #1:CLS #2

500 CSIZE 3,1

510 AT 3,2:PRINT "Selecciona:"

520 CSIZE 2,1

530 AT 5,10:PRINT "1.-Spectrum -- QL"

540 AT 7,10:PRINT "2.-QL -- Spectrum"

550 LET z$=INKEY$

560 IF z$="1":CASSQL

570 IF z$="2":QLCASS

580 GO TO 550

El uso de una ramdisk en éste programa no es un capricho ya que como el intercambio de información a través de la SER1 se realiza sector a sector del Mdv con confirmación de haberlo recibido bien, hay por cada uno de ellos un acceso al cartucho, una búsqueda mas o menos larga y una parada. Todo este trasiego, mas el que se genera para la operación contraria, es lento y laborioso, es por lo que es preferible pasar toda la información de una sola vez a la RAM y allí hacerle todas las operaciones necesarias.

Para el Spectrum realizé el programilla siguiente:

1 CLS:PRINT AT 6,4;"Selecciona: "

2 PRINT AT 10,10;"1.-QL--CASETTE"

3 PRINT AT 12,10;"2.-CASETTE--QL"

4 LET t$=INKEY$

5 IF t$="1" THEN GOTO 10

6 IF t$="2" THEN GOTO 1000

7 GOTO 4

10 REM ************************

       **** QL--CASETTE *******

       ************************

20 CLS:FORMAT "b";9600

30 OPEN #4;"b"

40 INPUT "Nombre?...";z$

50 OPEN #6;"m";1;z$

60 MOVE #4 TO #6

70 CLOSE #4:CLOSE #6

80 *MOVE "m";1;z$ TO "C"

90 ERASE "m";1;z$

100 CLS:GOTO 30

1000 REM ***********************

         **** CASETTE--QL ******

         ***********************

1010 CLS:FORMAT "b";9600

1020 *MOVE "C";;" " TO "m";1

1030 OPEN #8;"b":INPUT "Nombre?...";a$

1040 ERASE "m";1;a$

1050 CLOSE #8:GOTO 1030

Por supuesto antes de correr este programa en el Spectrum hemos de cargar el programa antes mencionado llamado COPIER para que las extensiones al BASIC estén activas.

Todavía no se porque razón cuando se está ejecutando el programa y se llega a cualquier instrucción CLOSE #x la pantalla del Spectrum se vuelve negra y se queda como bloqueado sin pasar a ejecutar la línea siguiente. Se sale de ahí dando un BREAK y a continuación CONTINUE.

Y ya está, esto es todo lo que hay que ver. En una cinta C-60 se pueden meter hasta 6 Mdvs si no están muy llenos (Aprox. 500 a 550 k). Yo lo he utilizado casi dos años y funciona. Espero que lo mejoréis bastante y que lo publiquéis.Yo tengo discos de 3" y 3.5" pero puede remediar a otros colegas.

Un saludo a todos y hasta la próxima...


Nota:

Se me ha ocurrido comprobar mi MDV demostración y no he encontrado la utilidad COPIER. Es posible que sea debido a que mi Interface I y Microdrive fuesen comprados en el verano de 1984 (con garantía INVES).

Os vais a reír, se me ha ocurrido comprobar el cableado de mi cable QL/Z88 y resulta que coincide totalmente con el Interface I del Spectrum ¿Sabéis qué significa eso? Solamente hay un detalle que no debe afectar en absoluto, los pines 8 y 9 están soldados, pero no están conectados al QL (el 9 corresponde a + 9 V y el 8 a ninguna conexión).

Salvador Merino, 17/6/1989.


Sinclair QL Recursos en Castellano Alojado en / Hosted at:
Sinclair QL Recursos en Castellano
Sinclair QL Spanish Resources