Swift Disk El Swift Disk fue creado por la compa~ia Petron Electronics. Ofrece una combinacion facil de usar entre la interfaz de discos y el boton de copiado como el del Multifaz 1. La interfaz totalmente compatible con el 48k y el 128k, tiene conectores para un joystick Kempston, puerto serial para impresora y la posibilidad de conectar hasta cuatro disqueteras, incluido un boton para acceder al modo DOS. La version 1 era optima para los amantes de los juegos, pero limitado para usuarios mas serios y programadores. La version 2 en cambio, a~ade unos comandos basic y DOS, siendo la sintaxis un poco mas facil que la del Micro drive. La version 3 a~ade a todo esto la posibilidad de emular al ZX Interfaz F1 con Microdrives. SwiftDisk II El Swiftdisk II fue creado por la compa~ia Sixwords Ltd, el cual permite usar gran variedad de disqueteras de 3.5" y es una version mejorada del anterior Swiftdisk. A diferencia de su predecesor que se conectaba en la parte baja del Spectrum, este encaja mas perfectamente y permite a su vez el uso de otros perifericos. Se hicieron varias configuraciones, todas opcionales del Swiftdisk II, pudiendo elegirse entre una con toma serial o con toma paralelo para conectar impresoras, ademas del "Microdrive Hardware Mapping", para poder trabajar en el modo Microdrive emulado. Hay tres modos de trabajar con el Swiftdisk: a) modo SwiftDos - basta pulsar el boton de la interfaz para entrar en esta modalidad. b)modo BASIC - basta con a~adir un "%" al comando Basic de disco, para diferenciarlo del casete o microdrive. c) modo Microdrive - no necesita zx interfaz 1, basta cargar el emulador para poder usar el disco como un Microdrive. sintaxis: comando [%][#flujo,];"nombre"[,parametros] Comandos del Swift DOS: Format, Load, Save, Move, Erase, Catalogue, Rename, Date, Alter, Backup, Keep, Unkeep, Quit, *. Comandos del Swift Basic: Format%, Cat%, Load%, Save%, Merge%, Erase%, Open#%, Close#%, Print#, Input#, Inkey$#, In%, Out%, %eof, Lprint, Llist, %lower, %date, %err y %line. Los drives admitidos son numerados del 0 al 3. El numero de drive puede ser un numero, una variable numerica o de cadena con VAL. Para designar la unidad por defecto, basta asociarla a un comando como C nn o L nn; nombre. El % indica que se usara el disco en vez del casete. El nombre es de hasta 10 caracteres. No hay atributos excepto el de fichero protegido o desprotegido. Tampoco existen comodines de ningun tipo. Swift DOS: Bajo esta modalidad los comandos son tipeados letra a letra. El DOS admite incluso la primera letra de un comando, asi basta tipear L por LOAD. Si uno olvida a~adir los parametros requeridos, el sistema consultara al usuario para obtener toda la informacion necesaria. Format sintaxis: F / FORMAT [{nombre} {fichas} {tracks}] donde: nombre = un texto de hasta 10 caracteres fichas = numero maximo de archivos a contener (32 por defecto) tracks = 40 y 80 (por defecto) Este comando formatea y da nombre al volumen de los discos. Toma dos minutos formatear un disco a 640k. A mayor numero de fichas, mayor lentitud y devoramiento de espacio en el disco. Sin parametros formatea con nombre SWIFT con 32 como maximo y 80 pistas. Catalog sintaxis: C / CAT [{} {B / F}] donde: B = Brief (breve) F = Full (completo) CAT muestra los datos del directorio en dos formas a elegir: uno breve y otro completo. El primero solo lista los nombres de cada archivo, la fecha de creacion, el tama~o en sectores de 256 caracteres y el tipo de archivo. El completo a~ade a eso las direcciones del codigo, su posicion de comienzo o el tama~o de los registros por fichero. Save sintaxis: S / SAVE [{d;} nombre {[S] [b]} {C st ln}] donde: d = un valor del 0 al 3 S = SCREEN$ - salva solo la pantalla b = numero del color del borde seleccionado para verlo al cargar lo salvado C = CODE salva porcion de memoria a partir de st con longitud ln SAVE permite salvar imagenes completas de programas en memoria, pantallas o porciones de codigo maquina. Ejemplo: S FRED 7 - salvara el contenido entero de la memoria al disco cero bajo el nombre FRED con borde 7. Los datos no se guardan comprimidos como con el Multiface, pero aun es posible salvar 13 imagenes de 48K o 4 de 128K en un disco. S 1;FRED S - salva la pantalla con nombre FRED en el disco Los usuarios del 128k pueden elegir entre sus dos pantallas posibles. Este comando es el unico con el que podemos crear snapshots de programas. Load sintaxis: L / LOAD [{d;} nombre [addr {ln}]] donde: Addr = opcional la direccion de memoria donde se cargara y ejecutara ln = opcional en caso de incluir addr, es la longitud del codigo maquina Carga la imagen o rutina en C.M. "nombre" de la unidad por defecto como SAVE. Erase sintaxis: E / ERASE [{d;} nombre] Borra el archivo nombre de la unidad por defecto sin importar el tipo. Rename sintaxis: R / RENAME [n1 n2] Este comando renombra el archivo n1 con el nombre n2 siempre que n2 no exista y sea un nombre valido. Move sintaxis: M / MOVE [n1 n2 {*}] Este comando copia el archivo n1 bajo el nombre n2 usando uno o dos drives, siendo mas lento el copiado con una sola unidad. La opcion * debe usarse solo si se quiere copiar n1 en otro disco pero con la misma unidad por defecto. Backup sintaxis: B / BACKUP [fuente dest {;volum}] donde: fuente = la unidad 0 - 3 que va ser copiado dest = unidad 0 - 3 donde se hara la copia volum = opcional, nombre del disco si se va a crear uno nuevo para la copia Al igual que MOVE, este comando sirve para copiar datos entre discos, pero a diferencia del primero este copia todo el disco pasando los datos a otro. Esto incluye los espacios vacios en el disco. La unica desventaja es que estos comandos son lentos. Con un solo drive habria que estar cambiando los discos continuamente debido a que lo hace copiando cada dato en 4 partes para evitar el perturbar la memoria principal del Spectrum. Al final resulta mas rapido el cargar y salvar individualmente cada archivo. Alter sintaxis: A / ALTER [addr valor] donde: addr = direccion de memoria RAM a pokear valor = el nuevo codigo a ingresar Este comando permite la edicion de los codigos del programa contenido en la memoria y asi poder aplicar los POKES que uno encuentra en magazines como "CRASH", sin tener que recurrir a trucos de carga o Multifaces. Date sintaxis: D / DATE {dd-mm-aa} Este comando permite cambiar la fecha por defecto. Sin parametros muestra la fecha en curso y pide una nueva fecha. Keep sintaxis: K / KEEP [archivo] Literalmente guardar. Protege un archivo contra borrados accidentales con ERASE. Unkeep sintaxis: U / UNKEEP [archivo] Remueve la proteccion activada con el comando KEEP. Quit sintaxis: Q / QUIT Sale del DOS y vuelve al punto desde donde se le llama, o ejecuta la imagen previamente cargada con el comando LOAD. Reset sintaxis: * Basta dar el comando "*" para resetear la computadora. NOTA: no se puede pulsar el boton del DOS para salir de un comando que se ha tipeado y entrado por error o simplemente deseamos abandonar. Basta con ENTER para abandonar D, pero los demas comandos exigen si o si un dato a tipear. Swift Basic: Carece de los comandos Alter, Backup, Keep, Move, Rename y Unkeep propios del DOS, ni hay ningun equivalente Basic. Existen en cambio, comandos que son exclusivos para el manejo de ficheros tanto secuenciales como directos. A diferencia del modo S-DOS, en S-basic no hay disco por defecto, es obligado designar la unidad para cada comando a usar como veremos a continuacion. Format sintaxis1: FORMAT %;"nombre"[,max_fichas {,pistas}] Permite formatear discos nuevos dejandolos listos para ser usados o para reformatearlos eliminando todo su contenido previo. Al igual que su version del DOS, requiere que se le indique la cantidad maxima de fichas a contener. sintaxis2: FORMAT %#; "T"/"B",baudrate,linelength donde: flujo = un valor de 0 a 15 baudrate = el rango de baudios linelength = largo de las lineas a usar T = modo texto B = modo binario Este comando formatea la toma serial para poder usar adecuadamente cualquier impresora que se le conecte a la interfaz. Cat sintaxis: CAT %[#flujo,][,B/F] CAT % es equivalente al comando CATALOGUE del DOS. Adicionalmente pueden usarse los canales del Spectrum, de modo que se puede enviar el catalogo mediante CAT %#3,0 a una impresora como la ZX, Alphacom o cualquiera otra conectada al interfaz (una vez formateado). Save sintaxis: SAVE %;"nombre" [LINE/CODE/DATA/SCREEN$] sintaxis completamente similar a su version de casete. Salva el programa dandole un "nombre" en el drive. Load sintaxis: LOAD %;"nombre" [CODE/DATA/SCREEN$] Carga el programa "nombre" del drive . Merge sintaxis: MERGE %;"nombre" Igual que el comando de casete, carga solo programas basic del drive , con el "nombre" dado. Erase sintaxis: ERASE %;"nombre" Borra el programa "nombre" del drive . Comandos de fichero: Open# sintaxis: OPEN# %#;{;}"filename", <"R"/"W"/"A">[, "T"/"R",len] donde: las tres primeras opciones siguientes al nombre son: R = read (abre el fichero para lectura) W = write (abre fichero para escritura) A = append (permite a~adir nuevos datos al fichero antes creado) y de las siguientes tres opciones: T = texto - selecciona fichero como secuencial R = random - permite trabajar con ficheros directos o aleatorios len = la longitud maxima de cada registro Esta sentencia permite manejar tanto ficheros secuenciales como directos. Es posible abrir hasta cuatro ficheros a la vez, siempre y cuando se hallen todos en el mismo disco. El interprete Basic solo puede procesar ficheros a 0.5K por segundo. Un fichero secuencial puede ser abierto al comienzo o al final, pero no puede ser rebobinado ni hay como moverse en un fichero de texto. Tampoco hay forma de descartar los datos del final sin crear un nuevo fichero. Print# sintaxis: PRINT #;datos Envia la secuencia de datos a un fichero secuencial por un buffer mediante un flujo especificado. El canal debe haber sido abierto previamente para escritura "W" o a~adir "A". input# sintaxis: INPUT #;var;... [LINE] var$;... Lee secuencialmente los datos de un flujo especificado y los pasa a una variable ya sea numerica o de cadena. El canal debe ser abierto previamente para lectura "R". inkey$# sintaxis: [LET var$=] INKEY$ # Lee el siguiente caracter de un fichero secuencial desde el flujo dado y leera uno a uno todos los caracteres del fichero. %Eof %EOF (end of a file) - es una funcion que permite detectar el final del fichero. Ejemplo: IF %EOF THEN ... debe ser puesto siempre despues de cada lectura o escritura para su correcto funcionamiento. Close# sintaxis: CLOSE# %# Cierra el flujo previamente abierto con OPEN#%. Se sugiere usar siempre la sintaxis Swift Disk para este comando con el fin de evitar problemas. In sintaxis: IN %#,var(), donde: st = el flujo de canal elegido del 4 al 15 var() = la variable dimensionada usada para leer los datos del fichero directo rec_n = el numero de registro que sirve como puntero para acceder directamente a los datos Out sintaxis: OUT %#,var(), Lo opuesto a IN%, esta instruccion permite escribir los datos directamente al fichero directamente por medio del puntero rec_n. Con IN% y OUT% es posible escribir bases de datos hasta llenar el disco, eso son mas de 600k de informacion pura. Ejemplo de archivo directo: 1 REM ejemplo Swiftdisk II 5 CLOSE# %#4 10 OPEN# %#4;0;"print_list","R","R",5 15 REM cada registro ocupa 5 bytes 20 DIM p(1) 25 REM todos los datos son ingresados / leidos mediante matrices DIMensionadas 30 INPUT "Cual registro ?";x 40 IN %#4,p(1),x 45 REM dato en x pasado a variable p(1) 50 PRINT p(1) 60 GOTO 30 NOTA: ni el manual ni los ejemplos son realmente claros, obliga a que el usuario sobreentienda que var puede ser una variable ya sea numerica o de cadena que ha sido dimensionada con DIM y que esta debe siempre existir o dara error. Otros comandos Lprint y Llist Una vez formateado el puerto serial con FORMAT es posible usar los comandos LPRINT y LLIST a cualquier velocidad con impresoras seriales. %Lower sintaxis: LET %LOWER Desactiva la conversion a mayusculas de los nombres de los archivos en el disco. De este modo, el DOS considerara los titulos en mayusculas y minusculas como nombres distintos. Como nota, se genera un dilema de que algunos archivos en minusculas ya no podrian volver a ser reconocidos para cargar o mover, con lo que habria un mensaje de error. Se anula con CLEAR%. %date sintaxis: LET %DATE= D$ permite cambiar la fecha del sistema. Debido a la sintaxis estricta del Swift Disk, solamente puede ser tipeado de ese modo y no otro. Por ejemplo PRINT %date no es valido ni aceptado. Clear% sintaxis: CLEAR% limpia todas las variables internas del sistema del disco siempre que no haya ningun archivo abierto. Resetea o desactiva %err y %lower. Captura de errores de disco %err y %line Swift Disk ofrece un set de instrucciones para capturar los errores de disco, pero no los del Basic del Spectrum. %err se desactiva con CLEAR%. %err sintaxis 1: IF %ERR THEN GOTO - salta a linea nn si se da error de disco sintaxis 2: LET var= %ERR - devuelve el codigo del error del DOS %line sintaxis: LET var= %LINE - da el num. de linea en la que se dio el error capturado NOTA: tanto %err como %line deben usarse bajo la sintaxis especificada, de lo contrario no seran aceptadas. Es decir, PRINT %err no es admitido por ejemplo. Avisos y mensajes de error DISC PROTECTED disco protegido. La unidad es incapaz de salvar datos en el disquete y que esta protegido contra escritura. FILE ALREADY EXISTS el archivo ya existe. El nombre que se quiere usar ya existe en el disquete. O se borra ese archivo o se elije otro nombre para salvar el programa. BAD DISC BLOCK bloque de disco malo. Hubo un error de verificacion al leer datos de un disquete. Si esto persiste entonces el archivo se ha perfdido o da~ado. Un error usualmente causado por un mal manejo del disco. Solucion: reformatear el disquete. NO SUCH FILE no hay tal archivo. El archivo solicitado no existe en el disco. La causa por lo gnral. es un error al tipear. Solucion: CATalogar el disco para obtener el nombre correcto. FILE PROTECTED archivo protegido. El archivo que tratamos de borrar ha sido KEEPeado (protegido) y no puede ser eliminado. Solucion - desproteger (unkeep) el archivo. DISC LOST DATA perdida de datos en el disco. La interfaz ha perdido datos durante transferencias al disco o desde este. De persistir, es porque la interfaz del disco esta defectuosa. TRACK 0 FAILURE falla en la pista cero. Significa que ya sea la unidad o la interfaz estan fallando. RECORD NOT FOUND registro no encontrado. La interfaz cree que el disquete no esta formateado ya que no esta presente la informacion de archivado. Solucion: Pulsar el boton prendiendo y apagando. Si persiste, reformatea el disco. SYSERR 1 un serio error irrecuperable ha ocurrido en la interfaz, normalmente se asocia con una perdida de memoria libre. SYSERR 2 se da cuando la interfaz trata de acceder a la cara 2 del disco y accede a la cara 1. Puede ser causado por un cable suelto en la unidad. INVALID DISC NUMBER numero de disco no valido. El numero de unidad especificado es mayor de 3. INSUFFICIENT SPACE espacio insuficiente. No hay espacio libre suficiente para salvar un programa. Solucion: eliminar archivos o usar otros disquetes. INVALID FILENAME el nombre no es valido. El nombre del archivo tenia mas de 10 caracteres o acaso contenia caracteres ilegales. Solucion: reescribir el nombre del archivo. SYNTAX ERROR error sintactico. Un error se dio en la instruccion dada a la interfaz. DRIVE NOT PRESENT la unidad no esta presente. Se hizo referencia a una unidad que no existe. INVALID MDB MDB no valido. El bloque maestro del disco ya no es mas valido. Puede deberse a que se apago la unidad con un disquete aun puesto. Solucion: reformatear el disquete. TOO MANY OPEN FILES demasiados ficheros abiertos. Solo se permite un maximo de 4 ficheros a la vez. Es obvio que algunos de estos errores o mensajes no pueden ser capturados por %ERR, asi que lo que el manual no nos dice es que numeros estan asociados a los mensajes de error ya referidos que %ERR si puede capturar. Por prueba y error los numeros son 6 por nro. de disco invalido, 38 si el nombre no existe, 40 si el fichero esta protegido por KEEP, 35 si el archivo existe al quererlo salvar, 39 si el nombre no es valido y 41 para error sintactico. (c)2023 zx_if1@hotmail.com