FloppyOne de Rocky Gush ---------------------------------------------------------------------------------- INTRODUCCION El sistema de discos Floppyone fue dise~ado para llenar el hueco que ha sido dejado por Sinclair en lo que respecta al almacenamiento en MASA dentro de la computacion personal. Un valiente intento fue hecho para llenar tal vacio usando microdrives, pero desafortunadamente la velocidad asi como la fiabilidad de tales dispositivos ha provado ser una mayor desventaja en comparacion con las ventajas del bajo precio. Este sistema resultara mucho mas confiable usado con una unidad de disco moderna. Es falsamente economico comprarse una vieja unidad de segunda mano ya que no sabemos las verdaderas condiciones de la unidad asi como el servicio puede dar problemas si la unidad necesitase alineacion o alguna pieza de repuesto. Ademas debido a que el sistema es de DOBLE DENSIDAD algunas unidades muy viejas, fabricadas cuando solo se usaba la simple densidad, puede generar problemas enormes a la larga. COMANDOS DE DISCO Podemos dividir los comandos del Floppy One en dos grupos, uno que es conformado por palabras reservadas del Spectrum y el otro por solamente letras o signos. Grupo 1: !FORMAT, !CAT, SAVE, LOAD, MERGE, !ERASE, !MOVE, !PEEK , !TO, !THEN, CODE, SCREEN$, DATA, CHR$, LLIST, PRINT y COPY Grupo 2: !, !n, !i, !t, !r, !6, !p, !^, !s, !d, !y, !u, !w, !e y !q Los drives admitidos son numerados del 0 al 7 o del 1 al 8 si se usa la sintaxis Microdrive El nombre es de hasta 10 caracteres como en el Basic de casete No hay atributos ni comodines !format sintaxis: !FORMAT "nombre" ;"pw" ; donde: nombre = un texto valido de hasta 10 caracteres pw = es la clave que se asignara al disco tracks = normalmente 40 u 80 Este comando formatea y da nombre al volumen de los discos. Ninguno de los parametros es opcional. Ejemplo 1: 10 LET a$="Test":LET b$="bat":LET a=40 20!FORMAT a$;b$;a El disco sera formateado con el nombre 'Test', la clave sera 'bat' con 40 pistas, lo que nos dara una capacidad util de 192 kilobytes. La capacidad del disco puede ser calculada con la formula (5*(n pistas))-8, asi que un disco que es formateado a 80 pistas tendra de hecho 392 kilobytes. Ejemplo 2: !FORMAT "Test";CHR$ 0;40 esto genera un disco de nombre 'Test' con 40 pistas, pero sin clave alguna. NOTA: si se olvida con que clave se formateo un disco, este no solo sera inaccesible al usuario, sino que tampoco se podra volver a formatear hasta que se de la clave correcta. !cat sintaxis: [!]CAT [{#,} {}] !CAT o CAT muestran el directorio del disco en curso por defecto CAT 1 - muestra el directorio de la unidad 0 ya que nn = unidad +1 CAT #3,1 - envia el directorio a la impresora de estar conectada (*) save sintaxis: SAVE [*"m",;] "nombre" [LINE/CODE/DATA/SCREEN$] Salva programas o datos al disco ya sea con la sintaxis de casete o con la del microdrive (*). load sintaxis: LOAD [*"m",;] "nombre" [CODE/DATA/SCREEN$] Carga programas, pantallas, codigo o datos del disco (*). merge sintaxis: MERGE [*"m",;] "nombre" no mencionado en el manual, actua igual que su contraparte de cinta pero con discos (*). verify sintaxis: VERIFY "nombre" [CODE/DATA/SCREEN$] No mencionado en el manual. Da OK si el programa concuerda o error R si no. !erase sintaxis 1: [!]ERASE [*"m",;] "nombre" [CODE/DATA {$}] !ERASE elimina un archivo del disco en la unidad por defecto ERASE *"m" requiere designar un disco siendo nn = unidad+1(*) Ejemplos: !ERASE "name" - borra un programa Basic !ERASE "name"CODE - borra bytes !ERASE "name"DATA - borra una matriz numerica !ERASE "name"DATA $ - borra una matriz de cadena sintaxis 2: !ERASE existe un indicador o bandera (flag) de borrado que normalmente esta en cero. Eso significa que el disco se porta como una cinta de casete virtual en la cual todo se salva secuencialmente, por lo que si se salva dos veces o mas un mismo programa lo que pasara es que apareceran varias copias de la misma en el disco. Si hacemos !ERASE 1 entonces si salvamos programas con el mismo nombre el ultimo reemplazara al primero en vez de retener ambos a la vez. !ERASE 0 vuelve al comportamiento anterior. (*)NOTA: la sintaxis microdrive no funciona si hubiese una Interfaz 1 conectada. El sistema puede a veces hasta colgarse y obligar a RESETear todo. move sintaxis 1: !MOVE "nombre" TO drive donde: nombre - es el archivo en el disco por defecto a copiar drive - es la unidad de disco (0-7) o cinta (8) donde se salvara la copia !MOVE copia archivos por su nombre sintaxis 2: !MOVE numero TO drive donde: numero - es la posicion del archivo requerido en el directorio por defecto. Es decir que los archivos tienen un puntero en el directorio del mismo estilo que el +D o el MB-02+, pero solo para copiado. si numero = 0, entonces se hara un backup de todo el disco. NOTA: !MOVE no puede mover o copiar archivos NMI (snapshots) por su tama~o. drive sintaxis: !d=drive permite seleccionar la unidad de disco por defecto a partir de cero. rename Para renombrar un archivo cualquiera del disco se usa la sigte. sintaxis: !"nombre a cambiar" TO "nuevo nombre" !""+a$ TO b$ - si es que se va a trabajar con variables de cadena Para renombrar el volumen del disco entonces pasamos a la sigte. orden: !n"nombre nuevo" Para cambiar, poner o anular la clave dada al disco, en cambio usamos: !i"nueva clave" !i CHR$ 0 - quita la clave de modo similar a !FORMAT NOTA: solo por aclarar lo que sigue a "!" es una "I" ya sea en mayusculas o en minusculas. Otro recordatorio es que no podremos cambiar la clave si no nos acordamos de cual era la anterior. !peek y !p sintaxis: LET v{$}=!PEEK (sec,bt){,len} donde: sec =sector del disco bt = byte a leer en el sector especificado len = longitud o monto de bytes conformados por una cadena ($) permite leer un valor almacenado en el byte bt del sector sec del disco en curso, o una cadena en un sector a partir de bt con un largo len. Ejemplos: PRINT !PEEK(10,35) LET a$=!PEEK(10,35),20 sintaxis: !p sec,bt,val/cad donde: val = un numero de 0 a 255 cad = una cadena alfanumerica o variable de cadena permite insertar un valor val en el byte bt de un sector sec dado, o toda una cadena a partir de bt en el sector sec. Ejemplo: !p23,12,"hello" NOTA: los sectores empiezan desde 0 en la pista 0 hasta 5 veces el numero de pistas - 1, por ejm. un disco formateado a 40 pistas numeradas de 0 a 199. El valor del byte bt puede variar de 0 a 1023 por los 1024 bytes del sector. El valor maximo del largo len dependera del monto de memoria libre que haya disponible. Noten que la unidad solo corre por el primer byte de un sector particular tal como ese sector es cargado en el bufer. La unidad solo correra otra ves cuando un byte de otro sector es requerido, asi que al PEEKear un disco y desea comparar el mismo sector en un disco diferente entonces tendra que PEEKear algun otro sector para forzar el sistema para leer el sector fuera del nuevo disco que haya sido insertado. ADVERTENCIA - hay que ser muy cautos cuando se usa este comando !p ya que la escritura no toma lugar inmediatamente sino solo cuando se lee o se escribe a otro sector. Lo que realmente pasa es que el sector que se quiere POKEar (escribir) es cargado en un bufer en la RAM y el byte que se especifica sera cambiado PERO el sector no sera escrito en el disco aun, porque es mas probable que uno quiera cambiar otro byte en el mismo sector, si lo escribe en el disco ahora, seria un simple desperdicio de tiempo. Para forzar al sistema a que escriba en ese sector del disco, hay que PEEKear otro sector del disco. Cualquier sector sirve. Tampoco CAMBIE EL DISCO MIENTRAS HAYA UN POKE ACTIVO!! ya que esto podria causar que el sector del disco previo sea inadvertidamente copiado al nuevo disco con consecuencias desastrosas. (Solo si no ha hecho backups muy regularmente! ) text mode FloppyOne ofrece dos modos de texto, el normal de 32 y otro de 64 caracs. sintaxis: !6= donde: x = 0 - para el modo normal de 32 caracteres. 1 - para el modo de 64 caracteres en pantalla principal. 2 - para el modo de 64 caracteres en la zona baja de edicion y comandos. 3 - 64 caracteres en ambas zonas de la pantalla. error trap sintaxis 1: !TO equivale a ON ERROR GOTO nn, una vez dada esta sentencia, el primer error que ocurra hara que el programa salte (GOTO) a la linea nn especificada. !TO 0 - desactiva la captura de errores. sintaxis 2: !^ Es el signo obtenido mediante Symbol Shift + H. Es esencialmente igual a la instruccion !TO excepto que se salta (GOSUB) a una subrutina para manejar los errores la cual debe terminar en RETURN. err sintaxis: !THEN actua igual que la funcion o variable ERR, nos permite saber cual es el codigo del error capturado -1 Ejemplos: PRINT !THEN - imprime el error en pantalla LET err=!THEN - ofrece la ventaja de almacenar el error Ejemplo de ON ERR GOTO: 5 DIM d(10) 10 !TO 10: INPUT a: IF a<>0 THEN INPUT d(a): GO TO 10 20 !TO 0 speed sintaxis: !s= x = 0 - da 30 milisegundos/paso 1 - 20 " / " 2 - 12 " / " 3 - 6 " / " Esta informacion es almacenada en el disco, asi que este comando debe ser usado despues de FORMATear. Lo que !s hace es controlar la velocidad de pasos o saltos pista a pista. Cuando se FORMATea un disco, se le da el valor minimo !s=0 por defecto. Ahora si el disco es capaz de mayor rango de velocidad, entonces habria una mejora en el tiempo de descarga cuando elevamos el valor de !s. screen sintaxis: !y= donde: x = 1 - desactiva el salva pantalla (screen saver) 0 - activa FloppyOne ofrece un salvapantallas que se muestra como una pantalla en blanco tras 5 min. de inactividad ya sea del teclado o la pantalla misma. !y=1 por defecto. set colours sintaxis: !u=,, FloppyOne permite seleccionar los colores de papel, tinta y borde de la pantalla inicial del Spectrum, tras un RESET, NEW o encendido. Los valores de !u son almacenados en el disco, por lo que estos colores solo se veran cuando dicho disco este puesto y cargue al iniciar. interrupts sintaxis: !w= donde nn es la direccion inicial de la subrutina en codigo maquina, que puede ser ya sea una rutina de usuario o una rutina de la ROM, la cual es llamada dentro de un 50tavo de segundo - cada vez que se produzca una interrupcion. Debe haber siempre una instruccion RET (201) antes de la direccion inicial, para que !w opere correctamente. !w=0 - desactiva las llamadas durante cada interrupcion. Los registros que el DOS preserva por el usuario son HL, DE, BC y AF. Solo salve todos los otros registros que requiera. Un uso practico es correr rutinas en el trasfondo. run-on time Se traduce como tiempo de ejecucion. En el caso del disco refiere a que la unidad sigue corriendo por un corto tiempo despues de que una sentencia de disco ha terminado su accion, excepto cuando se hace un NMI. Existen dos instrucciones para manejar el tiempo de ejecucion. sintaxis: !t= donde 0 < nn < 255 El tiempo de ejecucion es normalmente puesto a 1,6 de segundos. Puede ser ajustado con valores desde un 50avo de segundo hasta un largo de 5 segs. en pasos o saltos de un 50avo de segundo. Ejemplo: !t=200 - nos dara un tiempo de ejecucion de 4 segundos NOTA: !t=0 o !t=255 causaran que la unidad corra sin parar sintaxis: !r= donde: x = 1 - desactiva la ejecucion = 0 - vuelve a activar la ejecucion Normalmente el "run-on" debe solo ser deshabilitado cuando se salva el ultimo segmento de un programa multi-partes. No cuando se carga ya que entonces no hay diferencia ni efecto. auto run Se puede crear un disco con auto arranque, del mismo modo que se hace con el Microdrive, Opus y otros. Para ello debemos salvar el programa con el nombre "run". NOTA: el nombre run debe ser siempre tipeado y salvado en minusculas para que se active la auto ejecucion. NMI Al pulsar el boton NMI todo el contenido de la memoria del Spectrum es transferida al disco, para luego permitir que el programa continue su ejecucion desde el punto exacto en que se pulso ese boton. Si, tras hacer un NMI, se examina el directorio, encontramos que hay un fichero BYTES llamado 'nmi0' el cual podemos cargar con LOAD "nmi0"CODE. Si otro NMI es hecho antes de que el nombre sea cambiado de 'nmi0' a otro entonces el nuevo sera llamado 'nmi1' hasta un maximo de 'nmi3'. Despues de eso se genera un reporte de error "Nmi exists XX:Y" donde XX es el numero de linea mientras Y es el numero de la sentencia que el programa estaba ejecutando cuando el boton NMI fue pulsado. La impresora llist LLIST envia un listado a la impresora totalmente destokenizado, con los GDU y simbolos grafico reemplazados por el signo "?". margin sintaxis: !m= donde w = el ancho (un valor que varia desde 0 hasta 255) Este comando fija el margen de impresion de un listado. !w=0 - es el margen por defecto. lprint LPRINT envia los caracteres a la impresora, convirtiendo GDUs y graficos en "?". transparent mode sintaxis: !q= donde: x = 1 - activa el modo transparente 2 - reactiva la destokenizacion Si se pone al interfaz en modo transp., ninguno de los caracteres enviados a la impresora es convertido o alterado en modo alguno. Muy util con el Tasword II. Sirve para enviar comandos de control a la impresora. El otro modo de pasar caracteres de control es preceder cada caracter menor de 32 o mayor de 127 por CHR$ 27 (ESC), lo que se aplica al mismo CHR$ 27. space La tecla SPACE basta con ser pulsada para interrumpir una impresion, en vez de BREAK que interrumpe incluso el programa entero. copy COPY - al usarse este comando se activa la busqueda de un fichero tipo CODE llamado "UTC" y lo carga en la direccion 3880 hex. Subdirectorios Si el espacio del directorio se vuelve una limitacion, mas de un directorio pueden ser creados. Esto solo se puede hacer normalmente con un disco que ha sido recien formateado sin salvar nada en el. El procedimiento es el sigte.: 1) Reseteamos la computadora 2) Formateamos un disco 3) Salvamos un bloque de codigo de largo = 1024 * numero de directorios extra necesarios. Por ejmp. SAVE "dirfile"CODE 40000,4096 nos dara espacio suficiente para 4 directorios extra. 4) !p5,5,
:IF !PEEK(6,0) THEN donde: dd = directorio deseado a partir de cero Ejemplo: !p5,5,2: IF !PEEK(6,0) THEN - nos lleva al tercer directorio Nota: el directorio en curso seleccionado sera almacenado en el disco, asi que el comando: !p5,5,0:IF !PEEK(6,0) THEN - nos lleva al directorio raiz. Microdrives FloppyOne permite conectar un Interfaz 1 real, ademas de incluir un switch para activar o desactivar la IF1, asi como hay otro para activar o desactivar al mismo FloppyOne. Los comandos del Microdrive solamente pueden ser usados desde el Basic, siempre que la Interfaz 1 no este conectada, ya que en este ultimo caso, pasan a funcionar exclusivamente con la IF1 y los microdrives conectados a este. La razon de incluir su sintaxis es debido a que hay muchos programas que estan disponibles en cinta pero con opcion para operar con microdrives. Algunos programas dise~ados para el microdrive POKEan el area de variables del interfaz 1. Si estas variables no estan presentes entonces el programa BASIC puede corromperse, por eso existe el comando "!e", para insertar las variables del sistema de la interfaz 1. Usualmente debemos usarlo inmediatamente despues de encender o iniciar la maquina y antes de cargar el programa principal. No existe un comando para remover las variables del sistema de la interfaz 1, el modo mas simple es resetear el computador. Lo que el manual no nos dice pero deja pistas Hay varias cosas que el manual simplemente no menciona abiertamente y que voy a tratar a partir de aqui. Trabajar con cintas Ya que todos los comandos de cinta han sido redirigidos al disco, cual es pues, el modo de poder trabajar con cintas en el FLoppyOne? Para cambiar de disco el manual nos remite al comando "!d=nn", pero no nos dice que con esta instruccion tambien podemos seleccionar la cinta por defecto para salvar, cargar o fusionar programas. La pista esta en la seccion que trata de !MOVE, donde se nos dice que para pasar datos de disco a cinta debemos usar 8. Por lo tanto si tipeamos esto: !d=8 entonces accedemos a la cinta para asi efectuar dichas acciones como SAVE y LOAD, mientras CAT y ERASE aun actuan sobre el disco. Manejo de ficheros Excepto ficheros de tipo matricial SAVE DATA, no parece haber modo alguno de trabajar con ficheros de tipo OPEN. La pista esta en el hecho de que tanto Betadisco como Didaktik 80 pueden manejar informacion de areas del disco creando asi ficheros de tipo PEEK. FloppyOne tambien posee !peek y !p(oke) para hacer algo similar, por lo que no deberia se imposible usar un disco para salvar directamente informacion de la misma manera que lo hace el Betadisco. Seria simple cuestion de experimentar para ver que tan lejos podemos ir en esto de los datos para crear ficheros. Mensaje de error No hay ninguna lista de los mensajes de error o su numero correspondiente que podemos capturar con !TO y !THEN. Solo queda hacer prueba y error para conocer todos los errores capturables. De los errores que podria generar el Floppy One, el unico error mencionado es el que provoca el NMI, el otro mensaje es el de que no hay disco insertado. Y para cerrar Lo que me gusta El FloppyOne tiene muchas cosas interesantes, por un lado redirige todas las instrucciones de cinta a disco. Lo cual significa que cualquier programa pensado para trabajar con cintas correra sin problemas en disco. Tambien hace lo mismo con algunos comandos microdrive, al menos desde el Basic como lo hace OPUS. Por ultimo, posee muy interesantes utilitarios como 64 columnas y captura de errores. Cosas singulares Puedo aceptar que es muy optimo que algunos comandos sean de una sola letra por razones de brevedad y agilizacion de tipeado, pero en algunos de los casos no encuentro mucho sentido a la eleccion usada, por ejemplo !p, si hay !PEEK, por que no usar !POKE en vez de solo !p. El otro caso es el de la captura de errores. En vez de !TO pudo usarse !GO TO y en vez de !^ usar !GO SUB y hubiese sido mas claro. Igual podia haberse usado !err en lugar de !THEN. Tambien se pudo usar !NEW en vez de !n. !SCREEN$ en vez de !6 o !s. !INKEY$ y no !i. Y asi sucesivamente. Dejar solo una letra en los casos en los que no exista una palabra reservada que actue para un fin especifico. Supongo que seria cuestion de examinar la ROM y ver si es posible hacerle tales cambios o no. Ya que las letras y los comandos estan todos en ASCII, solo seria cosa de cambiar dicho codigo, no se, supongo. Cosa de probar. (c)2023-2024 zx_if1@hotmail.com